c0315fffb7d828b45e93e136db72b5e4c4a4d34a
[platform/framework/web/crosswalk.git] / src / third_party / sqlite / amalgamation / sqlite3.c
1 /******************************************************************************
2 ** This file is an amalgamation of many separate C source files from SQLite
3 ** version 3.7.6.3.  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 number of samples of an index that SQLite takes in order to 
321 ** construct a histogram of the table content when running ANALYZE
322 ** and with SQLITE_ENABLE_STAT2
323 */
324 #define SQLITE_INDEX_SAMPLES 10
325
326 /*
327 ** The following macros are used to cast pointers to integers and
328 ** integers to pointers.  The way you do this varies from one compiler
329 ** to the next, so we have developed the following set of #if statements
330 ** to generate appropriate macros for a wide range of compilers.
331 **
332 ** The correct "ANSI" way to do this is to use the intptr_t type. 
333 ** Unfortunately, that typedef is not available on all compilers, or
334 ** if it is available, it requires an #include of specific headers
335 ** that vary from one machine to the next.
336 **
337 ** Ticket #3860:  The llvm-gcc-4.2 compiler from Apple chokes on
338 ** the ((void*)&((char*)0)[X]) construct.  But MSVC chokes on ((void*)(X)).
339 ** So we have to define the macros in different ways depending on the
340 ** compiler.
341 */
342 #if defined(__PTRDIFF_TYPE__)  /* This case should work for GCC */
343 # define SQLITE_INT_TO_PTR(X)  ((void*)(__PTRDIFF_TYPE__)(X))
344 # define SQLITE_PTR_TO_INT(X)  ((int)(__PTRDIFF_TYPE__)(X))
345 #elif !defined(__GNUC__)       /* Works for compilers other than LLVM */
346 # define SQLITE_INT_TO_PTR(X)  ((void*)&((char*)0)[X])
347 # define SQLITE_PTR_TO_INT(X)  ((int)(((char*)X)-(char*)0))
348 #elif defined(HAVE_STDINT_H)   /* Use this case if we have ANSI headers */
349 # define SQLITE_INT_TO_PTR(X)  ((void*)(intptr_t)(X))
350 # define SQLITE_PTR_TO_INT(X)  ((int)(intptr_t)(X))
351 #else                          /* Generates a warning - but it always works */
352 # define SQLITE_INT_TO_PTR(X)  ((void*)(X))
353 # define SQLITE_PTR_TO_INT(X)  ((int)(X))
354 #endif
355
356 /*
357 ** The SQLITE_THREADSAFE macro must be defined as 0, 1, or 2.
358 ** 0 means mutexes are permanently disable and the library is never
359 ** threadsafe.  1 means the library is serialized which is the highest
360 ** level of threadsafety.  2 means the libary is multithreaded - multiple
361 ** threads can use SQLite as long as no two threads try to use the same
362 ** database connection at the same time.
363 **
364 ** Older versions of SQLite used an optional THREADSAFE macro.
365 ** We support that for legacy.
366 */
367 #if !defined(SQLITE_THREADSAFE)
368 #if defined(THREADSAFE)
369 # define SQLITE_THREADSAFE THREADSAFE
370 #else
371 # define SQLITE_THREADSAFE 1 /* IMP: R-07272-22309 */
372 #endif
373 #endif
374
375 /*
376 ** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1.
377 ** It determines whether or not the features related to 
378 ** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can
379 ** be overridden at runtime using the sqlite3_config() API.
380 */
381 #if !defined(SQLITE_DEFAULT_MEMSTATUS)
382 # define SQLITE_DEFAULT_MEMSTATUS 1
383 #endif
384
385 /*
386 ** Exactly one of the following macros must be defined in order to
387 ** specify which memory allocation subsystem to use.
388 **
389 **     SQLITE_SYSTEM_MALLOC          // Use normal system malloc()
390 **     SQLITE_MEMDEBUG               // Debugging version of system malloc()
391 **
392 ** (Historical note:  There used to be several other options, but we've
393 ** pared it down to just these two.)
394 **
395 ** If none of the above are defined, then set SQLITE_SYSTEM_MALLOC as
396 ** the default.
397 */
398 #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_MEMDEBUG)>1
399 # error "At most one of the following compile-time configuration options\
400  is allows: SQLITE_SYSTEM_MALLOC, SQLITE_MEMDEBUG"
401 #endif
402 #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_MEMDEBUG)==0
403 # define SQLITE_SYSTEM_MALLOC 1
404 #endif
405
406 /*
407 ** If SQLITE_MALLOC_SOFT_LIMIT is not zero, then try to keep the
408 ** sizes of memory allocations below this value where possible.
409 */
410 #if !defined(SQLITE_MALLOC_SOFT_LIMIT)
411 # define SQLITE_MALLOC_SOFT_LIMIT 1024
412 #endif
413
414 /*
415 ** We need to define _XOPEN_SOURCE as follows in order to enable
416 ** recursive mutexes on most Unix systems.  But Mac OS X is different.
417 ** The _XOPEN_SOURCE define causes problems for Mac OS X we are told,
418 ** so it is omitted there.  See ticket #2673.
419 **
420 ** Later we learn that _XOPEN_SOURCE is poorly or incorrectly
421 ** implemented on some systems.  So we avoid defining it at all
422 ** if it is already defined or if it is unneeded because we are
423 ** not doing a threadsafe build.  Ticket #2681.
424 **
425 ** See also ticket #2741.
426 */
427 #if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) && SQLITE_THREADSAFE
428 #  define _XOPEN_SOURCE 500  /* Needed to enable pthread recursive mutexes */
429 #endif
430
431 /*
432 ** The TCL headers are only needed when compiling the TCL bindings.
433 */
434 #if defined(SQLITE_TCL) || defined(TCLSH)
435 # include <tcl.h>
436 #endif
437
438 /*
439 ** Many people are failing to set -DNDEBUG=1 when compiling SQLite.
440 ** Setting NDEBUG makes the code smaller and run faster.  So the following
441 ** lines are added to automatically set NDEBUG unless the -DSQLITE_DEBUG=1
442 ** option is set.  Thus NDEBUG becomes an opt-in rather than an opt-out
443 ** feature.
444 */
445 #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
446 # define NDEBUG 1
447 #endif
448
449 /*
450 ** The testcase() macro is used to aid in coverage testing.  When 
451 ** doing coverage testing, the condition inside the argument to
452 ** testcase() must be evaluated both true and false in order to
453 ** get full branch coverage.  The testcase() macro is inserted
454 ** to help ensure adequate test coverage in places where simple
455 ** condition/decision coverage is inadequate.  For example, testcase()
456 ** can be used to make sure boundary values are tested.  For
457 ** bitmask tests, testcase() can be used to make sure each bit
458 ** is significant and used at least once.  On switch statements
459 ** where multiple cases go to the same block of code, testcase()
460 ** can insure that all cases are evaluated.
461 **
462 */
463 #ifdef SQLITE_COVERAGE_TEST
464 SQLITE_PRIVATE   void sqlite3Coverage(int);
465 # define testcase(X)  if( X ){ sqlite3Coverage(__LINE__); }
466 #else
467 # define testcase(X)
468 #endif
469
470 /*
471 ** The TESTONLY macro is used to enclose variable declarations or
472 ** other bits of code that are needed to support the arguments
473 ** within testcase() and assert() macros.
474 */
475 #if !defined(NDEBUG) || defined(SQLITE_COVERAGE_TEST)
476 # define TESTONLY(X)  X
477 #else
478 # define TESTONLY(X)
479 #endif
480
481 /*
482 ** Sometimes we need a small amount of code such as a variable initialization
483 ** to setup for a later assert() statement.  We do not want this code to
484 ** appear when assert() is disabled.  The following macro is therefore
485 ** used to contain that setup code.  The "VVA" acronym stands for
486 ** "Verification, Validation, and Accreditation".  In other words, the
487 ** code within VVA_ONLY() will only run during verification processes.
488 */
489 #ifndef NDEBUG
490 # define VVA_ONLY(X)  X
491 #else
492 # define VVA_ONLY(X)
493 #endif
494
495 /*
496 ** The ALWAYS and NEVER macros surround boolean expressions which 
497 ** are intended to always be true or false, respectively.  Such
498 ** expressions could be omitted from the code completely.  But they
499 ** are included in a few cases in order to enhance the resilience
500 ** of SQLite to unexpected behavior - to make the code "self-healing"
501 ** or "ductile" rather than being "brittle" and crashing at the first
502 ** hint of unplanned behavior.
503 **
504 ** In other words, ALWAYS and NEVER are added for defensive code.
505 **
506 ** When doing coverage testing ALWAYS and NEVER are hard-coded to
507 ** be true and false so that the unreachable code then specify will
508 ** not be counted as untested code.
509 */
510 #if defined(SQLITE_COVERAGE_TEST)
511 # define ALWAYS(X)      (1)
512 # define NEVER(X)       (0)
513 #elif !defined(NDEBUG)
514 # define ALWAYS(X)      ((X)?1:(assert(0),0))
515 # define NEVER(X)       ((X)?(assert(0),1):0)
516 #else
517 # define ALWAYS(X)      (X)
518 # define NEVER(X)       (X)
519 #endif
520
521 /*
522 ** Return true (non-zero) if the input is a integer that is too large
523 ** to fit in 32-bits.  This macro is used inside of various testcase()
524 ** macros to verify that we have tested SQLite for large-file support.
525 */
526 #define IS_BIG_INT(X)  (((X)&~(i64)0xffffffff)!=0)
527
528 /*
529 ** The macro unlikely() is a hint that surrounds a boolean
530 ** expression that is usually false.  Macro likely() surrounds
531 ** a boolean expression that is usually true.  GCC is able to
532 ** use these hints to generate better code, sometimes.
533 */
534 #if defined(__GNUC__) && 0
535 # define likely(X)    __builtin_expect((X),1)
536 # define unlikely(X)  __builtin_expect((X),0)
537 #else
538 # define likely(X)    !!(X)
539 # define unlikely(X)  !!(X)
540 #endif
541
542 /************** Include sqlite3.h in the middle of sqliteInt.h ***************/
543 /************** Begin file sqlite3.h *****************************************/
544 /*
545 ** 2001 September 15
546 **
547 ** The author disclaims copyright to this source code.  In place of
548 ** a legal notice, here is a blessing:
549 **
550 **    May you do good and not evil.
551 **    May you find forgiveness for yourself and forgive others.
552 **    May you share freely, never taking more than you give.
553 **
554 *************************************************************************
555 ** This header file defines the interface that the SQLite library
556 ** presents to client programs.  If a C-function, structure, datatype,
557 ** or constant definition does not appear in this file, then it is
558 ** not a published API of SQLite, is subject to change without
559 ** notice, and should not be referenced by programs that use SQLite.
560 **
561 ** Some of the definitions that are in this file are marked as
562 ** "experimental".  Experimental interfaces are normally new
563 ** features recently added to SQLite.  We do not anticipate changes
564 ** to experimental interfaces but reserve the right to make minor changes
565 ** if experience from use "in the wild" suggest such changes are prudent.
566 **
567 ** The official C-language API documentation for SQLite is derived
568 ** from comments in this file.  This file is the authoritative source
569 ** on how SQLite interfaces are suppose to operate.
570 **
571 ** The name of this file under configuration management is "sqlite.h.in".
572 ** The makefile makes some minor changes to this file (such as inserting
573 ** the version number) and changes its name to "sqlite3.h" as
574 ** part of the build process.
575 */
576 #ifndef _SQLITE3_H_
577 #define _SQLITE3_H_
578 #include <stdarg.h>     /* Needed for the definition of va_list */
579
580 /*
581 ** Make sure we can call this stuff from C++.
582 */
583 #if 0
584 extern "C" {
585 #endif
586
587
588 /*
589 ** Add the ability to override 'extern'
590 */
591 #ifndef SQLITE_EXTERN
592 # define SQLITE_EXTERN extern
593 #endif
594
595 #ifndef SQLITE_API
596 # define SQLITE_API
597 #endif
598
599
600 /*
601 ** These no-op macros are used in front of interfaces to mark those
602 ** interfaces as either deprecated or experimental.  New applications
603 ** should not use deprecated interfaces - they are support for backwards
604 ** compatibility only.  Application writers should be aware that
605 ** experimental interfaces are subject to change in point releases.
606 **
607 ** These macros used to resolve to various kinds of compiler magic that
608 ** would generate warning messages when they were used.  But that
609 ** compiler magic ended up generating such a flurry of bug reports
610 ** that we have taken it all out and gone back to using simple
611 ** noop macros.
612 */
613 #define SQLITE_DEPRECATED
614 #define SQLITE_EXPERIMENTAL
615
616 /*
617 ** Ensure these symbols were not defined by some previous header file.
618 */
619 #ifdef SQLITE_VERSION
620 # undef SQLITE_VERSION
621 #endif
622 #ifdef SQLITE_VERSION_NUMBER
623 # undef SQLITE_VERSION_NUMBER
624 #endif
625
626 /*
627 ** CAPI3REF: Compile-Time Library Version Numbers
628 **
629 ** ^(The [SQLITE_VERSION] C preprocessor macro in the sqlite3.h header
630 ** evaluates to a string literal that is the SQLite version in the
631 ** format "X.Y.Z" where X is the major version number (always 3 for
632 ** SQLite3) and Y is the minor version number and Z is the release number.)^
633 ** ^(The [SQLITE_VERSION_NUMBER] C preprocessor macro resolves to an integer
634 ** with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same
635 ** numbers used in [SQLITE_VERSION].)^
636 ** The SQLITE_VERSION_NUMBER for any given release of SQLite will also
637 ** be larger than the release from which it is derived.  Either Y will
638 ** be held constant and Z will be incremented or else Y will be incremented
639 ** and Z will be reset to zero.
640 **
641 ** Since version 3.6.18, SQLite source code has been stored in the
642 ** <a href="http://www.fossil-scm.org/">Fossil configuration management
643 ** system</a>.  ^The SQLITE_SOURCE_ID macro evaluates to
644 ** a string which identifies a particular check-in of SQLite
645 ** within its configuration management system.  ^The SQLITE_SOURCE_ID
646 ** string contains the date and time of the check-in (UTC) and an SHA1
647 ** hash of the entire source tree.
648 **
649 ** See also: [sqlite3_libversion()],
650 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
651 ** [sqlite_version()] and [sqlite_source_id()].
652 */
653 #define SQLITE_VERSION        "3.7.6.3"
654 #define SQLITE_VERSION_NUMBER 3007006
655 #define SQLITE_SOURCE_ID      "2011-05-19 13:26:54 ed1da510a239ea767a01dc332b667119fa3c908e"
656
657 /*
658 ** CAPI3REF: Run-Time Library Version Numbers
659 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
660 **
661 ** These interfaces provide the same information as the [SQLITE_VERSION],
662 ** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros
663 ** but are associated with the library instead of the header file.  ^(Cautious
664 ** programmers might include assert() statements in their application to
665 ** verify that values returned by these interfaces match the macros in
666 ** the header, and thus insure that the application is
667 ** compiled with matching library and header files.
668 **
669 ** <blockquote><pre>
670 ** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
671 ** assert( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)==0 );
672 ** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
673 ** </pre></blockquote>)^
674 **
675 ** ^The sqlite3_version[] string constant contains the text of [SQLITE_VERSION]
676 ** macro.  ^The sqlite3_libversion() function returns a pointer to the
677 ** to the sqlite3_version[] string constant.  The sqlite3_libversion()
678 ** function is provided for use in DLLs since DLL users usually do not have
679 ** direct access to string constants within the DLL.  ^The
680 ** sqlite3_libversion_number() function returns an integer equal to
681 ** [SQLITE_VERSION_NUMBER].  ^The sqlite3_sourceid() function returns 
682 ** a pointer to a string constant whose value is the same as the 
683 ** [SQLITE_SOURCE_ID] C preprocessor macro.
684 **
685 ** See also: [sqlite_version()] and [sqlite_source_id()].
686 */
687 SQLITE_API const char sqlite3_version[] = SQLITE_VERSION;
688 SQLITE_API const char *sqlite3_libversion(void);
689 SQLITE_API const char *sqlite3_sourceid(void);
690 SQLITE_API int sqlite3_libversion_number(void);
691
692 /*
693 ** CAPI3REF: Run-Time Library Compilation Options Diagnostics
694 **
695 ** ^The sqlite3_compileoption_used() function returns 0 or 1 
696 ** indicating whether the specified option was defined at 
697 ** compile time.  ^The SQLITE_ prefix may be omitted from the 
698 ** option name passed to sqlite3_compileoption_used().  
699 **
700 ** ^The sqlite3_compileoption_get() function allows iterating
701 ** over the list of options that were defined at compile time by
702 ** returning the N-th compile time option string.  ^If N is out of range,
703 ** sqlite3_compileoption_get() returns a NULL pointer.  ^The SQLITE_ 
704 ** prefix is omitted from any strings returned by 
705 ** sqlite3_compileoption_get().
706 **
707 ** ^Support for the diagnostic functions sqlite3_compileoption_used()
708 ** and sqlite3_compileoption_get() may be omitted by specifying the 
709 ** [SQLITE_OMIT_COMPILEOPTION_DIAGS] option at compile time.
710 **
711 ** See also: SQL functions [sqlite_compileoption_used()] and
712 ** [sqlite_compileoption_get()] and the [compile_options pragma].
713 */
714 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
715 SQLITE_API int sqlite3_compileoption_used(const char *zOptName);
716 SQLITE_API const char *sqlite3_compileoption_get(int N);
717 #endif
718
719 /*
720 ** CAPI3REF: Test To See If The Library Is Threadsafe
721 **
722 ** ^The sqlite3_threadsafe() function returns zero if and only if
723 ** SQLite was compiled mutexing code omitted due to the
724 ** [SQLITE_THREADSAFE] compile-time option being set to 0.
725 **
726 ** SQLite can be compiled with or without mutexes.  When
727 ** the [SQLITE_THREADSAFE] C preprocessor macro is 1 or 2, mutexes
728 ** are enabled and SQLite is threadsafe.  When the
729 ** [SQLITE_THREADSAFE] macro is 0, 
730 ** the mutexes are omitted.  Without the mutexes, it is not safe
731 ** to use SQLite concurrently from more than one thread.
732 **
733 ** Enabling mutexes incurs a measurable performance penalty.
734 ** So if speed is of utmost importance, it makes sense to disable
735 ** the mutexes.  But for maximum safety, mutexes should be enabled.
736 ** ^The default behavior is for mutexes to be enabled.
737 **
738 ** This interface can be used by an application to make sure that the
739 ** version of SQLite that it is linking against was compiled with
740 ** the desired setting of the [SQLITE_THREADSAFE] macro.
741 **
742 ** This interface only reports on the compile-time mutex setting
743 ** of the [SQLITE_THREADSAFE] flag.  If SQLite is compiled with
744 ** SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but
745 ** can be fully or partially disabled using a call to [sqlite3_config()]
746 ** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD],
747 ** or [SQLITE_CONFIG_MUTEX].  ^(The return value of the
748 ** sqlite3_threadsafe() function shows only the compile-time setting of
749 ** thread safety, not any run-time changes to that setting made by
750 ** sqlite3_config(). In other words, the return value from sqlite3_threadsafe()
751 ** is unchanged by calls to sqlite3_config().)^
752 **
753 ** See the [threading mode] documentation for additional information.
754 */
755 SQLITE_API int sqlite3_threadsafe(void);
756
757 /*
758 ** CAPI3REF: Database Connection Handle
759 ** KEYWORDS: {database connection} {database connections}
760 **
761 ** Each open SQLite database is represented by a pointer to an instance of
762 ** the opaque structure named "sqlite3".  It is useful to think of an sqlite3
763 ** pointer as an object.  The [sqlite3_open()], [sqlite3_open16()], and
764 ** [sqlite3_open_v2()] interfaces are its constructors, and [sqlite3_close()]
765 ** is its destructor.  There are many other interfaces (such as
766 ** [sqlite3_prepare_v2()], [sqlite3_create_function()], and
767 ** [sqlite3_busy_timeout()] to name but three) that are methods on an
768 ** sqlite3 object.
769 */
770 typedef struct sqlite3 sqlite3;
771
772 /*
773 ** CAPI3REF: 64-Bit Integer Types
774 ** KEYWORDS: sqlite_int64 sqlite_uint64
775 **
776 ** Because there is no cross-platform way to specify 64-bit integer types
777 ** SQLite includes typedefs for 64-bit signed and unsigned integers.
778 **
779 ** The sqlite3_int64 and sqlite3_uint64 are the preferred type definitions.
780 ** The sqlite_int64 and sqlite_uint64 types are supported for backwards
781 ** compatibility only.
782 **
783 ** ^The sqlite3_int64 and sqlite_int64 types can store integer values
784 ** between -9223372036854775808 and +9223372036854775807 inclusive.  ^The
785 ** sqlite3_uint64 and sqlite_uint64 types can store integer values 
786 ** between 0 and +18446744073709551615 inclusive.
787 */
788 #ifdef SQLITE_INT64_TYPE
789   typedef SQLITE_INT64_TYPE sqlite_int64;
790   typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
791 #elif defined(_MSC_VER) || defined(__BORLANDC__)
792   typedef __int64 sqlite_int64;
793   typedef unsigned __int64 sqlite_uint64;
794 #else
795   typedef long long int sqlite_int64;
796   typedef unsigned long long int sqlite_uint64;
797 #endif
798 typedef sqlite_int64 sqlite3_int64;
799 typedef sqlite_uint64 sqlite3_uint64;
800
801 /*
802 ** If compiling for a processor that lacks floating point support,
803 ** substitute integer for floating-point.
804 */
805 #ifdef SQLITE_OMIT_FLOATING_POINT
806 # define double sqlite3_int64
807 #endif
808
809 /*
810 ** CAPI3REF: Closing A Database Connection
811 **
812 ** ^The sqlite3_close() routine is the destructor for the [sqlite3] object.
813 ** ^Calls to sqlite3_close() return SQLITE_OK if the [sqlite3] object is
814 ** successfully destroyed and all associated resources are deallocated.
815 **
816 ** Applications must [sqlite3_finalize | finalize] all [prepared statements]
817 ** and [sqlite3_blob_close | close] all [BLOB handles] associated with
818 ** the [sqlite3] object prior to attempting to close the object.  ^If
819 ** sqlite3_close() is called on a [database connection] that still has
820 ** outstanding [prepared statements] or [BLOB handles], then it returns
821 ** SQLITE_BUSY.
822 **
823 ** ^If [sqlite3_close()] is invoked while a transaction is open,
824 ** the transaction is automatically rolled back.
825 **
826 ** The C parameter to [sqlite3_close(C)] must be either a NULL
827 ** pointer or an [sqlite3] object pointer obtained
828 ** from [sqlite3_open()], [sqlite3_open16()], or
829 ** [sqlite3_open_v2()], and not previously closed.
830 ** ^Calling sqlite3_close() with a NULL pointer argument is a 
831 ** harmless no-op.
832 */
833 SQLITE_API int sqlite3_close(sqlite3 *);
834
835 /*
836 ** The type for a callback function.
837 ** This is legacy and deprecated.  It is included for historical
838 ** compatibility and is not documented.
839 */
840 typedef int (*sqlite3_callback)(void*,int,char**, char**);
841
842 /*
843 ** CAPI3REF: One-Step Query Execution Interface
844 **
845 ** The sqlite3_exec() interface is a convenience wrapper around
846 ** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()],
847 ** that allows an application to run multiple statements of SQL
848 ** without having to use a lot of C code. 
849 **
850 ** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded,
851 ** semicolon-separate SQL statements passed into its 2nd argument,
852 ** in the context of the [database connection] passed in as its 1st
853 ** argument.  ^If the callback function of the 3rd argument to
854 ** sqlite3_exec() is not NULL, then it is invoked for each result row
855 ** coming out of the evaluated SQL statements.  ^The 4th argument to
856 ** to sqlite3_exec() is relayed through to the 1st argument of each
857 ** callback invocation.  ^If the callback pointer to sqlite3_exec()
858 ** is NULL, then no callback is ever invoked and result rows are
859 ** ignored.
860 **
861 ** ^If an error occurs while evaluating the SQL statements passed into
862 ** sqlite3_exec(), then execution of the current statement stops and
863 ** subsequent statements are skipped.  ^If the 5th parameter to sqlite3_exec()
864 ** is not NULL then any error message is written into memory obtained
865 ** from [sqlite3_malloc()] and passed back through the 5th parameter.
866 ** To avoid memory leaks, the application should invoke [sqlite3_free()]
867 ** on error message strings returned through the 5th parameter of
868 ** of sqlite3_exec() after the error message string is no longer needed.
869 ** ^If the 5th parameter to sqlite3_exec() is not NULL and no errors
870 ** occur, then sqlite3_exec() sets the pointer in its 5th parameter to
871 ** NULL before returning.
872 **
873 ** ^If an sqlite3_exec() callback returns non-zero, the sqlite3_exec()
874 ** routine returns SQLITE_ABORT without invoking the callback again and
875 ** without running any subsequent SQL statements.
876 **
877 ** ^The 2nd argument to the sqlite3_exec() callback function is the
878 ** number of columns in the result.  ^The 3rd argument to the sqlite3_exec()
879 ** callback is an array of pointers to strings obtained as if from
880 ** [sqlite3_column_text()], one for each column.  ^If an element of a
881 ** result row is NULL then the corresponding string pointer for the
882 ** sqlite3_exec() callback is a NULL pointer.  ^The 4th argument to the
883 ** sqlite3_exec() callback is an array of pointers to strings where each
884 ** entry represents the name of corresponding result column as obtained
885 ** from [sqlite3_column_name()].
886 **
887 ** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer
888 ** to an empty string, or a pointer that contains only whitespace and/or 
889 ** SQL comments, then no SQL statements are evaluated and the database
890 ** is not changed.
891 **
892 ** Restrictions:
893 **
894 ** <ul>
895 ** <li> The application must insure that the 1st parameter to sqlite3_exec()
896 **      is a valid and open [database connection].
897 ** <li> The application must not close [database connection] specified by
898 **      the 1st parameter to sqlite3_exec() while sqlite3_exec() is running.
899 ** <li> The application must not modify the SQL statement text passed into
900 **      the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running.
901 ** </ul>
902 */
903 SQLITE_API int sqlite3_exec(
904   sqlite3*,                                  /* An open database */
905   const char *sql,                           /* SQL to be evaluated */
906   int (*callback)(void*,int,char**,char**),  /* Callback function */
907   void *,                                    /* 1st argument to callback */
908   char **errmsg                              /* Error msg written here */
909 );
910
911 /*
912 ** CAPI3REF: Result Codes
913 ** KEYWORDS: SQLITE_OK {error code} {error codes}
914 ** KEYWORDS: {result code} {result codes}
915 **
916 ** Many SQLite functions return an integer result code from the set shown
917 ** here in order to indicates success or failure.
918 **
919 ** New error codes may be added in future versions of SQLite.
920 **
921 ** See also: [SQLITE_IOERR_READ | extended result codes]
922 */
923 #define SQLITE_OK           0   /* Successful result */
924 /* beginning-of-error-codes */
925 #define SQLITE_ERROR        1   /* SQL error or missing database */
926 #define SQLITE_INTERNAL     2   /* Internal logic error in SQLite */
927 #define SQLITE_PERM         3   /* Access permission denied */
928 #define SQLITE_ABORT        4   /* Callback routine requested an abort */
929 #define SQLITE_BUSY         5   /* The database file is locked */
930 #define SQLITE_LOCKED       6   /* A table in the database is locked */
931 #define SQLITE_NOMEM        7   /* A malloc() failed */
932 #define SQLITE_READONLY     8   /* Attempt to write a readonly database */
933 #define SQLITE_INTERRUPT    9   /* Operation terminated by sqlite3_interrupt()*/
934 #define SQLITE_IOERR       10   /* Some kind of disk I/O error occurred */
935 #define SQLITE_CORRUPT     11   /* The database disk image is malformed */
936 #define SQLITE_NOTFOUND    12   /* Unknown opcode in sqlite3_file_control() */
937 #define SQLITE_FULL        13   /* Insertion failed because database is full */
938 #define SQLITE_CANTOPEN    14   /* Unable to open the database file */
939 #define SQLITE_PROTOCOL    15   /* Database lock protocol error */
940 #define SQLITE_EMPTY       16   /* Database is empty */
941 #define SQLITE_SCHEMA      17   /* The database schema changed */
942 #define SQLITE_TOOBIG      18   /* String or BLOB exceeds size limit */
943 #define SQLITE_CONSTRAINT  19   /* Abort due to constraint violation */
944 #define SQLITE_MISMATCH    20   /* Data type mismatch */
945 #define SQLITE_MISUSE      21   /* Library used incorrectly */
946 #define SQLITE_NOLFS       22   /* Uses OS features not supported on host */
947 #define SQLITE_AUTH        23   /* Authorization denied */
948 #define SQLITE_FORMAT      24   /* Auxiliary database format error */
949 #define SQLITE_RANGE       25   /* 2nd parameter to sqlite3_bind out of range */
950 #define SQLITE_NOTADB      26   /* File opened that is not a database file */
951 #define SQLITE_ROW         100  /* sqlite3_step() has another row ready */
952 #define SQLITE_DONE        101  /* sqlite3_step() has finished executing */
953 /* end-of-error-codes */
954
955 /*
956 ** CAPI3REF: Extended Result Codes
957 ** KEYWORDS: {extended error code} {extended error codes}
958 ** KEYWORDS: {extended result code} {extended result codes}
959 **
960 ** In its default configuration, SQLite API routines return one of 26 integer
961 ** [SQLITE_OK | result codes].  However, experience has shown that many of
962 ** these result codes are too coarse-grained.  They do not provide as
963 ** much information about problems as programmers might like.  In an effort to
964 ** address this, newer versions of SQLite (version 3.3.8 and later) include
965 ** support for additional result codes that provide more detailed information
966 ** about errors. The extended result codes are enabled or disabled
967 ** on a per database connection basis using the
968 ** [sqlite3_extended_result_codes()] API.
969 **
970 ** Some of the available extended result codes are listed here.
971 ** One may expect the number of extended result codes will be expand
972 ** over time.  Software that uses extended result codes should expect
973 ** to see new result codes in future releases of SQLite.
974 **
975 ** The SQLITE_OK result code will never be extended.  It will always
976 ** be exactly zero.
977 */
978 #define SQLITE_IOERR_READ              (SQLITE_IOERR | (1<<8))
979 #define SQLITE_IOERR_SHORT_READ        (SQLITE_IOERR | (2<<8))
980 #define SQLITE_IOERR_WRITE             (SQLITE_IOERR | (3<<8))
981 #define SQLITE_IOERR_FSYNC             (SQLITE_IOERR | (4<<8))
982 #define SQLITE_IOERR_DIR_FSYNC         (SQLITE_IOERR | (5<<8))
983 #define SQLITE_IOERR_TRUNCATE          (SQLITE_IOERR | (6<<8))
984 #define SQLITE_IOERR_FSTAT             (SQLITE_IOERR | (7<<8))
985 #define SQLITE_IOERR_UNLOCK            (SQLITE_IOERR | (8<<8))
986 #define SQLITE_IOERR_RDLOCK            (SQLITE_IOERR | (9<<8))
987 #define SQLITE_IOERR_DELETE            (SQLITE_IOERR | (10<<8))
988 #define SQLITE_IOERR_BLOCKED           (SQLITE_IOERR | (11<<8))
989 #define SQLITE_IOERR_NOMEM             (SQLITE_IOERR | (12<<8))
990 #define SQLITE_IOERR_ACCESS            (SQLITE_IOERR | (13<<8))
991 #define SQLITE_IOERR_CHECKRESERVEDLOCK (SQLITE_IOERR | (14<<8))
992 #define SQLITE_IOERR_LOCK              (SQLITE_IOERR | (15<<8))
993 #define SQLITE_IOERR_CLOSE             (SQLITE_IOERR | (16<<8))
994 #define SQLITE_IOERR_DIR_CLOSE         (SQLITE_IOERR | (17<<8))
995 #define SQLITE_IOERR_SHMOPEN           (SQLITE_IOERR | (18<<8))
996 #define SQLITE_IOERR_SHMSIZE           (SQLITE_IOERR | (19<<8))
997 #define SQLITE_IOERR_SHMLOCK           (SQLITE_IOERR | (20<<8))
998 #define SQLITE_LOCKED_SHAREDCACHE      (SQLITE_LOCKED |  (1<<8))
999 #define SQLITE_BUSY_RECOVERY           (SQLITE_BUSY   |  (1<<8))
1000 #define SQLITE_CANTOPEN_NOTEMPDIR      (SQLITE_CANTOPEN | (1<<8))
1001
1002 /*
1003 ** CAPI3REF: Flags For File Open Operations
1004 **
1005 ** These bit values are intended for use in the
1006 ** 3rd parameter to the [sqlite3_open_v2()] interface and
1007 ** in the 4th parameter to the xOpen method of the
1008 ** [sqlite3_vfs] object.
1009 */
1010 #define SQLITE_OPEN_READONLY         0x00000001  /* Ok for sqlite3_open_v2() */
1011 #define SQLITE_OPEN_READWRITE        0x00000002  /* Ok for sqlite3_open_v2() */
1012 #define SQLITE_OPEN_CREATE           0x00000004  /* Ok for sqlite3_open_v2() */
1013 #define SQLITE_OPEN_DELETEONCLOSE    0x00000008  /* VFS only */
1014 #define SQLITE_OPEN_EXCLUSIVE        0x00000010  /* VFS only */
1015 #define SQLITE_OPEN_AUTOPROXY        0x00000020  /* VFS only */
1016 #define SQLITE_OPEN_MAIN_DB          0x00000100  /* VFS only */
1017 #define SQLITE_OPEN_TEMP_DB          0x00000200  /* VFS only */
1018 #define SQLITE_OPEN_TRANSIENT_DB     0x00000400  /* VFS only */
1019 #define SQLITE_OPEN_MAIN_JOURNAL     0x00000800  /* VFS only */
1020 #define SQLITE_OPEN_TEMP_JOURNAL     0x00001000  /* VFS only */
1021 #define SQLITE_OPEN_SUBJOURNAL       0x00002000  /* VFS only */
1022 #define SQLITE_OPEN_MASTER_JOURNAL   0x00004000  /* VFS only */
1023 #define SQLITE_OPEN_NOMUTEX          0x00008000  /* Ok for sqlite3_open_v2() */
1024 #define SQLITE_OPEN_FULLMUTEX        0x00010000  /* Ok for sqlite3_open_v2() */
1025 #define SQLITE_OPEN_SHAREDCACHE      0x00020000  /* Ok for sqlite3_open_v2() */
1026 #define SQLITE_OPEN_PRIVATECACHE     0x00040000  /* Ok for sqlite3_open_v2() */
1027 #define SQLITE_OPEN_WAL              0x00080000  /* VFS only */
1028
1029 /* Reserved:                         0x00F00000 */
1030
1031 /*
1032 ** CAPI3REF: Device Characteristics
1033 **
1034 ** The xDeviceCharacteristics method of the [sqlite3_io_methods]
1035 ** object returns an integer which is a vector of the these
1036 ** bit values expressing I/O characteristics of the mass storage
1037 ** device that holds the file that the [sqlite3_io_methods]
1038 ** refers to.
1039 **
1040 ** The SQLITE_IOCAP_ATOMIC property means that all writes of
1041 ** any size are atomic.  The SQLITE_IOCAP_ATOMICnnn values
1042 ** mean that writes of blocks that are nnn bytes in size and
1043 ** are aligned to an address which is an integer multiple of
1044 ** nnn are atomic.  The SQLITE_IOCAP_SAFE_APPEND value means
1045 ** that when data is appended to a file, the data is appended
1046 ** first then the size of the file is extended, never the other
1047 ** way around.  The SQLITE_IOCAP_SEQUENTIAL property means that
1048 ** information is written to disk in the same order as calls
1049 ** to xWrite().
1050 */
1051 #define SQLITE_IOCAP_ATOMIC                 0x00000001
1052 #define SQLITE_IOCAP_ATOMIC512              0x00000002
1053 #define SQLITE_IOCAP_ATOMIC1K               0x00000004
1054 #define SQLITE_IOCAP_ATOMIC2K               0x00000008
1055 #define SQLITE_IOCAP_ATOMIC4K               0x00000010
1056 #define SQLITE_IOCAP_ATOMIC8K               0x00000020
1057 #define SQLITE_IOCAP_ATOMIC16K              0x00000040
1058 #define SQLITE_IOCAP_ATOMIC32K              0x00000080
1059 #define SQLITE_IOCAP_ATOMIC64K              0x00000100
1060 #define SQLITE_IOCAP_SAFE_APPEND            0x00000200
1061 #define SQLITE_IOCAP_SEQUENTIAL             0x00000400
1062 #define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN  0x00000800
1063
1064 /*
1065 ** CAPI3REF: File Locking Levels
1066 **
1067 ** SQLite uses one of these integer values as the second
1068 ** argument to calls it makes to the xLock() and xUnlock() methods
1069 ** of an [sqlite3_io_methods] object.
1070 */
1071 #define SQLITE_LOCK_NONE          0
1072 #define SQLITE_LOCK_SHARED        1
1073 #define SQLITE_LOCK_RESERVED      2
1074 #define SQLITE_LOCK_PENDING       3
1075 #define SQLITE_LOCK_EXCLUSIVE     4
1076
1077 /*
1078 ** CAPI3REF: Synchronization Type Flags
1079 **
1080 ** When SQLite invokes the xSync() method of an
1081 ** [sqlite3_io_methods] object it uses a combination of
1082 ** these integer values as the second argument.
1083 **
1084 ** When the SQLITE_SYNC_DATAONLY flag is used, it means that the
1085 ** sync operation only needs to flush data to mass storage.  Inode
1086 ** information need not be flushed. If the lower four bits of the flag
1087 ** equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics.
1088 ** If the lower four bits equal SQLITE_SYNC_FULL, that means
1089 ** to use Mac OS X style fullsync instead of fsync().
1090 **
1091 ** Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags
1092 ** with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL
1093 ** settings.  The [synchronous pragma] determines when calls to the
1094 ** xSync VFS method occur and applies uniformly across all platforms.
1095 ** The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how
1096 ** energetic or rigorous or forceful the sync operations are and
1097 ** only make a difference on Mac OSX for the default SQLite code.
1098 ** (Third-party VFS implementations might also make the distinction
1099 ** between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the
1100 ** operating systems natively supported by SQLite, only Mac OSX
1101 ** cares about the difference.)
1102 */
1103 #define SQLITE_SYNC_NORMAL        0x00002
1104 #define SQLITE_SYNC_FULL          0x00003
1105 #define SQLITE_SYNC_DATAONLY      0x00010
1106
1107 /*
1108 ** CAPI3REF: OS Interface Open File Handle
1109 **
1110 ** An [sqlite3_file] object represents an open file in the 
1111 ** [sqlite3_vfs | OS interface layer].  Individual OS interface
1112 ** implementations will
1113 ** want to subclass this object by appending additional fields
1114 ** for their own use.  The pMethods entry is a pointer to an
1115 ** [sqlite3_io_methods] object that defines methods for performing
1116 ** I/O operations on the open file.
1117 */
1118 typedef struct sqlite3_file sqlite3_file;
1119 struct sqlite3_file {
1120   const struct sqlite3_io_methods *pMethods;  /* Methods for an open file */
1121 };
1122
1123 /*
1124 ** CAPI3REF: OS Interface File Virtual Methods Object
1125 **
1126 ** Every file opened by the [sqlite3_vfs] xOpen method populates an
1127 ** [sqlite3_file] object (or, more commonly, a subclass of the
1128 ** [sqlite3_file] object) with a pointer to an instance of this object.
1129 ** This object defines the methods used to perform various operations
1130 ** against the open file represented by the [sqlite3_file] object.
1131 **
1132 ** If the xOpen method sets the sqlite3_file.pMethods element 
1133 ** to a non-NULL pointer, then the sqlite3_io_methods.xClose method
1134 ** may be invoked even if the xOpen reported that it failed.  The
1135 ** only way to prevent a call to xClose following a failed xOpen
1136 ** is for the xOpen to set the sqlite3_file.pMethods element to NULL.
1137 **
1138 ** The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or
1139 ** [SQLITE_SYNC_FULL].  The first choice is the normal fsync().
1140 ** The second choice is a Mac OS X style fullsync.  The [SQLITE_SYNC_DATAONLY]
1141 ** flag may be ORed in to indicate that only the data of the file
1142 ** and not its inode needs to be synced.
1143 **
1144 ** The integer values to xLock() and xUnlock() are one of
1145 ** <ul>
1146 ** <li> [SQLITE_LOCK_NONE],
1147 ** <li> [SQLITE_LOCK_SHARED],
1148 ** <li> [SQLITE_LOCK_RESERVED],
1149 ** <li> [SQLITE_LOCK_PENDING], or
1150 ** <li> [SQLITE_LOCK_EXCLUSIVE].
1151 ** </ul>
1152 ** xLock() increases the lock. xUnlock() decreases the lock.
1153 ** The xCheckReservedLock() method checks whether any database connection,
1154 ** either in this process or in some other process, is holding a RESERVED,
1155 ** PENDING, or EXCLUSIVE lock on the file.  It returns true
1156 ** if such a lock exists and false otherwise.
1157 **
1158 ** The xFileControl() method is a generic interface that allows custom
1159 ** VFS implementations to directly control an open file using the
1160 ** [sqlite3_file_control()] interface.  The second "op" argument is an
1161 ** integer opcode.  The third argument is a generic pointer intended to
1162 ** point to a structure that may contain arguments or space in which to
1163 ** write return values.  Potential uses for xFileControl() might be
1164 ** functions to enable blocking locks with timeouts, to change the
1165 ** locking strategy (for example to use dot-file locks), to inquire
1166 ** about the status of a lock, or to break stale locks.  The SQLite
1167 ** core reserves all opcodes less than 100 for its own use.
1168 ** A [SQLITE_FCNTL_LOCKSTATE | list of opcodes] less than 100 is available.
1169 ** Applications that define a custom xFileControl method should use opcodes
1170 ** greater than 100 to avoid conflicts.  VFS implementations should
1171 ** return [SQLITE_NOTFOUND] for file control opcodes that they do not
1172 ** recognize.
1173 **
1174 ** The xSectorSize() method returns the sector size of the
1175 ** device that underlies the file.  The sector size is the
1176 ** minimum write that can be performed without disturbing
1177 ** other bytes in the file.  The xDeviceCharacteristics()
1178 ** method returns a bit vector describing behaviors of the
1179 ** underlying device:
1180 **
1181 ** <ul>
1182 ** <li> [SQLITE_IOCAP_ATOMIC]
1183 ** <li> [SQLITE_IOCAP_ATOMIC512]
1184 ** <li> [SQLITE_IOCAP_ATOMIC1K]
1185 ** <li> [SQLITE_IOCAP_ATOMIC2K]
1186 ** <li> [SQLITE_IOCAP_ATOMIC4K]
1187 ** <li> [SQLITE_IOCAP_ATOMIC8K]
1188 ** <li> [SQLITE_IOCAP_ATOMIC16K]
1189 ** <li> [SQLITE_IOCAP_ATOMIC32K]
1190 ** <li> [SQLITE_IOCAP_ATOMIC64K]
1191 ** <li> [SQLITE_IOCAP_SAFE_APPEND]
1192 ** <li> [SQLITE_IOCAP_SEQUENTIAL]
1193 ** </ul>
1194 **
1195 ** The SQLITE_IOCAP_ATOMIC property means that all writes of
1196 ** any size are atomic.  The SQLITE_IOCAP_ATOMICnnn values
1197 ** mean that writes of blocks that are nnn bytes in size and
1198 ** are aligned to an address which is an integer multiple of
1199 ** nnn are atomic.  The SQLITE_IOCAP_SAFE_APPEND value means
1200 ** that when data is appended to a file, the data is appended
1201 ** first then the size of the file is extended, never the other
1202 ** way around.  The SQLITE_IOCAP_SEQUENTIAL property means that
1203 ** information is written to disk in the same order as calls
1204 ** to xWrite().
1205 **
1206 ** If xRead() returns SQLITE_IOERR_SHORT_READ it must also fill
1207 ** in the unread portions of the buffer with zeros.  A VFS that
1208 ** fails to zero-fill short reads might seem to work.  However,
1209 ** failure to zero-fill short reads will eventually lead to
1210 ** database corruption.
1211 */
1212 typedef struct sqlite3_io_methods sqlite3_io_methods;
1213 struct sqlite3_io_methods {
1214   int iVersion;
1215   int (*xClose)(sqlite3_file*);
1216   int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst);
1217   int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst);
1218   int (*xTruncate)(sqlite3_file*, sqlite3_int64 size);
1219   int (*xSync)(sqlite3_file*, int flags);
1220   int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize);
1221   int (*xLock)(sqlite3_file*, int);
1222   int (*xUnlock)(sqlite3_file*, int);
1223   int (*xCheckReservedLock)(sqlite3_file*, int *pResOut);
1224   int (*xFileControl)(sqlite3_file*, int op, void *pArg);
1225   int (*xSectorSize)(sqlite3_file*);
1226   int (*xDeviceCharacteristics)(sqlite3_file*);
1227   /* Methods above are valid for version 1 */
1228   int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**);
1229   int (*xShmLock)(sqlite3_file*, int offset, int n, int flags);
1230   void (*xShmBarrier)(sqlite3_file*);
1231   int (*xShmUnmap)(sqlite3_file*, int deleteFlag);
1232   /* Methods above are valid for version 2 */
1233   /* Additional methods may be added in future releases */
1234 };
1235
1236 /*
1237 ** CAPI3REF: Standard File Control Opcodes
1238 **
1239 ** These integer constants are opcodes for the xFileControl method
1240 ** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()]
1241 ** interface.
1242 **
1243 ** The [SQLITE_FCNTL_LOCKSTATE] opcode is used for debugging.  This
1244 ** opcode causes the xFileControl method to write the current state of
1245 ** the lock (one of [SQLITE_LOCK_NONE], [SQLITE_LOCK_SHARED],
1246 ** [SQLITE_LOCK_RESERVED], [SQLITE_LOCK_PENDING], or [SQLITE_LOCK_EXCLUSIVE])
1247 ** into an integer that the pArg argument points to. This capability
1248 ** is used during testing and only needs to be supported when SQLITE_TEST
1249 ** is defined.
1250 **
1251 ** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS
1252 ** layer a hint of how large the database file will grow to be during the
1253 ** current transaction.  This hint is not guaranteed to be accurate but it
1254 ** is often close.  The underlying VFS might choose to preallocate database
1255 ** file space based on this hint in order to help writes to the database
1256 ** file run faster.
1257 **
1258 ** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS
1259 ** extends and truncates the database file in chunks of a size specified
1260 ** by the user. The fourth argument to [sqlite3_file_control()] should 
1261 ** point to an integer (type int) containing the new chunk-size to use
1262 ** for the nominated database. Allocating database file space in large
1263 ** chunks (say 1MB at a time), may reduce file-system fragmentation and
1264 ** improve performance on some systems.
1265 **
1266 ** The [SQLITE_FCNTL_FILE_POINTER] opcode is used to obtain a pointer
1267 ** to the [sqlite3_file] object associated with a particular database
1268 ** connection.  See the [sqlite3_file_control()] documentation for
1269 ** additional information.
1270 **
1271 ** ^(The [SQLITE_FCNTL_SYNC_OMITTED] opcode is generated internally by
1272 ** SQLite and sent to all VFSes in place of a call to the xSync method
1273 ** when the database connection has [PRAGMA synchronous] set to OFF.)^
1274 ** Some specialized VFSes need this signal in order to operate correctly
1275 ** when [PRAGMA synchronous | PRAGMA synchronous=OFF] is set, but most 
1276 ** VFSes do not need this signal and should silently ignore this opcode.
1277 ** Applications should not call [sqlite3_file_control()] with this
1278 ** opcode as doing so may disrupt the operation of the specialized VFSes
1279 ** that do require it.  
1280 */
1281 #define SQLITE_FCNTL_LOCKSTATE        1
1282 #define SQLITE_GET_LOCKPROXYFILE      2
1283 #define SQLITE_SET_LOCKPROXYFILE      3
1284 #define SQLITE_LAST_ERRNO             4
1285 #define SQLITE_FCNTL_SIZE_HINT        5
1286 #define SQLITE_FCNTL_CHUNK_SIZE       6
1287 #define SQLITE_FCNTL_FILE_POINTER     7
1288 #define SQLITE_FCNTL_SYNC_OMITTED     8
1289
1290
1291 /*
1292 ** CAPI3REF: Mutex Handle
1293 **
1294 ** The mutex module within SQLite defines [sqlite3_mutex] to be an
1295 ** abstract type for a mutex object.  The SQLite core never looks
1296 ** at the internal representation of an [sqlite3_mutex].  It only
1297 ** deals with pointers to the [sqlite3_mutex] object.
1298 **
1299 ** Mutexes are created using [sqlite3_mutex_alloc()].
1300 */
1301 typedef struct sqlite3_mutex sqlite3_mutex;
1302
1303 /*
1304 ** CAPI3REF: OS Interface Object
1305 **
1306 ** An instance of the sqlite3_vfs object defines the interface between
1307 ** the SQLite core and the underlying operating system.  The "vfs"
1308 ** in the name of the object stands for "virtual file system".
1309 **
1310 ** The value of the iVersion field is initially 1 but may be larger in
1311 ** future versions of SQLite.  Additional fields may be appended to this
1312 ** object when the iVersion value is increased.  Note that the structure
1313 ** of the sqlite3_vfs object changes in the transaction between
1314 ** SQLite version 3.5.9 and 3.6.0 and yet the iVersion field was not
1315 ** modified.
1316 **
1317 ** The szOsFile field is the size of the subclassed [sqlite3_file]
1318 ** structure used by this VFS.  mxPathname is the maximum length of
1319 ** a pathname in this VFS.
1320 **
1321 ** Registered sqlite3_vfs objects are kept on a linked list formed by
1322 ** the pNext pointer.  The [sqlite3_vfs_register()]
1323 ** and [sqlite3_vfs_unregister()] interfaces manage this list
1324 ** in a thread-safe way.  The [sqlite3_vfs_find()] interface
1325 ** searches the list.  Neither the application code nor the VFS
1326 ** implementation should use the pNext pointer.
1327 **
1328 ** The pNext field is the only field in the sqlite3_vfs
1329 ** structure that SQLite will ever modify.  SQLite will only access
1330 ** or modify this field while holding a particular static mutex.
1331 ** The application should never modify anything within the sqlite3_vfs
1332 ** object once the object has been registered.
1333 **
1334 ** The zName field holds the name of the VFS module.  The name must
1335 ** be unique across all VFS modules.
1336 **
1337 ** ^SQLite guarantees that the zFilename parameter to xOpen
1338 ** is either a NULL pointer or string obtained
1339 ** from xFullPathname() with an optional suffix added.
1340 ** ^If a suffix is added to the zFilename parameter, it will
1341 ** consist of a single "-" character followed by no more than
1342 ** 10 alphanumeric and/or "-" characters.
1343 ** ^SQLite further guarantees that
1344 ** the string will be valid and unchanged until xClose() is
1345 ** called. Because of the previous sentence,
1346 ** the [sqlite3_file] can safely store a pointer to the
1347 ** filename if it needs to remember the filename for some reason.
1348 ** If the zFilename parameter to xOpen is a NULL pointer then xOpen
1349 ** must invent its own temporary name for the file.  ^Whenever the 
1350 ** xFilename parameter is NULL it will also be the case that the
1351 ** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE].
1352 **
1353 ** The flags argument to xOpen() includes all bits set in
1354 ** the flags argument to [sqlite3_open_v2()].  Or if [sqlite3_open()]
1355 ** or [sqlite3_open16()] is used, then flags includes at least
1356 ** [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]. 
1357 ** If xOpen() opens a file read-only then it sets *pOutFlags to
1358 ** include [SQLITE_OPEN_READONLY].  Other bits in *pOutFlags may be set.
1359 **
1360 ** ^(SQLite will also add one of the following flags to the xOpen()
1361 ** call, depending on the object being opened:
1362 **
1363 ** <ul>
1364 ** <li>  [SQLITE_OPEN_MAIN_DB]
1365 ** <li>  [SQLITE_OPEN_MAIN_JOURNAL]
1366 ** <li>  [SQLITE_OPEN_TEMP_DB]
1367 ** <li>  [SQLITE_OPEN_TEMP_JOURNAL]
1368 ** <li>  [SQLITE_OPEN_TRANSIENT_DB]
1369 ** <li>  [SQLITE_OPEN_SUBJOURNAL]
1370 ** <li>  [SQLITE_OPEN_MASTER_JOURNAL]
1371 ** <li>  [SQLITE_OPEN_WAL]
1372 ** </ul>)^
1373 **
1374 ** The file I/O implementation can use the object type flags to
1375 ** change the way it deals with files.  For example, an application
1376 ** that does not care about crash recovery or rollback might make
1377 ** the open of a journal file a no-op.  Writes to this journal would
1378 ** also be no-ops, and any attempt to read the journal would return
1379 ** SQLITE_IOERR.  Or the implementation might recognize that a database
1380 ** file will be doing page-aligned sector reads and writes in a random
1381 ** order and set up its I/O subsystem accordingly.
1382 **
1383 ** SQLite might also add one of the following flags to the xOpen method:
1384 **
1385 ** <ul>
1386 ** <li> [SQLITE_OPEN_DELETEONCLOSE]
1387 ** <li> [SQLITE_OPEN_EXCLUSIVE]
1388 ** </ul>
1389 **
1390 ** The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be
1391 ** deleted when it is closed.  ^The [SQLITE_OPEN_DELETEONCLOSE]
1392 ** will be set for TEMP databases and their journals, transient
1393 ** databases, and subjournals.
1394 **
1395 ** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction
1396 ** with the [SQLITE_OPEN_CREATE] flag, which are both directly
1397 ** analogous to the O_EXCL and O_CREAT flags of the POSIX open()
1398 ** API.  The SQLITE_OPEN_EXCLUSIVE flag, when paired with the 
1399 ** SQLITE_OPEN_CREATE, is used to indicate that file should always
1400 ** be created, and that it is an error if it already exists.
1401 ** It is <i>not</i> used to indicate the file should be opened 
1402 ** for exclusive access.
1403 **
1404 ** ^At least szOsFile bytes of memory are allocated by SQLite
1405 ** to hold the  [sqlite3_file] structure passed as the third
1406 ** argument to xOpen.  The xOpen method does not have to
1407 ** allocate the structure; it should just fill it in.  Note that
1408 ** the xOpen method must set the sqlite3_file.pMethods to either
1409 ** a valid [sqlite3_io_methods] object or to NULL.  xOpen must do
1410 ** this even if the open fails.  SQLite expects that the sqlite3_file.pMethods
1411 ** element will be valid after xOpen returns regardless of the success
1412 ** or failure of the xOpen call.
1413 **
1414 ** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
1415 ** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to
1416 ** test whether a file is readable and writable, or [SQLITE_ACCESS_READ]
1417 ** to test whether a file is at least readable.   The file can be a
1418 ** directory.
1419 **
1420 ** ^SQLite will always allocate at least mxPathname+1 bytes for the
1421 ** output buffer xFullPathname.  The exact size of the output buffer
1422 ** is also passed as a parameter to both  methods. If the output buffer
1423 ** is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is
1424 ** handled as a fatal error by SQLite, vfs implementations should endeavor
1425 ** to prevent this by setting mxPathname to a sufficiently large value.
1426 **
1427 ** The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64()
1428 ** interfaces are not strictly a part of the filesystem, but they are
1429 ** included in the VFS structure for completeness.
1430 ** The xRandomness() function attempts to return nBytes bytes
1431 ** of good-quality randomness into zOut.  The return value is
1432 ** the actual number of bytes of randomness obtained.
1433 ** The xSleep() method causes the calling thread to sleep for at
1434 ** least the number of microseconds given.  ^The xCurrentTime()
1435 ** method returns a Julian Day Number for the current date and time as
1436 ** a floating point value.
1437 ** ^The xCurrentTimeInt64() method returns, as an integer, the Julian
1438 ** Day Number multipled by 86400000 (the number of milliseconds in 
1439 ** a 24-hour day).  
1440 ** ^SQLite will use the xCurrentTimeInt64() method to get the current
1441 ** date and time if that method is available (if iVersion is 2 or 
1442 ** greater and the function pointer is not NULL) and will fall back
1443 ** to xCurrentTime() if xCurrentTimeInt64() is unavailable.
1444 **
1445 ** ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces
1446 ** are not used by the SQLite core.  These optional interfaces are provided
1447 ** by some VFSes to facilitate testing of the VFS code. By overriding 
1448 ** system calls with functions under its control, a test program can
1449 ** simulate faults and error conditions that would otherwise be difficult
1450 ** or impossible to induce.  The set of system calls that can be overridden
1451 ** varies from one VFS to another, and from one version of the same VFS to the
1452 ** next.  Applications that use these interfaces must be prepared for any
1453 ** or all of these interfaces to be NULL or for their behavior to change
1454 ** from one release to the next.  Applications must not attempt to access
1455 ** any of these methods if the iVersion of the VFS is less than 3.
1456 */
1457 typedef struct sqlite3_vfs sqlite3_vfs;
1458 typedef void (*sqlite3_syscall_ptr)(void);
1459 struct sqlite3_vfs {
1460   int iVersion;            /* Structure version number (currently 3) */
1461   int szOsFile;            /* Size of subclassed sqlite3_file */
1462   int mxPathname;          /* Maximum file pathname length */
1463   sqlite3_vfs *pNext;      /* Next registered VFS */
1464   const char *zName;       /* Name of this virtual file system */
1465   void *pAppData;          /* Pointer to application-specific data */
1466   int (*xOpen)(sqlite3_vfs*, const char *zName, sqlite3_file*,
1467                int flags, int *pOutFlags);
1468   int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir);
1469   int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut);
1470   int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut);
1471   void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename);
1472   void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg);
1473   void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void);
1474   void (*xDlClose)(sqlite3_vfs*, void*);
1475   int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut);
1476   int (*xSleep)(sqlite3_vfs*, int microseconds);
1477   int (*xCurrentTime)(sqlite3_vfs*, double*);
1478   int (*xGetLastError)(sqlite3_vfs*, int, char *);
1479   /*
1480   ** The methods above are in version 1 of the sqlite_vfs object
1481   ** definition.  Those that follow are added in version 2 or later
1482   */
1483   int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*);
1484   /*
1485   ** The methods above are in versions 1 and 2 of the sqlite_vfs object.
1486   ** Those below are for version 3 and greater.
1487   */
1488   int (*xSetSystemCall)(sqlite3_vfs*, const char *zName, sqlite3_syscall_ptr);
1489   sqlite3_syscall_ptr (*xGetSystemCall)(sqlite3_vfs*, const char *zName);
1490   const char *(*xNextSystemCall)(sqlite3_vfs*, const char *zName);
1491   /*
1492   ** The methods above are in versions 1 through 3 of the sqlite_vfs object.
1493   ** New fields may be appended in figure versions.  The iVersion
1494   ** value will increment whenever this happens. 
1495   */
1496 };
1497
1498 /*
1499 ** CAPI3REF: Flags for the xAccess VFS method
1500 **
1501 ** These integer constants can be used as the third parameter to
1502 ** the xAccess method of an [sqlite3_vfs] object.  They determine
1503 ** what kind of permissions the xAccess method is looking for.
1504 ** With SQLITE_ACCESS_EXISTS, the xAccess method
1505 ** simply checks whether the file exists.
1506 ** With SQLITE_ACCESS_READWRITE, the xAccess method
1507 ** checks whether the named directory is both readable and writable
1508 ** (in other words, if files can be added, removed, and renamed within
1509 ** the directory).
1510 ** The SQLITE_ACCESS_READWRITE constant is currently used only by the
1511 ** [temp_store_directory pragma], though this could change in a future
1512 ** release of SQLite.
1513 ** With SQLITE_ACCESS_READ, the xAccess method
1514 ** checks whether the file is readable.  The SQLITE_ACCESS_READ constant is
1515 ** currently unused, though it might be used in a future release of
1516 ** SQLite.
1517 */
1518 #define SQLITE_ACCESS_EXISTS    0
1519 #define SQLITE_ACCESS_READWRITE 1   /* Used by PRAGMA temp_store_directory */
1520 #define SQLITE_ACCESS_READ      2   /* Unused */
1521
1522 /*
1523 ** CAPI3REF: Flags for the xShmLock VFS method
1524 **
1525 ** These integer constants define the various locking operations
1526 ** allowed by the xShmLock method of [sqlite3_io_methods].  The
1527 ** following are the only legal combinations of flags to the
1528 ** xShmLock method:
1529 **
1530 ** <ul>
1531 ** <li>  SQLITE_SHM_LOCK | SQLITE_SHM_SHARED
1532 ** <li>  SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE
1533 ** <li>  SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED
1534 ** <li>  SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE
1535 ** </ul>
1536 **
1537 ** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as
1538 ** was given no the corresponding lock.  
1539 **
1540 ** The xShmLock method can transition between unlocked and SHARED or
1541 ** between unlocked and EXCLUSIVE.  It cannot transition between SHARED
1542 ** and EXCLUSIVE.
1543 */
1544 #define SQLITE_SHM_UNLOCK       1
1545 #define SQLITE_SHM_LOCK         2
1546 #define SQLITE_SHM_SHARED       4
1547 #define SQLITE_SHM_EXCLUSIVE    8
1548
1549 /*
1550 ** CAPI3REF: Maximum xShmLock index
1551 **
1552 ** The xShmLock method on [sqlite3_io_methods] may use values
1553 ** between 0 and this upper bound as its "offset" argument.
1554 ** The SQLite core will never attempt to acquire or release a
1555 ** lock outside of this range
1556 */
1557 #define SQLITE_SHM_NLOCK        8
1558
1559
1560 /*
1561 ** CAPI3REF: Initialize The SQLite Library
1562 **
1563 ** ^The sqlite3_initialize() routine initializes the
1564 ** SQLite library.  ^The sqlite3_shutdown() routine
1565 ** deallocates any resources that were allocated by sqlite3_initialize().
1566 ** These routines are designed to aid in process initialization and
1567 ** shutdown on embedded systems.  Workstation applications using
1568 ** SQLite normally do not need to invoke either of these routines.
1569 **
1570 ** A call to sqlite3_initialize() is an "effective" call if it is
1571 ** the first time sqlite3_initialize() is invoked during the lifetime of
1572 ** the process, or if it is the first time sqlite3_initialize() is invoked
1573 ** following a call to sqlite3_shutdown().  ^(Only an effective call
1574 ** of sqlite3_initialize() does any initialization.  All other calls
1575 ** are harmless no-ops.)^
1576 **
1577 ** A call to sqlite3_shutdown() is an "effective" call if it is the first
1578 ** call to sqlite3_shutdown() since the last sqlite3_initialize().  ^(Only
1579 ** an effective call to sqlite3_shutdown() does any deinitialization.
1580 ** All other valid calls to sqlite3_shutdown() are harmless no-ops.)^
1581 **
1582 ** The sqlite3_initialize() interface is threadsafe, but sqlite3_shutdown()
1583 ** is not.  The sqlite3_shutdown() interface must only be called from a
1584 ** single thread.  All open [database connections] must be closed and all
1585 ** other SQLite resources must be deallocated prior to invoking
1586 ** sqlite3_shutdown().
1587 **
1588 ** Among other things, ^sqlite3_initialize() will invoke
1589 ** sqlite3_os_init().  Similarly, ^sqlite3_shutdown()
1590 ** will invoke sqlite3_os_end().
1591 **
1592 ** ^The sqlite3_initialize() routine returns [SQLITE_OK] on success.
1593 ** ^If for some reason, sqlite3_initialize() is unable to initialize
1594 ** the library (perhaps it is unable to allocate a needed resource such
1595 ** as a mutex) it returns an [error code] other than [SQLITE_OK].
1596 **
1597 ** ^The sqlite3_initialize() routine is called internally by many other
1598 ** SQLite interfaces so that an application usually does not need to
1599 ** invoke sqlite3_initialize() directly.  For example, [sqlite3_open()]
1600 ** calls sqlite3_initialize() so the SQLite library will be automatically
1601 ** initialized when [sqlite3_open()] is called if it has not be initialized
1602 ** already.  ^However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT]
1603 ** compile-time option, then the automatic calls to sqlite3_initialize()
1604 ** are omitted and the application must call sqlite3_initialize() directly
1605 ** prior to using any other SQLite interface.  For maximum portability,
1606 ** it is recommended that applications always invoke sqlite3_initialize()
1607 ** directly prior to using any other SQLite interface.  Future releases
1608 ** of SQLite may require this.  In other words, the behavior exhibited
1609 ** when SQLite is compiled with [SQLITE_OMIT_AUTOINIT] might become the
1610 ** default behavior in some future release of SQLite.
1611 **
1612 ** The sqlite3_os_init() routine does operating-system specific
1613 ** initialization of the SQLite library.  The sqlite3_os_end()
1614 ** routine undoes the effect of sqlite3_os_init().  Typical tasks
1615 ** performed by these routines include allocation or deallocation
1616 ** of static resources, initialization of global variables,
1617 ** setting up a default [sqlite3_vfs] module, or setting up
1618 ** a default configuration using [sqlite3_config()].
1619 **
1620 ** The application should never invoke either sqlite3_os_init()
1621 ** or sqlite3_os_end() directly.  The application should only invoke
1622 ** sqlite3_initialize() and sqlite3_shutdown().  The sqlite3_os_init()
1623 ** interface is called automatically by sqlite3_initialize() and
1624 ** sqlite3_os_end() is called by sqlite3_shutdown().  Appropriate
1625 ** implementations for sqlite3_os_init() and sqlite3_os_end()
1626 ** are built into SQLite when it is compiled for Unix, Windows, or OS/2.
1627 ** When [custom builds | built for other platforms]
1628 ** (using the [SQLITE_OS_OTHER=1] compile-time
1629 ** option) the application must supply a suitable implementation for
1630 ** sqlite3_os_init() and sqlite3_os_end().  An application-supplied
1631 ** implementation of sqlite3_os_init() or sqlite3_os_end()
1632 ** must return [SQLITE_OK] on success and some other [error code] upon
1633 ** failure.
1634 */
1635 SQLITE_API int sqlite3_initialize(void);
1636 SQLITE_API int sqlite3_shutdown(void);
1637 SQLITE_API int sqlite3_os_init(void);
1638 SQLITE_API int sqlite3_os_end(void);
1639
1640 /*
1641 ** CAPI3REF: Configuring The SQLite Library
1642 **
1643 ** The sqlite3_config() interface is used to make global configuration
1644 ** changes to SQLite in order to tune SQLite to the specific needs of
1645 ** the application.  The default configuration is recommended for most
1646 ** applications and so this routine is usually not necessary.  It is
1647 ** provided to support rare applications with unusual needs.
1648 **
1649 ** The sqlite3_config() interface is not threadsafe.  The application
1650 ** must insure that no other SQLite interfaces are invoked by other
1651 ** threads while sqlite3_config() is running.  Furthermore, sqlite3_config()
1652 ** may only be invoked prior to library initialization using
1653 ** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()].
1654 ** ^If sqlite3_config() is called after [sqlite3_initialize()] and before
1655 ** [sqlite3_shutdown()] then it will return SQLITE_MISUSE.
1656 ** Note, however, that ^sqlite3_config() can be called as part of the
1657 ** implementation of an application-defined [sqlite3_os_init()].
1658 **
1659 ** The first argument to sqlite3_config() is an integer
1660 ** [SQLITE_CONFIG_SINGLETHREAD | configuration option] that determines
1661 ** what property of SQLite is to be configured.  Subsequent arguments
1662 ** vary depending on the [SQLITE_CONFIG_SINGLETHREAD | configuration option]
1663 ** in the first argument.
1664 **
1665 ** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK].
1666 ** ^If the option is unknown or SQLite is unable to set the option
1667 ** then this routine returns a non-zero [error code].
1668 */
1669 SQLITE_API int sqlite3_config(int, ...);
1670
1671 /*
1672 ** CAPI3REF: Configure database connections
1673 **
1674 ** The sqlite3_db_config() interface is used to make configuration
1675 ** changes to a [database connection].  The interface is similar to
1676 ** [sqlite3_config()] except that the changes apply to a single
1677 ** [database connection] (specified in the first argument).
1678 **
1679 ** The second argument to sqlite3_db_config(D,V,...)  is the
1680 ** [SQLITE_DBCONFIG_LOOKASIDE | configuration verb] - an integer code 
1681 ** that indicates what aspect of the [database connection] is being configured.
1682 ** Subsequent arguments vary depending on the configuration verb.
1683 **
1684 ** ^Calls to sqlite3_db_config() return SQLITE_OK if and only if
1685 ** the call is considered successful.
1686 */
1687 SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...);
1688
1689 /*
1690 ** CAPI3REF: Memory Allocation Routines
1691 **
1692 ** An instance of this object defines the interface between SQLite
1693 ** and low-level memory allocation routines.
1694 **
1695 ** This object is used in only one place in the SQLite interface.
1696 ** A pointer to an instance of this object is the argument to
1697 ** [sqlite3_config()] when the configuration option is
1698 ** [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC].  
1699 ** By creating an instance of this object
1700 ** and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC])
1701 ** during configuration, an application can specify an alternative
1702 ** memory allocation subsystem for SQLite to use for all of its
1703 ** dynamic memory needs.
1704 **
1705 ** Note that SQLite comes with several [built-in memory allocators]
1706 ** that are perfectly adequate for the overwhelming majority of applications
1707 ** and that this object is only useful to a tiny minority of applications
1708 ** with specialized memory allocation requirements.  This object is
1709 ** also used during testing of SQLite in order to specify an alternative
1710 ** memory allocator that simulates memory out-of-memory conditions in
1711 ** order to verify that SQLite recovers gracefully from such
1712 ** conditions.
1713 **
1714 ** The xMalloc and xFree methods must work like the
1715 ** malloc() and free() functions from the standard C library.
1716 ** The xRealloc method must work like realloc() from the standard C library
1717 ** with the exception that if the second argument to xRealloc is zero,
1718 ** xRealloc must be a no-op - it must not perform any allocation or
1719 ** deallocation.  ^SQLite guarantees that the second argument to
1720 ** xRealloc is always a value returned by a prior call to xRoundup.
1721 ** And so in cases where xRoundup always returns a positive number,
1722 ** xRealloc can perform exactly as the standard library realloc() and
1723 ** still be in compliance with this specification.
1724 **
1725 ** xSize should return the allocated size of a memory allocation
1726 ** previously obtained from xMalloc or xRealloc.  The allocated size
1727 ** is always at least as big as the requested size but may be larger.
1728 **
1729 ** The xRoundup method returns what would be the allocated size of
1730 ** a memory allocation given a particular requested size.  Most memory
1731 ** allocators round up memory allocations at least to the next multiple
1732 ** of 8.  Some allocators round up to a larger multiple or to a power of 2.
1733 ** Every memory allocation request coming in through [sqlite3_malloc()]
1734 ** or [sqlite3_realloc()] first calls xRoundup.  If xRoundup returns 0, 
1735 ** that causes the corresponding memory allocation to fail.
1736 **
1737 ** The xInit method initializes the memory allocator.  (For example,
1738 ** it might allocate any require mutexes or initialize internal data
1739 ** structures.  The xShutdown method is invoked (indirectly) by
1740 ** [sqlite3_shutdown()] and should deallocate any resources acquired
1741 ** by xInit.  The pAppData pointer is used as the only parameter to
1742 ** xInit and xShutdown.
1743 **
1744 ** SQLite holds the [SQLITE_MUTEX_STATIC_MASTER] mutex when it invokes
1745 ** the xInit method, so the xInit method need not be threadsafe.  The
1746 ** xShutdown method is only called from [sqlite3_shutdown()] so it does
1747 ** not need to be threadsafe either.  For all other methods, SQLite
1748 ** holds the [SQLITE_MUTEX_STATIC_MEM] mutex as long as the
1749 ** [SQLITE_CONFIG_MEMSTATUS] configuration option is turned on (which
1750 ** it is by default) and so the methods are automatically serialized.
1751 ** However, if [SQLITE_CONFIG_MEMSTATUS] is disabled, then the other
1752 ** methods must be threadsafe or else make their own arrangements for
1753 ** serialization.
1754 **
1755 ** SQLite will never invoke xInit() more than once without an intervening
1756 ** call to xShutdown().
1757 */
1758 typedef struct sqlite3_mem_methods sqlite3_mem_methods;
1759 struct sqlite3_mem_methods {
1760   void *(*xMalloc)(int);         /* Memory allocation function */
1761   void (*xFree)(void*);          /* Free a prior allocation */
1762   void *(*xRealloc)(void*,int);  /* Resize an allocation */
1763   int (*xSize)(void*);           /* Return the size of an allocation */
1764   int (*xRoundup)(int);          /* Round up request size to allocation size */
1765   int (*xInit)(void*);           /* Initialize the memory allocator */
1766   void (*xShutdown)(void*);      /* Deinitialize the memory allocator */
1767   void *pAppData;                /* Argument to xInit() and xShutdown() */
1768 };
1769
1770 /*
1771 ** CAPI3REF: Configuration Options
1772 **
1773 ** These constants are the available integer configuration options that
1774 ** can be passed as the first argument to the [sqlite3_config()] interface.
1775 **
1776 ** New configuration options may be added in future releases of SQLite.
1777 ** Existing configuration options might be discontinued.  Applications
1778 ** should check the return code from [sqlite3_config()] to make sure that
1779 ** the call worked.  The [sqlite3_config()] interface will return a
1780 ** non-zero [error code] if a discontinued or unsupported configuration option
1781 ** is invoked.
1782 **
1783 ** <dl>
1784 ** <dt>SQLITE_CONFIG_SINGLETHREAD</dt>
1785 ** <dd>There are no arguments to this option.  ^This option sets the
1786 ** [threading mode] to Single-thread.  In other words, it disables
1787 ** all mutexing and puts SQLite into a mode where it can only be used
1788 ** by a single thread.   ^If SQLite is compiled with
1789 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1790 ** it is not possible to change the [threading mode] from its default
1791 ** value of Single-thread and so [sqlite3_config()] will return 
1792 ** [SQLITE_ERROR] if called with the SQLITE_CONFIG_SINGLETHREAD
1793 ** configuration option.</dd>
1794 **
1795 ** <dt>SQLITE_CONFIG_MULTITHREAD</dt>
1796 ** <dd>There are no arguments to this option.  ^This option sets the
1797 ** [threading mode] to Multi-thread.  In other words, it disables
1798 ** mutexing on [database connection] and [prepared statement] objects.
1799 ** The application is responsible for serializing access to
1800 ** [database connections] and [prepared statements].  But other mutexes
1801 ** are enabled so that SQLite will be safe to use in a multi-threaded
1802 ** environment as long as no two threads attempt to use the same
1803 ** [database connection] at the same time.  ^If SQLite is compiled with
1804 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1805 ** it is not possible to set the Multi-thread [threading mode] and
1806 ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
1807 ** SQLITE_CONFIG_MULTITHREAD configuration option.</dd>
1808 **
1809 ** <dt>SQLITE_CONFIG_SERIALIZED</dt>
1810 ** <dd>There are no arguments to this option.  ^This option sets the
1811 ** [threading mode] to Serialized. In other words, this option enables
1812 ** all mutexes including the recursive
1813 ** mutexes on [database connection] and [prepared statement] objects.
1814 ** In this mode (which is the default when SQLite is compiled with
1815 ** [SQLITE_THREADSAFE=1]) the SQLite library will itself serialize access
1816 ** to [database connections] and [prepared statements] so that the
1817 ** application is free to use the same [database connection] or the
1818 ** same [prepared statement] in different threads at the same time.
1819 ** ^If SQLite is compiled with
1820 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1821 ** it is not possible to set the Serialized [threading mode] and
1822 ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
1823 ** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
1824 **
1825 ** <dt>SQLITE_CONFIG_MALLOC</dt>
1826 ** <dd> ^(This option takes a single argument which is a pointer to an
1827 ** instance of the [sqlite3_mem_methods] structure.  The argument specifies
1828 ** alternative low-level memory allocation routines to be used in place of
1829 ** the memory allocation routines built into SQLite.)^ ^SQLite makes
1830 ** its own private copy of the content of the [sqlite3_mem_methods] structure
1831 ** before the [sqlite3_config()] call returns.</dd>
1832 **
1833 ** <dt>SQLITE_CONFIG_GETMALLOC</dt>
1834 ** <dd> ^(This option takes a single argument which is a pointer to an
1835 ** instance of the [sqlite3_mem_methods] structure.  The [sqlite3_mem_methods]
1836 ** structure is filled with the currently defined memory allocation routines.)^
1837 ** This option can be used to overload the default memory allocation
1838 ** routines with a wrapper that simulations memory allocation failure or
1839 ** tracks memory usage, for example. </dd>
1840 **
1841 ** <dt>SQLITE_CONFIG_MEMSTATUS</dt>
1842 ** <dd> ^This option takes single argument of type int, interpreted as a 
1843 ** boolean, which enables or disables the collection of memory allocation 
1844 ** statistics. ^(When memory allocation statistics are disabled, the 
1845 ** following SQLite interfaces become non-operational:
1846 **   <ul>
1847 **   <li> [sqlite3_memory_used()]
1848 **   <li> [sqlite3_memory_highwater()]
1849 **   <li> [sqlite3_soft_heap_limit64()]
1850 **   <li> [sqlite3_status()]
1851 **   </ul>)^
1852 ** ^Memory allocation statistics are enabled by default unless SQLite is
1853 ** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
1854 ** allocation statistics are disabled by default.
1855 ** </dd>
1856 **
1857 ** <dt>SQLITE_CONFIG_SCRATCH</dt>
1858 ** <dd> ^This option specifies a static memory buffer that SQLite can use for
1859 ** scratch memory.  There are three arguments:  A pointer an 8-byte
1860 ** aligned memory buffer from which the scratch allocations will be
1861 ** drawn, the size of each scratch allocation (sz),
1862 ** and the maximum number of scratch allocations (N).  The sz
1863 ** argument must be a multiple of 16.
1864 ** The first argument must be a pointer to an 8-byte aligned buffer
1865 ** of at least sz*N bytes of memory.
1866 ** ^SQLite will use no more than two scratch buffers per thread.  So
1867 ** N should be set to twice the expected maximum number of threads.
1868 ** ^SQLite will never require a scratch buffer that is more than 6
1869 ** times the database page size. ^If SQLite needs needs additional
1870 ** scratch memory beyond what is provided by this configuration option, then 
1871 ** [sqlite3_malloc()] will be used to obtain the memory needed.</dd>
1872 **
1873 ** <dt>SQLITE_CONFIG_PAGECACHE</dt>
1874 ** <dd> ^This option specifies a static memory buffer that SQLite can use for
1875 ** the database page cache with the default page cache implemenation.  
1876 ** This configuration should not be used if an application-define page
1877 ** cache implementation is loaded using the SQLITE_CONFIG_PCACHE option.
1878 ** There are three arguments to this option: A pointer to 8-byte aligned
1879 ** memory, the size of each page buffer (sz), and the number of pages (N).
1880 ** The sz argument should be the size of the largest database page
1881 ** (a power of two between 512 and 32768) plus a little extra for each
1882 ** page header.  ^The page header size is 20 to 40 bytes depending on
1883 ** the host architecture.  ^It is harmless, apart from the wasted memory,
1884 ** to make sz a little too large.  The first
1885 ** argument should point to an allocation of at least sz*N bytes of memory.
1886 ** ^SQLite will use the memory provided by the first argument to satisfy its
1887 ** memory needs for the first N pages that it adds to cache.  ^If additional
1888 ** page cache memory is needed beyond what is provided by this option, then
1889 ** SQLite goes to [sqlite3_malloc()] for the additional storage space.
1890 ** The pointer in the first argument must
1891 ** be aligned to an 8-byte boundary or subsequent behavior of SQLite
1892 ** will be undefined.</dd>
1893 **
1894 ** <dt>SQLITE_CONFIG_HEAP</dt>
1895 ** <dd> ^This option specifies a static memory buffer that SQLite will use
1896 ** for all of its dynamic memory allocation needs beyond those provided
1897 ** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
1898 ** There are three arguments: An 8-byte aligned pointer to the memory,
1899 ** the number of bytes in the memory buffer, and the minimum allocation size.
1900 ** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts
1901 ** to using its default memory allocator (the system malloc() implementation),
1902 ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC].  ^If the
1903 ** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or
1904 ** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory
1905 ** allocator is engaged to handle all of SQLites memory allocation needs.
1906 ** The first pointer (the memory pointer) must be aligned to an 8-byte
1907 ** boundary or subsequent behavior of SQLite will be undefined.
1908 ** The minimum allocation size is capped at 2^12. Reasonable values
1909 ** for the minimum allocation size are 2^5 through 2^8.</dd>
1910 **
1911 ** <dt>SQLITE_CONFIG_MUTEX</dt>
1912 ** <dd> ^(This option takes a single argument which is a pointer to an
1913 ** instance of the [sqlite3_mutex_methods] structure.  The argument specifies
1914 ** alternative low-level mutex routines to be used in place
1915 ** the mutex routines built into SQLite.)^  ^SQLite makes a copy of the
1916 ** content of the [sqlite3_mutex_methods] structure before the call to
1917 ** [sqlite3_config()] returns. ^If SQLite is compiled with
1918 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1919 ** the entire mutexing subsystem is omitted from the build and hence calls to
1920 ** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will
1921 ** return [SQLITE_ERROR].</dd>
1922 **
1923 ** <dt>SQLITE_CONFIG_GETMUTEX</dt>
1924 ** <dd> ^(This option takes a single argument which is a pointer to an
1925 ** instance of the [sqlite3_mutex_methods] structure.  The
1926 ** [sqlite3_mutex_methods]
1927 ** structure is filled with the currently defined mutex routines.)^
1928 ** This option can be used to overload the default mutex allocation
1929 ** routines with a wrapper used to track mutex usage for performance
1930 ** profiling or testing, for example.   ^If SQLite is compiled with
1931 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1932 ** the entire mutexing subsystem is omitted from the build and hence calls to
1933 ** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will
1934 ** return [SQLITE_ERROR].</dd>
1935 **
1936 ** <dt>SQLITE_CONFIG_LOOKASIDE</dt>
1937 ** <dd> ^(This option takes two arguments that determine the default
1938 ** memory allocation for the lookaside memory allocator on each
1939 ** [database connection].  The first argument is the
1940 ** size of each lookaside buffer slot and the second is the number of
1941 ** slots allocated to each database connection.)^  ^(This option sets the
1942 ** <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
1943 ** verb to [sqlite3_db_config()] can be used to change the lookaside
1944 ** configuration on individual connections.)^ </dd>
1945 **
1946 ** <dt>SQLITE_CONFIG_PCACHE</dt>
1947 ** <dd> ^(This option takes a single argument which is a pointer to
1948 ** an [sqlite3_pcache_methods] object.  This object specifies the interface
1949 ** to a custom page cache implementation.)^  ^SQLite makes a copy of the
1950 ** object and uses it for page cache memory allocations.</dd>
1951 **
1952 ** <dt>SQLITE_CONFIG_GETPCACHE</dt>
1953 ** <dd> ^(This option takes a single argument which is a pointer to an
1954 ** [sqlite3_pcache_methods] object.  SQLite copies of the current
1955 ** page cache implementation into that object.)^ </dd>
1956 **
1957 ** <dt>SQLITE_CONFIG_LOG</dt>
1958 ** <dd> ^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a
1959 ** function with a call signature of void(*)(void*,int,const char*), 
1960 ** and a pointer to void. ^If the function pointer is not NULL, it is
1961 ** invoked by [sqlite3_log()] to process each logging event.  ^If the
1962 ** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op.
1963 ** ^The void pointer that is the second argument to SQLITE_CONFIG_LOG is
1964 ** passed through as the first parameter to the application-defined logger
1965 ** function whenever that function is invoked.  ^The second parameter to
1966 ** the logger function is a copy of the first parameter to the corresponding
1967 ** [sqlite3_log()] call and is intended to be a [result code] or an
1968 ** [extended result code].  ^The third parameter passed to the logger is
1969 ** log message after formatting via [sqlite3_snprintf()].
1970 ** The SQLite logging interface is not reentrant; the logger function
1971 ** supplied by the application must not invoke any SQLite interface.
1972 ** In a multi-threaded application, the application-defined logger
1973 ** function must be threadsafe. </dd>
1974 **
1975 ** </dl>
1976 */
1977 #define SQLITE_CONFIG_SINGLETHREAD  1  /* nil */
1978 #define SQLITE_CONFIG_MULTITHREAD   2  /* nil */
1979 #define SQLITE_CONFIG_SERIALIZED    3  /* nil */
1980 #define SQLITE_CONFIG_MALLOC        4  /* sqlite3_mem_methods* */
1981 #define SQLITE_CONFIG_GETMALLOC     5  /* sqlite3_mem_methods* */
1982 #define SQLITE_CONFIG_SCRATCH       6  /* void*, int sz, int N */
1983 #define SQLITE_CONFIG_PAGECACHE     7  /* void*, int sz, int N */
1984 #define SQLITE_CONFIG_HEAP          8  /* void*, int nByte, int min */
1985 #define SQLITE_CONFIG_MEMSTATUS     9  /* boolean */
1986 #define SQLITE_CONFIG_MUTEX        10  /* sqlite3_mutex_methods* */
1987 #define SQLITE_CONFIG_GETMUTEX     11  /* sqlite3_mutex_methods* */
1988 /* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ 
1989 #define SQLITE_CONFIG_LOOKASIDE    13  /* int int */
1990 #define SQLITE_CONFIG_PCACHE       14  /* sqlite3_pcache_methods* */
1991 #define SQLITE_CONFIG_GETPCACHE    15  /* sqlite3_pcache_methods* */
1992 #define SQLITE_CONFIG_LOG          16  /* xFunc, void* */
1993
1994 /*
1995 ** CAPI3REF: Database Connection Configuration Options
1996 **
1997 ** These constants are the available integer configuration options that
1998 ** can be passed as the second argument to the [sqlite3_db_config()] interface.
1999 **
2000 ** New configuration options may be added in future releases of SQLite.
2001 ** Existing configuration options might be discontinued.  Applications
2002 ** should check the return code from [sqlite3_db_config()] to make sure that
2003 ** the call worked.  ^The [sqlite3_db_config()] interface will return a
2004 ** non-zero [error code] if a discontinued or unsupported configuration option
2005 ** is invoked.
2006 **
2007 ** <dl>
2008 ** <dt>SQLITE_DBCONFIG_LOOKASIDE</dt>
2009 ** <dd> ^This option takes three additional arguments that determine the 
2010 ** [lookaside memory allocator] configuration for the [database connection].
2011 ** ^The first argument (the third parameter to [sqlite3_db_config()] is a
2012 ** pointer to a memory buffer to use for lookaside memory.
2013 ** ^The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb
2014 ** may be NULL in which case SQLite will allocate the
2015 ** lookaside buffer itself using [sqlite3_malloc()]. ^The second argument is the
2016 ** size of each lookaside buffer slot.  ^The third argument is the number of
2017 ** slots.  The size of the buffer in the first argument must be greater than
2018 ** or equal to the product of the second and third arguments.  The buffer
2019 ** must be aligned to an 8-byte boundary.  ^If the second argument to
2020 ** SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally
2021 ** rounded down to the next smaller multiple of 8.  ^(The lookaside memory
2022 ** configuration for a database connection can only be changed when that
2023 ** connection is not currently using lookaside memory, or in other words
2024 ** when the "current value" returned by
2025 ** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero.
2026 ** Any attempt to change the lookaside memory configuration when lookaside
2027 ** memory is in use leaves the configuration unchanged and returns 
2028 ** [SQLITE_BUSY].)^</dd>
2029 **
2030 ** <dt>SQLITE_DBCONFIG_ENABLE_FKEY</dt>
2031 ** <dd> ^This option is used to enable or disable the enforcement of
2032 ** [foreign key constraints].  There should be two additional arguments.
2033 ** The first argument is an integer which is 0 to disable FK enforcement,
2034 ** positive to enable FK enforcement or negative to leave FK enforcement
2035 ** unchanged.  The second parameter is a pointer to an integer into which
2036 ** is written 0 or 1 to indicate whether FK enforcement is off or on
2037 ** following this call.  The second parameter may be a NULL pointer, in
2038 ** which case the FK enforcement setting is not reported back. </dd>
2039 **
2040 ** <dt>SQLITE_DBCONFIG_ENABLE_TRIGGER</dt>
2041 ** <dd> ^This option is used to enable or disable [CREATE TRIGGER | triggers].
2042 ** There should be two additional arguments.
2043 ** The first argument is an integer which is 0 to disable triggers,
2044 ** positive to enable triggers or negative to leave the setting unchanged.
2045 ** The second parameter is a pointer to an integer into which
2046 ** is written 0 or 1 to indicate whether triggers are disabled or enabled
2047 ** following this call.  The second parameter may be a NULL pointer, in
2048 ** which case the trigger setting is not reported back. </dd>
2049 **
2050 ** </dl>
2051 */
2052 #define SQLITE_DBCONFIG_LOOKASIDE       1001  /* void* int int */
2053 #define SQLITE_DBCONFIG_ENABLE_FKEY     1002  /* int int* */
2054 #define SQLITE_DBCONFIG_ENABLE_TRIGGER  1003  /* int int* */
2055
2056
2057 /*
2058 ** CAPI3REF: Enable Or Disable Extended Result Codes
2059 **
2060 ** ^The sqlite3_extended_result_codes() routine enables or disables the
2061 ** [extended result codes] feature of SQLite. ^The extended result
2062 ** codes are disabled by default for historical compatibility.
2063 */
2064 SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff);
2065
2066 /*
2067 ** CAPI3REF: Last Insert Rowid
2068 **
2069 ** ^Each entry in an SQLite table has a unique 64-bit signed
2070 ** integer key called the [ROWID | "rowid"]. ^The rowid is always available
2071 ** as an undeclared column named ROWID, OID, or _ROWID_ as long as those
2072 ** names are not also used by explicitly declared columns. ^If
2073 ** the table has a column of type [INTEGER PRIMARY KEY] then that column
2074 ** is another alias for the rowid.
2075 **
2076 ** ^This routine returns the [rowid] of the most recent
2077 ** successful [INSERT] into the database from the [database connection]
2078 ** in the first argument.  ^If no successful [INSERT]s
2079 ** have ever occurred on that database connection, zero is returned.
2080 **
2081 ** ^(If an [INSERT] occurs within a trigger, then the [rowid] of the inserted
2082 ** row is returned by this routine as long as the trigger is running.
2083 ** But once the trigger terminates, the value returned by this routine
2084 ** reverts to the last value inserted before the trigger fired.)^
2085 **
2086 ** ^An [INSERT] that fails due to a constraint violation is not a
2087 ** successful [INSERT] and does not change the value returned by this
2088 ** routine.  ^Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK,
2089 ** and INSERT OR ABORT make no changes to the return value of this
2090 ** routine when their insertion fails.  ^(When INSERT OR REPLACE
2091 ** encounters a constraint violation, it does not fail.  The
2092 ** INSERT continues to completion after deleting rows that caused
2093 ** the constraint problem so INSERT OR REPLACE will always change
2094 ** the return value of this interface.)^
2095 **
2096 ** ^For the purposes of this routine, an [INSERT] is considered to
2097 ** be successful even if it is subsequently rolled back.
2098 **
2099 ** This function is accessible to SQL statements via the
2100 ** [last_insert_rowid() SQL function].
2101 **
2102 ** If a separate thread performs a new [INSERT] on the same
2103 ** database connection while the [sqlite3_last_insert_rowid()]
2104 ** function is running and thus changes the last insert [rowid],
2105 ** then the value returned by [sqlite3_last_insert_rowid()] is
2106 ** unpredictable and might not equal either the old or the new
2107 ** last insert [rowid].
2108 */
2109 SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
2110
2111 /*
2112 ** CAPI3REF: Count The Number Of Rows Modified
2113 **
2114 ** ^This function returns the number of database rows that were changed
2115 ** or inserted or deleted by the most recently completed SQL statement
2116 ** on the [database connection] specified by the first parameter.
2117 ** ^(Only changes that are directly specified by the [INSERT], [UPDATE],
2118 ** or [DELETE] statement are counted.  Auxiliary changes caused by
2119 ** triggers or [foreign key actions] are not counted.)^ Use the
2120 ** [sqlite3_total_changes()] function to find the total number of changes
2121 ** including changes caused by triggers and foreign key actions.
2122 **
2123 ** ^Changes to a view that are simulated by an [INSTEAD OF trigger]
2124 ** are not counted.  Only real table changes are counted.
2125 **
2126 ** ^(A "row change" is a change to a single row of a single table
2127 ** caused by an INSERT, DELETE, or UPDATE statement.  Rows that
2128 ** are changed as side effects of [REPLACE] constraint resolution,
2129 ** rollback, ABORT processing, [DROP TABLE], or by any other
2130 ** mechanisms do not count as direct row changes.)^
2131 **
2132 ** A "trigger context" is a scope of execution that begins and
2133 ** ends with the script of a [CREATE TRIGGER | trigger]. 
2134 ** Most SQL statements are
2135 ** evaluated outside of any trigger.  This is the "top level"
2136 ** trigger context.  If a trigger fires from the top level, a
2137 ** new trigger context is entered for the duration of that one
2138 ** trigger.  Subtriggers create subcontexts for their duration.
2139 **
2140 ** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does
2141 ** not create a new trigger context.
2142 **
2143 ** ^This function returns the number of direct row changes in the
2144 ** most recent INSERT, UPDATE, or DELETE statement within the same
2145 ** trigger context.
2146 **
2147 ** ^Thus, when called from the top level, this function returns the
2148 ** number of changes in the most recent INSERT, UPDATE, or DELETE
2149 ** that also occurred at the top level.  ^(Within the body of a trigger,
2150 ** the sqlite3_changes() interface can be called to find the number of
2151 ** changes in the most recently completed INSERT, UPDATE, or DELETE
2152 ** statement within the body of the same trigger.
2153 ** However, the number returned does not include changes
2154 ** caused by subtriggers since those have their own context.)^
2155 **
2156 ** See also the [sqlite3_total_changes()] interface, the
2157 ** [count_changes pragma], and the [changes() SQL function].
2158 **
2159 ** If a separate thread makes changes on the same database connection
2160 ** while [sqlite3_changes()] is running then the value returned
2161 ** is unpredictable and not meaningful.
2162 */
2163 SQLITE_API int sqlite3_changes(sqlite3*);
2164
2165 /*
2166 ** CAPI3REF: Total Number Of Rows Modified
2167 **
2168 ** ^This function returns the number of row changes caused by [INSERT],
2169 ** [UPDATE] or [DELETE] statements since the [database connection] was opened.
2170 ** ^(The count returned by sqlite3_total_changes() includes all changes
2171 ** from all [CREATE TRIGGER | trigger] contexts and changes made by
2172 ** [foreign key actions]. However,
2173 ** the count does not include changes used to implement [REPLACE] constraints,
2174 ** do rollbacks or ABORT processing, or [DROP TABLE] processing.  The
2175 ** count does not include rows of views that fire an [INSTEAD OF trigger],
2176 ** though if the INSTEAD OF trigger makes changes of its own, those changes 
2177 ** are counted.)^
2178 ** ^The sqlite3_total_changes() function counts the changes as soon as
2179 ** the statement that makes them is completed (when the statement handle
2180 ** is passed to [sqlite3_reset()] or [sqlite3_finalize()]).
2181 **
2182 ** See also the [sqlite3_changes()] interface, the
2183 ** [count_changes pragma], and the [total_changes() SQL function].
2184 **
2185 ** If a separate thread makes changes on the same database connection
2186 ** while [sqlite3_total_changes()] is running then the value
2187 ** returned is unpredictable and not meaningful.
2188 */
2189 SQLITE_API int sqlite3_total_changes(sqlite3*);
2190
2191 /*
2192 ** CAPI3REF: Interrupt A Long-Running Query
2193 **
2194 ** ^This function causes any pending database operation to abort and
2195 ** return at its earliest opportunity. This routine is typically
2196 ** called in response to a user action such as pressing "Cancel"
2197 ** or Ctrl-C where the user wants a long query operation to halt
2198 ** immediately.
2199 **
2200 ** ^It is safe to call this routine from a thread different from the
2201 ** thread that is currently running the database operation.  But it
2202 ** is not safe to call this routine with a [database connection] that
2203 ** is closed or might close before sqlite3_interrupt() returns.
2204 **
2205 ** ^If an SQL operation is very nearly finished at the time when
2206 ** sqlite3_interrupt() is called, then it might not have an opportunity
2207 ** to be interrupted and might continue to completion.
2208 **
2209 ** ^An SQL operation that is interrupted will return [SQLITE_INTERRUPT].
2210 ** ^If the interrupted SQL operation is an INSERT, UPDATE, or DELETE
2211 ** that is inside an explicit transaction, then the entire transaction
2212 ** will be rolled back automatically.
2213 **
2214 ** ^The sqlite3_interrupt(D) call is in effect until all currently running
2215 ** SQL statements on [database connection] D complete.  ^Any new SQL statements
2216 ** that are started after the sqlite3_interrupt() call and before the 
2217 ** running statements reaches zero are interrupted as if they had been
2218 ** running prior to the sqlite3_interrupt() call.  ^New SQL statements
2219 ** that are started after the running statement count reaches zero are
2220 ** not effected by the sqlite3_interrupt().
2221 ** ^A call to sqlite3_interrupt(D) that occurs when there are no running
2222 ** SQL statements is a no-op and has no effect on SQL statements
2223 ** that are started after the sqlite3_interrupt() call returns.
2224 **
2225 ** If the database connection closes while [sqlite3_interrupt()]
2226 ** is running then bad things will likely happen.
2227 */
2228 SQLITE_API void sqlite3_interrupt(sqlite3*);
2229
2230 /*
2231 ** CAPI3REF: Determine If An SQL Statement Is Complete
2232 **
2233 ** These routines are useful during command-line input to determine if the
2234 ** currently entered text seems to form a complete SQL statement or
2235 ** if additional input is needed before sending the text into
2236 ** SQLite for parsing.  ^These routines return 1 if the input string
2237 ** appears to be a complete SQL statement.  ^A statement is judged to be
2238 ** complete if it ends with a semicolon token and is not a prefix of a
2239 ** well-formed CREATE TRIGGER statement.  ^Semicolons that are embedded within
2240 ** string literals or quoted identifier names or comments are not
2241 ** independent tokens (they are part of the token in which they are
2242 ** embedded) and thus do not count as a statement terminator.  ^Whitespace
2243 ** and comments that follow the final semicolon are ignored.
2244 **
2245 ** ^These routines return 0 if the statement is incomplete.  ^If a
2246 ** memory allocation fails, then SQLITE_NOMEM is returned.
2247 **
2248 ** ^These routines do not parse the SQL statements thus
2249 ** will not detect syntactically incorrect SQL.
2250 **
2251 ** ^(If SQLite has not been initialized using [sqlite3_initialize()] prior 
2252 ** to invoking sqlite3_complete16() then sqlite3_initialize() is invoked
2253 ** automatically by sqlite3_complete16().  If that initialization fails,
2254 ** then the return value from sqlite3_complete16() will be non-zero
2255 ** regardless of whether or not the input SQL is complete.)^
2256 **
2257 ** The input to [sqlite3_complete()] must be a zero-terminated
2258 ** UTF-8 string.
2259 **
2260 ** The input to [sqlite3_complete16()] must be a zero-terminated
2261 ** UTF-16 string in native byte order.
2262 */
2263 SQLITE_API int sqlite3_complete(const char *sql);
2264 SQLITE_API int sqlite3_complete16(const void *sql);
2265
2266 /*
2267 ** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors
2268 **
2269 ** ^This routine sets a callback function that might be invoked whenever
2270 ** an attempt is made to open a database table that another thread
2271 ** or process has locked.
2272 **
2273 ** ^If the busy callback is NULL, then [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED]
2274 ** is returned immediately upon encountering the lock.  ^If the busy callback
2275 ** is not NULL, then the callback might be invoked with two arguments.
2276 **
2277 ** ^The first argument to the busy handler is a copy of the void* pointer which
2278 ** is the third argument to sqlite3_busy_handler().  ^The second argument to
2279 ** the busy handler callback is the number of times that the busy handler has
2280 ** been invoked for this locking event.  ^If the
2281 ** busy callback returns 0, then no additional attempts are made to
2282 ** access the database and [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] is returned.
2283 ** ^If the callback returns non-zero, then another attempt
2284 ** is made to open the database for reading and the cycle repeats.
2285 **
2286 ** The presence of a busy handler does not guarantee that it will be invoked
2287 ** when there is lock contention. ^If SQLite determines that invoking the busy
2288 ** handler could result in a deadlock, it will go ahead and return [SQLITE_BUSY]
2289 ** or [SQLITE_IOERR_BLOCKED] instead of invoking the busy handler.
2290 ** Consider a scenario where one process is holding a read lock that
2291 ** it is trying to promote to a reserved lock and
2292 ** a second process is holding a reserved lock that it is trying
2293 ** to promote to an exclusive lock.  The first process cannot proceed
2294 ** because it is blocked by the second and the second process cannot
2295 ** proceed because it is blocked by the first.  If both processes
2296 ** invoke the busy handlers, neither will make any progress.  Therefore,
2297 ** SQLite returns [SQLITE_BUSY] for the first process, hoping that this
2298 ** will induce the first process to release its read lock and allow
2299 ** the second process to proceed.
2300 **
2301 ** ^The default busy callback is NULL.
2302 **
2303 ** ^The [SQLITE_BUSY] error is converted to [SQLITE_IOERR_BLOCKED]
2304 ** when SQLite is in the middle of a large transaction where all the
2305 ** changes will not fit into the in-memory cache.  SQLite will
2306 ** already hold a RESERVED lock on the database file, but it needs
2307 ** to promote this lock to EXCLUSIVE so that it can spill cache
2308 ** pages into the database file without harm to concurrent
2309 ** readers.  ^If it is unable to promote the lock, then the in-memory
2310 ** cache will be left in an inconsistent state and so the error
2311 ** code is promoted from the relatively benign [SQLITE_BUSY] to
2312 ** the more severe [SQLITE_IOERR_BLOCKED].  ^This error code promotion
2313 ** forces an automatic rollback of the changes.  See the
2314 ** <a href="/cvstrac/wiki?p=CorruptionFollowingBusyError">
2315 ** CorruptionFollowingBusyError</a> wiki page for a discussion of why
2316 ** this is important.
2317 **
2318 ** ^(There can only be a single busy handler defined for each
2319 ** [database connection].  Setting a new busy handler clears any
2320 ** previously set handler.)^  ^Note that calling [sqlite3_busy_timeout()]
2321 ** will also set or clear the busy handler.
2322 **
2323 ** The busy callback should not take any actions which modify the
2324 ** database connection that invoked the busy handler.  Any such actions
2325 ** result in undefined behavior.
2326 ** 
2327 ** A busy handler must not close the database connection
2328 ** or [prepared statement] that invoked the busy handler.
2329 */
2330 SQLITE_API int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*);
2331
2332 /*
2333 ** CAPI3REF: Set A Busy Timeout
2334 **
2335 ** ^This routine sets a [sqlite3_busy_handler | busy handler] that sleeps
2336 ** for a specified amount of time when a table is locked.  ^The handler
2337 ** will sleep multiple times until at least "ms" milliseconds of sleeping
2338 ** have accumulated.  ^After at least "ms" milliseconds of sleeping,
2339 ** the handler returns 0 which causes [sqlite3_step()] to return
2340 ** [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED].
2341 **
2342 ** ^Calling this routine with an argument less than or equal to zero
2343 ** turns off all busy handlers.
2344 **
2345 ** ^(There can only be a single busy handler for a particular
2346 ** [database connection] any any given moment.  If another busy handler
2347 ** was defined  (using [sqlite3_busy_handler()]) prior to calling
2348 ** this routine, that other busy handler is cleared.)^
2349 */
2350 SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms);
2351
2352 /*
2353 ** CAPI3REF: Convenience Routines For Running Queries
2354 **
2355 ** This is a legacy interface that is preserved for backwards compatibility.
2356 ** Use of this interface is not recommended.
2357 **
2358 ** Definition: A <b>result table</b> is memory data structure created by the
2359 ** [sqlite3_get_table()] interface.  A result table records the
2360 ** complete query results from one or more queries.
2361 **
2362 ** The table conceptually has a number of rows and columns.  But
2363 ** these numbers are not part of the result table itself.  These
2364 ** numbers are obtained separately.  Let N be the number of rows
2365 ** and M be the number of columns.
2366 **
2367 ** A result table is an array of pointers to zero-terminated UTF-8 strings.
2368 ** There are (N+1)*M elements in the array.  The first M pointers point
2369 ** to zero-terminated strings that  contain the names of the columns.
2370 ** The remaining entries all point to query results.  NULL values result
2371 ** in NULL pointers.  All other values are in their UTF-8 zero-terminated
2372 ** string representation as returned by [sqlite3_column_text()].
2373 **
2374 ** A result table might consist of one or more memory allocations.
2375 ** It is not safe to pass a result table directly to [sqlite3_free()].
2376 ** A result table should be deallocated using [sqlite3_free_table()].
2377 **
2378 ** ^(As an example of the result table format, suppose a query result
2379 ** is as follows:
2380 **
2381 ** <blockquote><pre>
2382 **        Name        | Age
2383 **        -----------------------
2384 **        Alice       | 43
2385 **        Bob         | 28
2386 **        Cindy       | 21
2387 ** </pre></blockquote>
2388 **
2389 ** There are two column (M==2) and three rows (N==3).  Thus the
2390 ** result table has 8 entries.  Suppose the result table is stored
2391 ** in an array names azResult.  Then azResult holds this content:
2392 **
2393 ** <blockquote><pre>
2394 **        azResult&#91;0] = "Name";
2395 **        azResult&#91;1] = "Age";
2396 **        azResult&#91;2] = "Alice";
2397 **        azResult&#91;3] = "43";
2398 **        azResult&#91;4] = "Bob";
2399 **        azResult&#91;5] = "28";
2400 **        azResult&#91;6] = "Cindy";
2401 **        azResult&#91;7] = "21";
2402 ** </pre></blockquote>)^
2403 **
2404 ** ^The sqlite3_get_table() function evaluates one or more
2405 ** semicolon-separated SQL statements in the zero-terminated UTF-8
2406 ** string of its 2nd parameter and returns a result table to the
2407 ** pointer given in its 3rd parameter.
2408 **
2409 ** After the application has finished with the result from sqlite3_get_table(),
2410 ** it must pass the result table pointer to sqlite3_free_table() in order to
2411 ** release the memory that was malloced.  Because of the way the
2412 ** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling
2413 ** function must not try to call [sqlite3_free()] directly.  Only
2414 ** [sqlite3_free_table()] is able to release the memory properly and safely.
2415 **
2416 ** The sqlite3_get_table() interface is implemented as a wrapper around
2417 ** [sqlite3_exec()].  The sqlite3_get_table() routine does not have access
2418 ** to any internal data structures of SQLite.  It uses only the public
2419 ** interface defined here.  As a consequence, errors that occur in the
2420 ** wrapper layer outside of the internal [sqlite3_exec()] call are not
2421 ** reflected in subsequent calls to [sqlite3_errcode()] or
2422 ** [sqlite3_errmsg()].
2423 */
2424 SQLITE_API int sqlite3_get_table(
2425   sqlite3 *db,          /* An open database */
2426   const char *zSql,     /* SQL to be evaluated */
2427   char ***pazResult,    /* Results of the query */
2428   int *pnRow,           /* Number of result rows written here */
2429   int *pnColumn,        /* Number of result columns written here */
2430   char **pzErrmsg       /* Error msg written here */
2431 );
2432 SQLITE_API void sqlite3_free_table(char **result);
2433
2434 /*
2435 ** CAPI3REF: Formatted String Printing Functions
2436 **
2437 ** These routines are work-alikes of the "printf()" family of functions
2438 ** from the standard C library.
2439 **
2440 ** ^The sqlite3_mprintf() and sqlite3_vmprintf() routines write their
2441 ** results into memory obtained from [sqlite3_malloc()].
2442 ** The strings returned by these two routines should be
2443 ** released by [sqlite3_free()].  ^Both routines return a
2444 ** NULL pointer if [sqlite3_malloc()] is unable to allocate enough
2445 ** memory to hold the resulting string.
2446 **
2447 ** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from
2448 ** the standard C library.  The result is written into the
2449 ** buffer supplied as the second parameter whose size is given by
2450 ** the first parameter. Note that the order of the
2451 ** first two parameters is reversed from snprintf().)^  This is an
2452 ** historical accident that cannot be fixed without breaking
2453 ** backwards compatibility.  ^(Note also that sqlite3_snprintf()
2454 ** returns a pointer to its buffer instead of the number of
2455 ** characters actually written into the buffer.)^  We admit that
2456 ** the number of characters written would be a more useful return
2457 ** value but we cannot change the implementation of sqlite3_snprintf()
2458 ** now without breaking compatibility.
2459 **
2460 ** ^As long as the buffer size is greater than zero, sqlite3_snprintf()
2461 ** guarantees that the buffer is always zero-terminated.  ^The first
2462 ** parameter "n" is the total size of the buffer, including space for
2463 ** the zero terminator.  So the longest string that can be completely
2464 ** written will be n-1 characters.
2465 **
2466 ** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf().
2467 **
2468 ** These routines all implement some additional formatting
2469 ** options that are useful for constructing SQL statements.
2470 ** All of the usual printf() formatting options apply.  In addition, there
2471 ** is are "%q", "%Q", and "%z" options.
2472 **
2473 ** ^(The %q option works like %s in that it substitutes a null-terminated
2474 ** string from the argument list.  But %q also doubles every '\'' character.
2475 ** %q is designed for use inside a string literal.)^  By doubling each '\''
2476 ** character it escapes that character and allows it to be inserted into
2477 ** the string.
2478 **
2479 ** For example, assume the string variable zText contains text as follows:
2480 **
2481 ** <blockquote><pre>
2482 **  char *zText = "It's a happy day!";
2483 ** </pre></blockquote>
2484 **
2485 ** One can use this text in an SQL statement as follows:
2486 **
2487 ** <blockquote><pre>
2488 **  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES('%q')", zText);
2489 **  sqlite3_exec(db, zSQL, 0, 0, 0);
2490 **  sqlite3_free(zSQL);
2491 ** </pre></blockquote>
2492 **
2493 ** Because the %q format string is used, the '\'' character in zText
2494 ** is escaped and the SQL generated is as follows:
2495 **
2496 ** <blockquote><pre>
2497 **  INSERT INTO table1 VALUES('It''s a happy day!')
2498 ** </pre></blockquote>
2499 **
2500 ** This is correct.  Had we used %s instead of %q, the generated SQL
2501 ** would have looked like this:
2502 **
2503 ** <blockquote><pre>
2504 **  INSERT INTO table1 VALUES('It's a happy day!');
2505 ** </pre></blockquote>
2506 **
2507 ** This second example is an SQL syntax error.  As a general rule you should
2508 ** always use %q instead of %s when inserting text into a string literal.
2509 **
2510 ** ^(The %Q option works like %q except it also adds single quotes around
2511 ** the outside of the total string.  Additionally, if the parameter in the
2512 ** argument list is a NULL pointer, %Q substitutes the text "NULL" (without
2513 ** single quotes).)^  So, for example, one could say:
2514 **
2515 ** <blockquote><pre>
2516 **  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES(%Q)", zText);
2517 **  sqlite3_exec(db, zSQL, 0, 0, 0);
2518 **  sqlite3_free(zSQL);
2519 ** </pre></blockquote>
2520 **
2521 ** The code above will render a correct SQL statement in the zSQL
2522 ** variable even if the zText variable is a NULL pointer.
2523 **
2524 ** ^(The "%z" formatting option works like "%s" but with the
2525 ** addition that after the string has been read and copied into
2526 ** the result, [sqlite3_free()] is called on the input string.)^
2527 */
2528 SQLITE_API char *sqlite3_mprintf(const char*,...);
2529 SQLITE_API char *sqlite3_vmprintf(const char*, va_list);
2530 SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...);
2531 SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
2532
2533 /*
2534 ** CAPI3REF: Memory Allocation Subsystem
2535 **
2536 ** The SQLite core uses these three routines for all of its own
2537 ** internal memory allocation needs. "Core" in the previous sentence
2538 ** does not include operating-system specific VFS implementation.  The
2539 ** Windows VFS uses native malloc() and free() for some operations.
2540 **
2541 ** ^The sqlite3_malloc() routine returns a pointer to a block
2542 ** of memory at least N bytes in length, where N is the parameter.
2543 ** ^If sqlite3_malloc() is unable to obtain sufficient free
2544 ** memory, it returns a NULL pointer.  ^If the parameter N to
2545 ** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns
2546 ** a NULL pointer.
2547 **
2548 ** ^Calling sqlite3_free() with a pointer previously returned
2549 ** by sqlite3_malloc() or sqlite3_realloc() releases that memory so
2550 ** that it might be reused.  ^The sqlite3_free() routine is
2551 ** a no-op if is called with a NULL pointer.  Passing a NULL pointer
2552 ** to sqlite3_free() is harmless.  After being freed, memory
2553 ** should neither be read nor written.  Even reading previously freed
2554 ** memory might result in a segmentation fault or other severe error.
2555 ** Memory corruption, a segmentation fault, or other severe error
2556 ** might result if sqlite3_free() is called with a non-NULL pointer that
2557 ** was not obtained from sqlite3_malloc() or sqlite3_realloc().
2558 **
2559 ** ^(The sqlite3_realloc() interface attempts to resize a
2560 ** prior memory allocation to be at least N bytes, where N is the
2561 ** second parameter.  The memory allocation to be resized is the first
2562 ** parameter.)^ ^ If the first parameter to sqlite3_realloc()
2563 ** is a NULL pointer then its behavior is identical to calling
2564 ** sqlite3_malloc(N) where N is the second parameter to sqlite3_realloc().
2565 ** ^If the second parameter to sqlite3_realloc() is zero or
2566 ** negative then the behavior is exactly the same as calling
2567 ** sqlite3_free(P) where P is the first parameter to sqlite3_realloc().
2568 ** ^sqlite3_realloc() returns a pointer to a memory allocation
2569 ** of at least N bytes in size or NULL if sufficient memory is unavailable.
2570 ** ^If M is the size of the prior allocation, then min(N,M) bytes
2571 ** of the prior allocation are copied into the beginning of buffer returned
2572 ** by sqlite3_realloc() and the prior allocation is freed.
2573 ** ^If sqlite3_realloc() returns NULL, then the prior allocation
2574 ** is not freed.
2575 **
2576 ** ^The memory returned by sqlite3_malloc() and sqlite3_realloc()
2577 ** is always aligned to at least an 8 byte boundary, or to a
2578 ** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time
2579 ** option is used.
2580 **
2581 ** In SQLite version 3.5.0 and 3.5.1, it was possible to define
2582 ** the SQLITE_OMIT_MEMORY_ALLOCATION which would cause the built-in
2583 ** implementation of these routines to be omitted.  That capability
2584 ** is no longer provided.  Only built-in memory allocators can be used.
2585 **
2586 ** The Windows OS interface layer calls
2587 ** the system malloc() and free() directly when converting
2588 ** filenames between the UTF-8 encoding used by SQLite
2589 ** and whatever filename encoding is used by the particular Windows
2590 ** installation.  Memory allocation errors are detected, but
2591 ** they are reported back as [SQLITE_CANTOPEN] or
2592 ** [SQLITE_IOERR] rather than [SQLITE_NOMEM].
2593 **
2594 ** The pointer arguments to [sqlite3_free()] and [sqlite3_realloc()]
2595 ** must be either NULL or else pointers obtained from a prior
2596 ** invocation of [sqlite3_malloc()] or [sqlite3_realloc()] that have
2597 ** not yet been released.
2598 **
2599 ** The application must not read or write any part of
2600 ** a block of memory after it has been released using
2601 ** [sqlite3_free()] or [sqlite3_realloc()].
2602 */
2603 SQLITE_API void *sqlite3_malloc(int);
2604 SQLITE_API void *sqlite3_realloc(void*, int);
2605 SQLITE_API void sqlite3_free(void*);
2606
2607 /*
2608 ** CAPI3REF: Memory Allocator Statistics
2609 **
2610 ** SQLite provides these two interfaces for reporting on the status
2611 ** of the [sqlite3_malloc()], [sqlite3_free()], and [sqlite3_realloc()]
2612 ** routines, which form the built-in memory allocation subsystem.
2613 **
2614 ** ^The [sqlite3_memory_used()] routine returns the number of bytes
2615 ** of memory currently outstanding (malloced but not freed).
2616 ** ^The [sqlite3_memory_highwater()] routine returns the maximum
2617 ** value of [sqlite3_memory_used()] since the high-water mark
2618 ** was last reset.  ^The values returned by [sqlite3_memory_used()] and
2619 ** [sqlite3_memory_highwater()] include any overhead
2620 ** added by SQLite in its implementation of [sqlite3_malloc()],
2621 ** but not overhead added by the any underlying system library
2622 ** routines that [sqlite3_malloc()] may call.
2623 **
2624 ** ^The memory high-water mark is reset to the current value of
2625 ** [sqlite3_memory_used()] if and only if the parameter to
2626 ** [sqlite3_memory_highwater()] is true.  ^The value returned
2627 ** by [sqlite3_memory_highwater(1)] is the high-water mark
2628 ** prior to the reset.
2629 */
2630 SQLITE_API sqlite3_int64 sqlite3_memory_used(void);
2631 SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
2632
2633 /*
2634 ** CAPI3REF: Pseudo-Random Number Generator
2635 **
2636 ** SQLite contains a high-quality pseudo-random number generator (PRNG) used to
2637 ** select random [ROWID | ROWIDs] when inserting new records into a table that
2638 ** already uses the largest possible [ROWID].  The PRNG is also used for
2639 ** the build-in random() and randomblob() SQL functions.  This interface allows
2640 ** applications to access the same PRNG for other purposes.
2641 **
2642 ** ^A call to this routine stores N bytes of randomness into buffer P.
2643 **
2644 ** ^The first time this routine is invoked (either internally or by
2645 ** the application) the PRNG is seeded using randomness obtained
2646 ** from the xRandomness method of the default [sqlite3_vfs] object.
2647 ** ^On all subsequent invocations, the pseudo-randomness is generated
2648 ** internally and without recourse to the [sqlite3_vfs] xRandomness
2649 ** method.
2650 */
2651 SQLITE_API void sqlite3_randomness(int N, void *P);
2652
2653 /*
2654 ** CAPI3REF: Compile-Time Authorization Callbacks
2655 **
2656 ** ^This routine registers an authorizer callback with a particular
2657 ** [database connection], supplied in the first argument.
2658 ** ^The authorizer callback is invoked as SQL statements are being compiled
2659 ** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()],
2660 ** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()].  ^At various
2661 ** points during the compilation process, as logic is being created
2662 ** to perform various actions, the authorizer callback is invoked to
2663 ** see if those actions are allowed.  ^The authorizer callback should
2664 ** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the
2665 ** specific action but allow the SQL statement to continue to be
2666 ** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be
2667 ** rejected with an error.  ^If the authorizer callback returns
2668 ** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY]
2669 ** then the [sqlite3_prepare_v2()] or equivalent call that triggered
2670 ** the authorizer will fail with an error message.
2671 **
2672 ** When the callback returns [SQLITE_OK], that means the operation
2673 ** requested is ok.  ^When the callback returns [SQLITE_DENY], the
2674 ** [sqlite3_prepare_v2()] or equivalent call that triggered the
2675 ** authorizer will fail with an error message explaining that
2676 ** access is denied. 
2677 **
2678 ** ^The first parameter to the authorizer callback is a copy of the third
2679 ** parameter to the sqlite3_set_authorizer() interface. ^The second parameter
2680 ** to the callback is an integer [SQLITE_COPY | action code] that specifies
2681 ** the particular action to be authorized. ^The third through sixth parameters
2682 ** to the callback are zero-terminated strings that contain additional
2683 ** details about the action to be authorized.
2684 **
2685 ** ^If the action code is [SQLITE_READ]
2686 ** and the callback returns [SQLITE_IGNORE] then the
2687 ** [prepared statement] statement is constructed to substitute
2688 ** a NULL value in place of the table column that would have
2689 ** been read if [SQLITE_OK] had been returned.  The [SQLITE_IGNORE]
2690 ** return can be used to deny an untrusted user access to individual
2691 ** columns of a table.
2692 ** ^If the action code is [SQLITE_DELETE] and the callback returns
2693 ** [SQLITE_IGNORE] then the [DELETE] operation proceeds but the
2694 ** [truncate optimization] is disabled and all rows are deleted individually.
2695 **
2696 ** An authorizer is used when [sqlite3_prepare | preparing]
2697 ** SQL statements from an untrusted source, to ensure that the SQL statements
2698 ** do not try to access data they are not allowed to see, or that they do not
2699 ** try to execute malicious statements that damage the database.  For
2700 ** example, an application may allow a user to enter arbitrary
2701 ** SQL queries for evaluation by a database.  But the application does
2702 ** not want the user to be able to make arbitrary changes to the
2703 ** database.  An authorizer could then be put in place while the
2704 ** user-entered SQL is being [sqlite3_prepare | prepared] that
2705 ** disallows everything except [SELECT] statements.
2706 **
2707 ** Applications that need to process SQL from untrusted sources
2708 ** might also consider lowering resource limits using [sqlite3_limit()]
2709 ** and limiting database size using the [max_page_count] [PRAGMA]
2710 ** in addition to using an authorizer.
2711 **
2712 ** ^(Only a single authorizer can be in place on a database connection
2713 ** at a time.  Each call to sqlite3_set_authorizer overrides the
2714 ** previous call.)^  ^Disable the authorizer by installing a NULL callback.
2715 ** The authorizer is disabled by default.
2716 **
2717 ** The authorizer callback must not do anything that will modify
2718 ** the database connection that invoked the authorizer callback.
2719 ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
2720 ** database connections for the meaning of "modify" in this paragraph.
2721 **
2722 ** ^When [sqlite3_prepare_v2()] is used to prepare a statement, the
2723 ** statement might be re-prepared during [sqlite3_step()] due to a 
2724 ** schema change.  Hence, the application should ensure that the
2725 ** correct authorizer callback remains in place during the [sqlite3_step()].
2726 **
2727 ** ^Note that the authorizer callback is invoked only during
2728 ** [sqlite3_prepare()] or its variants.  Authorization is not
2729 ** performed during statement evaluation in [sqlite3_step()], unless
2730 ** as stated in the previous paragraph, sqlite3_step() invokes
2731 ** sqlite3_prepare_v2() to reprepare a statement after a schema change.
2732 */
2733 SQLITE_API int sqlite3_set_authorizer(
2734   sqlite3*,
2735   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
2736   void *pUserData
2737 );
2738
2739 /*
2740 ** CAPI3REF: Authorizer Return Codes
2741 **
2742 ** The [sqlite3_set_authorizer | authorizer callback function] must
2743 ** return either [SQLITE_OK] or one of these two constants in order
2744 ** to signal SQLite whether or not the action is permitted.  See the
2745 ** [sqlite3_set_authorizer | authorizer documentation] for additional
2746 ** information.
2747 */
2748 #define SQLITE_DENY   1   /* Abort the SQL statement with an error */
2749 #define SQLITE_IGNORE 2   /* Don't allow access, but don't generate an error */
2750
2751 /*
2752 ** CAPI3REF: Authorizer Action Codes
2753 **
2754 ** The [sqlite3_set_authorizer()] interface registers a callback function
2755 ** that is invoked to authorize certain SQL statement actions.  The
2756 ** second parameter to the callback is an integer code that specifies
2757 ** what action is being authorized.  These are the integer action codes that
2758 ** the authorizer callback may be passed.
2759 **
2760 ** These action code values signify what kind of operation is to be
2761 ** authorized.  The 3rd and 4th parameters to the authorization
2762 ** callback function will be parameters or NULL depending on which of these
2763 ** codes is used as the second parameter.  ^(The 5th parameter to the
2764 ** authorizer callback is the name of the database ("main", "temp",
2765 ** etc.) if applicable.)^  ^The 6th parameter to the authorizer callback
2766 ** is the name of the inner-most trigger or view that is responsible for
2767 ** the access attempt or NULL if this access attempt is directly from
2768 ** top-level SQL code.
2769 */
2770 /******************************************* 3rd ************ 4th ***********/
2771 #define SQLITE_CREATE_INDEX          1   /* Index Name      Table Name      */
2772 #define SQLITE_CREATE_TABLE          2   /* Table Name      NULL            */
2773 #define SQLITE_CREATE_TEMP_INDEX     3   /* Index Name      Table Name      */
2774 #define SQLITE_CREATE_TEMP_TABLE     4   /* Table Name      NULL            */
2775 #define SQLITE_CREATE_TEMP_TRIGGER   5   /* Trigger Name    Table Name      */
2776 #define SQLITE_CREATE_TEMP_VIEW      6   /* View Name       NULL            */
2777 #define SQLITE_CREATE_TRIGGER        7   /* Trigger Name    Table Name      */
2778 #define SQLITE_CREATE_VIEW           8   /* View Name       NULL            */
2779 #define SQLITE_DELETE                9   /* Table Name      NULL            */
2780 #define SQLITE_DROP_INDEX           10   /* Index Name      Table Name      */
2781 #define SQLITE_DROP_TABLE           11   /* Table Name      NULL            */
2782 #define SQLITE_DROP_TEMP_INDEX      12   /* Index Name      Table Name      */
2783 #define SQLITE_DROP_TEMP_TABLE      13   /* Table Name      NULL            */
2784 #define SQLITE_DROP_TEMP_TRIGGER    14   /* Trigger Name    Table Name      */
2785 #define SQLITE_DROP_TEMP_VIEW       15   /* View Name       NULL            */
2786 #define SQLITE_DROP_TRIGGER         16   /* Trigger Name    Table Name      */
2787 #define SQLITE_DROP_VIEW            17   /* View Name       NULL            */
2788 #define SQLITE_INSERT               18   /* Table Name      NULL            */
2789 #define SQLITE_PRAGMA               19   /* Pragma Name     1st arg or NULL */
2790 #define SQLITE_READ                 20   /* Table Name      Column Name     */
2791 #define SQLITE_SELECT               21   /* NULL            NULL            */
2792 #define SQLITE_TRANSACTION          22   /* Operation       NULL            */
2793 #define SQLITE_UPDATE               23   /* Table Name      Column Name     */
2794 #define SQLITE_ATTACH               24   /* Filename        NULL            */
2795 #define SQLITE_DETACH               25   /* Database Name   NULL            */
2796 #define SQLITE_ALTER_TABLE          26   /* Database Name   Table Name      */
2797 #define SQLITE_REINDEX              27   /* Index Name      NULL            */
2798 #define SQLITE_ANALYZE              28   /* Table Name      NULL            */
2799 #define SQLITE_CREATE_VTABLE        29   /* Table Name      Module Name     */
2800 #define SQLITE_DROP_VTABLE          30   /* Table Name      Module Name     */
2801 #define SQLITE_FUNCTION             31   /* NULL            Function Name   */
2802 #define SQLITE_SAVEPOINT            32   /* Operation       Savepoint Name  */
2803 #define SQLITE_COPY                  0   /* No longer used */
2804
2805 /*
2806 ** CAPI3REF: Tracing And Profiling Functions
2807 **
2808 ** These routines register callback functions that can be used for
2809 ** tracing and profiling the execution of SQL statements.
2810 **
2811 ** ^The callback function registered by sqlite3_trace() is invoked at
2812 ** various times when an SQL statement is being run by [sqlite3_step()].
2813 ** ^The sqlite3_trace() callback is invoked with a UTF-8 rendering of the
2814 ** SQL statement text as the statement first begins executing.
2815 ** ^(Additional sqlite3_trace() callbacks might occur
2816 ** as each triggered subprogram is entered.  The callbacks for triggers
2817 ** contain a UTF-8 SQL comment that identifies the trigger.)^
2818 **
2819 ** ^The callback function registered by sqlite3_profile() is invoked
2820 ** as each SQL statement finishes.  ^The profile callback contains
2821 ** the original statement text and an estimate of wall-clock time
2822 ** of how long that statement took to run.  ^The profile callback
2823 ** time is in units of nanoseconds, however the current implementation
2824 ** is only capable of millisecond resolution so the six least significant
2825 ** digits in the time are meaningless.  Future versions of SQLite
2826 ** might provide greater resolution on the profiler callback.  The
2827 ** sqlite3_profile() function is considered experimental and is
2828 ** subject to change in future versions of SQLite.
2829 */
2830 SQLITE_API void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
2831 SQLITE_API SQLITE_EXPERIMENTAL void *sqlite3_profile(sqlite3*,
2832    void(*xProfile)(void*,const char*,sqlite3_uint64), void*);
2833
2834 /*
2835 ** CAPI3REF: Query Progress Callbacks
2836 **
2837 ** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback
2838 ** function X to be invoked periodically during long running calls to
2839 ** [sqlite3_exec()], [sqlite3_step()] and [sqlite3_get_table()] for
2840 ** database connection D.  An example use for this
2841 ** interface is to keep a GUI updated during a large query.
2842 **
2843 ** ^The parameter P is passed through as the only parameter to the 
2844 ** callback function X.  ^The parameter N is the number of 
2845 ** [virtual machine instructions] that are evaluated between successive
2846 ** invocations of the callback X.
2847 **
2848 ** ^Only a single progress handler may be defined at one time per
2849 ** [database connection]; setting a new progress handler cancels the
2850 ** old one.  ^Setting parameter X to NULL disables the progress handler.
2851 ** ^The progress handler is also disabled by setting N to a value less
2852 ** than 1.
2853 **
2854 ** ^If the progress callback returns non-zero, the operation is
2855 ** interrupted.  This feature can be used to implement a
2856 ** "Cancel" button on a GUI progress dialog box.
2857 **
2858 ** The progress handler callback must not do anything that will modify
2859 ** the database connection that invoked the progress handler.
2860 ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
2861 ** database connections for the meaning of "modify" in this paragraph.
2862 **
2863 */
2864 SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
2865
2866 /*
2867 ** CAPI3REF: Opening A New Database Connection
2868 **
2869 ** ^These routines open an SQLite database file whose name is given by the
2870 ** filename argument. ^The filename argument is interpreted as UTF-8 for
2871 ** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte
2872 ** order for sqlite3_open16(). ^(A [database connection] handle is usually
2873 ** returned in *ppDb, even if an error occurs.  The only exception is that
2874 ** if SQLite is unable to allocate memory to hold the [sqlite3] object,
2875 ** a NULL will be written into *ppDb instead of a pointer to the [sqlite3]
2876 ** object.)^ ^(If the database is opened (and/or created) successfully, then
2877 ** [SQLITE_OK] is returned.  Otherwise an [error code] is returned.)^ ^The
2878 ** [sqlite3_errmsg()] or [sqlite3_errmsg16()] routines can be used to obtain
2879 ** an English language description of the error following a failure of any
2880 ** of the sqlite3_open() routines.
2881 **
2882 ** ^The default encoding for the database will be UTF-8 if
2883 ** sqlite3_open() or sqlite3_open_v2() is called and
2884 ** UTF-16 in the native byte order if sqlite3_open16() is used.
2885 **
2886 ** Whether or not an error occurs when it is opened, resources
2887 ** associated with the [database connection] handle should be released by
2888 ** passing it to [sqlite3_close()] when it is no longer required.
2889 **
2890 ** The sqlite3_open_v2() interface works like sqlite3_open()
2891 ** except that it accepts two additional parameters for additional control
2892 ** over the new database connection.  ^(The flags parameter to
2893 ** sqlite3_open_v2() can take one of
2894 ** the following three values, optionally combined with the 
2895 ** [SQLITE_OPEN_NOMUTEX], [SQLITE_OPEN_FULLMUTEX], [SQLITE_OPEN_SHAREDCACHE],
2896 ** and/or [SQLITE_OPEN_PRIVATECACHE] flags:)^
2897 **
2898 ** <dl>
2899 ** ^(<dt>[SQLITE_OPEN_READONLY]</dt>
2900 ** <dd>The database is opened in read-only mode.  If the database does not
2901 ** already exist, an error is returned.</dd>)^
2902 **
2903 ** ^(<dt>[SQLITE_OPEN_READWRITE]</dt>
2904 ** <dd>The database is opened for reading and writing if possible, or reading
2905 ** only if the file is write protected by the operating system.  In either
2906 ** case the database must already exist, otherwise an error is returned.</dd>)^
2907 **
2908 ** ^(<dt>[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]</dt>
2909 ** <dd>The database is opened for reading and writing, and is created if
2910 ** it does not already exist. This is the behavior that is always used for
2911 ** sqlite3_open() and sqlite3_open16().</dd>)^
2912 ** </dl>
2913 **
2914 ** If the 3rd parameter to sqlite3_open_v2() is not one of the
2915 ** combinations shown above or one of the combinations shown above combined
2916 ** with the [SQLITE_OPEN_NOMUTEX], [SQLITE_OPEN_FULLMUTEX],
2917 ** [SQLITE_OPEN_SHAREDCACHE] and/or [SQLITE_OPEN_PRIVATECACHE] flags,
2918 ** then the behavior is undefined.
2919 **
2920 ** ^If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection
2921 ** opens in the multi-thread [threading mode] as long as the single-thread
2922 ** mode has not been set at compile-time or start-time.  ^If the
2923 ** [SQLITE_OPEN_FULLMUTEX] flag is set then the database connection opens
2924 ** in the serialized [threading mode] unless single-thread was
2925 ** previously selected at compile-time or start-time.
2926 ** ^The [SQLITE_OPEN_SHAREDCACHE] flag causes the database connection to be
2927 ** eligible to use [shared cache mode], regardless of whether or not shared
2928 ** cache is enabled using [sqlite3_enable_shared_cache()].  ^The
2929 ** [SQLITE_OPEN_PRIVATECACHE] flag causes the database connection to not
2930 ** participate in [shared cache mode] even if it is enabled.
2931 **
2932 ** ^If the filename is ":memory:", then a private, temporary in-memory database
2933 ** is created for the connection.  ^This in-memory database will vanish when
2934 ** the database connection is closed.  Future versions of SQLite might
2935 ** make use of additional special filenames that begin with the ":" character.
2936 ** It is recommended that when a database filename actually does begin with
2937 ** a ":" character you should prefix the filename with a pathname such as
2938 ** "./" to avoid ambiguity.
2939 **
2940 ** ^If the filename is an empty string, then a private, temporary
2941 ** on-disk database will be created.  ^This private database will be
2942 ** automatically deleted as soon as the database connection is closed.
2943 **
2944 ** ^The fourth parameter to sqlite3_open_v2() is the name of the
2945 ** [sqlite3_vfs] object that defines the operating system interface that
2946 ** the new database connection should use.  ^If the fourth parameter is
2947 ** a NULL pointer then the default [sqlite3_vfs] object is used.
2948 **
2949 ** <b>Note to Windows users:</b>  The encoding used for the filename argument
2950 ** of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever
2951 ** codepage is currently defined.  Filenames containing international
2952 ** characters must be converted to UTF-8 prior to passing them into
2953 ** sqlite3_open() or sqlite3_open_v2().
2954 */
2955 SQLITE_API int sqlite3_open(
2956   const char *filename,   /* Database filename (UTF-8) */
2957   sqlite3 **ppDb          /* OUT: SQLite db handle */
2958 );
2959 SQLITE_API int sqlite3_open16(
2960   const void *filename,   /* Database filename (UTF-16) */
2961   sqlite3 **ppDb          /* OUT: SQLite db handle */
2962 );
2963 SQLITE_API int sqlite3_open_v2(
2964   const char *filename,   /* Database filename (UTF-8) */
2965   sqlite3 **ppDb,         /* OUT: SQLite db handle */
2966   int flags,              /* Flags */
2967   const char *zVfs        /* Name of VFS module to use */
2968 );
2969
2970 /*
2971 ** CAPI3REF: Error Codes And Messages
2972 **
2973 ** ^The sqlite3_errcode() interface returns the numeric [result code] or
2974 ** [extended result code] for the most recent failed sqlite3_* API call
2975 ** associated with a [database connection]. If a prior API call failed
2976 ** but the most recent API call succeeded, the return value from
2977 ** sqlite3_errcode() is undefined.  ^The sqlite3_extended_errcode()
2978 ** interface is the same except that it always returns the 
2979 ** [extended result code] even when extended result codes are
2980 ** disabled.
2981 **
2982 ** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language
2983 ** text that describes the error, as either UTF-8 or UTF-16 respectively.
2984 ** ^(Memory to hold the error message string is managed internally.
2985 ** The application does not need to worry about freeing the result.
2986 ** However, the error string might be overwritten or deallocated by
2987 ** subsequent calls to other SQLite interface functions.)^
2988 **
2989 ** When the serialized [threading mode] is in use, it might be the
2990 ** case that a second error occurs on a separate thread in between
2991 ** the time of the first error and the call to these interfaces.
2992 ** When that happens, the second error will be reported since these
2993 ** interfaces always report the most recent result.  To avoid
2994 ** this, each thread can obtain exclusive use of the [database connection] D
2995 ** by invoking [sqlite3_mutex_enter]([sqlite3_db_mutex](D)) before beginning
2996 ** to use D and invoking [sqlite3_mutex_leave]([sqlite3_db_mutex](D)) after
2997 ** all calls to the interfaces listed here are completed.
2998 **
2999 ** If an interface fails with SQLITE_MISUSE, that means the interface
3000 ** was invoked incorrectly by the application.  In that case, the
3001 ** error code and message may or may not be set.
3002 */
3003 SQLITE_API int sqlite3_errcode(sqlite3 *db);
3004 SQLITE_API int sqlite3_extended_errcode(sqlite3 *db);
3005 SQLITE_API const char *sqlite3_errmsg(sqlite3*);
3006 SQLITE_API const void *sqlite3_errmsg16(sqlite3*);
3007
3008 /*
3009 ** CAPI3REF: SQL Statement Object
3010 ** KEYWORDS: {prepared statement} {prepared statements}
3011 **
3012 ** An instance of this object represents a single SQL statement.
3013 ** This object is variously known as a "prepared statement" or a
3014 ** "compiled SQL statement" or simply as a "statement".
3015 **
3016 ** The life of a statement object goes something like this:
3017 **
3018 ** <ol>
3019 ** <li> Create the object using [sqlite3_prepare_v2()] or a related
3020 **      function.
3021 ** <li> Bind values to [host parameters] using the sqlite3_bind_*()
3022 **      interfaces.
3023 ** <li> Run the SQL by calling [sqlite3_step()] one or more times.
3024 ** <li> Reset the statement using [sqlite3_reset()] then go back
3025 **      to step 2.  Do this zero or more times.
3026 ** <li> Destroy the object using [sqlite3_finalize()].
3027 ** </ol>
3028 **
3029 ** Refer to documentation on individual methods above for additional
3030 ** information.
3031 */
3032 typedef struct sqlite3_stmt sqlite3_stmt;
3033
3034 /*
3035 ** CAPI3REF: Run-time Limits
3036 **
3037 ** ^(This interface allows the size of various constructs to be limited
3038 ** on a connection by connection basis.  The first parameter is the
3039 ** [database connection] whose limit is to be set or queried.  The
3040 ** second parameter is one of the [limit categories] that define a
3041 ** class of constructs to be size limited.  The third parameter is the
3042 ** new limit for that construct.)^
3043 **
3044 ** ^If the new limit is a negative number, the limit is unchanged.
3045 ** ^(For each limit category SQLITE_LIMIT_<i>NAME</i> there is a 
3046 ** [limits | hard upper bound]
3047 ** set at compile-time by a C preprocessor macro called
3048 ** [limits | SQLITE_MAX_<i>NAME</i>].
3049 ** (The "_LIMIT_" in the name is changed to "_MAX_".))^
3050 ** ^Attempts to increase a limit above its hard upper bound are
3051 ** silently truncated to the hard upper bound.
3052 **
3053 ** ^Regardless of whether or not the limit was changed, the 
3054 ** [sqlite3_limit()] interface returns the prior value of the limit.
3055 ** ^Hence, to find the current value of a limit without changing it,
3056 ** simply invoke this interface with the third parameter set to -1.
3057 **
3058 ** Run-time limits are intended for use in applications that manage
3059 ** both their own internal database and also databases that are controlled
3060 ** by untrusted external sources.  An example application might be a
3061 ** web browser that has its own databases for storing history and
3062 ** separate databases controlled by JavaScript applications downloaded
3063 ** off the Internet.  The internal databases can be given the
3064 ** large, default limits.  Databases managed by external sources can
3065 ** be given much smaller limits designed to prevent a denial of service
3066 ** attack.  Developers might also want to use the [sqlite3_set_authorizer()]
3067 ** interface to further control untrusted SQL.  The size of the database
3068 ** created by an untrusted script can be contained using the
3069 ** [max_page_count] [PRAGMA].
3070 **
3071 ** New run-time limit categories may be added in future releases.
3072 */
3073 SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
3074
3075 /*
3076 ** CAPI3REF: Run-Time Limit Categories
3077 ** KEYWORDS: {limit category} {*limit categories}
3078 **
3079 ** These constants define various performance limits
3080 ** that can be lowered at run-time using [sqlite3_limit()].
3081 ** The synopsis of the meanings of the various limits is shown below.
3082 ** Additional information is available at [limits | Limits in SQLite].
3083 **
3084 ** <dl>
3085 ** ^(<dt>SQLITE_LIMIT_LENGTH</dt>
3086 ** <dd>The maximum size of any string or BLOB or table row, in bytes.<dd>)^
3087 **
3088 ** ^(<dt>SQLITE_LIMIT_SQL_LENGTH</dt>
3089 ** <dd>The maximum length of an SQL statement, in bytes.</dd>)^
3090 **
3091 ** ^(<dt>SQLITE_LIMIT_COLUMN</dt>
3092 ** <dd>The maximum number of columns in a table definition or in the
3093 ** result set of a [SELECT] or the maximum number of columns in an index
3094 ** or in an ORDER BY or GROUP BY clause.</dd>)^
3095 **
3096 ** ^(<dt>SQLITE_LIMIT_EXPR_DEPTH</dt>
3097 ** <dd>The maximum depth of the parse tree on any expression.</dd>)^
3098 **
3099 ** ^(<dt>SQLITE_LIMIT_COMPOUND_SELECT</dt>
3100 ** <dd>The maximum number of terms in a compound SELECT statement.</dd>)^
3101 **
3102 ** ^(<dt>SQLITE_LIMIT_VDBE_OP</dt>
3103 ** <dd>The maximum number of instructions in a virtual machine program
3104 ** used to implement an SQL statement.  This limit is not currently
3105 ** enforced, though that might be added in some future release of
3106 ** SQLite.</dd>)^
3107 **
3108 ** ^(<dt>SQLITE_LIMIT_FUNCTION_ARG</dt>
3109 ** <dd>The maximum number of arguments on a function.</dd>)^
3110 **
3111 ** ^(<dt>SQLITE_LIMIT_ATTACHED</dt>
3112 ** <dd>The maximum number of [ATTACH | attached databases].)^</dd>
3113 **
3114 ** ^(<dt>SQLITE_LIMIT_LIKE_PATTERN_LENGTH</dt>
3115 ** <dd>The maximum length of the pattern argument to the [LIKE] or
3116 ** [GLOB] operators.</dd>)^
3117 **
3118 ** ^(<dt>SQLITE_LIMIT_VARIABLE_NUMBER</dt>
3119 ** <dd>The maximum index number of any [parameter] in an SQL statement.)^
3120 **
3121 ** ^(<dt>SQLITE_LIMIT_TRIGGER_DEPTH</dt>
3122 ** <dd>The maximum depth of recursion for triggers.</dd>)^
3123 ** </dl>
3124 */
3125 #define SQLITE_LIMIT_LENGTH                    0
3126 #define SQLITE_LIMIT_SQL_LENGTH                1
3127 #define SQLITE_LIMIT_COLUMN                    2
3128 #define SQLITE_LIMIT_EXPR_DEPTH                3
3129 #define SQLITE_LIMIT_COMPOUND_SELECT           4
3130 #define SQLITE_LIMIT_VDBE_OP                   5
3131 #define SQLITE_LIMIT_FUNCTION_ARG              6
3132 #define SQLITE_LIMIT_ATTACHED                  7
3133 #define SQLITE_LIMIT_LIKE_PATTERN_LENGTH       8
3134 #define SQLITE_LIMIT_VARIABLE_NUMBER           9
3135 #define SQLITE_LIMIT_TRIGGER_DEPTH            10
3136
3137 /*
3138 ** CAPI3REF: Compiling An SQL Statement
3139 ** KEYWORDS: {SQL statement compiler}
3140 **
3141 ** To execute an SQL query, it must first be compiled into a byte-code
3142 ** program using one of these routines.
3143 **
3144 ** The first argument, "db", is a [database connection] obtained from a
3145 ** prior successful call to [sqlite3_open()], [sqlite3_open_v2()] or
3146 ** [sqlite3_open16()].  The database connection must not have been closed.
3147 **
3148 ** The second argument, "zSql", is the statement to be compiled, encoded
3149 ** as either UTF-8 or UTF-16.  The sqlite3_prepare() and sqlite3_prepare_v2()
3150 ** interfaces use UTF-8, and sqlite3_prepare16() and sqlite3_prepare16_v2()
3151 ** use UTF-16.
3152 **
3153 ** ^If the nByte argument is less than zero, then zSql is read up to the
3154 ** first zero terminator. ^If nByte is non-negative, then it is the maximum
3155 ** number of  bytes read from zSql.  ^When nByte is non-negative, the
3156 ** zSql string ends at either the first '\000' or '\u0000' character or
3157 ** the nByte-th byte, whichever comes first. If the caller knows
3158 ** that the supplied string is nul-terminated, then there is a small
3159 ** performance advantage to be gained by passing an nByte parameter that
3160 ** is equal to the number of bytes in the input string <i>including</i>
3161 ** the nul-terminator bytes.
3162 **
3163 ** ^If pzTail is not NULL then *pzTail is made to point to the first byte
3164 ** past the end of the first SQL statement in zSql.  These routines only
3165 ** compile the first statement in zSql, so *pzTail is left pointing to
3166 ** what remains uncompiled.
3167 **
3168 ** ^*ppStmt is left pointing to a compiled [prepared statement] that can be
3169 ** executed using [sqlite3_step()].  ^If there is an error, *ppStmt is set
3170 ** to NULL.  ^If the input text contains no SQL (if the input is an empty
3171 ** string or a comment) then *ppStmt is set to NULL.
3172 ** The calling procedure is responsible for deleting the compiled
3173 ** SQL statement using [sqlite3_finalize()] after it has finished with it.
3174 ** ppStmt may not be NULL.
3175 **
3176 ** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK];
3177 ** otherwise an [error code] is returned.
3178 **
3179 ** The sqlite3_prepare_v2() and sqlite3_prepare16_v2() interfaces are
3180 ** recommended for all new programs. The two older interfaces are retained
3181 ** for backwards compatibility, but their use is discouraged.
3182 ** ^In the "v2" interfaces, the prepared statement
3183 ** that is returned (the [sqlite3_stmt] object) contains a copy of the
3184 ** original SQL text. This causes the [sqlite3_step()] interface to
3185 ** behave differently in three ways:
3186 **
3187 ** <ol>
3188 ** <li>
3189 ** ^If the database schema changes, instead of returning [SQLITE_SCHEMA] as it
3190 ** always used to do, [sqlite3_step()] will automatically recompile the SQL
3191 ** statement and try to run it again.
3192 ** </li>
3193 **
3194 ** <li>
3195 ** ^When an error occurs, [sqlite3_step()] will return one of the detailed
3196 ** [error codes] or [extended error codes].  ^The legacy behavior was that
3197 ** [sqlite3_step()] would only return a generic [SQLITE_ERROR] result code
3198 ** and the application would have to make a second call to [sqlite3_reset()]
3199 ** in order to find the underlying cause of the problem. With the "v2" prepare
3200 ** interfaces, the underlying reason for the error is returned immediately.
3201 ** </li>
3202 **
3203 ** <li>
3204 ** ^If the specific value bound to [parameter | host parameter] in the 
3205 ** WHERE clause might influence the choice of query plan for a statement,
3206 ** then the statement will be automatically recompiled, as if there had been 
3207 ** a schema change, on the first  [sqlite3_step()] call following any change
3208 ** to the [sqlite3_bind_text | bindings] of that [parameter]. 
3209 ** ^The specific value of WHERE-clause [parameter] might influence the 
3210 ** choice of query plan if the parameter is the left-hand side of a [LIKE]
3211 ** or [GLOB] operator or if the parameter is compared to an indexed column
3212 ** and the [SQLITE_ENABLE_STAT2] compile-time option is enabled.
3213 ** the 
3214 ** </li>
3215 ** </ol>
3216 */
3217 SQLITE_API int sqlite3_prepare(
3218   sqlite3 *db,            /* Database handle */
3219   const char *zSql,       /* SQL statement, UTF-8 encoded */
3220   int nByte,              /* Maximum length of zSql in bytes. */
3221   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
3222   const char **pzTail     /* OUT: Pointer to unused portion of zSql */
3223 );
3224 SQLITE_API int sqlite3_prepare_v2(
3225   sqlite3 *db,            /* Database handle */
3226   const char *zSql,       /* SQL statement, UTF-8 encoded */
3227   int nByte,              /* Maximum length of zSql in bytes. */
3228   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
3229   const char **pzTail     /* OUT: Pointer to unused portion of zSql */
3230 );
3231 SQLITE_API int sqlite3_prepare16(
3232   sqlite3 *db,            /* Database handle */
3233   const void *zSql,       /* SQL statement, UTF-16 encoded */
3234   int nByte,              /* Maximum length of zSql in bytes. */
3235   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
3236   const void **pzTail     /* OUT: Pointer to unused portion of zSql */
3237 );
3238 SQLITE_API int sqlite3_prepare16_v2(
3239   sqlite3 *db,            /* Database handle */
3240   const void *zSql,       /* SQL statement, UTF-16 encoded */
3241   int nByte,              /* Maximum length of zSql in bytes. */
3242   sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
3243   const void **pzTail     /* OUT: Pointer to unused portion of zSql */
3244 );
3245
3246 /*
3247 ** CAPI3REF: Retrieving Statement SQL
3248 **
3249 ** ^This interface can be used to retrieve a saved copy of the original
3250 ** SQL text used to create a [prepared statement] if that statement was
3251 ** compiled using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()].
3252 */
3253 SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt);
3254
3255 /*
3256 ** CAPI3REF: Determine If An SQL Statement Writes The Database
3257 **
3258 ** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if
3259 ** and only if the [prepared statement] X makes no direct changes to
3260 ** the content of the database file.
3261 **
3262 ** Note that [application-defined SQL functions] or
3263 ** [virtual tables] might change the database indirectly as a side effect.  
3264 ** ^(For example, if an application defines a function "eval()" that 
3265 ** calls [sqlite3_exec()], then the following SQL statement would
3266 ** change the database file through side-effects:
3267 **
3268 ** <blockquote><pre>
3269 **    SELECT eval('DELETE FROM t1') FROM t2;
3270 ** </pre></blockquote>
3271 **
3272 ** But because the [SELECT] statement does not change the database file
3273 ** directly, sqlite3_stmt_readonly() would still return true.)^
3274 **
3275 ** ^Transaction control statements such as [BEGIN], [COMMIT], [ROLLBACK],
3276 ** [SAVEPOINT], and [RELEASE] cause sqlite3_stmt_readonly() to return true,
3277 ** since the statements themselves do not actually modify the database but
3278 ** rather they control the timing of when other statements modify the 
3279 ** database.  ^The [ATTACH] and [DETACH] statements also cause
3280 ** sqlite3_stmt_readonly() to return true since, while those statements
3281 ** change the configuration of a database connection, they do not make 
3282 ** changes to the content of the database files on disk.
3283 */
3284 SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
3285
3286 /*
3287 ** CAPI3REF: Dynamically Typed Value Object
3288 ** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value}
3289 **
3290 ** SQLite uses the sqlite3_value object to represent all values
3291 ** that can be stored in a database table. SQLite uses dynamic typing
3292 ** for the values it stores.  ^Values stored in sqlite3_value objects
3293 ** can be integers, floating point values, strings, BLOBs, or NULL.
3294 **
3295 ** An sqlite3_value object may be either "protected" or "unprotected".
3296 ** Some interfaces require a protected sqlite3_value.  Other interfaces
3297 ** will accept either a protected or an unprotected sqlite3_value.
3298 ** Every interface that accepts sqlite3_value arguments specifies
3299 ** whether or not it requires a protected sqlite3_value.
3300 **
3301 ** The terms "protected" and "unprotected" refer to whether or not
3302 ** a mutex is held.  An internal mutex is held for a protected
3303 ** sqlite3_value object but no mutex is held for an unprotected
3304 ** sqlite3_value object.  If SQLite is compiled to be single-threaded
3305 ** (with [SQLITE_THREADSAFE=0] and with [sqlite3_threadsafe()] returning 0)
3306 ** or if SQLite is run in one of reduced mutex modes 
3307 ** [SQLITE_CONFIG_SINGLETHREAD] or [SQLITE_CONFIG_MULTITHREAD]
3308 ** then there is no distinction between protected and unprotected
3309 ** sqlite3_value objects and they can be used interchangeably.  However,
3310 ** for maximum code portability it is recommended that applications
3311 ** still make the distinction between protected and unprotected
3312 ** sqlite3_value objects even when not strictly required.
3313 **
3314 ** ^The sqlite3_value objects that are passed as parameters into the
3315 ** implementation of [application-defined SQL functions] are protected.
3316 ** ^The sqlite3_value object returned by
3317 ** [sqlite3_column_value()] is unprotected.
3318 ** Unprotected sqlite3_value objects may only be used with
3319 ** [sqlite3_result_value()] and [sqlite3_bind_value()].
3320 ** The [sqlite3_value_blob | sqlite3_value_type()] family of
3321 ** interfaces require protected sqlite3_value objects.
3322 */
3323 typedef struct Mem sqlite3_value;
3324
3325 /*
3326 ** CAPI3REF: SQL Function Context Object
3327 **
3328 ** The context in which an SQL function executes is stored in an
3329 ** sqlite3_context object.  ^A pointer to an sqlite3_context object
3330 ** is always first parameter to [application-defined SQL functions].
3331 ** The application-defined SQL function implementation will pass this
3332 ** pointer through into calls to [sqlite3_result_int | sqlite3_result()],
3333 ** [sqlite3_aggregate_context()], [sqlite3_user_data()],
3334 ** [sqlite3_context_db_handle()], [sqlite3_get_auxdata()],
3335 ** and/or [sqlite3_set_auxdata()].
3336 */
3337 typedef struct sqlite3_context sqlite3_context;
3338
3339 /*
3340 ** CAPI3REF: Binding Values To Prepared Statements
3341 ** KEYWORDS: {host parameter} {host parameters} {host parameter name}
3342 ** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding}
3343 **
3344 ** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants,
3345 ** literals may be replaced by a [parameter] that matches one of following
3346 ** templates:
3347 **
3348 ** <ul>
3349 ** <li>  ?
3350 ** <li>  ?NNN
3351 ** <li>  :VVV
3352 ** <li>  @VVV
3353 ** <li>  $VVV
3354 ** </ul>
3355 **
3356 ** In the templates above, NNN represents an integer literal,
3357 ** and VVV represents an alphanumeric identifier.)^  ^The values of these
3358 ** parameters (also called "host parameter names" or "SQL parameters")
3359 ** can be set using the sqlite3_bind_*() routines defined here.
3360 **
3361 ** ^The first argument to the sqlite3_bind_*() routines is always
3362 ** a pointer to the [sqlite3_stmt] object returned from
3363 ** [sqlite3_prepare_v2()] or its variants.
3364 **
3365 ** ^The second argument is the index of the SQL parameter to be set.
3366 ** ^The leftmost SQL parameter has an index of 1.  ^When the same named
3367 ** SQL parameter is used more than once, second and subsequent
3368 ** occurrences have the same index as the first occurrence.
3369 ** ^The index for named parameters can be looked up using the
3370 ** [sqlite3_bind_parameter_index()] API if desired.  ^The index
3371 ** for "?NNN" parameters is the value of NNN.
3372 ** ^The NNN value must be between 1 and the [sqlite3_limit()]
3373 ** parameter [SQLITE_LIMIT_VARIABLE_NUMBER] (default value: 999).
3374 **
3375 ** ^The third argument is the value to bind to the parameter.
3376 **
3377 ** ^(In those routines that have a fourth argument, its value is the
3378 ** number of bytes in the parameter.  To be clear: the value is the
3379 ** number of <u>bytes</u> in the value, not the number of characters.)^
3380 ** ^If the fourth parameter is negative, the length of the string is
3381 ** the number of bytes up to the first zero terminator.
3382 **
3383 ** ^The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and
3384 ** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or
3385 ** string after SQLite has finished with it.  ^The destructor is called
3386 ** to dispose of the BLOB or string even if the call to sqlite3_bind_blob(),
3387 ** sqlite3_bind_text(), or sqlite3_bind_text16() fails.  
3388 ** ^If the fifth argument is
3389 ** the special value [SQLITE_STATIC], then SQLite assumes that the
3390 ** information is in static, unmanaged space and does not need to be freed.
3391 ** ^If the fifth argument has the value [SQLITE_TRANSIENT], then
3392 ** SQLite makes its own private copy of the data immediately, before
3393 ** the sqlite3_bind_*() routine returns.
3394 **
3395 ** ^The sqlite3_bind_zeroblob() routine binds a BLOB of length N that
3396 ** is filled with zeroes.  ^A zeroblob uses a fixed amount of memory
3397 ** (just an integer to hold its size) while it is being processed.
3398 ** Zeroblobs are intended to serve as placeholders for BLOBs whose
3399 ** content is later written using
3400 ** [sqlite3_blob_open | incremental BLOB I/O] routines.
3401 ** ^A negative value for the zeroblob results in a zero-length BLOB.
3402 **
3403 ** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer
3404 ** for the [prepared statement] or with a prepared statement for which
3405 ** [sqlite3_step()] has been called more recently than [sqlite3_reset()],
3406 ** then the call will return [SQLITE_MISUSE].  If any sqlite3_bind_()
3407 ** routine is passed a [prepared statement] that has been finalized, the
3408 ** result is undefined and probably harmful.
3409 **
3410 ** ^Bindings are not cleared by the [sqlite3_reset()] routine.
3411 ** ^Unbound parameters are interpreted as NULL.
3412 **
3413 ** ^The sqlite3_bind_* routines return [SQLITE_OK] on success or an
3414 ** [error code] if anything goes wrong.
3415 ** ^[SQLITE_RANGE] is returned if the parameter
3416 ** index is out of range.  ^[SQLITE_NOMEM] is returned if malloc() fails.
3417 **
3418 ** See also: [sqlite3_bind_parameter_count()],
3419 ** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()].
3420 */
3421 SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
3422 SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double);
3423 SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int);
3424 SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
3425 SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int);
3426 SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
3427 SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*));
3428 SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
3429 SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);
3430
3431 /*
3432 ** CAPI3REF: Number Of SQL Parameters
3433 **
3434 ** ^This routine can be used to find the number of [SQL parameters]
3435 ** in a [prepared statement].  SQL parameters are tokens of the
3436 ** form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as
3437 ** placeholders for values that are [sqlite3_bind_blob | bound]
3438 ** to the parameters at a later time.
3439 **
3440 ** ^(This routine actually returns the index of the largest (rightmost)
3441 ** parameter. For all forms except ?NNN, this will correspond to the
3442 ** number of unique parameters.  If parameters of the ?NNN form are used,
3443 ** there may be gaps in the list.)^
3444 **
3445 ** See also: [sqlite3_bind_blob|sqlite3_bind()],
3446 ** [sqlite3_bind_parameter_name()], and
3447 ** [sqlite3_bind_parameter_index()].
3448 */
3449 SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*);
3450
3451 /*
3452 ** CAPI3REF: Name Of A Host Parameter
3453 **
3454 ** ^The sqlite3_bind_parameter_name(P,N) interface returns
3455 ** the name of the N-th [SQL parameter] in the [prepared statement] P.
3456 ** ^(SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA"
3457 ** have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA"
3458 ** respectively.
3459 ** In other words, the initial ":" or "$" or "@" or "?"
3460 ** is included as part of the name.)^
3461 ** ^Parameters of the form "?" without a following integer have no name
3462 ** and are referred to as "nameless" or "anonymous parameters".
3463 **
3464 ** ^The first host parameter has an index of 1, not 0.
3465 **
3466 ** ^If the value N is out of range or if the N-th parameter is
3467 ** nameless, then NULL is returned.  ^The returned string is
3468 ** always in UTF-8 encoding even if the named parameter was
3469 ** originally specified as UTF-16 in [sqlite3_prepare16()] or
3470 ** [sqlite3_prepare16_v2()].
3471 **
3472 ** See also: [sqlite3_bind_blob|sqlite3_bind()],
3473 ** [sqlite3_bind_parameter_count()], and
3474 ** [sqlite3_bind_parameter_index()].
3475 */
3476 SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int);
3477
3478 /*
3479 ** CAPI3REF: Index Of A Parameter With A Given Name
3480 **
3481 ** ^Return the index of an SQL parameter given its name.  ^The
3482 ** index value returned is suitable for use as the second
3483 ** parameter to [sqlite3_bind_blob|sqlite3_bind()].  ^A zero
3484 ** is returned if no matching parameter is found.  ^The parameter
3485 ** name must be given in UTF-8 even if the original statement
3486 ** was prepared from UTF-16 text using [sqlite3_prepare16_v2()].
3487 **
3488 ** See also: [sqlite3_bind_blob|sqlite3_bind()],
3489 ** [sqlite3_bind_parameter_count()], and
3490 ** [sqlite3_bind_parameter_index()].
3491 */
3492 SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName);
3493
3494 /*
3495 ** CAPI3REF: Reset All Bindings On A Prepared Statement
3496 **
3497 ** ^Contrary to the intuition of many, [sqlite3_reset()] does not reset
3498 ** the [sqlite3_bind_blob | bindings] on a [prepared statement].
3499 ** ^Use this routine to reset all host parameters to NULL.
3500 */
3501 SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*);
3502
3503 /*
3504 ** CAPI3REF: Number Of Columns In A Result Set
3505 **
3506 ** ^Return the number of columns in the result set returned by the
3507 ** [prepared statement]. ^This routine returns 0 if pStmt is an SQL
3508 ** statement that does not return data (for example an [UPDATE]).
3509 **
3510 ** See also: [sqlite3_data_count()]
3511 */
3512 SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt);
3513
3514 /*
3515 ** CAPI3REF: Column Names In A Result Set
3516 **
3517 ** ^These routines return the name assigned to a particular column
3518 ** in the result set of a [SELECT] statement.  ^The sqlite3_column_name()
3519 ** interface returns a pointer to a zero-terminated UTF-8 string
3520 ** and sqlite3_column_name16() returns a pointer to a zero-terminated
3521 ** UTF-16 string.  ^The first parameter is the [prepared statement]
3522 ** that implements the [SELECT] statement. ^The second parameter is the
3523 ** column number.  ^The leftmost column is number 0.
3524 **
3525 ** ^The returned string pointer is valid until either the [prepared statement]
3526 ** is destroyed by [sqlite3_finalize()] or until the statement is automatically
3527 ** reprepared by the first call to [sqlite3_step()] for a particular run
3528 ** or until the next call to
3529 ** sqlite3_column_name() or sqlite3_column_name16() on the same column.
3530 **
3531 ** ^If sqlite3_malloc() fails during the processing of either routine
3532 ** (for example during a conversion from UTF-8 to UTF-16) then a
3533 ** NULL pointer is returned.
3534 **
3535 ** ^The name of a result column is the value of the "AS" clause for
3536 ** that column, if there is an AS clause.  If there is no AS clause
3537 ** then the name of the column is unspecified and may change from
3538 ** one release of SQLite to the next.
3539 */
3540 SQLITE_API const char *sqlite3_column_name(sqlite3_stmt*, int N);
3541 SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N);
3542
3543 /*
3544 ** CAPI3REF: Source Of Data In A Query Result
3545 **
3546 ** ^These routines provide a means to determine the database, table, and
3547 ** table column that is the origin of a particular result column in
3548 ** [SELECT] statement.
3549 ** ^The name of the database or table or column can be returned as
3550 ** either a UTF-8 or UTF-16 string.  ^The _database_ routines return
3551 ** the database name, the _table_ routines return the table name, and
3552 ** the origin_ routines return the column name.
3553 ** ^The returned string is valid until the [prepared statement] is destroyed
3554 ** using [sqlite3_finalize()] or until the statement is automatically
3555 ** reprepared by the first call to [sqlite3_step()] for a particular run
3556 ** or until the same information is requested
3557 ** again in a different encoding.
3558 **
3559 ** ^The names returned are the original un-aliased names of the
3560 ** database, table, and column.
3561 **
3562 ** ^The first argument to these interfaces is a [prepared statement].
3563 ** ^These functions return information about the Nth result column returned by
3564 ** the statement, where N is the second function argument.
3565 ** ^The left-most column is column 0 for these routines.
3566 **
3567 ** ^If the Nth column returned by the statement is an expression or
3568 ** subquery and is not a column value, then all of these functions return
3569 ** NULL.  ^These routine might also return NULL if a memory allocation error
3570 ** occurs.  ^Otherwise, they return the name of the attached database, table,
3571 ** or column that query result column was extracted from.
3572 **
3573 ** ^As with all other SQLite APIs, those whose names end with "16" return
3574 ** UTF-16 encoded strings and the other functions return UTF-8.
3575 **
3576 ** ^These APIs are only available if the library was compiled with the
3577 ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol.
3578 **
3579 ** If two or more threads call one or more of these routines against the same
3580 ** prepared statement and column at the same time then the results are
3581 ** undefined.
3582 **
3583 ** If two or more threads call one or more
3584 ** [sqlite3_column_database_name | column metadata interfaces]
3585 ** for the same [prepared statement] and result column
3586 ** at the same time then the results are undefined.
3587 */
3588 SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt*,int);
3589 SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt*,int);
3590 SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt*,int);
3591 SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt*,int);
3592 SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt*,int);
3593 SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt*,int);
3594
3595 /*
3596 ** CAPI3REF: Declared Datatype Of A Query Result
3597 **
3598 ** ^(The first parameter is a [prepared statement].
3599 ** If this statement is a [SELECT] statement and the Nth column of the
3600 ** returned result set of that [SELECT] is a table column (not an
3601 ** expression or subquery) then the declared type of the table
3602 ** column is returned.)^  ^If the Nth column of the result set is an
3603 ** expression or subquery, then a NULL pointer is returned.
3604 ** ^The returned string is always UTF-8 encoded.
3605 **
3606 ** ^(For example, given the database schema:
3607 **
3608 ** CREATE TABLE t1(c1 VARIANT);
3609 **
3610 ** and the following statement to be compiled:
3611 **
3612 ** SELECT c1 + 1, c1 FROM t1;
3613 **
3614 ** this routine would return the string "VARIANT" for the second result
3615 ** column (i==1), and a NULL pointer for the first result column (i==0).)^
3616 **
3617 ** ^SQLite uses dynamic run-time typing.  ^So just because a column
3618 ** is declared to contain a particular type does not mean that the
3619 ** data stored in that column is of the declared type.  SQLite is
3620 ** strongly typed, but the typing is dynamic not static.  ^Type
3621 ** is associated with individual values, not with the containers
3622 ** used to hold those values.
3623 */
3624 SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt*,int);
3625 SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
3626
3627 /*
3628 ** CAPI3REF: Evaluate An SQL Statement
3629 **
3630 ** After a [prepared statement] has been prepared using either
3631 ** [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] or one of the legacy
3632 ** interfaces [sqlite3_prepare()] or [sqlite3_prepare16()], this function
3633 ** must be called one or more times to evaluate the statement.
3634 **
3635 ** The details of the behavior of the sqlite3_step() interface depend
3636 ** on whether the statement was prepared using the newer "v2" interface
3637 ** [sqlite3_prepare_v2()] and [sqlite3_prepare16_v2()] or the older legacy
3638 ** interface [sqlite3_prepare()] and [sqlite3_prepare16()].  The use of the
3639 ** new "v2" interface is recommended for new applications but the legacy
3640 ** interface will continue to be supported.
3641 **
3642 ** ^In the legacy interface, the return value will be either [SQLITE_BUSY],
3643 ** [SQLITE_DONE], [SQLITE_ROW], [SQLITE_ERROR], or [SQLITE_MISUSE].
3644 ** ^With the "v2" interface, any of the other [result codes] or
3645 ** [extended result codes] might be returned as well.
3646 **
3647 ** ^[SQLITE_BUSY] means that the database engine was unable to acquire the
3648 ** database locks it needs to do its job.  ^If the statement is a [COMMIT]
3649 ** or occurs outside of an explicit transaction, then you can retry the
3650 ** statement.  If the statement is not a [COMMIT] and occurs within a
3651 ** explicit transaction then you should rollback the transaction before
3652 ** continuing.
3653 **
3654 ** ^[SQLITE_DONE] means that the statement has finished executing
3655 ** successfully.  sqlite3_step() should not be called again on this virtual
3656 ** machine without first calling [sqlite3_reset()] to reset the virtual
3657 ** machine back to its initial state.
3658 **
3659 ** ^If the SQL statement being executed returns any data, then [SQLITE_ROW]
3660 ** is returned each time a new row of data is ready for processing by the
3661 ** caller. The values may be accessed using the [column access functions].
3662 ** sqlite3_step() is called again to retrieve the next row of data.
3663 **
3664 ** ^[SQLITE_ERROR] means that a run-time error (such as a constraint
3665 ** violation) has occurred.  sqlite3_step() should not be called again on
3666 ** the VM. More information may be found by calling [sqlite3_errmsg()].
3667 ** ^With the legacy interface, a more specific error code (for example,
3668 ** [SQLITE_INTERRUPT], [SQLITE_SCHEMA], [SQLITE_CORRUPT], and so forth)
3669 ** can be obtained by calling [sqlite3_reset()] on the
3670 ** [prepared statement].  ^In the "v2" interface,
3671 ** the more specific error code is returned directly by sqlite3_step().
3672 **
3673 ** [SQLITE_MISUSE] means that the this routine was called inappropriately.
3674 ** Perhaps it was called on a [prepared statement] that has
3675 ** already been [sqlite3_finalize | finalized] or on one that had
3676 ** previously returned [SQLITE_ERROR] or [SQLITE_DONE].  Or it could
3677 ** be the case that the same database connection is being used by two or
3678 ** more threads at the same moment in time.
3679 **
3680 ** For all versions of SQLite up to and including 3.6.23.1, a call to
3681 ** [sqlite3_reset()] was required after sqlite3_step() returned anything
3682 ** other than [SQLITE_ROW] before any subsequent invocation of
3683 ** sqlite3_step().  Failure to reset the prepared statement using 
3684 ** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from
3685 ** sqlite3_step().  But after version 3.6.23.1, sqlite3_step() began
3686 ** calling [sqlite3_reset()] automatically in this circumstance rather
3687 ** than returning [SQLITE_MISUSE].  This is not considered a compatibility
3688 ** break because any application that ever receives an SQLITE_MISUSE error
3689 ** is broken by definition.  The [SQLITE_OMIT_AUTORESET] compile-time option
3690 ** can be used to restore the legacy behavior.
3691 **
3692 ** <b>Goofy Interface Alert:</b> In the legacy interface, the sqlite3_step()
3693 ** API always returns a generic error code, [SQLITE_ERROR], following any
3694 ** error other than [SQLITE_BUSY] and [SQLITE_MISUSE].  You must call
3695 ** [sqlite3_reset()] or [sqlite3_finalize()] in order to find one of the
3696 ** specific [error codes] that better describes the error.
3697 ** We admit that this is a goofy design.  The problem has been fixed
3698 ** with the "v2" interface.  If you prepare all of your SQL statements
3699 ** using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] instead
3700 ** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces,
3701 ** then the more specific [error codes] are returned directly
3702 ** by sqlite3_step().  The use of the "v2" interface is recommended.
3703 */
3704 SQLITE_API int sqlite3_step(sqlite3_stmt*);
3705
3706 /*
3707 ** CAPI3REF: Number of columns in a result set
3708 **
3709 ** ^The sqlite3_data_count(P) interface returns the number of columns in the
3710 ** current row of the result set of [prepared statement] P.
3711 ** ^If prepared statement P does not have results ready to return
3712 ** (via calls to the [sqlite3_column_int | sqlite3_column_*()] of
3713 ** interfaces) then sqlite3_data_count(P) returns 0.
3714 ** ^The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer.
3715 **
3716 ** See also: [sqlite3_column_count()]
3717 */
3718 SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt);
3719
3720 /*
3721 ** CAPI3REF: Fundamental Datatypes
3722 ** KEYWORDS: SQLITE_TEXT
3723 **
3724 ** ^(Every value in SQLite has one of five fundamental datatypes:
3725 **
3726 ** <ul>
3727 ** <li> 64-bit signed integer
3728 ** <li> 64-bit IEEE floating point number
3729 ** <li> string
3730 ** <li> BLOB
3731 ** <li> NULL
3732 ** </ul>)^
3733 **
3734 ** These constants are codes for each of those types.
3735 **
3736 ** Note that the SQLITE_TEXT constant was also used in SQLite version 2
3737 ** for a completely different meaning.  Software that links against both
3738 ** SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT, not
3739 ** SQLITE_TEXT.
3740 */
3741 #define SQLITE_INTEGER  1
3742 #define SQLITE_FLOAT    2
3743 #define SQLITE_BLOB     4
3744 #define SQLITE_NULL     5
3745 #ifdef SQLITE_TEXT
3746 # undef SQLITE_TEXT
3747 #else
3748 # define SQLITE_TEXT     3
3749 #endif
3750 #define SQLITE3_TEXT     3
3751
3752 /*
3753 ** CAPI3REF: Result Values From A Query
3754 ** KEYWORDS: {column access functions}
3755 **
3756 ** These routines form the "result set" interface.
3757 **
3758 ** ^These routines return information about a single column of the current
3759 ** result row of a query.  ^In every case the first argument is a pointer
3760 ** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*]
3761 ** that was returned from [sqlite3_prepare_v2()] or one of its variants)
3762 ** and the second argument is the index of the column for which information
3763 ** should be returned. ^The leftmost column of the result set has the index 0.
3764 ** ^The number of columns in the result can be determined using
3765 ** [sqlite3_column_count()].
3766 **
3767 ** If the SQL statement does not currently point to a valid row, or if the
3768 ** column index is out of range, the result is undefined.
3769 ** These routines may only be called when the most recent call to
3770 ** [sqlite3_step()] has returned [SQLITE_ROW] and neither
3771 ** [sqlite3_reset()] nor [sqlite3_finalize()] have been called subsequently.
3772 ** If any of these routines are called after [sqlite3_reset()] or
3773 ** [sqlite3_finalize()] or after [sqlite3_step()] has returned
3774 ** something other than [SQLITE_ROW], the results are undefined.
3775 ** If [sqlite3_step()] or [sqlite3_reset()] or [sqlite3_finalize()]
3776 ** are called from a different thread while any of these routines
3777 ** are pending, then the results are undefined.
3778 **
3779 ** ^The sqlite3_column_type() routine returns the
3780 ** [SQLITE_INTEGER | datatype code] for the initial data type
3781 ** of the result column.  ^The returned value is one of [SQLITE_INTEGER],
3782 ** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL].  The value
3783 ** returned by sqlite3_column_type() is only meaningful if no type
3784 ** conversions have occurred as described below.  After a type conversion,
3785 ** the value returned by sqlite3_column_type() is undefined.  Future
3786 ** versions of SQLite may change the behavior of sqlite3_column_type()
3787 ** following a type conversion.
3788 **
3789 ** ^If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes()
3790 ** routine returns the number of bytes in that BLOB or string.
3791 ** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts
3792 ** the string to UTF-8 and then returns the number of bytes.
3793 ** ^If the result is a numeric value then sqlite3_column_bytes() uses
3794 ** [sqlite3_snprintf()] to convert that value to a UTF-8 string and returns
3795 ** the number of bytes in that string.
3796 ** ^If the result is NULL, then sqlite3_column_bytes() returns zero.
3797 **
3798 ** ^If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16()
3799 ** routine returns the number of bytes in that BLOB or string.
3800 ** ^If the result is a UTF-8 string, then sqlite3_column_bytes16() converts
3801 ** the string to UTF-16 and then returns the number of bytes.
3802 ** ^If the result is a numeric value then sqlite3_column_bytes16() uses
3803 ** [sqlite3_snprintf()] to convert that value to a UTF-16 string and returns
3804 ** the number of bytes in that string.
3805 ** ^If the result is NULL, then sqlite3_column_bytes16() returns zero.
3806 **
3807 ** ^The values returned by [sqlite3_column_bytes()] and 
3808 ** [sqlite3_column_bytes16()] do not include the zero terminators at the end
3809 ** of the string.  ^For clarity: the values returned by
3810 ** [sqlite3_column_bytes()] and [sqlite3_column_bytes16()] are the number of
3811 ** bytes in the string, not the number of characters.
3812 **
3813 ** ^Strings returned by sqlite3_column_text() and sqlite3_column_text16(),
3814 ** even empty strings, are always zero terminated.  ^The return
3815 ** value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer.
3816 **
3817 ** ^The object returned by [sqlite3_column_value()] is an
3818 ** [unprotected sqlite3_value] object.  An unprotected sqlite3_value object
3819 ** may only be used with [sqlite3_bind_value()] and [sqlite3_result_value()].
3820 ** If the [unprotected sqlite3_value] object returned by
3821 ** [sqlite3_column_value()] is used in any other way, including calls
3822 ** to routines like [sqlite3_value_int()], [sqlite3_value_text()],
3823 ** or [sqlite3_value_bytes()], then the behavior is undefined.
3824 **
3825 ** These routines attempt to convert the value where appropriate.  ^For
3826 ** example, if the internal representation is FLOAT and a text result
3827 ** is requested, [sqlite3_snprintf()] is used internally to perform the
3828 ** conversion automatically.  ^(The following table details the conversions
3829 ** that are applied:
3830 **
3831 ** <blockquote>
3832 ** <table border="1">
3833 ** <tr><th> Internal<br>Type <th> Requested<br>Type <th>  Conversion
3834 **
3835 ** <tr><td>  NULL    <td> INTEGER   <td> Result is 0
3836 ** <tr><td>  NULL    <td>  FLOAT    <td> Result is 0.0
3837 ** <tr><td>  NULL    <td>   TEXT    <td> Result is NULL pointer
3838 ** <tr><td>  NULL    <td>   BLOB    <td> Result is NULL pointer
3839 ** <tr><td> INTEGER  <td>  FLOAT    <td> Convert from integer to float
3840 ** <tr><td> INTEGER  <td>   TEXT    <td> ASCII rendering of the integer
3841 ** <tr><td> INTEGER  <td>   BLOB    <td> Same as INTEGER->TEXT
3842 ** <tr><td>  FLOAT   <td> INTEGER   <td> Convert from float to integer
3843 ** <tr><td>  FLOAT   <td>   TEXT    <td> ASCII rendering of the float
3844 ** <tr><td>  FLOAT   <td>   BLOB    <td> Same as FLOAT->TEXT
3845 ** <tr><td>  TEXT    <td> INTEGER   <td> Use atoi()
3846 ** <tr><td>  TEXT    <td>  FLOAT    <td> Use atof()
3847 ** <tr><td>  TEXT    <td>   BLOB    <td> No change
3848 ** <tr><td>  BLOB    <td> INTEGER   <td> Convert to TEXT then use atoi()
3849 ** <tr><td>  BLOB    <td>  FLOAT    <td> Convert to TEXT then use atof()
3850 ** <tr><td>  BLOB    <td>   TEXT    <td> Add a zero terminator if needed
3851 ** </table>
3852 ** </blockquote>)^
3853 **
3854 ** The table above makes reference to standard C library functions atoi()
3855 ** and atof().  SQLite does not really use these functions.  It has its
3856 ** own equivalent internal routines.  The atoi() and atof() names are
3857 ** used in the table for brevity and because they are familiar to most
3858 ** C programmers.
3859 **
3860 ** Note that when type conversions occur, pointers returned by prior
3861 ** calls to sqlite3_column_blob(), sqlite3_column_text(), and/or
3862 ** sqlite3_column_text16() may be invalidated.
3863 ** Type conversions and pointer invalidations might occur
3864 ** in the following cases:
3865 **
3866 ** <ul>
3867 ** <li> The initial content is a BLOB and sqlite3_column_text() or
3868 **      sqlite3_column_text16() is called.  A zero-terminator might
3869 **      need to be added to the string.</li>
3870 ** <li> The initial content is UTF-8 text and sqlite3_column_bytes16() or
3871 **      sqlite3_column_text16() is called.  The content must be converted
3872 **      to UTF-16.</li>
3873 ** <li> The initial content is UTF-16 text and sqlite3_column_bytes() or
3874 **      sqlite3_column_text() is called.  The content must be converted
3875 **      to UTF-8.</li>
3876 ** </ul>
3877 **
3878 ** ^Conversions between UTF-16be and UTF-16le are always done in place and do
3879 ** not invalidate a prior pointer, though of course the content of the buffer
3880 ** that the prior pointer references will have been modified.  Other kinds
3881 ** of conversion are done in place when it is possible, but sometimes they
3882 ** are not possible and in those cases prior pointers are invalidated.
3883 **
3884 ** The safest and easiest to remember policy is to invoke these routines
3885 ** in one of the following ways:
3886 **
3887 ** <ul>
3888 **  <li>sqlite3_column_text() followed by sqlite3_column_bytes()</li>
3889 **  <li>sqlite3_column_blob() followed by sqlite3_column_bytes()</li>
3890 **  <li>sqlite3_column_text16() followed by sqlite3_column_bytes16()</li>
3891 ** </ul>
3892 **
3893 ** In other words, you should call sqlite3_column_text(),
3894 ** sqlite3_column_blob(), or sqlite3_column_text16() first to force the result
3895 ** into the desired format, then invoke sqlite3_column_bytes() or
3896 ** sqlite3_column_bytes16() to find the size of the result.  Do not mix calls
3897 ** to sqlite3_column_text() or sqlite3_column_blob() with calls to
3898 ** sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16()
3899 ** with calls to sqlite3_column_bytes().
3900 **
3901 ** ^The pointers returned are valid until a type conversion occurs as
3902 ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or
3903 ** [sqlite3_finalize()] is called.  ^The memory space used to hold strings
3904 ** and BLOBs is freed automatically.  Do <b>not</b> pass the pointers returned
3905 ** [sqlite3_column_blob()], [sqlite3_column_text()], etc. into
3906 ** [sqlite3_free()].
3907 **
3908 ** ^(If a memory allocation error occurs during the evaluation of any
3909 ** of these routines, a default value is returned.  The default value
3910 ** is either the integer 0, the floating point number 0.0, or a NULL
3911 ** pointer.  Subsequent calls to [sqlite3_errcode()] will return
3912 ** [SQLITE_NOMEM].)^
3913 */
3914 SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
3915 SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
3916 SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
3917 SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol);
3918 SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol);
3919 SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
3920 SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
3921 SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
3922 SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol);
3923 SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);
3924
3925 /*
3926 ** CAPI3REF: Destroy A Prepared Statement Object
3927 **
3928 ** ^The sqlite3_finalize() function is called to delete a [prepared statement].
3929 ** ^If the most recent evaluation of the statement encountered no errors or
3930 ** or if the statement is never been evaluated, then sqlite3_finalize() returns
3931 ** SQLITE_OK.  ^If the most recent evaluation of statement S failed, then
3932 ** sqlite3_finalize(S) returns the appropriate [error code] or
3933 ** [extended error code].
3934 **
3935 ** ^The sqlite3_finalize(S) routine can be called at any point during
3936 ** the life cycle of [prepared statement] S:
3937 ** before statement S is ever evaluated, after
3938 ** one or more calls to [sqlite3_reset()], or after any call
3939 ** to [sqlite3_step()] regardless of whether or not the statement has
3940 ** completed execution.
3941 **
3942 ** ^Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op.
3943 **
3944 ** The application must finalize every [prepared statement] in order to avoid
3945 ** resource leaks.  It is a grievous error for the application to try to use
3946 ** a prepared statement after it has been finalized.  Any use of a prepared
3947 ** statement after it has been finalized can result in undefined and
3948 ** undesirable behavior such as segfaults and heap corruption.
3949 */
3950 SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);
3951
3952 /*
3953 ** CAPI3REF: Reset A Prepared Statement Object
3954 **
3955 ** The sqlite3_reset() function is called to reset a [prepared statement]
3956 ** object back to its initial state, ready to be re-executed.
3957 ** ^Any SQL statement variables that had values bound to them using
3958 ** the [sqlite3_bind_blob | sqlite3_bind_*() API] retain their values.
3959 ** Use [sqlite3_clear_bindings()] to reset the bindings.
3960 **
3961 ** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S
3962 ** back to the beginning of its program.
3963 **
3964 ** ^If the most recent call to [sqlite3_step(S)] for the
3965 ** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE],
3966 ** or if [sqlite3_step(S)] has never before been called on S,
3967 ** then [sqlite3_reset(S)] returns [SQLITE_OK].
3968 **
3969 ** ^If the most recent call to [sqlite3_step(S)] for the
3970 ** [prepared statement] S indicated an error, then
3971 ** [sqlite3_reset(S)] returns an appropriate [error code].
3972 **
3973 ** ^The [sqlite3_reset(S)] interface does not change the values
3974 ** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S.
3975 */
3976 SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
3977
3978 /*
3979 ** CAPI3REF: Create Or Redefine SQL Functions
3980 ** KEYWORDS: {function creation routines}
3981 ** KEYWORDS: {application-defined SQL function}
3982 ** KEYWORDS: {application-defined SQL functions}
3983 **
3984 ** ^These functions (collectively known as "function creation routines")
3985 ** are used to add SQL functions or aggregates or to redefine the behavior
3986 ** of existing SQL functions or aggregates.  The only differences between
3987 ** these routines are the text encoding expected for
3988 ** the second parameter (the name of the function being created)
3989 ** and the presence or absence of a destructor callback for
3990 ** the application data pointer.
3991 **
3992 ** ^The first parameter is the [database connection] to which the SQL
3993 ** function is to be added.  ^If an application uses more than one database
3994 ** connection then application-defined SQL functions must be added
3995 ** to each database connection separately.
3996 **
3997 ** ^The second parameter is the name of the SQL function to be created or
3998 ** redefined.  ^The length of the name is limited to 255 bytes in a UTF-8
3999 ** representation, exclusive of the zero-terminator.  ^Note that the name
4000 ** length limit is in UTF-8 bytes, not characters nor UTF-16 bytes.  
4001 ** ^Any attempt to create a function with a longer name
4002 ** will result in [SQLITE_MISUSE] being returned.
4003 **
4004 ** ^The third parameter (nArg)
4005 ** is the number of arguments that the SQL function or
4006 ** aggregate takes. ^If this parameter is -1, then the SQL function or
4007 ** aggregate may take any number of arguments between 0 and the limit
4008 ** set by [sqlite3_limit]([SQLITE_LIMIT_FUNCTION_ARG]).  If the third
4009 ** parameter is less than -1 or greater than 127 then the behavior is
4010 ** undefined.
4011 **
4012 ** ^The fourth parameter, eTextRep, specifies what
4013 ** [SQLITE_UTF8 | text encoding] this SQL function prefers for
4014 ** its parameters.  Every SQL function implementation must be able to work
4015 ** with UTF-8, UTF-16le, or UTF-16be.  But some implementations may be
4016 ** more efficient with one encoding than another.  ^An application may
4017 ** invoke sqlite3_create_function() or sqlite3_create_function16() multiple
4018 ** times with the same function but with different values of eTextRep.
4019 ** ^When multiple implementations of the same function are available, SQLite
4020 ** will pick the one that involves the least amount of data conversion.
4021 ** If there is only a single implementation which does not care what text
4022 ** encoding is used, then the fourth argument should be [SQLITE_ANY].
4023 **
4024 ** ^(The fifth parameter is an arbitrary pointer.  The implementation of the
4025 ** function can gain access to this pointer using [sqlite3_user_data()].)^
4026 **
4027 ** ^The sixth, seventh and eighth parameters, xFunc, xStep and xFinal, are
4028 ** pointers to C-language functions that implement the SQL function or
4029 ** aggregate. ^A scalar SQL function requires an implementation of the xFunc
4030 ** callback only; NULL pointers must be passed as the xStep and xFinal
4031 ** parameters. ^An aggregate SQL function requires an implementation of xStep
4032 ** and xFinal and NULL pointer must be passed for xFunc. ^To delete an existing
4033 ** SQL function or aggregate, pass NULL pointers for all three function
4034 ** callbacks.
4035 **
4036 ** ^(If the ninth parameter to sqlite3_create_function_v2() is not NULL,
4037 ** then it is destructor for the application data pointer. 
4038 ** The destructor is invoked when the function is deleted, either by being
4039 ** overloaded or when the database connection closes.)^
4040 ** ^The destructor is also invoked if the call to
4041 ** sqlite3_create_function_v2() fails.
4042 ** ^When the destructor callback of the tenth parameter is invoked, it
4043 ** is passed a single argument which is a copy of the application data 
4044 ** pointer which was the fifth parameter to sqlite3_create_function_v2().
4045 **
4046 ** ^It is permitted to register multiple implementations of the same
4047 ** functions with the same name but with either differing numbers of
4048 ** arguments or differing preferred text encodings.  ^SQLite will use
4049 ** the implementation that most closely matches the way in which the
4050 ** SQL function is used.  ^A function implementation with a non-negative
4051 ** nArg parameter is a better match than a function implementation with
4052 ** a negative nArg.  ^A function where the preferred text encoding
4053 ** matches the database encoding is a better
4054 ** match than a function where the encoding is different.  
4055 ** ^A function where the encoding difference is between UTF16le and UTF16be
4056 ** is a closer match than a function where the encoding difference is
4057 ** between UTF8 and UTF16.
4058 **
4059 ** ^Built-in functions may be overloaded by new application-defined functions.
4060 **
4061 ** ^An application-defined function is permitted to call other
4062 ** SQLite interfaces.  However, such calls must not
4063 ** close the database connection nor finalize or reset the prepared
4064 ** statement in which the function is running.
4065 */
4066 SQLITE_API int sqlite3_create_function(
4067   sqlite3 *db,
4068   const char *zFunctionName,
4069   int nArg,
4070   int eTextRep,
4071   void *pApp,
4072   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
4073   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
4074   void (*xFinal)(sqlite3_context*)
4075 );
4076 SQLITE_API int sqlite3_create_function16(
4077   sqlite3 *db,
4078   const void *zFunctionName,
4079   int nArg,
4080   int eTextRep,
4081   void *pApp,
4082   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
4083   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
4084   void (*xFinal)(sqlite3_context*)
4085 );
4086 SQLITE_API int sqlite3_create_function_v2(
4087   sqlite3 *db,
4088   const char *zFunctionName,
4089   int nArg,
4090   int eTextRep,
4091   void *pApp,
4092   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
4093   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
4094   void (*xFinal)(sqlite3_context*),
4095   void(*xDestroy)(void*)
4096 );
4097
4098 /*
4099 ** CAPI3REF: Text Encodings
4100 **
4101 ** These constant define integer codes that represent the various
4102 ** text encodings supported by SQLite.
4103 */
4104 #define SQLITE_UTF8           1
4105 #define SQLITE_UTF16LE        2
4106 #define SQLITE_UTF16BE        3
4107 #define SQLITE_UTF16          4    /* Use native byte order */
4108 #define SQLITE_ANY            5    /* sqlite3_create_function only */
4109 #define SQLITE_UTF16_ALIGNED  8    /* sqlite3_create_collation only */
4110
4111 /*
4112 ** CAPI3REF: Deprecated Functions
4113 ** DEPRECATED
4114 **
4115 ** These functions are [deprecated].  In order to maintain
4116 ** backwards compatibility with older code, these functions continue 
4117 ** to be supported.  However, new applications should avoid
4118 ** the use of these functions.  To help encourage people to avoid
4119 ** using these functions, we are not going to tell you what they do.
4120 */
4121 #ifndef SQLITE_OMIT_DEPRECATED
4122 SQLITE_API SQLITE_DEPRECATED int sqlite3_aggregate_count(sqlite3_context*);
4123 SQLITE_API SQLITE_DEPRECATED int sqlite3_expired(sqlite3_stmt*);
4124 SQLITE_API SQLITE_DEPRECATED int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*);
4125 SQLITE_API SQLITE_DEPRECATED int sqlite3_global_recover(void);
4126 SQLITE_API SQLITE_DEPRECATED void sqlite3_thread_cleanup(void);
4127 SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),void*,sqlite3_int64);
4128 #endif
4129
4130 /*
4131 ** CAPI3REF: Obtaining SQL Function Parameter Values
4132 **
4133 ** The C-language implementation of SQL functions and aggregates uses
4134 ** this set of interface routines to access the parameter values on
4135 ** the function or aggregate.
4136 **
4137 ** The xFunc (for scalar functions) or xStep (for aggregates) parameters
4138 ** to [sqlite3_create_function()] and [sqlite3_create_function16()]
4139 ** define callbacks that implement the SQL functions and aggregates.
4140 ** The 3rd parameter to these callbacks is an array of pointers to
4141 ** [protected sqlite3_value] objects.  There is one [sqlite3_value] object for
4142 ** each parameter to the SQL function.  These routines are used to
4143 ** extract values from the [sqlite3_value] objects.
4144 **
4145 ** These routines work only with [protected sqlite3_value] objects.
4146 ** Any attempt to use these routines on an [unprotected sqlite3_value]
4147 ** object results in undefined behavior.
4148 **
4149 ** ^These routines work just like the corresponding [column access functions]
4150 ** except that  these routines take a single [protected sqlite3_value] object
4151 ** pointer instead of a [sqlite3_stmt*] pointer and an integer column number.
4152 **
4153 ** ^The sqlite3_value_text16() interface extracts a UTF-16 string
4154 ** in the native byte-order of the host machine.  ^The
4155 ** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces
4156 ** extract UTF-16 strings as big-endian and little-endian respectively.
4157 **
4158 ** ^(The sqlite3_value_numeric_type() interface attempts to apply
4159 ** numeric affinity to the value.  This means that an attempt is
4160 ** made to convert the value to an integer or floating point.  If
4161 ** such a conversion is possible without loss of information (in other
4162 ** words, if the value is a string that looks like a number)
4163 ** then the conversion is performed.  Otherwise no conversion occurs.
4164 ** The [SQLITE_INTEGER | datatype] after conversion is returned.)^
4165 **
4166 ** Please pay particular attention to the fact that the pointer returned
4167 ** from [sqlite3_value_blob()], [sqlite3_value_text()], or
4168 ** [sqlite3_value_text16()] can be invalidated by a subsequent call to
4169 ** [sqlite3_value_bytes()], [sqlite3_value_bytes16()], [sqlite3_value_text()],
4170 ** or [sqlite3_value_text16()].
4171 **
4172 ** These routines must be called from the same thread as
4173 ** the SQL function that supplied the [sqlite3_value*] parameters.
4174 */
4175 SQLITE_API const void *sqlite3_value_blob(sqlite3_value*);
4176 SQLITE_API int sqlite3_value_bytes(sqlite3_value*);
4177 SQLITE_API int sqlite3_value_bytes16(sqlite3_value*);
4178 SQLITE_API double sqlite3_value_double(sqlite3_value*);
4179 SQLITE_API int sqlite3_value_int(sqlite3_value*);
4180 SQLITE_API sqlite3_int64 sqlite3_value_int64(sqlite3_value*);
4181 SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value*);
4182 SQLITE_API const void *sqlite3_value_text16(sqlite3_value*);
4183 SQLITE_API const void *sqlite3_value_text16le(sqlite3_value*);
4184 SQLITE_API const void *sqlite3_value_text16be(sqlite3_value*);
4185 SQLITE_API int sqlite3_value_type(sqlite3_value*);
4186 SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
4187
4188 /*
4189 ** CAPI3REF: Obtain Aggregate Function Context
4190 **
4191 ** Implementations of aggregate SQL functions use this
4192 ** routine to allocate memory for storing their state.
4193 **
4194 ** ^The first time the sqlite3_aggregate_context(C,N) routine is called 
4195 ** for a particular aggregate function, SQLite
4196 ** allocates N of memory, zeroes out that memory, and returns a pointer
4197 ** to the new memory. ^On second and subsequent calls to
4198 ** sqlite3_aggregate_context() for the same aggregate function instance,
4199 ** the same buffer is returned.  Sqlite3_aggregate_context() is normally
4200 ** called once for each invocation of the xStep callback and then one
4201 ** last time when the xFinal callback is invoked.  ^(When no rows match
4202 ** an aggregate query, the xStep() callback of the aggregate function
4203 ** implementation is never called and xFinal() is called exactly once.
4204 ** In those cases, sqlite3_aggregate_context() might be called for the
4205 ** first time from within xFinal().)^
4206 **
4207 ** ^The sqlite3_aggregate_context(C,N) routine returns a NULL pointer if N is
4208 ** less than or equal to zero or if a memory allocate error occurs.
4209 **
4210 ** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is
4211 ** determined by the N parameter on first successful call.  Changing the
4212 ** value of N in subsequent call to sqlite3_aggregate_context() within
4213 ** the same aggregate function instance will not resize the memory
4214 ** allocation.)^
4215 **
4216 ** ^SQLite automatically frees the memory allocated by 
4217 ** sqlite3_aggregate_context() when the aggregate query concludes.
4218 **
4219 ** The first parameter must be a copy of the
4220 ** [sqlite3_context | SQL function context] that is the first parameter
4221 ** to the xStep or xFinal callback routine that implements the aggregate
4222 ** function.
4223 **
4224 ** This routine must be called from the same thread in which
4225 ** the aggregate SQL function is running.
4226 */
4227 SQLITE_API void *sqlite3_aggregate_context(sqlite3_context*, int nBytes);
4228
4229 /*
4230 ** CAPI3REF: User Data For Functions
4231 **
4232 ** ^The sqlite3_user_data() interface returns a copy of
4233 ** the pointer that was the pUserData parameter (the 5th parameter)
4234 ** of the [sqlite3_create_function()]
4235 ** and [sqlite3_create_function16()] routines that originally
4236 ** registered the application defined function.
4237 **
4238 ** This routine must be called from the same thread in which
4239 ** the application-defined function is running.
4240 */
4241 SQLITE_API void *sqlite3_user_data(sqlite3_context*);
4242
4243 /*
4244 ** CAPI3REF: Database Connection For Functions
4245 **
4246 ** ^The sqlite3_context_db_handle() interface returns a copy of
4247 ** the pointer to the [database connection] (the 1st parameter)
4248 ** of the [sqlite3_create_function()]
4249 ** and [sqlite3_create_function16()] routines that originally
4250 ** registered the application defined function.
4251 */
4252 SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*);
4253
4254 /*
4255 ** CAPI3REF: Function Auxiliary Data
4256 **
4257 ** The following two functions may be used by scalar SQL functions to
4258 ** associate metadata with argument values. If the same value is passed to
4259 ** multiple invocations of the same SQL function during query execution, under
4260 ** some circumstances the associated metadata may be preserved. This may
4261 ** be used, for example, to add a regular-expression matching scalar
4262 ** function. The compiled version of the regular expression is stored as
4263 ** metadata associated with the SQL value passed as the regular expression
4264 ** pattern.  The compiled regular expression can be reused on multiple
4265 ** invocations of the same function so that the original pattern string
4266 ** does not need to be recompiled on each invocation.
4267 **
4268 ** ^The sqlite3_get_auxdata() interface returns a pointer to the metadata
4269 ** associated by the sqlite3_set_auxdata() function with the Nth argument
4270 ** value to the application-defined function. ^If no metadata has been ever
4271 ** been set for the Nth argument of the function, or if the corresponding
4272 ** function parameter has changed since the meta-data was set,
4273 ** then sqlite3_get_auxdata() returns a NULL pointer.
4274 **
4275 ** ^The sqlite3_set_auxdata() interface saves the metadata
4276 ** pointed to by its 3rd parameter as the metadata for the N-th
4277 ** argument of the application-defined function.  Subsequent
4278 ** calls to sqlite3_get_auxdata() might return this data, if it has
4279 ** not been destroyed.
4280 ** ^If it is not NULL, SQLite will invoke the destructor
4281 ** function given by the 4th parameter to sqlite3_set_auxdata() on
4282 ** the metadata when the corresponding function parameter changes
4283 ** or when the SQL statement completes, whichever comes first.
4284 **
4285 ** SQLite is free to call the destructor and drop metadata on any
4286 ** parameter of any function at any time.  ^The only guarantee is that
4287 ** the destructor will be called before the metadata is dropped.
4288 **
4289 ** ^(In practice, metadata is preserved between function calls for
4290 ** expressions that are constant at compile time. This includes literal
4291 ** values and [parameters].)^
4292 **
4293 ** These routines must be called from the same thread in which
4294 ** the SQL function is running.
4295 */
4296 SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N);
4297 SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*));
4298
4299
4300 /*
4301 ** CAPI3REF: Constants Defining Special Destructor Behavior
4302 **
4303 ** These are special values for the destructor that is passed in as the
4304 ** final argument to routines like [sqlite3_result_blob()].  ^If the destructor
4305 ** argument is SQLITE_STATIC, it means that the content pointer is constant
4306 ** and will never change.  It does not need to be destroyed.  ^The
4307 ** SQLITE_TRANSIENT value means that the content will likely change in
4308 ** the near future and that SQLite should make its own private copy of
4309 ** the content before returning.
4310 **
4311 ** The typedef is necessary to work around problems in certain
4312 ** C++ compilers.  See ticket #2191.
4313 */
4314 typedef void (*sqlite3_destructor_type)(void*);
4315 #define SQLITE_STATIC      ((sqlite3_destructor_type)0)
4316 #define SQLITE_TRANSIENT   ((sqlite3_destructor_type)-1)
4317
4318 /*
4319 ** CAPI3REF: Setting The Result Of An SQL Function
4320 **
4321 ** These routines are used by the xFunc or xFinal callbacks that
4322 ** implement SQL functions and aggregates.  See
4323 ** [sqlite3_create_function()] and [sqlite3_create_function16()]
4324 ** for additional information.
4325 **
4326 ** These functions work very much like the [parameter binding] family of
4327 ** functions used to bind values to host parameters in prepared statements.
4328 ** Refer to the [SQL parameter] documentation for additional information.
4329 **
4330 ** ^The sqlite3_result_blob() interface sets the result from
4331 ** an application-defined function to be the BLOB whose content is pointed
4332 ** to by the second parameter and which is N bytes long where N is the
4333 ** third parameter.
4334 **
4335 ** ^The sqlite3_result_zeroblob() interfaces set the result of
4336 ** the application-defined function to be a BLOB containing all zero
4337 ** bytes and N bytes in size, where N is the value of the 2nd parameter.
4338 **
4339 ** ^The sqlite3_result_double() interface sets the result from
4340 ** an application-defined function to be a floating point value specified
4341 ** by its 2nd argument.
4342 **
4343 ** ^The sqlite3_result_error() and sqlite3_result_error16() functions
4344 ** cause the implemented SQL function to throw an exception.
4345 ** ^SQLite uses the string pointed to by the
4346 ** 2nd parameter of sqlite3_result_error() or sqlite3_result_error16()
4347 ** as the text of an error message.  ^SQLite interprets the error
4348 ** message string from sqlite3_result_error() as UTF-8. ^SQLite
4349 ** interprets the string from sqlite3_result_error16() as UTF-16 in native
4350 ** byte order.  ^If the third parameter to sqlite3_result_error()
4351 ** or sqlite3_result_error16() is negative then SQLite takes as the error
4352 ** message all text up through the first zero character.
4353 ** ^If the third parameter to sqlite3_result_error() or
4354 ** sqlite3_result_error16() is non-negative then SQLite takes that many
4355 ** bytes (not characters) from the 2nd parameter as the error message.
4356 ** ^The sqlite3_result_error() and sqlite3_result_error16()
4357 ** routines make a private copy of the error message text before
4358 ** they return.  Hence, the calling function can deallocate or
4359 ** modify the text after they return without harm.
4360 ** ^The sqlite3_result_error_code() function changes the error code
4361 ** returned by SQLite as a result of an error in a function.  ^By default,
4362 ** the error code is SQLITE_ERROR.  ^A subsequent call to sqlite3_result_error()
4363 ** or sqlite3_result_error16() resets the error code to SQLITE_ERROR.
4364 **
4365 ** ^The sqlite3_result_toobig() interface causes SQLite to throw an error
4366 ** indicating that a string or BLOB is too long to represent.
4367 **
4368 ** ^The sqlite3_result_nomem() interface causes SQLite to throw an error
4369 ** indicating that a memory allocation failed.
4370 **
4371 ** ^The sqlite3_result_int() interface sets the return value
4372 ** of the application-defined function to be the 32-bit signed integer
4373 ** value given in the 2nd argument.
4374 ** ^The sqlite3_result_int64() interface sets the return value
4375 ** of the application-defined function to be the 64-bit signed integer
4376 ** value given in the 2nd argument.
4377 **
4378 ** ^The sqlite3_result_null() interface sets the return value
4379 ** of the application-defined function to be NULL.
4380 **
4381 ** ^The sqlite3_result_text(), sqlite3_result_text16(),
4382 ** sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces
4383 ** set the return value of the application-defined function to be
4384 ** a text string which is represented as UTF-8, UTF-16 native byte order,
4385 ** UTF-16 little endian, or UTF-16 big endian, respectively.
4386 ** ^SQLite takes the text result from the application from
4387 ** the 2nd parameter of the sqlite3_result_text* interfaces.
4388 ** ^If the 3rd parameter to the sqlite3_result_text* interfaces
4389 ** is negative, then SQLite takes result text from the 2nd parameter
4390 ** through the first zero character.
4391 ** ^If the 3rd parameter to the sqlite3_result_text* interfaces
4392 ** is non-negative, then as many bytes (not characters) of the text
4393 ** pointed to by the 2nd parameter are taken as the application-defined
4394 ** function result.
4395 ** ^If the 4th parameter to the sqlite3_result_text* interfaces
4396 ** or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that
4397 ** function as the destructor on the text or BLOB result when it has
4398 ** finished using that result.
4399 ** ^If the 4th parameter to the sqlite3_result_text* interfaces or to
4400 ** sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite
4401 ** assumes that the text or BLOB result is in constant space and does not
4402 ** copy the content of the parameter nor call a destructor on the content
4403 ** when it has finished using that result.
4404 ** ^If the 4th parameter to the sqlite3_result_text* interfaces
4405 ** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT
4406 ** then SQLite makes a copy of the result into space obtained from
4407 ** from [sqlite3_malloc()] before it returns.
4408 **
4409 ** ^The sqlite3_result_value() interface sets the result of
4410 ** the application-defined function to be a copy the
4411 ** [unprotected sqlite3_value] object specified by the 2nd parameter.  ^The
4412 ** sqlite3_result_value() interface makes a copy of the [sqlite3_value]
4413 ** so that the [sqlite3_value] specified in the parameter may change or
4414 ** be deallocated after sqlite3_result_value() returns without harm.
4415 ** ^A [protected sqlite3_value] object may always be used where an
4416 ** [unprotected sqlite3_value] object is required, so either
4417 ** kind of [sqlite3_value] object can be used with this interface.
4418 **
4419 ** If these routines are called from within the different thread
4420 ** than the one containing the application-defined function that received
4421 ** the [sqlite3_context] pointer, the results are undefined.
4422 */
4423 SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*));
4424 SQLITE_API void sqlite3_result_double(sqlite3_context*, double);
4425 SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int);
4426 SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int);
4427 SQLITE_API void sqlite3_result_error_toobig(sqlite3_context*);
4428 SQLITE_API void sqlite3_result_error_nomem(sqlite3_context*);
4429 SQLITE_API void sqlite3_result_error_code(sqlite3_context*, int);
4430 SQLITE_API void sqlite3_result_int(sqlite3_context*, int);
4431 SQLITE_API void sqlite3_result_int64(sqlite3_context*, sqlite3_int64);
4432 SQLITE_API void sqlite3_result_null(sqlite3_context*);
4433 SQLITE_API void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*));
4434 SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*));
4435 SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*));
4436 SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*));
4437 SQLITE_API void sqlite3_result_value(sqlite3_context*, sqlite3_value*);
4438 SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n);
4439
4440 /*
4441 ** CAPI3REF: Define New Collating Sequences
4442 **
4443 ** ^These functions add, remove, or modify a [collation] associated
4444 ** with the [database connection] specified as the first argument.
4445 **
4446 ** ^The name of the collation is a UTF-8 string
4447 ** for sqlite3_create_collation() and sqlite3_create_collation_v2()
4448 ** and a UTF-16 string in native byte order for sqlite3_create_collation16().
4449 ** ^Collation names that compare equal according to [sqlite3_strnicmp()] are
4450 ** considered to be the same name.
4451 **
4452 ** ^(The third argument (eTextRep) must be one of the constants:
4453 ** <ul>
4454 ** <li> [SQLITE_UTF8],
4455 ** <li> [SQLITE_UTF16LE],
4456 ** <li> [SQLITE_UTF16BE],
4457 ** <li> [SQLITE_UTF16], or
4458 ** <li> [SQLITE_UTF16_ALIGNED].
4459 ** </ul>)^
4460 ** ^The eTextRep argument determines the encoding of strings passed
4461 ** to the collating function callback, xCallback.
4462 ** ^The [SQLITE_UTF16] and [SQLITE_UTF16_ALIGNED] values for eTextRep
4463 ** force strings to be UTF16 with native byte order.
4464 ** ^The [SQLITE_UTF16_ALIGNED] value for eTextRep forces strings to begin
4465 ** on an even byte address.
4466 **
4467 ** ^The fourth argument, pArg, is an application data pointer that is passed
4468 ** through as the first argument to the collating function callback.
4469 **
4470 ** ^The fifth argument, xCallback, is a pointer to the collating function.
4471 ** ^Multiple collating functions can be registered using the same name but
4472 ** with different eTextRep parameters and SQLite will use whichever
4473 ** function requires the least amount of data transformation.
4474 ** ^If the xCallback argument is NULL then the collating function is
4475 ** deleted.  ^When all collating functions having the same name are deleted,
4476 ** that collation is no longer usable.
4477 **
4478 ** ^The collating function callback is invoked with a copy of the pArg 
4479 ** application data pointer and with two strings in the encoding specified
4480 ** by the eTextRep argument.  The collating function must return an
4481 ** integer that is negative, zero, or positive
4482 ** if the first string is less than, equal to, or greater than the second,
4483 ** respectively.  A collating function must always return the same answer
4484 ** given the same inputs.  If two or more collating functions are registered
4485 ** to the same collation name (using different eTextRep values) then all
4486 ** must give an equivalent answer when invoked with equivalent strings.
4487 ** The collating function must obey the following properties for all
4488 ** strings A, B, and C:
4489 **
4490 ** <ol>
4491 ** <li> If A==B then B==A.
4492 ** <li> If A==B and B==C then A==C.
4493 ** <li> If A&lt;B THEN B&gt;A.
4494 ** <li> If A&lt;B and B&lt;C then A&lt;C.
4495 ** </ol>
4496 **
4497 ** If a collating function fails any of the above constraints and that
4498 ** collating function is  registered and used, then the behavior of SQLite
4499 ** is undefined.
4500 **
4501 ** ^The sqlite3_create_collation_v2() works like sqlite3_create_collation()
4502 ** with the addition that the xDestroy callback is invoked on pArg when
4503 ** the collating function is deleted.
4504 ** ^Collating functions are deleted when they are overridden by later
4505 ** calls to the collation creation functions or when the
4506 ** [database connection] is closed using [sqlite3_close()].
4507 **
4508 ** ^The xDestroy callback is <u>not</u> called if the 
4509 ** sqlite3_create_collation_v2() function fails.  Applications that invoke
4510 ** sqlite3_create_collation_v2() with a non-NULL xDestroy argument should 
4511 ** check the return code and dispose of the application data pointer
4512 ** themselves rather than expecting SQLite to deal with it for them.
4513 ** This is different from every other SQLite interface.  The inconsistency 
4514 ** is unfortunate but cannot be changed without breaking backwards 
4515 ** compatibility.
4516 **
4517 ** See also:  [sqlite3_collation_needed()] and [sqlite3_collation_needed16()].
4518 */
4519 SQLITE_API int sqlite3_create_collation(
4520   sqlite3*, 
4521   const char *zName, 
4522   int eTextRep, 
4523   void *pArg,
4524   int(*xCompare)(void*,int,const void*,int,const void*)
4525 );
4526 SQLITE_API int sqlite3_create_collation_v2(
4527   sqlite3*, 
4528   const char *zName, 
4529   int eTextRep, 
4530   void *pArg,
4531   int(*xCompare)(void*,int,const void*,int,const void*),
4532   void(*xDestroy)(void*)
4533 );
4534 SQLITE_API int sqlite3_create_collation16(
4535   sqlite3*, 
4536   const void *zName,
4537   int eTextRep, 
4538   void *pArg,
4539   int(*xCompare)(void*,int,const void*,int,const void*)
4540 );
4541
4542 /*
4543 ** CAPI3REF: Collation Needed Callbacks
4544 **
4545 ** ^To avoid having to register all collation sequences before a database
4546 ** can be used, a single callback function may be registered with the
4547 ** [database connection] to be invoked whenever an undefined collation
4548 ** sequence is required.
4549 **
4550 ** ^If the function is registered using the sqlite3_collation_needed() API,
4551 ** then it is passed the names of undefined collation sequences as strings
4552 ** encoded in UTF-8. ^If sqlite3_collation_needed16() is used,
4553 ** the names are passed as UTF-16 in machine native byte order.
4554 ** ^A call to either function replaces the existing collation-needed callback.
4555 **
4556 ** ^(When the callback is invoked, the first argument passed is a copy
4557 ** of the second argument to sqlite3_collation_needed() or
4558 ** sqlite3_collation_needed16().  The second argument is the database
4559 ** connection.  The third argument is one of [SQLITE_UTF8], [SQLITE_UTF16BE],
4560 ** or [SQLITE_UTF16LE], indicating the most desirable form of the collation
4561 ** sequence function required.  The fourth parameter is the name of the
4562 ** required collation sequence.)^
4563 **
4564 ** The callback function should register the desired collation using
4565 ** [sqlite3_create_collation()], [sqlite3_create_collation16()], or
4566 ** [sqlite3_create_collation_v2()].
4567 */
4568 SQLITE_API int sqlite3_collation_needed(
4569   sqlite3*, 
4570   void*, 
4571   void(*)(void*,sqlite3*,int eTextRep,const char*)
4572 );
4573 SQLITE_API int sqlite3_collation_needed16(
4574   sqlite3*, 
4575   void*,
4576   void(*)(void*,sqlite3*,int eTextRep,const void*)
4577 );
4578
4579 #ifdef SQLITE_HAS_CODEC
4580 /*
4581 ** Specify the key for an encrypted database.  This routine should be
4582 ** called right after sqlite3_open().
4583 **
4584 ** The code to implement this API is not available in the public release
4585 ** of SQLite.
4586 */
4587 SQLITE_API int sqlite3_key(
4588   sqlite3 *db,                   /* Database to be rekeyed */
4589   const void *pKey, int nKey     /* The key */
4590 );
4591
4592 /*
4593 ** Change the key on an open database.  If the current database is not
4594 ** encrypted, this routine will encrypt it.  If pNew==0 or nNew==0, the
4595 ** database is decrypted.
4596 **
4597 ** The code to implement this API is not available in the public release
4598 ** of SQLite.
4599 */
4600 SQLITE_API int sqlite3_rekey(
4601   sqlite3 *db,                   /* Database to be rekeyed */
4602   const void *pKey, int nKey     /* The new key */
4603 );
4604
4605 /*
4606 ** Specify the activation key for a SEE database.  Unless 
4607 ** activated, none of the SEE routines will work.
4608 */
4609 SQLITE_API void sqlite3_activate_see(
4610   const char *zPassPhrase        /* Activation phrase */
4611 );
4612 #endif
4613
4614 #ifdef SQLITE_ENABLE_CEROD
4615 /*
4616 ** Specify the activation key for a CEROD database.  Unless 
4617 ** activated, none of the CEROD routines will work.
4618 */
4619 SQLITE_API void sqlite3_activate_cerod(
4620   const char *zPassPhrase        /* Activation phrase */
4621 );
4622 #endif
4623
4624 /*
4625 ** CAPI3REF: Suspend Execution For A Short Time
4626 **
4627 ** The sqlite3_sleep() function causes the current thread to suspend execution
4628 ** for at least a number of milliseconds specified in its parameter.
4629 **
4630 ** If the operating system does not support sleep requests with
4631 ** millisecond time resolution, then the time will be rounded up to
4632 ** the nearest second. The number of milliseconds of sleep actually
4633 ** requested from the operating system is returned.
4634 **
4635 ** ^SQLite implements this interface by calling the xSleep()
4636 ** method of the default [sqlite3_vfs] object.  If the xSleep() method
4637 ** of the default VFS is not implemented correctly, or not implemented at
4638 ** all, then the behavior of sqlite3_sleep() may deviate from the description
4639 ** in the previous paragraphs.
4640 */
4641 SQLITE_API int sqlite3_sleep(int);
4642
4643 /*
4644 ** CAPI3REF: Name Of The Folder Holding Temporary Files
4645 **
4646 ** ^(If this global variable is made to point to a string which is
4647 ** the name of a folder (a.k.a. directory), then all temporary files
4648 ** created by SQLite when using a built-in [sqlite3_vfs | VFS]
4649 ** will be placed in that directory.)^  ^If this variable
4650 ** is a NULL pointer, then SQLite performs a search for an appropriate
4651 ** temporary file directory.
4652 **
4653 ** It is not safe to read or modify this variable in more than one
4654 ** thread at a time.  It is not safe to read or modify this variable
4655 ** if a [database connection] is being used at the same time in a separate
4656 ** thread.
4657 ** It is intended that this variable be set once
4658 ** as part of process initialization and before any SQLite interface
4659 ** routines have been called and that this variable remain unchanged
4660 ** thereafter.
4661 **
4662 ** ^The [temp_store_directory pragma] may modify this variable and cause
4663 ** it to point to memory obtained from [sqlite3_malloc].  ^Furthermore,
4664 ** the [temp_store_directory pragma] always assumes that any string
4665 ** that this variable points to is held in memory obtained from 
4666 ** [sqlite3_malloc] and the pragma may attempt to free that memory
4667 ** using [sqlite3_free].
4668 ** Hence, if this variable is modified directly, either it should be
4669 ** made NULL or made to point to memory obtained from [sqlite3_malloc]
4670 ** or else the use of the [temp_store_directory pragma] should be avoided.
4671 */
4672 SQLITE_API char *sqlite3_temp_directory;
4673
4674 /*
4675 ** CAPI3REF: Test For Auto-Commit Mode
4676 ** KEYWORDS: {autocommit mode}
4677 **
4678 ** ^The sqlite3_get_autocommit() interface returns non-zero or
4679 ** zero if the given database connection is or is not in autocommit mode,
4680 ** respectively.  ^Autocommit mode is on by default.
4681 ** ^Autocommit mode is disabled by a [BEGIN] statement.
4682 ** ^Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK].
4683 **
4684 ** If certain kinds of errors occur on a statement within a multi-statement
4685 ** transaction (errors including [SQLITE_FULL], [SQLITE_IOERR],
4686 ** [SQLITE_NOMEM], [SQLITE_BUSY], and [SQLITE_INTERRUPT]) then the
4687 ** transaction might be rolled back automatically.  The only way to
4688 ** find out whether SQLite automatically rolled back the transaction after
4689 ** an error is to use this function.
4690 **
4691 ** If another thread changes the autocommit status of the database
4692 ** connection while this routine is running, then the return value
4693 ** is undefined.
4694 */
4695 SQLITE_API int sqlite3_get_autocommit(sqlite3*);
4696
4697 /*
4698 ** CAPI3REF: Find The Database Handle Of A Prepared Statement
4699 **
4700 ** ^The sqlite3_db_handle interface returns the [database connection] handle
4701 ** to which a [prepared statement] belongs.  ^The [database connection]
4702 ** returned by sqlite3_db_handle is the same [database connection]
4703 ** that was the first argument
4704 ** to the [sqlite3_prepare_v2()] call (or its variants) that was used to
4705 ** create the statement in the first place.
4706 */
4707 SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
4708
4709 /*
4710 ** CAPI3REF: Find the next prepared statement
4711 **
4712 ** ^This interface returns a pointer to the next [prepared statement] after
4713 ** pStmt associated with the [database connection] pDb.  ^If pStmt is NULL
4714 ** then this interface returns a pointer to the first prepared statement
4715 ** associated with the database connection pDb.  ^If no prepared statement
4716 ** satisfies the conditions of this routine, it returns NULL.
4717 **
4718 ** The [database connection] pointer D in a call to
4719 ** [sqlite3_next_stmt(D,S)] must refer to an open database
4720 ** connection and in particular must not be a NULL pointer.
4721 */
4722 SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt);
4723
4724 /*
4725 ** CAPI3REF: Commit And Rollback Notification Callbacks
4726 **
4727 ** ^The sqlite3_commit_hook() interface registers a callback
4728 ** function to be invoked whenever a transaction is [COMMIT | committed].
4729 ** ^Any callback set by a previous call to sqlite3_commit_hook()
4730 ** for the same database connection is overridden.
4731 ** ^The sqlite3_rollback_hook() interface registers a callback
4732 ** function to be invoked whenever a transaction is [ROLLBACK | rolled back].
4733 ** ^Any callback set by a previous call to sqlite3_rollback_hook()
4734 ** for the same database connection is overridden.
4735 ** ^The pArg argument is passed through to the callback.
4736 ** ^If the callback on a commit hook function returns non-zero,
4737 ** then the commit is converted into a rollback.
4738 **
4739 ** ^The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions
4740 ** return the P argument from the previous call of the same function
4741 ** on the same [database connection] D, or NULL for
4742 ** the first call for each function on D.
4743 **
4744 ** The callback implementation must not do anything that will modify
4745 ** the database connection that invoked the callback.  Any actions
4746 ** to modify the database connection must be deferred until after the
4747 ** completion of the [sqlite3_step()] call that triggered the commit
4748 ** or rollback hook in the first place.
4749 ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
4750 ** database connections for the meaning of "modify" in this paragraph.
4751 **
4752 ** ^Registering a NULL function disables the callback.
4753 **
4754 ** ^When the commit hook callback routine returns zero, the [COMMIT]
4755 ** operation is allowed to continue normally.  ^If the commit hook
4756 ** returns non-zero, then the [COMMIT] is converted into a [ROLLBACK].
4757 ** ^The rollback hook is invoked on a rollback that results from a commit
4758 ** hook returning non-zero, just as it would be with any other rollback.
4759 **
4760 ** ^For the purposes of this API, a transaction is said to have been
4761 ** rolled back if an explicit "ROLLBACK" statement is executed, or
4762 ** an error or constraint causes an implicit rollback to occur.
4763 ** ^The rollback callback is not invoked if a transaction is
4764 ** automatically rolled back because the database connection is closed.
4765 **
4766 ** See also the [sqlite3_update_hook()] interface.
4767 */
4768 SQLITE_API void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*);
4769 SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
4770
4771 /*
4772 ** CAPI3REF: Data Change Notification Callbacks
4773 **
4774 ** ^The sqlite3_update_hook() interface registers a callback function
4775 ** with the [database connection] identified by the first argument
4776 ** to be invoked whenever a row is updated, inserted or deleted.
4777 ** ^Any callback set by a previous call to this function
4778 ** for the same database connection is overridden.
4779 **
4780 ** ^The second argument is a pointer to the function to invoke when a
4781 ** row is updated, inserted or deleted.
4782 ** ^The first argument to the callback is a copy of the third argument
4783 ** to sqlite3_update_hook().
4784 ** ^The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE],
4785 ** or [SQLITE_UPDATE], depending on the operation that caused the callback
4786 ** to be invoked.
4787 ** ^The third and fourth arguments to the callback contain pointers to the
4788 ** database and table name containing the affected row.
4789 ** ^The final callback parameter is the [rowid] of the row.
4790 ** ^In the case of an update, this is the [rowid] after the update takes place.
4791 **
4792 ** ^(The update hook is not invoked when internal system tables are
4793 ** modified (i.e. sqlite_master and sqlite_sequence).)^
4794 **
4795 ** ^In the current implementation, the update hook
4796 ** is not invoked when duplication rows are deleted because of an
4797 ** [ON CONFLICT | ON CONFLICT REPLACE] clause.  ^Nor is the update hook
4798 ** invoked when rows are deleted using the [truncate optimization].
4799 ** The exceptions defined in this paragraph might change in a future
4800 ** release of SQLite.
4801 **
4802 ** The update hook implementation must not do anything that will modify
4803 ** the database connection that invoked the update hook.  Any actions
4804 ** to modify the database connection must be deferred until after the
4805 ** completion of the [sqlite3_step()] call that triggered the update hook.
4806 ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
4807 ** database connections for the meaning of "modify" in this paragraph.
4808 **
4809 ** ^The sqlite3_update_hook(D,C,P) function
4810 ** returns the P argument from the previous call
4811 ** on the same [database connection] D, or NULL for
4812 ** the first call on D.
4813 **
4814 ** See also the [sqlite3_commit_hook()] and [sqlite3_rollback_hook()]
4815 ** interfaces.
4816 */
4817 SQLITE_API void *sqlite3_update_hook(
4818   sqlite3*, 
4819   void(*)(void *,int ,char const *,char const *,sqlite3_int64),
4820   void*
4821 );
4822
4823 /*
4824 ** CAPI3REF: Enable Or Disable Shared Pager Cache
4825 ** KEYWORDS: {shared cache}
4826 **
4827 ** ^(This routine enables or disables the sharing of the database cache
4828 ** and schema data structures between [database connection | connections]
4829 ** to the same database. Sharing is enabled if the argument is true
4830 ** and disabled if the argument is false.)^
4831 **
4832 ** ^Cache sharing is enabled and disabled for an entire process.
4833 ** This is a change as of SQLite version 3.5.0. In prior versions of SQLite,
4834 ** sharing was enabled or disabled for each thread separately.
4835 **
4836 ** ^(The cache sharing mode set by this interface effects all subsequent
4837 ** calls to [sqlite3_open()], [sqlite3_open_v2()], and [sqlite3_open16()].
4838 ** Existing database connections continue use the sharing mode
4839 ** that was in effect at the time they were opened.)^
4840 **
4841 ** ^(This routine returns [SQLITE_OK] if shared cache was enabled or disabled
4842 ** successfully.  An [error code] is returned otherwise.)^
4843 **
4844 ** ^Shared cache is disabled by default. But this might change in
4845 ** future releases of SQLite.  Applications that care about shared
4846 ** cache setting should set it explicitly.
4847 **
4848 ** See Also:  [SQLite Shared-Cache Mode]
4849 */
4850 SQLITE_API int sqlite3_enable_shared_cache(int);
4851
4852 /*
4853 ** CAPI3REF: Attempt To Free Heap Memory
4854 **
4855 ** ^The sqlite3_release_memory() interface attempts to free N bytes
4856 ** of heap memory by deallocating non-essential memory allocations
4857 ** held by the database library.   Memory used to cache database
4858 ** pages to improve performance is an example of non-essential memory.
4859 ** ^sqlite3_release_memory() returns the number of bytes actually freed,
4860 ** which might be more or less than the amount requested.
4861 ** ^The sqlite3_release_memory() routine is a no-op returning zero
4862 ** if SQLite is not compiled with [SQLITE_ENABLE_MEMORY_MANAGEMENT].
4863 */
4864 SQLITE_API int sqlite3_release_memory(int);
4865
4866 /*
4867 ** CAPI3REF: Impose A Limit On Heap Size
4868 **
4869 ** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the
4870 ** soft limit on the amount of heap memory that may be allocated by SQLite.
4871 ** ^SQLite strives to keep heap memory utilization below the soft heap
4872 ** limit by reducing the number of pages held in the page cache
4873 ** as heap memory usages approaches the limit.
4874 ** ^The soft heap limit is "soft" because even though SQLite strives to stay
4875 ** below the limit, it will exceed the limit rather than generate
4876 ** an [SQLITE_NOMEM] error.  In other words, the soft heap limit 
4877 ** is advisory only.
4878 **
4879 ** ^The return value from sqlite3_soft_heap_limit64() is the size of
4880 ** the soft heap limit prior to the call.  ^If the argument N is negative
4881 ** then no change is made to the soft heap limit.  Hence, the current
4882 ** size of the soft heap limit can be determined by invoking
4883 ** sqlite3_soft_heap_limit64() with a negative argument.
4884 **
4885 ** ^If the argument N is zero then the soft heap limit is disabled.
4886 **
4887 ** ^(The soft heap limit is not enforced in the current implementation
4888 ** if one or more of following conditions are true:
4889 **
4890 ** <ul>
4891 ** <li> The soft heap limit is set to zero.
4892 ** <li> Memory accounting is disabled using a combination of the
4893 **      [sqlite3_config]([SQLITE_CONFIG_MEMSTATUS],...) start-time option and
4894 **      the [SQLITE_DEFAULT_MEMSTATUS] compile-time option.
4895 ** <li> An alternative page cache implementation is specified using
4896 **      [sqlite3_config]([SQLITE_CONFIG_PCACHE],...).
4897 ** <li> The page cache allocates from its own memory pool supplied
4898 **      by [sqlite3_config]([SQLITE_CONFIG_PAGECACHE],...) rather than
4899 **      from the heap.
4900 ** </ul>)^
4901 **
4902 ** Beginning with SQLite version 3.7.3, the soft heap limit is enforced
4903 ** regardless of whether or not the [SQLITE_ENABLE_MEMORY_MANAGEMENT]
4904 ** compile-time option is invoked.  With [SQLITE_ENABLE_MEMORY_MANAGEMENT],
4905 ** the soft heap limit is enforced on every memory allocation.  Without
4906 ** [SQLITE_ENABLE_MEMORY_MANAGEMENT], the soft heap limit is only enforced
4907 ** when memory is allocated by the page cache.  Testing suggests that because
4908 ** the page cache is the predominate memory user in SQLite, most
4909 ** applications will achieve adequate soft heap limit enforcement without
4910 ** the use of [SQLITE_ENABLE_MEMORY_MANAGEMENT].
4911 **
4912 ** The circumstances under which SQLite will enforce the soft heap limit may
4913 ** changes in future releases of SQLite.
4914 */
4915 SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N);
4916
4917 /*
4918 ** CAPI3REF: Deprecated Soft Heap Limit Interface
4919 ** DEPRECATED
4920 **
4921 ** This is a deprecated version of the [sqlite3_soft_heap_limit64()]
4922 ** interface.  This routine is provided for historical compatibility
4923 ** only.  All new applications should use the
4924 ** [sqlite3_soft_heap_limit64()] interface rather than this one.
4925 */
4926 SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
4927
4928
4929 /*
4930 ** CAPI3REF: Extract Metadata About A Column Of A Table
4931 **
4932 ** ^This routine returns metadata about a specific column of a specific
4933 ** database table accessible using the [database connection] handle
4934 ** passed as the first function argument.
4935 **
4936 ** ^The column is identified by the second, third and fourth parameters to
4937 ** this function. ^The second parameter is either the name of the database
4938 ** (i.e. "main", "temp", or an attached database) containing the specified
4939 ** table or NULL. ^If it is NULL, then all attached databases are searched
4940 ** for the table using the same algorithm used by the database engine to
4941 ** resolve unqualified table references.
4942 **
4943 ** ^The third and fourth parameters to this function are the table and column
4944 ** name of the desired column, respectively. Neither of these parameters
4945 ** may be NULL.
4946 **
4947 ** ^Metadata is returned by writing to the memory locations passed as the 5th
4948 ** and subsequent parameters to this function. ^Any of these arguments may be
4949 ** NULL, in which case the corresponding element of metadata is omitted.
4950 **
4951 ** ^(<blockquote>
4952 ** <table border="1">
4953 ** <tr><th> Parameter <th> Output<br>Type <th>  Description
4954 **
4955 ** <tr><td> 5th <td> const char* <td> Data type
4956 ** <tr><td> 6th <td> const char* <td> Name of default collation sequence
4957 ** <tr><td> 7th <td> int         <td> True if column has a NOT NULL constraint
4958 ** <tr><td> 8th <td> int         <td> True if column is part of the PRIMARY KEY
4959 ** <tr><td> 9th <td> int         <td> True if column is [AUTOINCREMENT]
4960 ** </table>
4961 ** </blockquote>)^
4962 **
4963 ** ^The memory pointed to by the character pointers returned for the
4964 ** declaration type and collation sequence is valid only until the next
4965 ** call to any SQLite API function.
4966 **
4967 ** ^If the specified table is actually a view, an [error code] is returned.
4968 **
4969 ** ^If the specified column is "rowid", "oid" or "_rowid_" and an
4970 ** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output
4971 ** parameters are set for the explicitly declared column. ^(If there is no
4972 ** explicitly declared [INTEGER PRIMARY KEY] column, then the output
4973 ** parameters are set as follows:
4974 **
4975 ** <pre>
4976 **     data type: "INTEGER"
4977 **     collation sequence: "BINARY"
4978 **     not null: 0
4979 **     primary key: 1
4980 **     auto increment: 0
4981 ** </pre>)^
4982 **
4983 ** ^(This function may load one or more schemas from database files. If an
4984 ** error occurs during this process, or if the requested table or column
4985 ** cannot be found, an [error code] is returned and an error message left
4986 ** in the [database connection] (to be retrieved using sqlite3_errmsg()).)^
4987 **
4988 ** ^This API is only available if the library was compiled with the
4989 ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined.
4990 */
4991 SQLITE_API int sqlite3_table_column_metadata(
4992   sqlite3 *db,                /* Connection handle */
4993   const char *zDbName,        /* Database name or NULL */
4994   const char *zTableName,     /* Table name */
4995   const char *zColumnName,    /* Column name */
4996   char const **pzDataType,    /* OUTPUT: Declared data type */
4997   char const **pzCollSeq,     /* OUTPUT: Collation sequence name */
4998   int *pNotNull,              /* OUTPUT: True if NOT NULL constraint exists */
4999   int *pPrimaryKey,           /* OUTPUT: True if column part of PK */
5000   int *pAutoinc               /* OUTPUT: True if column is auto-increment */
5001 );
5002
5003 /*
5004 ** CAPI3REF: Load An Extension
5005 **
5006 ** ^This interface loads an SQLite extension library from the named file.
5007 **
5008 ** ^The sqlite3_load_extension() interface attempts to load an
5009 ** SQLite extension library contained in the file zFile.
5010 **
5011 ** ^The entry point is zProc.
5012 ** ^zProc may be 0, in which case the name of the entry point
5013 ** defaults to "sqlite3_extension_init".
5014 ** ^The sqlite3_load_extension() interface returns
5015 ** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong.
5016 ** ^If an error occurs and pzErrMsg is not 0, then the
5017 ** [sqlite3_load_extension()] interface shall attempt to
5018 ** fill *pzErrMsg with error message text stored in memory
5019 ** obtained from [sqlite3_malloc()]. The calling function
5020 ** should free this memory by calling [sqlite3_free()].
5021 **
5022 ** ^Extension loading must be enabled using
5023 ** [sqlite3_enable_load_extension()] prior to calling this API,
5024 ** otherwise an error will be returned.
5025 **
5026 ** See also the [load_extension() SQL function].
5027 */
5028 SQLITE_API int sqlite3_load_extension(
5029   sqlite3 *db,          /* Load the extension into this database connection */
5030   const char *zFile,    /* Name of the shared library containing extension */
5031   const char *zProc,    /* Entry point.  Derived from zFile if 0 */
5032   char **pzErrMsg       /* Put error message here if not 0 */
5033 );
5034
5035 /*
5036 ** CAPI3REF: Enable Or Disable Extension Loading
5037 **
5038 ** ^So as not to open security holes in older applications that are
5039 ** unprepared to deal with extension loading, and as a means of disabling
5040 ** extension loading while evaluating user-entered SQL, the following API
5041 ** is provided to turn the [sqlite3_load_extension()] mechanism on and off.
5042 **
5043 ** ^Extension loading is off by default. See ticket #1863.
5044 ** ^Call the sqlite3_enable_load_extension() routine with onoff==1
5045 ** to turn extension loading on and call it with onoff==0 to turn
5046 ** it back off again.
5047 */
5048 SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff);
5049
5050 /*
5051 ** CAPI3REF: Automatically Load Statically Linked Extensions
5052 **
5053 ** ^This interface causes the xEntryPoint() function to be invoked for
5054 ** each new [database connection] that is created.  The idea here is that
5055 ** xEntryPoint() is the entry point for a statically linked SQLite extension
5056 ** that is to be automatically loaded into all new database connections.
5057 **
5058 ** ^(Even though the function prototype shows that xEntryPoint() takes
5059 ** no arguments and returns void, SQLite invokes xEntryPoint() with three
5060 ** arguments and expects and integer result as if the signature of the
5061 ** entry point where as follows:
5062 **
5063 ** <blockquote><pre>
5064 ** &nbsp;  int xEntryPoint(
5065 ** &nbsp;    sqlite3 *db,
5066 ** &nbsp;    const char **pzErrMsg,
5067 ** &nbsp;    const struct sqlite3_api_routines *pThunk
5068 ** &nbsp;  );
5069 ** </pre></blockquote>)^
5070 **
5071 ** If the xEntryPoint routine encounters an error, it should make *pzErrMsg
5072 ** point to an appropriate error message (obtained from [sqlite3_mprintf()])
5073 ** and return an appropriate [error code].  ^SQLite ensures that *pzErrMsg
5074 ** is NULL before calling the xEntryPoint().  ^SQLite will invoke
5075 ** [sqlite3_free()] on *pzErrMsg after xEntryPoint() returns.  ^If any
5076 ** xEntryPoint() returns an error, the [sqlite3_open()], [sqlite3_open16()],
5077 ** or [sqlite3_open_v2()] call that provoked the xEntryPoint() will fail.
5078 **
5079 ** ^Calling sqlite3_auto_extension(X) with an entry point X that is already
5080 ** on the list of automatic extensions is a harmless no-op. ^No entry point
5081 ** will be called more than once for each database connection that is opened.
5082 **
5083 ** See also: [sqlite3_reset_auto_extension()].
5084 */
5085 SQLITE_API int sqlite3_auto_extension(void (*xEntryPoint)(void));
5086
5087 /*
5088 ** CAPI3REF: Reset Automatic Extension Loading
5089 **
5090 ** ^This interface disables all automatic extensions previously
5091 ** registered using [sqlite3_auto_extension()].
5092 */
5093 SQLITE_API void sqlite3_reset_auto_extension(void);
5094
5095 /*
5096 ** The interface to the virtual-table mechanism is currently considered
5097 ** to be experimental.  The interface might change in incompatible ways.
5098 ** If this is a problem for you, do not use the interface at this time.
5099 **
5100 ** When the virtual-table mechanism stabilizes, we will declare the
5101 ** interface fixed, support it indefinitely, and remove this comment.
5102 */
5103
5104 /*
5105 ** Structures used by the virtual table interface
5106 */
5107 typedef struct sqlite3_vtab sqlite3_vtab;
5108 typedef struct sqlite3_index_info sqlite3_index_info;
5109 typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor;
5110 typedef struct sqlite3_module sqlite3_module;
5111
5112 /*
5113 ** CAPI3REF: Virtual Table Object
5114 ** KEYWORDS: sqlite3_module {virtual table module}
5115 **
5116 ** This structure, sometimes called a "virtual table module", 
5117 ** defines the implementation of a [virtual tables].  
5118 ** This structure consists mostly of methods for the module.
5119 **
5120 ** ^A virtual table module is created by filling in a persistent
5121 ** instance of this structure and passing a pointer to that instance
5122 ** to [sqlite3_create_module()] or [sqlite3_create_module_v2()].
5123 ** ^The registration remains valid until it is replaced by a different
5124 ** module or until the [database connection] closes.  The content
5125 ** of this structure must not change while it is registered with
5126 ** any database connection.
5127 */
5128 struct sqlite3_module {
5129   int iVersion;
5130   int (*xCreate)(sqlite3*, void *pAux,
5131                int argc, const char *const*argv,
5132                sqlite3_vtab **ppVTab, char**);
5133   int (*xConnect)(sqlite3*, void *pAux,
5134                int argc, const char *const*argv,
5135                sqlite3_vtab **ppVTab, char**);
5136   int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);
5137   int (*xDisconnect)(sqlite3_vtab *pVTab);
5138   int (*xDestroy)(sqlite3_vtab *pVTab);
5139   int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor);
5140   int (*xClose)(sqlite3_vtab_cursor*);
5141   int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr,
5142                 int argc, sqlite3_value **argv);
5143   int (*xNext)(sqlite3_vtab_cursor*);
5144   int (*xEof)(sqlite3_vtab_cursor*);
5145   int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int);
5146   int (*xRowid)(sqlite3_vtab_cursor*, sqlite3_int64 *pRowid);
5147   int (*xUpdate)(sqlite3_vtab *, int, sqlite3_value **, sqlite3_int64 *);
5148   int (*xBegin)(sqlite3_vtab *pVTab);
5149   int (*xSync)(sqlite3_vtab *pVTab);
5150   int (*xCommit)(sqlite3_vtab *pVTab);
5151   int (*xRollback)(sqlite3_vtab *pVTab);
5152   int (*xFindFunction)(sqlite3_vtab *pVtab, int nArg, const char *zName,
5153                        void (**pxFunc)(sqlite3_context*,int,sqlite3_value**),
5154                        void **ppArg);
5155   int (*xRename)(sqlite3_vtab *pVtab, const char *zNew);
5156 };
5157
5158 /*
5159 ** CAPI3REF: Virtual Table Indexing Information
5160 ** KEYWORDS: sqlite3_index_info
5161 **
5162 ** The sqlite3_index_info structure and its substructures is used as part
5163 ** of the [virtual table] interface to
5164 ** pass information into and receive the reply from the [xBestIndex]
5165 ** method of a [virtual table module].  The fields under **Inputs** are the
5166 ** inputs to xBestIndex and are read-only.  xBestIndex inserts its
5167 ** results into the **Outputs** fields.
5168 **
5169 ** ^(The aConstraint[] array records WHERE clause constraints of the form:
5170 **
5171 ** <blockquote>column OP expr</blockquote>
5172 **
5173 ** where OP is =, &lt;, &lt;=, &gt;, or &gt;=.)^  ^(The particular operator is
5174 ** stored in aConstraint[].op using one of the
5175 ** [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^
5176 ** ^(The index of the column is stored in
5177 ** aConstraint[].iColumn.)^  ^(aConstraint[].usable is TRUE if the
5178 ** expr on the right-hand side can be evaluated (and thus the constraint
5179 ** is usable) and false if it cannot.)^
5180 **
5181 ** ^The optimizer automatically inverts terms of the form "expr OP column"
5182 ** and makes other simplifications to the WHERE clause in an attempt to
5183 ** get as many WHERE clause terms into the form shown above as possible.
5184 ** ^The aConstraint[] array only reports WHERE clause terms that are
5185 ** relevant to the particular virtual table being queried.
5186 **
5187 ** ^Information about the ORDER BY clause is stored in aOrderBy[].
5188 ** ^Each term of aOrderBy records a column of the ORDER BY clause.
5189 **
5190 ** The [xBestIndex] method must fill aConstraintUsage[] with information
5191 ** about what parameters to pass to xFilter.  ^If argvIndex>0 then
5192 ** the right-hand side of the corresponding aConstraint[] is evaluated
5193 ** and becomes the argvIndex-th entry in argv.  ^(If aConstraintUsage[].omit
5194 ** is true, then the constraint is assumed to be fully handled by the
5195 ** virtual table and is not checked again by SQLite.)^
5196 **
5197 ** ^The idxNum and idxPtr values are recorded and passed into the
5198 ** [xFilter] method.
5199 ** ^[sqlite3_free()] is used to free idxPtr if and only if
5200 ** needToFreeIdxPtr is true.
5201 **
5202 ** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in
5203 ** the correct order to satisfy the ORDER BY clause so that no separate
5204 ** sorting step is required.
5205 **
5206 ** ^The estimatedCost value is an estimate of the cost of doing the
5207 ** particular lookup.  A full scan of a table with N entries should have
5208 ** a cost of N.  A binary search of a table of N entries should have a
5209 ** cost of approximately log(N).
5210 */
5211 struct sqlite3_index_info {
5212   /* Inputs */
5213   int nConstraint;           /* Number of entries in aConstraint */
5214   struct sqlite3_index_constraint {
5215      int iColumn;              /* Column on left-hand side of constraint */
5216      unsigned char op;         /* Constraint operator */
5217      unsigned char usable;     /* True if this constraint is usable */
5218      int iTermOffset;          /* Used internally - xBestIndex should ignore */
5219   } *aConstraint;            /* Table of WHERE clause constraints */
5220   int nOrderBy;              /* Number of terms in the ORDER BY clause */
5221   struct sqlite3_index_orderby {
5222      int iColumn;              /* Column number */
5223      unsigned char desc;       /* True for DESC.  False for ASC. */
5224   } *aOrderBy;               /* The ORDER BY clause */
5225   /* Outputs */
5226   struct sqlite3_index_constraint_usage {
5227     int argvIndex;           /* if >0, constraint is part of argv to xFilter */
5228     unsigned char omit;      /* Do not code a test for this constraint */
5229   } *aConstraintUsage;
5230   int idxNum;                /* Number used to identify the index */
5231   char *idxStr;              /* String, possibly obtained from sqlite3_malloc */
5232   int needToFreeIdxStr;      /* Free idxStr using sqlite3_free() if true */
5233   int orderByConsumed;       /* True if output is already ordered */
5234   double estimatedCost;      /* Estimated cost of using this index */
5235 };
5236
5237 /*
5238 ** CAPI3REF: Virtual Table Constraint Operator Codes
5239 **
5240 ** These macros defined the allowed values for the
5241 ** [sqlite3_index_info].aConstraint[].op field.  Each value represents
5242 ** an operator that is part of a constraint term in the wHERE clause of
5243 ** a query that uses a [virtual table].
5244 */
5245 #define SQLITE_INDEX_CONSTRAINT_EQ    2
5246 #define SQLITE_INDEX_CONSTRAINT_GT    4
5247 #define SQLITE_INDEX_CONSTRAINT_LE    8
5248 #define SQLITE_INDEX_CONSTRAINT_LT    16
5249 #define SQLITE_INDEX_CONSTRAINT_GE    32
5250 #define SQLITE_INDEX_CONSTRAINT_MATCH 64
5251
5252 /*
5253 ** CAPI3REF: Register A Virtual Table Implementation
5254 **
5255 ** ^These routines are used to register a new [virtual table module] name.
5256 ** ^Module names must be registered before
5257 ** creating a new [virtual table] using the module and before using a
5258 ** preexisting [virtual table] for the module.
5259 **
5260 ** ^The module name is registered on the [database connection] specified
5261 ** by the first parameter.  ^The name of the module is given by the 
5262 ** second parameter.  ^The third parameter is a pointer to
5263 ** the implementation of the [virtual table module].   ^The fourth
5264 ** parameter is an arbitrary client data pointer that is passed through
5265 ** into the [xCreate] and [xConnect] methods of the virtual table module
5266 ** when a new virtual table is be being created or reinitialized.
5267 **
5268 ** ^The sqlite3_create_module_v2() interface has a fifth parameter which
5269 ** is a pointer to a destructor for the pClientData.  ^SQLite will
5270 ** invoke the destructor function (if it is not NULL) when SQLite
5271 ** no longer needs the pClientData pointer.  ^The destructor will also
5272 ** be invoked if the call to sqlite3_create_module_v2() fails.
5273 ** ^The sqlite3_create_module()
5274 ** interface is equivalent to sqlite3_create_module_v2() with a NULL
5275 ** destructor.
5276 */
5277 SQLITE_API int sqlite3_create_module(
5278   sqlite3 *db,               /* SQLite connection to register module with */
5279   const char *zName,         /* Name of the module */
5280   const sqlite3_module *p,   /* Methods for the module */
5281   void *pClientData          /* Client data for xCreate/xConnect */
5282 );
5283 SQLITE_API int sqlite3_create_module_v2(
5284   sqlite3 *db,               /* SQLite connection to register module with */
5285   const char *zName,         /* Name of the module */
5286   const sqlite3_module *p,   /* Methods for the module */
5287   void *pClientData,         /* Client data for xCreate/xConnect */
5288   void(*xDestroy)(void*)     /* Module destructor function */
5289 );
5290
5291 /*
5292 ** CAPI3REF: Virtual Table Instance Object
5293 ** KEYWORDS: sqlite3_vtab
5294 **
5295 ** Every [virtual table module] implementation uses a subclass
5296 ** of this object to describe a particular instance
5297 ** of the [virtual table].  Each subclass will
5298 ** be tailored to the specific needs of the module implementation.
5299 ** The purpose of this superclass is to define certain fields that are
5300 ** common to all module implementations.
5301 **
5302 ** ^Virtual tables methods can set an error message by assigning a
5303 ** string obtained from [sqlite3_mprintf()] to zErrMsg.  The method should
5304 ** take care that any prior string is freed by a call to [sqlite3_free()]
5305 ** prior to assigning a new string to zErrMsg.  ^After the error message
5306 ** is delivered up to the client application, the string will be automatically
5307 ** freed by sqlite3_free() and the zErrMsg field will be zeroed.
5308 */
5309 struct sqlite3_vtab {
5310   const sqlite3_module *pModule;  /* The module for this virtual table */
5311   int nRef;                       /* NO LONGER USED */
5312   char *zErrMsg;                  /* Error message from sqlite3_mprintf() */
5313   /* Virtual table implementations will typically add additional fields */
5314 };
5315
5316 /*
5317 ** CAPI3REF: Virtual Table Cursor Object
5318 ** KEYWORDS: sqlite3_vtab_cursor {virtual table cursor}
5319 **
5320 ** Every [virtual table module] implementation uses a subclass of the
5321 ** following structure to describe cursors that point into the
5322 ** [virtual table] and are used
5323 ** to loop through the virtual table.  Cursors are created using the
5324 ** [sqlite3_module.xOpen | xOpen] method of the module and are destroyed
5325 ** by the [sqlite3_module.xClose | xClose] method.  Cursors are used
5326 ** by the [xFilter], [xNext], [xEof], [xColumn], and [xRowid] methods
5327 ** of the module.  Each module implementation will define
5328 ** the content of a cursor structure to suit its own needs.
5329 **
5330 ** This superclass exists in order to define fields of the cursor that
5331 ** are common to all implementations.
5332 */
5333 struct sqlite3_vtab_cursor {
5334   sqlite3_vtab *pVtab;      /* Virtual table of this cursor */
5335   /* Virtual table implementations will typically add additional fields */
5336 };
5337
5338 /*
5339 ** CAPI3REF: Declare The Schema Of A Virtual Table
5340 **
5341 ** ^The [xCreate] and [xConnect] methods of a
5342 ** [virtual table module] call this interface
5343 ** to declare the format (the names and datatypes of the columns) of
5344 ** the virtual tables they implement.
5345 */
5346 SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL);
5347
5348 /*
5349 ** CAPI3REF: Overload A Function For A Virtual Table
5350 **
5351 ** ^(Virtual tables can provide alternative implementations of functions
5352 ** using the [xFindFunction] method of the [virtual table module].  
5353 ** But global versions of those functions
5354 ** must exist in order to be overloaded.)^
5355 **
5356 ** ^(This API makes sure a global version of a function with a particular
5357 ** name and number of parameters exists.  If no such function exists
5358 ** before this API is called, a new function is created.)^  ^The implementation
5359 ** of the new function always causes an exception to be thrown.  So
5360 ** the new function is not good for anything by itself.  Its only
5361 ** purpose is to be a placeholder function that can be overloaded
5362 ** by a [virtual table].
5363 */
5364 SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg);
5365
5366 /*
5367 ** The interface to the virtual-table mechanism defined above (back up
5368 ** to a comment remarkably similar to this one) is currently considered
5369 ** to be experimental.  The interface might change in incompatible ways.
5370 ** If this is a problem for you, do not use the interface at this time.
5371 **
5372 ** When the virtual-table mechanism stabilizes, we will declare the
5373 ** interface fixed, support it indefinitely, and remove this comment.
5374 */
5375
5376 /*
5377 ** CAPI3REF: A Handle To An Open BLOB
5378 ** KEYWORDS: {BLOB handle} {BLOB handles}
5379 **
5380 ** An instance of this object represents an open BLOB on which
5381 ** [sqlite3_blob_open | incremental BLOB I/O] can be performed.
5382 ** ^Objects of this type are created by [sqlite3_blob_open()]
5383 ** and destroyed by [sqlite3_blob_close()].
5384 ** ^The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces
5385 ** can be used to read or write small subsections of the BLOB.
5386 ** ^The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes.
5387 */
5388 typedef struct sqlite3_blob sqlite3_blob;
5389
5390 /*
5391 ** CAPI3REF: Open A BLOB For Incremental I/O
5392 **
5393 ** ^(This interfaces opens a [BLOB handle | handle] to the BLOB located
5394 ** in row iRow, column zColumn, table zTable in database zDb;
5395 ** in other words, the same BLOB that would be selected by:
5396 **
5397 ** <pre>
5398 **     SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
5399 ** </pre>)^
5400 **
5401 ** ^If the flags parameter is non-zero, then the BLOB is opened for read
5402 ** and write access. ^If it is zero, the BLOB is opened for read access.
5403 ** ^It is not possible to open a column that is part of an index or primary 
5404 ** key for writing. ^If [foreign key constraints] are enabled, it is 
5405 ** not possible to open a column that is part of a [child key] for writing.
5406 **
5407 ** ^Note that the database name is not the filename that contains
5408 ** the database but rather the symbolic name of the database that
5409 ** appears after the AS keyword when the database is connected using [ATTACH].
5410 ** ^For the main database file, the database name is "main".
5411 ** ^For TEMP tables, the database name is "temp".
5412 **
5413 ** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written
5414 ** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set
5415 ** to be a null pointer.)^
5416 ** ^This function sets the [database connection] error code and message
5417 ** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related
5418 ** functions. ^Note that the *ppBlob variable is always initialized in a
5419 ** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob
5420 ** regardless of the success or failure of this routine.
5421 **
5422 ** ^(If the row that a BLOB handle points to is modified by an
5423 ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects
5424 ** then the BLOB handle is marked as "expired".
5425 ** This is true if any column of the row is changed, even a column
5426 ** other than the one the BLOB handle is open on.)^
5427 ** ^Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for
5428 ** an expired BLOB handle fail with a return code of [SQLITE_ABORT].
5429 ** ^(Changes written into a BLOB prior to the BLOB expiring are not
5430 ** rolled back by the expiration of the BLOB.  Such changes will eventually
5431 ** commit if the transaction continues to completion.)^
5432 **
5433 ** ^Use the [sqlite3_blob_bytes()] interface to determine the size of
5434 ** the opened blob.  ^The size of a blob may not be changed by this
5435 ** interface.  Use the [UPDATE] SQL command to change the size of a
5436 ** blob.
5437 **
5438 ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces
5439 ** and the built-in [zeroblob] SQL function can be used, if desired,
5440 ** to create an empty, zero-filled blob in which to read or write using
5441 ** this interface.
5442 **
5443 ** To avoid a resource leak, every open [BLOB handle] should eventually
5444 ** be released by a call to [sqlite3_blob_close()].
5445 */
5446 SQLITE_API int sqlite3_blob_open(
5447   sqlite3*,
5448   const char *zDb,
5449   const char *zTable,
5450   const char *zColumn,
5451   sqlite3_int64 iRow,
5452   int flags,
5453   sqlite3_blob **ppBlob
5454 );
5455
5456 /*
5457 ** CAPI3REF: Move a BLOB Handle to a New Row
5458 **
5459 ** ^This function is used to move an existing blob handle so that it points
5460 ** to a different row of the same database table. ^The new row is identified
5461 ** by the rowid value passed as the second argument. Only the row can be
5462 ** changed. ^The database, table and column on which the blob handle is open
5463 ** remain the same. Moving an existing blob handle to a new row can be
5464 ** faster than closing the existing handle and opening a new one.
5465 **
5466 ** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] -
5467 ** it must exist and there must be either a blob or text value stored in
5468 ** the nominated column.)^ ^If the new row is not present in the table, or if
5469 ** it does not contain a blob or text value, or if another error occurs, an
5470 ** SQLite error code is returned and the blob handle is considered aborted.
5471 ** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or
5472 ** [sqlite3_blob_reopen()] on an aborted blob handle immediately return
5473 ** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle
5474 ** always returns zero.
5475 **
5476 ** ^This function sets the database handle error code and message.
5477 */
5478 SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
5479
5480 /*
5481 ** CAPI3REF: Close A BLOB Handle
5482 **
5483 ** ^Closes an open [BLOB handle].
5484 **
5485 ** ^Closing a BLOB shall cause the current transaction to commit
5486 ** if there are no other BLOBs, no pending prepared statements, and the
5487 ** database connection is in [autocommit mode].
5488 ** ^If any writes were made to the BLOB, they might be held in cache
5489 ** until the close operation if they will fit.
5490 **
5491 ** ^(Closing the BLOB often forces the changes
5492 ** out to disk and so if any I/O errors occur, they will likely occur
5493 ** at the time when the BLOB is closed.  Any errors that occur during
5494 ** closing are reported as a non-zero return value.)^
5495 **
5496 ** ^(The BLOB is closed unconditionally.  Even if this routine returns
5497 ** an error code, the BLOB is still closed.)^
5498 **
5499 ** ^Calling this routine with a null pointer (such as would be returned
5500 ** by a failed call to [sqlite3_blob_open()]) is a harmless no-op.
5501 */
5502 SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
5503
5504 /*
5505 ** CAPI3REF: Return The Size Of An Open BLOB
5506 **
5507 ** ^Returns the size in bytes of the BLOB accessible via the 
5508 ** successfully opened [BLOB handle] in its only argument.  ^The
5509 ** incremental blob I/O routines can only read or overwriting existing
5510 ** blob content; they cannot change the size of a blob.
5511 **
5512 ** This routine only works on a [BLOB handle] which has been created
5513 ** by a prior successful call to [sqlite3_blob_open()] and which has not
5514 ** been closed by [sqlite3_blob_close()].  Passing any other pointer in
5515 ** to this routine results in undefined and probably undesirable behavior.
5516 */
5517 SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *);
5518
5519 /*
5520 ** CAPI3REF: Read Data From A BLOB Incrementally
5521 **
5522 ** ^(This function is used to read data from an open [BLOB handle] into a
5523 ** caller-supplied buffer. N bytes of data are copied into buffer Z
5524 ** from the open BLOB, starting at offset iOffset.)^
5525 **
5526 ** ^If offset iOffset is less than N bytes from the end of the BLOB,
5527 ** [SQLITE_ERROR] is returned and no data is read.  ^If N or iOffset is
5528 ** less than zero, [SQLITE_ERROR] is returned and no data is read.
5529 ** ^The size of the blob (and hence the maximum value of N+iOffset)
5530 ** can be determined using the [sqlite3_blob_bytes()] interface.
5531 **
5532 ** ^An attempt to read from an expired [BLOB handle] fails with an
5533 ** error code of [SQLITE_ABORT].
5534 **
5535 ** ^(On success, sqlite3_blob_read() returns SQLITE_OK.
5536 ** Otherwise, an [error code] or an [extended error code] is returned.)^
5537 **
5538 ** This routine only works on a [BLOB handle] which has been created
5539 ** by a prior successful call to [sqlite3_blob_open()] and which has not
5540 ** been closed by [sqlite3_blob_close()].  Passing any other pointer in
5541 ** to this routine results in undefined and probably undesirable behavior.
5542 **
5543 ** See also: [sqlite3_blob_write()].
5544 */
5545 SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
5546
5547 /*
5548 ** CAPI3REF: Write Data Into A BLOB Incrementally
5549 **
5550 ** ^This function is used to write data into an open [BLOB handle] from a
5551 ** caller-supplied buffer. ^N bytes of data are copied from the buffer Z
5552 ** into the open BLOB, starting at offset iOffset.
5553 **
5554 ** ^If the [BLOB handle] passed as the first argument was not opened for
5555 ** writing (the flags parameter to [sqlite3_blob_open()] was zero),
5556 ** this function returns [SQLITE_READONLY].
5557 **
5558 ** ^This function may only modify the contents of the BLOB; it is
5559 ** not possible to increase the size of a BLOB using this API.
5560 ** ^If offset iOffset is less than N bytes from the end of the BLOB,
5561 ** [SQLITE_ERROR] is returned and no data is written.  ^If N is
5562 ** less than zero [SQLITE_ERROR] is returned and no data is written.
5563 ** The size of the BLOB (and hence the maximum value of N+iOffset)
5564 ** can be determined using the [sqlite3_blob_bytes()] interface.
5565 **
5566 ** ^An attempt to write to an expired [BLOB handle] fails with an
5567 ** error code of [SQLITE_ABORT].  ^Writes to the BLOB that occurred
5568 ** before the [BLOB handle] expired are not rolled back by the
5569 ** expiration of the handle, though of course those changes might
5570 ** have been overwritten by the statement that expired the BLOB handle
5571 ** or by other independent statements.
5572 **
5573 ** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
5574 ** Otherwise, an  [error code] or an [extended error code] is returned.)^
5575 **
5576 ** This routine only works on a [BLOB handle] which has been created
5577 ** by a prior successful call to [sqlite3_blob_open()] and which has not
5578 ** been closed by [sqlite3_blob_close()].  Passing any other pointer in
5579 ** to this routine results in undefined and probably undesirable behavior.
5580 **
5581 ** See also: [sqlite3_blob_read()].
5582 */
5583 SQLITE_API int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset);
5584
5585 /*
5586 ** CAPI3REF: Virtual File System Objects
5587 **
5588 ** A virtual filesystem (VFS) is an [sqlite3_vfs] object
5589 ** that SQLite uses to interact
5590 ** with the underlying operating system.  Most SQLite builds come with a
5591 ** single default VFS that is appropriate for the host computer.
5592 ** New VFSes can be registered and existing VFSes can be unregistered.
5593 ** The following interfaces are provided.
5594 **
5595 ** ^The sqlite3_vfs_find() interface returns a pointer to a VFS given its name.
5596 ** ^Names are case sensitive.
5597 ** ^Names are zero-terminated UTF-8 strings.
5598 ** ^If there is no match, a NULL pointer is returned.
5599 ** ^If zVfsName is NULL then the default VFS is returned.
5600 **
5601 ** ^New VFSes are registered with sqlite3_vfs_register().
5602 ** ^Each new VFS becomes the default VFS if the makeDflt flag is set.
5603 ** ^The same VFS can be registered multiple times without injury.
5604 ** ^To make an existing VFS into the default VFS, register it again
5605 ** with the makeDflt flag set.  If two different VFSes with the
5606 ** same name are registered, the behavior is undefined.  If a
5607 ** VFS is registered with a name that is NULL or an empty string,
5608 ** then the behavior is undefined.
5609 **
5610 ** ^Unregister a VFS with the sqlite3_vfs_unregister() interface.
5611 ** ^(If the default VFS is unregistered, another VFS is chosen as
5612 ** the default.  The choice for the new VFS is arbitrary.)^
5613 */
5614 SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
5615 SQLITE_API int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
5616 SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*);
5617
5618 /*
5619 ** CAPI3REF: Mutexes
5620 **
5621 ** The SQLite core uses these routines for thread
5622 ** synchronization. Though they are intended for internal
5623 ** use by SQLite, code that links against SQLite is
5624 ** permitted to use any of these routines.
5625 **
5626 ** The SQLite source code contains multiple implementations
5627 ** of these mutex routines.  An appropriate implementation
5628 ** is selected automatically at compile-time.  ^(The following
5629 ** implementations are available in the SQLite core:
5630 **
5631 ** <ul>
5632 ** <li>   SQLITE_MUTEX_OS2
5633 ** <li>   SQLITE_MUTEX_PTHREAD
5634 ** <li>   SQLITE_MUTEX_W32
5635 ** <li>   SQLITE_MUTEX_NOOP
5636 ** </ul>)^
5637 **
5638 ** ^The SQLITE_MUTEX_NOOP implementation is a set of routines
5639 ** that does no real locking and is appropriate for use in
5640 ** a single-threaded application.  ^The SQLITE_MUTEX_OS2,
5641 ** SQLITE_MUTEX_PTHREAD, and SQLITE_MUTEX_W32 implementations
5642 ** are appropriate for use on OS/2, Unix, and Windows.
5643 **
5644 ** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
5645 ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex
5646 ** implementation is included with the library. In this case the
5647 ** application must supply a custom mutex implementation using the
5648 ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function
5649 ** before calling sqlite3_initialize() or any other public sqlite3_
5650 ** function that calls sqlite3_initialize().)^
5651 **
5652 ** ^The sqlite3_mutex_alloc() routine allocates a new
5653 ** mutex and returns a pointer to it. ^If it returns NULL
5654 ** that means that a mutex could not be allocated.  ^SQLite
5655 ** will unwind its stack and return an error.  ^(The argument
5656 ** to sqlite3_mutex_alloc() is one of these integer constants:
5657 **
5658 ** <ul>
5659 ** <li>  SQLITE_MUTEX_FAST
5660 ** <li>  SQLITE_MUTEX_RECURSIVE
5661 ** <li>  SQLITE_MUTEX_STATIC_MASTER
5662 ** <li>  SQLITE_MUTEX_STATIC_MEM
5663 ** <li>  SQLITE_MUTEX_STATIC_MEM2
5664 ** <li>  SQLITE_MUTEX_STATIC_PRNG
5665 ** <li>  SQLITE_MUTEX_STATIC_LRU
5666 ** <li>  SQLITE_MUTEX_STATIC_LRU2
5667 ** </ul>)^
5668 **
5669 ** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
5670 ** cause sqlite3_mutex_alloc() to create
5671 ** a new mutex.  ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
5672 ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
5673 ** The mutex implementation does not need to make a distinction
5674 ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
5675 ** not want to.  ^SQLite will only request a recursive mutex in
5676 ** cases where it really needs one.  ^If a faster non-recursive mutex
5677 ** implementation is available on the host platform, the mutex subsystem
5678 ** might return such a mutex in response to SQLITE_MUTEX_FAST.
5679 **
5680 ** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other
5681 ** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
5682 ** a pointer to a static preexisting mutex.  ^Six static mutexes are
5683 ** used by the current version of SQLite.  Future versions of SQLite
5684 ** may add additional static mutexes.  Static mutexes are for internal
5685 ** use by SQLite only.  Applications that use SQLite mutexes should
5686 ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
5687 ** SQLITE_MUTEX_RECURSIVE.
5688 **
5689 ** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
5690 ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
5691 ** returns a different mutex on every call.  ^But for the static
5692 ** mutex types, the same mutex is returned on every call that has
5693 ** the same type number.
5694 **
5695 ** ^The sqlite3_mutex_free() routine deallocates a previously
5696 ** allocated dynamic mutex.  ^SQLite is careful to deallocate every
5697 ** dynamic mutex that it allocates.  The dynamic mutexes must not be in
5698 ** use when they are deallocated.  Attempting to deallocate a static
5699 ** mutex results in undefined behavior.  ^SQLite never deallocates
5700 ** a static mutex.
5701 **
5702 ** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
5703 ** to enter a mutex.  ^If another thread is already within the mutex,
5704 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
5705 ** SQLITE_BUSY.  ^The sqlite3_mutex_try() interface returns [SQLITE_OK]
5706 ** upon successful entry.  ^(Mutexes created using
5707 ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
5708 ** In such cases the,
5709 ** mutex must be exited an equal number of times before another thread
5710 ** can enter.)^  ^(If the same thread tries to enter any other
5711 ** kind of mutex more than once, the behavior is undefined.
5712 ** SQLite will never exhibit
5713 ** such behavior in its own use of mutexes.)^
5714 **
5715 ** ^(Some systems (for example, Windows 95) do not support the operation
5716 ** implemented by sqlite3_mutex_try().  On those systems, sqlite3_mutex_try()
5717 ** will always return SQLITE_BUSY.  The SQLite core only ever uses
5718 ** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^
5719 **
5720 ** ^The sqlite3_mutex_leave() routine exits a mutex that was
5721 ** previously entered by the same thread.   ^(The behavior
5722 ** is undefined if the mutex is not currently entered by the
5723 ** calling thread or is not currently allocated.  SQLite will
5724 ** never do either.)^
5725 **
5726 ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
5727 ** sqlite3_mutex_leave() is a NULL pointer, then all three routines
5728 ** behave as no-ops.
5729 **
5730 ** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()].
5731 */
5732 SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int);
5733 SQLITE_API void sqlite3_mutex_free(sqlite3_mutex*);
5734 SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex*);
5735 SQLITE_API int sqlite3_mutex_try(sqlite3_mutex*);
5736 SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*);
5737
5738 /*
5739 ** CAPI3REF: Mutex Methods Object
5740 **
5741 ** An instance of this structure defines the low-level routines
5742 ** used to allocate and use mutexes.
5743 **
5744 ** Usually, the default mutex implementations provided by SQLite are
5745 ** sufficient, however the user has the option of substituting a custom
5746 ** implementation for specialized deployments or systems for which SQLite
5747 ** does not provide a suitable implementation. In this case, the user
5748 ** creates and populates an instance of this structure to pass
5749 ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
5750 ** Additionally, an instance of this structure can be used as an
5751 ** output variable when querying the system for the current mutex
5752 ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
5753 **
5754 ** ^The xMutexInit method defined by this structure is invoked as
5755 ** part of system initialization by the sqlite3_initialize() function.
5756 ** ^The xMutexInit routine is called by SQLite exactly once for each
5757 ** effective call to [sqlite3_initialize()].
5758 **
5759 ** ^The xMutexEnd method defined by this structure is invoked as
5760 ** part of system shutdown by the sqlite3_shutdown() function. The
5761 ** implementation of this method is expected to release all outstanding
5762 ** resources obtained by the mutex methods implementation, especially
5763 ** those obtained by the xMutexInit method.  ^The xMutexEnd()
5764 ** interface is invoked exactly once for each call to [sqlite3_shutdown()].
5765 **
5766 ** ^(The remaining seven methods defined by this structure (xMutexAlloc,
5767 ** xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and
5768 ** xMutexNotheld) implement the following interfaces (respectively):
5769 **
5770 ** <ul>
5771 **   <li>  [sqlite3_mutex_alloc()] </li>
5772 **   <li>  [sqlite3_mutex_free()] </li>
5773 **   <li>  [sqlite3_mutex_enter()] </li>
5774 **   <li>  [sqlite3_mutex_try()] </li>
5775 **   <li>  [sqlite3_mutex_leave()] </li>
5776 **   <li>  [sqlite3_mutex_held()] </li>
5777 **   <li>  [sqlite3_mutex_notheld()] </li>
5778 ** </ul>)^
5779 **
5780 ** The only difference is that the public sqlite3_XXX functions enumerated
5781 ** above silently ignore any invocations that pass a NULL pointer instead
5782 ** of a valid mutex handle. The implementations of the methods defined
5783 ** by this structure are not required to handle this case, the results
5784 ** of passing a NULL pointer instead of a valid mutex handle are undefined
5785 ** (i.e. it is acceptable to provide an implementation that segfaults if
5786 ** it is passed a NULL pointer).
5787 **
5788 ** The xMutexInit() method must be threadsafe.  ^It must be harmless to
5789 ** invoke xMutexInit() multiple times within the same process and without
5790 ** intervening calls to xMutexEnd().  Second and subsequent calls to
5791 ** xMutexInit() must be no-ops.
5792 **
5793 ** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
5794 ** and its associates).  ^Similarly, xMutexAlloc() must not use SQLite memory
5795 ** allocation for a static mutex.  ^However xMutexAlloc() may use SQLite
5796 ** memory allocation for a fast or recursive mutex.
5797 **
5798 ** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
5799 ** called, but only if the prior call to xMutexInit returned SQLITE_OK.
5800 ** If xMutexInit fails in any way, it is expected to clean up after itself
5801 ** prior to returning.
5802 */
5803 typedef struct sqlite3_mutex_methods sqlite3_mutex_methods;
5804 struct sqlite3_mutex_methods {
5805   int (*xMutexInit)(void);
5806   int (*xMutexEnd)(void);
5807   sqlite3_mutex *(*xMutexAlloc)(int);
5808   void (*xMutexFree)(sqlite3_mutex *);
5809   void (*xMutexEnter)(sqlite3_mutex *);
5810   int (*xMutexTry)(sqlite3_mutex *);
5811   void (*xMutexLeave)(sqlite3_mutex *);
5812   int (*xMutexHeld)(sqlite3_mutex *);
5813   int (*xMutexNotheld)(sqlite3_mutex *);
5814 };
5815
5816 /*
5817 ** CAPI3REF: Mutex Verification Routines
5818 **
5819 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
5820 ** are intended for use inside assert() statements.  ^The SQLite core
5821 ** never uses these routines except inside an assert() and applications
5822 ** are advised to follow the lead of the core.  ^The SQLite core only
5823 ** provides implementations for these routines when it is compiled
5824 ** with the SQLITE_DEBUG flag.  ^External mutex implementations
5825 ** are only required to provide these routines if SQLITE_DEBUG is
5826 ** defined and if NDEBUG is not defined.
5827 **
5828 ** ^These routines should return true if the mutex in their argument
5829 ** is held or not held, respectively, by the calling thread.
5830 **
5831 ** ^The implementation is not required to provided versions of these
5832 ** routines that actually work. If the implementation does not provide working
5833 ** versions of these routines, it should at least provide stubs that always
5834 ** return true so that one does not get spurious assertion failures.
5835 **
5836 ** ^If the argument to sqlite3_mutex_held() is a NULL pointer then
5837 ** the routine should return 1.   This seems counter-intuitive since
5838 ** clearly the mutex cannot be held if it does not exist.  But the
5839 ** the reason the mutex does not exist is because the build is not
5840 ** using mutexes.  And we do not want the assert() containing the
5841 ** call to sqlite3_mutex_held() to fail, so a non-zero return is
5842 ** the appropriate thing to do.  ^The sqlite3_mutex_notheld()
5843 ** interface should also return 1 when given a NULL pointer.
5844 */
5845 #ifndef NDEBUG
5846 SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*);
5847 SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
5848 #endif
5849
5850 /*
5851 ** CAPI3REF: Mutex Types
5852 **
5853 ** The [sqlite3_mutex_alloc()] interface takes a single argument
5854 ** which is one of these integer constants.
5855 **
5856 ** The set of static mutexes may change from one SQLite release to the
5857 ** next.  Applications that override the built-in mutex logic must be
5858 ** prepared to accommodate additional static mutexes.
5859 */
5860 #define SQLITE_MUTEX_FAST             0
5861 #define SQLITE_MUTEX_RECURSIVE        1
5862 #define SQLITE_MUTEX_STATIC_MASTER    2
5863 #define SQLITE_MUTEX_STATIC_MEM       3  /* sqlite3_malloc() */
5864 #define SQLITE_MUTEX_STATIC_MEM2      4  /* NOT USED */
5865 #define SQLITE_MUTEX_STATIC_OPEN      4  /* sqlite3BtreeOpen() */
5866 #define SQLITE_MUTEX_STATIC_PRNG      5  /* sqlite3_random() */
5867 #define SQLITE_MUTEX_STATIC_LRU       6  /* lru page list */
5868 #define SQLITE_MUTEX_STATIC_LRU2      7  /* NOT USED */
5869 #define SQLITE_MUTEX_STATIC_PMEM      7  /* sqlite3PageMalloc() */
5870
5871 /*
5872 ** CAPI3REF: Retrieve the mutex for a database connection
5873 **
5874 ** ^This interface returns a pointer the [sqlite3_mutex] object that 
5875 ** serializes access to the [database connection] given in the argument
5876 ** when the [threading mode] is Serialized.
5877 ** ^If the [threading mode] is Single-thread or Multi-thread then this
5878 ** routine returns a NULL pointer.
5879 */
5880 SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
5881
5882 /*
5883 ** CAPI3REF: Low-Level Control Of Database Files
5884 **
5885 ** ^The [sqlite3_file_control()] interface makes a direct call to the
5886 ** xFileControl method for the [sqlite3_io_methods] object associated
5887 ** with a particular database identified by the second argument. ^The
5888 ** name of the database is "main" for the main database or "temp" for the
5889 ** TEMP database, or the name that appears after the AS keyword for
5890 ** databases that are added using the [ATTACH] SQL command.
5891 ** ^A NULL pointer can be used in place of "main" to refer to the
5892 ** main database file.
5893 ** ^The third and fourth parameters to this routine
5894 ** are passed directly through to the second and third parameters of
5895 ** the xFileControl method.  ^The return value of the xFileControl
5896 ** method becomes the return value of this routine.
5897 **
5898 ** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes
5899 ** a pointer to the underlying [sqlite3_file] object to be written into
5900 ** the space pointed to by the 4th parameter.  ^The SQLITE_FCNTL_FILE_POINTER
5901 ** case is a short-circuit path which does not actually invoke the
5902 ** underlying sqlite3_io_methods.xFileControl method.
5903 **
5904 ** ^If the second parameter (zDbName) does not match the name of any
5905 ** open database file, then SQLITE_ERROR is returned.  ^This error
5906 ** code is not remembered and will not be recalled by [sqlite3_errcode()]
5907 ** or [sqlite3_errmsg()].  The underlying xFileControl method might
5908 ** also return SQLITE_ERROR.  There is no way to distinguish between
5909 ** an incorrect zDbName and an SQLITE_ERROR return from the underlying
5910 ** xFileControl method.
5911 **
5912 ** See also: [SQLITE_FCNTL_LOCKSTATE]
5913 */
5914 SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*);
5915
5916 /*
5917 ** CAPI3REF: Testing Interface
5918 **
5919 ** ^The sqlite3_test_control() interface is used to read out internal
5920 ** state of SQLite and to inject faults into SQLite for testing
5921 ** purposes.  ^The first parameter is an operation code that determines
5922 ** the number, meaning, and operation of all subsequent parameters.
5923 **
5924 ** This interface is not for use by applications.  It exists solely
5925 ** for verifying the correct operation of the SQLite library.  Depending
5926 ** on how the SQLite library is compiled, this interface might not exist.
5927 **
5928 ** The details of the operation codes, their meanings, the parameters
5929 ** they take, and what they do are all subject to change without notice.
5930 ** Unlike most of the SQLite API, this function is not guaranteed to
5931 ** operate consistently from one release to the next.
5932 */
5933 SQLITE_API int sqlite3_test_control(int op, ...);
5934
5935 /*
5936 ** CAPI3REF: Testing Interface Operation Codes
5937 **
5938 ** These constants are the valid operation code parameters used
5939 ** as the first argument to [sqlite3_test_control()].
5940 **
5941 ** These parameters and their meanings are subject to change
5942 ** without notice.  These values are for testing purposes only.
5943 ** Applications should not use any of these parameters or the
5944 ** [sqlite3_test_control()] interface.
5945 */
5946 #define SQLITE_TESTCTRL_FIRST                    5
5947 #define SQLITE_TESTCTRL_PRNG_SAVE                5
5948 #define SQLITE_TESTCTRL_PRNG_RESTORE             6
5949 #define SQLITE_TESTCTRL_PRNG_RESET               7
5950 #define SQLITE_TESTCTRL_BITVEC_TEST              8
5951 #define SQLITE_TESTCTRL_FAULT_INSTALL            9
5952 #define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS     10
5953 #define SQLITE_TESTCTRL_PENDING_BYTE            11
5954 #define SQLITE_TESTCTRL_ASSERT                  12
5955 #define SQLITE_TESTCTRL_ALWAYS                  13
5956 #define SQLITE_TESTCTRL_RESERVE                 14
5957 #define SQLITE_TESTCTRL_OPTIMIZATIONS           15
5958 #define SQLITE_TESTCTRL_ISKEYWORD               16
5959 #define SQLITE_TESTCTRL_PGHDRSZ                 17
5960 #define SQLITE_TESTCTRL_SCRATCHMALLOC           18
5961 #define SQLITE_TESTCTRL_LAST                    18
5962
5963 /*
5964 ** CAPI3REF: SQLite Runtime Status
5965 **
5966 ** ^This interface is used to retrieve runtime status information
5967 ** about the performance of SQLite, and optionally to reset various
5968 ** highwater marks.  ^The first argument is an integer code for
5969 ** the specific parameter to measure.  ^(Recognized integer codes
5970 ** are of the form [SQLITE_STATUS_MEMORY_USED | SQLITE_STATUS_...].)^
5971 ** ^The current value of the parameter is returned into *pCurrent.
5972 ** ^The highest recorded value is returned in *pHighwater.  ^If the
5973 ** resetFlag is true, then the highest record value is reset after
5974 ** *pHighwater is written.  ^(Some parameters do not record the highest
5975 ** value.  For those parameters
5976 ** nothing is written into *pHighwater and the resetFlag is ignored.)^
5977 ** ^(Other parameters record only the highwater mark and not the current
5978 ** value.  For these latter parameters nothing is written into *pCurrent.)^
5979 **
5980 ** ^The sqlite3_status() routine returns SQLITE_OK on success and a
5981 ** non-zero [error code] on failure.
5982 **
5983 ** This routine is threadsafe but is not atomic.  This routine can be
5984 ** called while other threads are running the same or different SQLite
5985 ** interfaces.  However the values returned in *pCurrent and
5986 ** *pHighwater reflect the status of SQLite at different points in time
5987 ** and it is possible that another thread might change the parameter
5988 ** in between the times when *pCurrent and *pHighwater are written.
5989 **
5990 ** See also: [sqlite3_db_status()]
5991 */
5992 SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag);
5993
5994
5995 /*
5996 ** CAPI3REF: Status Parameters
5997 **
5998 ** These integer constants designate various run-time status parameters
5999 ** that can be returned by [sqlite3_status()].
6000 **
6001 ** <dl>
6002 ** ^(<dt>SQLITE_STATUS_MEMORY_USED</dt>
6003 ** <dd>This parameter is the current amount of memory checked out
6004 ** using [sqlite3_malloc()], either directly or indirectly.  The
6005 ** figure includes calls made to [sqlite3_malloc()] by the application
6006 ** and internal memory usage by the SQLite library.  Scratch memory
6007 ** controlled by [SQLITE_CONFIG_SCRATCH] and auxiliary page-cache
6008 ** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in
6009 ** this parameter.  The amount returned is the sum of the allocation
6010 ** sizes as reported by the xSize method in [sqlite3_mem_methods].</dd>)^
6011 **
6012 ** ^(<dt>SQLITE_STATUS_MALLOC_SIZE</dt>
6013 ** <dd>This parameter records the largest memory allocation request
6014 ** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their
6015 ** internal equivalents).  Only the value returned in the
6016 ** *pHighwater parameter to [sqlite3_status()] is of interest.  
6017 ** The value written into the *pCurrent parameter is undefined.</dd>)^
6018 **
6019 ** ^(<dt>SQLITE_STATUS_MALLOC_COUNT</dt>
6020 ** <dd>This parameter records the number of separate memory allocations
6021 ** currently checked out.</dd>)^
6022 **
6023 ** ^(<dt>SQLITE_STATUS_PAGECACHE_USED</dt>
6024 ** <dd>This parameter returns the number of pages used out of the
6025 ** [pagecache memory allocator] that was configured using 
6026 ** [SQLITE_CONFIG_PAGECACHE].  The
6027 ** value returned is in pages, not in bytes.</dd>)^
6028 **
6029 ** ^(<dt>SQLITE_STATUS_PAGECACHE_OVERFLOW</dt>
6030 ** <dd>This parameter returns the number of bytes of page cache
6031 ** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE]
6032 ** buffer and where forced to overflow to [sqlite3_malloc()].  The
6033 ** returned value includes allocations that overflowed because they
6034 ** where too large (they were larger than the "sz" parameter to
6035 ** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because
6036 ** no space was left in the page cache.</dd>)^
6037 **
6038 ** ^(<dt>SQLITE_STATUS_PAGECACHE_SIZE</dt>
6039 ** <dd>This parameter records the largest memory allocation request
6040 ** handed to [pagecache memory allocator].  Only the value returned in the
6041 ** *pHighwater parameter to [sqlite3_status()] is of interest.  
6042 ** The value written into the *pCurrent parameter is undefined.</dd>)^
6043 **
6044 ** ^(<dt>SQLITE_STATUS_SCRATCH_USED</dt>
6045 ** <dd>This parameter returns the number of allocations used out of the
6046 ** [scratch memory allocator] configured using
6047 ** [SQLITE_CONFIG_SCRATCH].  The value returned is in allocations, not
6048 ** in bytes.  Since a single thread may only have one scratch allocation
6049 ** outstanding at time, this parameter also reports the number of threads
6050 ** using scratch memory at the same time.</dd>)^
6051 **
6052 ** ^(<dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt>
6053 ** <dd>This parameter returns the number of bytes of scratch memory
6054 ** allocation which could not be satisfied by the [SQLITE_CONFIG_SCRATCH]
6055 ** buffer and where forced to overflow to [sqlite3_malloc()].  The values
6056 ** returned include overflows because the requested allocation was too
6057 ** larger (that is, because the requested allocation was larger than the
6058 ** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer
6059 ** slots were available.
6060 ** </dd>)^
6061 **
6062 ** ^(<dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
6063 ** <dd>This parameter records the largest memory allocation request
6064 ** handed to [scratch memory allocator].  Only the value returned in the
6065 ** *pHighwater parameter to [sqlite3_status()] is of interest.  
6066 ** The value written into the *pCurrent parameter is undefined.</dd>)^
6067 **
6068 ** ^(<dt>SQLITE_STATUS_PARSER_STACK</dt>
6069 ** <dd>This parameter records the deepest parser stack.  It is only
6070 ** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].</dd>)^
6071 ** </dl>
6072 **
6073 ** New status parameters may be added from time to time.
6074 */
6075 #define SQLITE_STATUS_MEMORY_USED          0
6076 #define SQLITE_STATUS_PAGECACHE_USED       1
6077 #define SQLITE_STATUS_PAGECACHE_OVERFLOW   2
6078 #define SQLITE_STATUS_SCRATCH_USED         3
6079 #define SQLITE_STATUS_SCRATCH_OVERFLOW     4
6080 #define SQLITE_STATUS_MALLOC_SIZE          5
6081 #define SQLITE_STATUS_PARSER_STACK         6
6082 #define SQLITE_STATUS_PAGECACHE_SIZE       7
6083 #define SQLITE_STATUS_SCRATCH_SIZE         8
6084 #define SQLITE_STATUS_MALLOC_COUNT         9
6085
6086 /*
6087 ** CAPI3REF: Database Connection Status
6088 **
6089 ** ^This interface is used to retrieve runtime status information 
6090 ** about a single [database connection].  ^The first argument is the
6091 ** database connection object to be interrogated.  ^The second argument
6092 ** is an integer constant, taken from the set of
6093 ** [SQLITE_DBSTATUS_LOOKASIDE_USED | SQLITE_DBSTATUS_*] macros, that
6094 ** determines the parameter to interrogate.  The set of 
6095 ** [SQLITE_DBSTATUS_LOOKASIDE_USED | SQLITE_DBSTATUS_*] macros is likely
6096 ** to grow in future releases of SQLite.
6097 **
6098 ** ^The current value of the requested parameter is written into *pCur
6099 ** and the highest instantaneous value is written into *pHiwtr.  ^If
6100 ** the resetFlg is true, then the highest instantaneous value is
6101 ** reset back down to the current value.
6102 **
6103 ** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a
6104 ** non-zero [error code] on failure.
6105 **
6106 ** See also: [sqlite3_status()] and [sqlite3_stmt_status()].
6107 */
6108 SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg);
6109
6110 /*
6111 ** CAPI3REF: Status Parameters for database connections
6112 **
6113 ** These constants are the available integer "verbs" that can be passed as
6114 ** the second argument to the [sqlite3_db_status()] interface.
6115 **
6116 ** New verbs may be added in future releases of SQLite. Existing verbs
6117 ** might be discontinued. Applications should check the return code from
6118 ** [sqlite3_db_status()] to make sure that the call worked.
6119 ** The [sqlite3_db_status()] interface will return a non-zero error code
6120 ** if a discontinued or unsupported verb is invoked.
6121 **
6122 ** <dl>
6123 ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_USED</dt>
6124 ** <dd>This parameter returns the number of lookaside memory slots currently
6125 ** checked out.</dd>)^
6126 **
6127 ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt>
6128 ** <dd>This parameter returns the number malloc attempts that were 
6129 ** satisfied using lookaside memory. Only the high-water value is meaningful;
6130 ** the current value is always zero.)^
6131 **
6132 ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt>
6133 ** <dd>This parameter returns the number malloc attempts that might have
6134 ** been satisfied using lookaside memory but failed due to the amount of
6135 ** memory requested being larger than the lookaside slot size.
6136 ** Only the high-water value is meaningful;
6137 ** the current value is always zero.)^
6138 **
6139 ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt>
6140 ** <dd>This parameter returns the number malloc attempts that might have
6141 ** been satisfied using lookaside memory but failed due to all lookaside
6142 ** memory already being in use.
6143 ** Only the high-water value is meaningful;
6144 ** the current value is always zero.)^
6145 **
6146 ** ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt>
6147 ** <dd>This parameter returns the approximate number of of bytes of heap
6148 ** memory used by all pager caches associated with the database connection.)^
6149 ** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.
6150 **
6151 ** ^(<dt>SQLITE_DBSTATUS_SCHEMA_USED</dt>
6152 ** <dd>This parameter returns the approximate number of of bytes of heap
6153 ** memory used to store the schema for all databases associated
6154 ** with the connection - main, temp, and any [ATTACH]-ed databases.)^ 
6155 ** ^The full amount of memory used by the schemas is reported, even if the
6156 ** schema memory is shared with other database connections due to
6157 ** [shared cache mode] being enabled.
6158 ** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0.
6159 **
6160 ** ^(<dt>SQLITE_DBSTATUS_STMT_USED</dt>
6161 ** <dd>This parameter returns the approximate number of of bytes of heap
6162 ** and lookaside memory used by all prepared statements associated with
6163 ** the database connection.)^
6164 ** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
6165 ** </dd>
6166 ** </dl>
6167 */
6168 #define SQLITE_DBSTATUS_LOOKASIDE_USED       0
6169 #define SQLITE_DBSTATUS_CACHE_USED           1
6170 #define SQLITE_DBSTATUS_SCHEMA_USED          2
6171 #define SQLITE_DBSTATUS_STMT_USED            3
6172 #define SQLITE_DBSTATUS_LOOKASIDE_HIT        4
6173 #define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE  5
6174 #define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL  6
6175 #define SQLITE_DBSTATUS_MAX                  6   /* Largest defined DBSTATUS */
6176
6177
6178 /*
6179 ** CAPI3REF: Prepared Statement Status
6180 **
6181 ** ^(Each prepared statement maintains various
6182 ** [SQLITE_STMTSTATUS_SORT | counters] that measure the number
6183 ** of times it has performed specific operations.)^  These counters can
6184 ** be used to monitor the performance characteristics of the prepared
6185 ** statements.  For example, if the number of table steps greatly exceeds
6186 ** the number of table searches or result rows, that would tend to indicate
6187 ** that the prepared statement is using a full table scan rather than
6188 ** an index.  
6189 **
6190 ** ^(This interface is used to retrieve and reset counter values from
6191 ** a [prepared statement].  The first argument is the prepared statement
6192 ** object to be interrogated.  The second argument
6193 ** is an integer code for a specific [SQLITE_STMTSTATUS_SORT | counter]
6194 ** to be interrogated.)^
6195 ** ^The current value of the requested counter is returned.
6196 ** ^If the resetFlg is true, then the counter is reset to zero after this
6197 ** interface call returns.
6198 **
6199 ** See also: [sqlite3_status()] and [sqlite3_db_status()].
6200 */
6201 SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg);
6202
6203 /*
6204 ** CAPI3REF: Status Parameters for prepared statements
6205 **
6206 ** These preprocessor macros define integer codes that name counter
6207 ** values associated with the [sqlite3_stmt_status()] interface.
6208 ** The meanings of the various counters are as follows:
6209 **
6210 ** <dl>
6211 ** <dt>SQLITE_STMTSTATUS_FULLSCAN_STEP</dt>
6212 ** <dd>^This is the number of times that SQLite has stepped forward in
6213 ** a table as part of a full table scan.  Large numbers for this counter
6214 ** may indicate opportunities for performance improvement through 
6215 ** careful use of indices.</dd>
6216 **
6217 ** <dt>SQLITE_STMTSTATUS_SORT</dt>
6218 ** <dd>^This is the number of sort operations that have occurred.
6219 ** A non-zero value in this counter may indicate an opportunity to
6220 ** improvement performance through careful use of indices.</dd>
6221 **
6222 ** <dt>SQLITE_STMTSTATUS_AUTOINDEX</dt>
6223 ** <dd>^This is the number of rows inserted into transient indices that
6224 ** were created automatically in order to help joins run faster.
6225 ** A non-zero value in this counter may indicate an opportunity to
6226 ** improvement performance by adding permanent indices that do not
6227 ** need to be reinitialized each time the statement is run.</dd>
6228 **
6229 ** </dl>
6230 */
6231 #define SQLITE_STMTSTATUS_FULLSCAN_STEP     1
6232 #define SQLITE_STMTSTATUS_SORT              2
6233 #define SQLITE_STMTSTATUS_AUTOINDEX         3
6234
6235 /*
6236 ** CAPI3REF: Custom Page Cache Object
6237 **
6238 ** The sqlite3_pcache type is opaque.  It is implemented by
6239 ** the pluggable module.  The SQLite core has no knowledge of
6240 ** its size or internal structure and never deals with the
6241 ** sqlite3_pcache object except by holding and passing pointers
6242 ** to the object.
6243 **
6244 ** See [sqlite3_pcache_methods] for additional information.
6245 */
6246 typedef struct sqlite3_pcache sqlite3_pcache;
6247
6248 /*
6249 ** CAPI3REF: Application Defined Page Cache.
6250 ** KEYWORDS: {page cache}
6251 **
6252 ** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE], ...) interface can
6253 ** register an alternative page cache implementation by passing in an 
6254 ** instance of the sqlite3_pcache_methods structure.)^
6255 ** In many applications, most of the heap memory allocated by 
6256 ** SQLite is used for the page cache.
6257 ** By implementing a 
6258 ** custom page cache using this API, an application can better control
6259 ** the amount of memory consumed by SQLite, the way in which 
6260 ** that memory is allocated and released, and the policies used to 
6261 ** determine exactly which parts of a database file are cached and for 
6262 ** how long.
6263 **
6264 ** The alternative page cache mechanism is an
6265 ** extreme measure that is only needed by the most demanding applications.
6266 ** The built-in page cache is recommended for most uses.
6267 **
6268 ** ^(The contents of the sqlite3_pcache_methods structure are copied to an
6269 ** internal buffer by SQLite within the call to [sqlite3_config].  Hence
6270 ** the application may discard the parameter after the call to
6271 ** [sqlite3_config()] returns.)^
6272 **
6273 ** ^(The xInit() method is called once for each effective 
6274 ** call to [sqlite3_initialize()])^
6275 ** (usually only once during the lifetime of the process). ^(The xInit()
6276 ** method is passed a copy of the sqlite3_pcache_methods.pArg value.)^
6277 ** The intent of the xInit() method is to set up global data structures 
6278 ** required by the custom page cache implementation. 
6279 ** ^(If the xInit() method is NULL, then the 
6280 ** built-in default page cache is used instead of the application defined
6281 ** page cache.)^
6282 **
6283 ** ^The xShutdown() method is called by [sqlite3_shutdown()].
6284 ** It can be used to clean up 
6285 ** any outstanding resources before process shutdown, if required.
6286 ** ^The xShutdown() method may be NULL.
6287 **
6288 ** ^SQLite automatically serializes calls to the xInit method,
6289 ** so the xInit method need not be threadsafe.  ^The
6290 ** xShutdown method is only called from [sqlite3_shutdown()] so it does
6291 ** not need to be threadsafe either.  All other methods must be threadsafe
6292 ** in multithreaded applications.
6293 **
6294 ** ^SQLite will never invoke xInit() more than once without an intervening
6295 ** call to xShutdown().
6296 **
6297 ** ^SQLite invokes the xCreate() method to construct a new cache instance.
6298 ** SQLite will typically create one cache instance for each open database file,
6299 ** though this is not guaranteed. ^The
6300 ** first parameter, szPage, is the size in bytes of the pages that must
6301 ** be allocated by the cache.  ^szPage will not be a power of two.  ^szPage
6302 ** will the page size of the database file that is to be cached plus an
6303 ** increment (here called "R") of less than 250.  SQLite will use the
6304 ** extra R bytes on each page to store metadata about the underlying
6305 ** database page on disk.  The value of R depends
6306 ** on the SQLite version, the target platform, and how SQLite was compiled.
6307 ** ^(R is constant for a particular build of SQLite. Except, there are two
6308 ** distinct values of R when SQLite is compiled with the proprietary
6309 ** ZIPVFS extension.)^  ^The second argument to
6310 ** xCreate(), bPurgeable, is true if the cache being created will
6311 ** be used to cache database pages of a file stored on disk, or
6312 ** false if it is used for an in-memory database. The cache implementation
6313 ** does not have to do anything special based with the value of bPurgeable;
6314 ** it is purely advisory.  ^On a cache where bPurgeable is false, SQLite will
6315 ** never invoke xUnpin() except to deliberately delete a page.
6316 ** ^In other words, calls to xUnpin() on a cache with bPurgeable set to
6317 ** false will always have the "discard" flag set to true.  
6318 ** ^Hence, a cache created with bPurgeable false will
6319 ** never contain any unpinned pages.
6320 **
6321 ** ^(The xCachesize() method may be called at any time by SQLite to set the
6322 ** suggested maximum cache-size (number of pages stored by) the cache
6323 ** instance passed as the first argument. This is the value configured using
6324 ** the SQLite "[PRAGMA cache_size]" command.)^  As with the bPurgeable
6325 ** parameter, the implementation is not required to do anything with this
6326 ** value; it is advisory only.
6327 **
6328 ** The xPagecount() method must return the number of pages currently
6329 ** stored in the cache, both pinned and unpinned.
6330 ** 
6331 ** The xFetch() method locates a page in the cache and returns a pointer to 
6332 ** the page, or a NULL pointer.
6333 ** A "page", in this context, means a buffer of szPage bytes aligned at an
6334 ** 8-byte boundary. The page to be fetched is determined by the key. ^The
6335 ** mimimum key value is 1.  After it has been retrieved using xFetch, the page 
6336 ** is considered to be "pinned".
6337 **
6338 ** If the requested page is already in the page cache, then the page cache
6339 ** implementation must return a pointer to the page buffer with its content
6340 ** intact.  If the requested page is not already in the cache, then the
6341 ** cache implementation should use the value of the createFlag
6342 ** parameter to help it determined what action to take:
6343 **
6344 ** <table border=1 width=85% align=center>
6345 ** <tr><th> createFlag <th> Behaviour when page is not already in cache
6346 ** <tr><td> 0 <td> Do not allocate a new page.  Return NULL.
6347 ** <tr><td> 1 <td> Allocate a new page if it easy and convenient to do so.
6348 **                 Otherwise return NULL.
6349 ** <tr><td> 2 <td> Make every effort to allocate a new page.  Only return
6350 **                 NULL if allocating a new page is effectively impossible.
6351 ** </table>
6352 **
6353 ** ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1.  SQLite
6354 ** will only use a createFlag of 2 after a prior call with a createFlag of 1
6355 ** failed.)^  In between the to xFetch() calls, SQLite may
6356 ** attempt to unpin one or more cache pages by spilling the content of
6357 ** pinned pages to disk and synching the operating system disk cache.
6358 **
6359 ** ^xUnpin() is called by SQLite with a pointer to a currently pinned page
6360 ** as its second argument.  If the third parameter, discard, is non-zero,
6361 ** then the page must be evicted from the cache.
6362 ** ^If the discard parameter is
6363 ** zero, then the page may be discarded or retained at the discretion of
6364 ** page cache implementation. ^The page cache implementation
6365 ** may choose to evict unpinned pages at any time.
6366 **
6367 ** The cache must not perform any reference counting. A single 
6368 ** call to xUnpin() unpins the page regardless of the number of prior calls 
6369 ** to xFetch().
6370 **
6371 ** The xRekey() method is used to change the key value associated with the
6372 ** page passed as the second argument. If the cache
6373 ** previously contains an entry associated with newKey, it must be
6374 ** discarded. ^Any prior cache entry associated with newKey is guaranteed not
6375 ** to be pinned.
6376 **
6377 ** When SQLite calls the xTruncate() method, the cache must discard all
6378 ** existing cache entries with page numbers (keys) greater than or equal
6379 ** to the value of the iLimit parameter passed to xTruncate(). If any
6380 ** of these pages are pinned, they are implicitly unpinned, meaning that
6381 ** they can be safely discarded.
6382 **
6383 ** ^The xDestroy() method is used to delete a cache allocated by xCreate().
6384 ** All resources associated with the specified cache should be freed. ^After
6385 ** calling the xDestroy() method, SQLite considers the [sqlite3_pcache*]
6386 ** handle invalid, and will not use it with any other sqlite3_pcache_methods
6387 ** functions.
6388 */
6389 typedef struct sqlite3_pcache_methods sqlite3_pcache_methods;
6390 struct sqlite3_pcache_methods {
6391   void *pArg;
6392   int (*xInit)(void*);
6393   void (*xShutdown)(void*);
6394   sqlite3_pcache *(*xCreate)(int szPage, int bPurgeable);
6395   void (*xCachesize)(sqlite3_pcache*, int nCachesize);
6396   int (*xPagecount)(sqlite3_pcache*);
6397   void *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag);
6398   void (*xUnpin)(sqlite3_pcache*, void*, int discard);
6399   void (*xRekey)(sqlite3_pcache*, void*, unsigned oldKey, unsigned newKey);
6400   void (*xTruncate)(sqlite3_pcache*, unsigned iLimit);
6401   void (*xDestroy)(sqlite3_pcache*);
6402 };
6403
6404 /*
6405 ** CAPI3REF: Online Backup Object
6406 **
6407 ** The sqlite3_backup object records state information about an ongoing
6408 ** online backup operation.  ^The sqlite3_backup object is created by
6409 ** a call to [sqlite3_backup_init()] and is destroyed by a call to
6410 ** [sqlite3_backup_finish()].
6411 **
6412 ** See Also: [Using the SQLite Online Backup API]
6413 */
6414 typedef struct sqlite3_backup sqlite3_backup;
6415
6416 /*
6417 ** CAPI3REF: Online Backup API.
6418 **
6419 ** The backup API copies the content of one database into another.
6420 ** It is useful either for creating backups of databases or
6421 ** for copying in-memory databases to or from persistent files. 
6422 **
6423 ** See Also: [Using the SQLite Online Backup API]
6424 **
6425 ** ^SQLite holds a write transaction open on the destination database file
6426 ** for the duration of the backup operation.
6427 ** ^The source database is read-locked only while it is being read;
6428 ** it is not locked continuously for the entire backup operation.
6429 ** ^Thus, the backup may be performed on a live source database without
6430 ** preventing other database connections from
6431 ** reading or writing to the source database while the backup is underway.
6432 ** 
6433 ** ^(To perform a backup operation: 
6434 **   <ol>
6435 **     <li><b>sqlite3_backup_init()</b> is called once to initialize the
6436 **         backup, 
6437 **     <li><b>sqlite3_backup_step()</b> is called one or more times to transfer 
6438 **         the data between the two databases, and finally
6439 **     <li><b>sqlite3_backup_finish()</b> is called to release all resources 
6440 **         associated with the backup operation. 
6441 **   </ol>)^
6442 ** There should be exactly one call to sqlite3_backup_finish() for each
6443 ** successful call to sqlite3_backup_init().
6444 **
6445 ** <b>sqlite3_backup_init()</b>
6446 **
6447 ** ^The D and N arguments to sqlite3_backup_init(D,N,S,M) are the 
6448 ** [database connection] associated with the destination database 
6449 ** and the database name, respectively.
6450 ** ^The database name is "main" for the main database, "temp" for the
6451 ** temporary database, or the name specified after the AS keyword in
6452 ** an [ATTACH] statement for an attached database.
6453 ** ^The S and M arguments passed to 
6454 ** sqlite3_backup_init(D,N,S,M) identify the [database connection]
6455 ** and database name of the source database, respectively.
6456 ** ^The source and destination [database connections] (parameters S and D)
6457 ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with
6458 ** an error.
6459 **
6460 ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
6461 ** returned and an error code and error message are stored in the
6462 ** destination [database connection] D.
6463 ** ^The error code and message for the failed call to sqlite3_backup_init()
6464 ** can be retrieved using the [sqlite3_errcode()], [sqlite3_errmsg()], and/or
6465 ** [sqlite3_errmsg16()] functions.
6466 ** ^A successful call to sqlite3_backup_init() returns a pointer to an
6467 ** [sqlite3_backup] object.
6468 ** ^The [sqlite3_backup] object may be used with the sqlite3_backup_step() and
6469 ** sqlite3_backup_finish() functions to perform the specified backup 
6470 ** operation.
6471 **
6472 ** <b>sqlite3_backup_step()</b>
6473 **
6474 ** ^Function sqlite3_backup_step(B,N) will copy up to N pages between 
6475 ** the source and destination databases specified by [sqlite3_backup] object B.
6476 ** ^If N is negative, all remaining source pages are copied. 
6477 ** ^If sqlite3_backup_step(B,N) successfully copies N pages and there
6478 ** are still more pages to be copied, then the function returns [SQLITE_OK].
6479 ** ^If sqlite3_backup_step(B,N) successfully finishes copying all pages
6480 ** from source to destination, then it returns [SQLITE_DONE].
6481 ** ^If an error occurs while running sqlite3_backup_step(B,N),
6482 ** then an [error code] is returned. ^As well as [SQLITE_OK] and
6483 ** [SQLITE_DONE], a call to sqlite3_backup_step() may return [SQLITE_READONLY],
6484 ** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an
6485 ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code.
6486 **
6487 ** ^(The sqlite3_backup_step() might return [SQLITE_READONLY] if
6488 ** <ol>
6489 ** <li> the destination database was opened read-only, or
6490 ** <li> the destination database is using write-ahead-log journaling
6491 ** and the destination and source page sizes differ, or
6492 ** <li> the destination database is an in-memory database and the
6493 ** destination and source page sizes differ.
6494 ** </ol>)^
6495 **
6496 ** ^If sqlite3_backup_step() cannot obtain a required file-system lock, then
6497 ** the [sqlite3_busy_handler | busy-handler function]
6498 ** is invoked (if one is specified). ^If the 
6499 ** busy-handler returns non-zero before the lock is available, then 
6500 ** [SQLITE_BUSY] is returned to the caller. ^In this case the call to
6501 ** sqlite3_backup_step() can be retried later. ^If the source
6502 ** [database connection]
6503 ** is being used to write to the source database when sqlite3_backup_step()
6504 ** is called, then [SQLITE_LOCKED] is returned immediately. ^Again, in this
6505 ** case the call to sqlite3_backup_step() can be retried later on. ^(If
6506 ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX], [SQLITE_NOMEM], or
6507 ** [SQLITE_READONLY] is returned, then 
6508 ** there is no point in retrying the call to sqlite3_backup_step(). These 
6509 ** errors are considered fatal.)^  The application must accept 
6510 ** that the backup operation has failed and pass the backup operation handle 
6511 ** to the sqlite3_backup_finish() to release associated resources.
6512 **
6513 ** ^The first call to sqlite3_backup_step() obtains an exclusive lock
6514 ** on the destination file. ^The exclusive lock is not released until either 
6515 ** sqlite3_backup_finish() is called or the backup operation is complete 
6516 ** and sqlite3_backup_step() returns [SQLITE_DONE].  ^Every call to
6517 ** sqlite3_backup_step() obtains a [shared lock] on the source database that
6518 ** lasts for the duration of the sqlite3_backup_step() call.
6519 ** ^Because the source database is not locked between calls to
6520 ** sqlite3_backup_step(), the source database may be modified mid-way
6521 ** through the backup process.  ^If the source database is modified by an
6522 ** external process or via a database connection other than the one being
6523 ** used by the backup operation, then the backup will be automatically
6524 ** restarted by the next call to sqlite3_backup_step(). ^If the source 
6525 ** database is modified by the using the same database connection as is used
6526 ** by the backup operation, then the backup database is automatically
6527 ** updated at the same time.
6528 **
6529 ** <b>sqlite3_backup_finish()</b>
6530 **
6531 ** When sqlite3_backup_step() has returned [SQLITE_DONE], or when the 
6532 ** application wishes to abandon the backup operation, the application
6533 ** should destroy the [sqlite3_backup] by passing it to sqlite3_backup_finish().
6534 ** ^The sqlite3_backup_finish() interfaces releases all
6535 ** resources associated with the [sqlite3_backup] object. 
6536 ** ^If sqlite3_backup_step() has not yet returned [SQLITE_DONE], then any
6537 ** active write-transaction on the destination database is rolled back.
6538 ** The [sqlite3_backup] object is invalid
6539 ** and may not be used following a call to sqlite3_backup_finish().
6540 **
6541 ** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no
6542 ** sqlite3_backup_step() errors occurred, regardless or whether or not
6543 ** sqlite3_backup_step() completed.
6544 ** ^If an out-of-memory condition or IO error occurred during any prior
6545 ** sqlite3_backup_step() call on the same [sqlite3_backup] object, then
6546 ** sqlite3_backup_finish() returns the corresponding [error code].
6547 **
6548 ** ^A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step()
6549 ** is not a permanent error and does not affect the return value of
6550 ** sqlite3_backup_finish().
6551 **
6552 ** <b>sqlite3_backup_remaining(), sqlite3_backup_pagecount()</b>
6553 **
6554 ** ^Each call to sqlite3_backup_step() sets two values inside
6555 ** the [sqlite3_backup] object: the number of pages still to be backed
6556 ** up and the total number of pages in the source database file.
6557 ** The sqlite3_backup_remaining() and sqlite3_backup_pagecount() interfaces
6558 ** retrieve these two values, respectively.
6559 **
6560 ** ^The values returned by these functions are only updated by
6561 ** sqlite3_backup_step(). ^If the source database is modified during a backup
6562 ** operation, then the values are not updated to account for any extra
6563 ** pages that need to be updated or the size of the source database file
6564 ** changing.
6565 **
6566 ** <b>Concurrent Usage of Database Handles</b>
6567 **
6568 ** ^The source [database connection] may be used by the application for other
6569 ** purposes while a backup operation is underway or being initialized.
6570 ** ^If SQLite is compiled and configured to support threadsafe database
6571 ** connections, then the source database connection may be used concurrently
6572 ** from within other threads.
6573 **
6574 ** However, the application must guarantee that the destination 
6575 ** [database connection] is not passed to any other API (by any thread) after 
6576 ** sqlite3_backup_init() is called and before the corresponding call to
6577 ** sqlite3_backup_finish().  SQLite does not currently check to see
6578 ** if the application incorrectly accesses the destination [database connection]
6579 ** and so no error code is reported, but the operations may malfunction
6580 ** nevertheless.  Use of the destination database connection while a
6581 ** backup is in progress might also also cause a mutex deadlock.
6582 **
6583 ** If running in [shared cache mode], the application must
6584 ** guarantee that the shared cache used by the destination database
6585 ** is not accessed while the backup is running. In practice this means
6586 ** that the application must guarantee that the disk file being 
6587 ** backed up to is not accessed by any connection within the process,
6588 ** not just the specific connection that was passed to sqlite3_backup_init().
6589 **
6590 ** The [sqlite3_backup] object itself is partially threadsafe. Multiple 
6591 ** threads may safely make multiple concurrent calls to sqlite3_backup_step().
6592 ** However, the sqlite3_backup_remaining() and sqlite3_backup_pagecount()
6593 ** APIs are not strictly speaking threadsafe. If they are invoked at the
6594 ** same time as another thread is invoking sqlite3_backup_step() it is
6595 ** possible that they return invalid values.
6596 */
6597 SQLITE_API sqlite3_backup *sqlite3_backup_init(
6598   sqlite3 *pDest,                        /* Destination database handle */
6599   const char *zDestName,                 /* Destination database name */
6600   sqlite3 *pSource,                      /* Source database handle */
6601   const char *zSourceName                /* Source database name */
6602 );
6603 SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage);
6604 SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p);
6605 SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p);
6606 SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p);
6607
6608 /*
6609 ** CAPI3REF: Unlock Notification
6610 **
6611 ** ^When running in shared-cache mode, a database operation may fail with
6612 ** an [SQLITE_LOCKED] error if the required locks on the shared-cache or
6613 ** individual tables within the shared-cache cannot be obtained. See
6614 ** [SQLite Shared-Cache Mode] for a description of shared-cache locking. 
6615 ** ^This API may be used to register a callback that SQLite will invoke 
6616 ** when the connection currently holding the required lock relinquishes it.
6617 ** ^This API is only available if the library was compiled with the
6618 ** [SQLITE_ENABLE_UNLOCK_NOTIFY] C-preprocessor symbol defined.
6619 **
6620 ** See Also: [Using the SQLite Unlock Notification Feature].
6621 **
6622 ** ^Shared-cache locks are released when a database connection concludes
6623 ** its current transaction, either by committing it or rolling it back. 
6624 **
6625 ** ^When a connection (known as the blocked connection) fails to obtain a
6626 ** shared-cache lock and SQLITE_LOCKED is returned to the caller, the
6627 ** identity of the database connection (the blocking connection) that
6628 ** has locked the required resource is stored internally. ^After an 
6629 ** application receives an SQLITE_LOCKED error, it may call the
6630 ** sqlite3_unlock_notify() method with the blocked connection handle as 
6631 ** the first argument to register for a callback that will be invoked
6632 ** when the blocking connections current transaction is concluded. ^The
6633 ** callback is invoked from within the [sqlite3_step] or [sqlite3_close]
6634 ** call that concludes the blocking connections transaction.
6635 **
6636 ** ^(If sqlite3_unlock_notify() is called in a multi-threaded application,
6637 ** there is a chance that the blocking connection will have already
6638 ** concluded its transaction by the time sqlite3_unlock_notify() is invoked.
6639 ** If this happens, then the specified callback is invoked immediately,
6640 ** from within the call to sqlite3_unlock_notify().)^
6641 **
6642 ** ^If the blocked connection is attempting to obtain a write-lock on a
6643 ** shared-cache table, and more than one other connection currently holds
6644 ** a read-lock on the same table, then SQLite arbitrarily selects one of 
6645 ** the other connections to use as the blocking connection.
6646 **
6647 ** ^(There may be at most one unlock-notify callback registered by a 
6648 ** blocked connection. If sqlite3_unlock_notify() is called when the
6649 ** blocked connection already has a registered unlock-notify callback,
6650 ** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is
6651 ** called with a NULL pointer as its second argument, then any existing
6652 ** unlock-notify callback is canceled. ^The blocked connections 
6653 ** unlock-notify callback may also be canceled by closing the blocked
6654 ** connection using [sqlite3_close()].
6655 **
6656 ** The unlock-notify callback is not reentrant. If an application invokes
6657 ** any sqlite3_xxx API functions from within an unlock-notify callback, a
6658 ** crash or deadlock may be the result.
6659 **
6660 ** ^Unless deadlock is detected (see below), sqlite3_unlock_notify() always
6661 ** returns SQLITE_OK.
6662 **
6663 ** <b>Callback Invocation Details</b>
6664 **
6665 ** When an unlock-notify callback is registered, the application provides a 
6666 ** single void* pointer that is passed to the callback when it is invoked.
6667 ** However, the signature of the callback function allows SQLite to pass
6668 ** it an array of void* context pointers. The first argument passed to
6669 ** an unlock-notify callback is a pointer to an array of void* pointers,
6670 ** and the second is the number of entries in the array.
6671 **
6672 ** When a blocking connections transaction is concluded, there may be
6673 ** more than one blocked connection that has registered for an unlock-notify
6674 ** callback. ^If two or more such blocked connections have specified the
6675 ** same callback function, then instead of invoking the callback function
6676 ** multiple times, it is invoked once with the set of void* context pointers
6677 ** specified by the blocked connections bundled together into an array.
6678 ** This gives the application an opportunity to prioritize any actions 
6679 ** related to the set of unblocked database connections.
6680 **
6681 ** <b>Deadlock Detection</b>
6682 **
6683 ** Assuming that after registering for an unlock-notify callback a 
6684 ** database waits for the callback to be issued before taking any further
6685 ** action (a reasonable assumption), then using this API may cause the
6686 ** application to deadlock. For example, if connection X is waiting for
6687 ** connection Y's transaction to be concluded, and similarly connection
6688 ** Y is waiting on connection X's transaction, then neither connection
6689 ** will proceed and the system may remain deadlocked indefinitely.
6690 **
6691 ** To avoid this scenario, the sqlite3_unlock_notify() performs deadlock
6692 ** detection. ^If a given call to sqlite3_unlock_notify() would put the
6693 ** system in a deadlocked state, then SQLITE_LOCKED is returned and no
6694 ** unlock-notify callback is registered. The system is said to be in
6695 ** a deadlocked state if connection A has registered for an unlock-notify
6696 ** callback on the conclusion of connection B's transaction, and connection
6697 ** B has itself registered for an unlock-notify callback when connection
6698 ** A's transaction is concluded. ^Indirect deadlock is also detected, so
6699 ** the system is also considered to be deadlocked if connection B has
6700 ** registered for an unlock-notify callback on the conclusion of connection
6701 ** C's transaction, where connection C is waiting on connection A. ^Any
6702 ** number of levels of indirection are allowed.
6703 **
6704 ** <b>The "DROP TABLE" Exception</b>
6705 **
6706 ** When a call to [sqlite3_step()] returns SQLITE_LOCKED, it is almost 
6707 ** always appropriate to call sqlite3_unlock_notify(). There is however,
6708 ** one exception. When executing a "DROP TABLE" or "DROP INDEX" statement,
6709 ** SQLite checks if there are any currently executing SELECT statements
6710 ** that belong to the same connection. If there are, SQLITE_LOCKED is
6711 ** returned. In this case there is no "blocking connection", so invoking
6712 ** sqlite3_unlock_notify() results in the unlock-notify callback being
6713 ** invoked immediately. If the application then re-attempts the "DROP TABLE"
6714 ** or "DROP INDEX" query, an infinite loop might be the result.
6715 **
6716 ** One way around this problem is to check the extended error code returned
6717 ** by an sqlite3_step() call. ^(If there is a blocking connection, then the
6718 ** extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in
6719 ** the special "DROP TABLE/INDEX" case, the extended error code is just 
6720 ** SQLITE_LOCKED.)^
6721 */
6722 SQLITE_API int sqlite3_unlock_notify(
6723   sqlite3 *pBlocked,                          /* Waiting connection */
6724   void (*xNotify)(void **apArg, int nArg),    /* Callback function to invoke */
6725   void *pNotifyArg                            /* Argument to pass to xNotify */
6726 );
6727
6728
6729 /*
6730 ** CAPI3REF: String Comparison
6731 **
6732 ** ^The [sqlite3_strnicmp()] API allows applications and extensions to
6733 ** compare the contents of two buffers containing UTF-8 strings in a
6734 ** case-independent fashion, using the same definition of case independence 
6735 ** that SQLite uses internally when comparing identifiers.
6736 */
6737 SQLITE_API int sqlite3_strnicmp(const char *, const char *, int);
6738
6739 /*
6740 ** CAPI3REF: Error Logging Interface
6741 **
6742 ** ^The [sqlite3_log()] interface writes a message into the error log
6743 ** established by the [SQLITE_CONFIG_LOG] option to [sqlite3_config()].
6744 ** ^If logging is enabled, the zFormat string and subsequent arguments are
6745 ** used with [sqlite3_snprintf()] to generate the final output string.
6746 **
6747 ** The sqlite3_log() interface is intended for use by extensions such as
6748 ** virtual tables, collating functions, and SQL functions.  While there is
6749 ** nothing to prevent an application from calling sqlite3_log(), doing so
6750 ** is considered bad form.
6751 **
6752 ** The zFormat string must not be NULL.
6753 **
6754 ** To avoid deadlocks and other threading problems, the sqlite3_log() routine
6755 ** will not use dynamically allocated memory.  The log message is stored in
6756 ** a fixed-length buffer on the stack.  If the log message is longer than
6757 ** a few hundred characters, it will be truncated to the length of the
6758 ** buffer.
6759 */
6760 SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...);
6761
6762 /*
6763 ** CAPI3REF: Write-Ahead Log Commit Hook
6764 **
6765 ** ^The [sqlite3_wal_hook()] function is used to register a callback that
6766 ** will be invoked each time a database connection commits data to a
6767 ** [write-ahead log] (i.e. whenever a transaction is committed in
6768 ** [journal_mode | journal_mode=WAL mode]). 
6769 **
6770 ** ^The callback is invoked by SQLite after the commit has taken place and 
6771 ** the associated write-lock on the database released, so the implementation 
6772 ** may read, write or [checkpoint] the database as required.
6773 **
6774 ** ^The first parameter passed to the callback function when it is invoked
6775 ** is a copy of the third parameter passed to sqlite3_wal_hook() when
6776 ** registering the callback. ^The second is a copy of the database handle.
6777 ** ^The third parameter is the name of the database that was written to -
6778 ** either "main" or the name of an [ATTACH]-ed database. ^The fourth parameter
6779 ** is the number of pages currently in the write-ahead log file,
6780 ** including those that were just committed.
6781 **
6782 ** The callback function should normally return [SQLITE_OK].  ^If an error
6783 ** code is returned, that error will propagate back up through the
6784 ** SQLite code base to cause the statement that provoked the callback
6785 ** to report an error, though the commit will have still occurred. If the
6786 ** callback returns [SQLITE_ROW] or [SQLITE_DONE], or if it returns a value
6787 ** that does not correspond to any valid SQLite error code, the results
6788 ** are undefined.
6789 **
6790 ** A single database handle may have at most a single write-ahead log callback 
6791 ** registered at one time. ^Calling [sqlite3_wal_hook()] replaces any
6792 ** previously registered write-ahead log callback. ^Note that the
6793 ** [sqlite3_wal_autocheckpoint()] interface and the
6794 ** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and will
6795 ** those overwrite any prior [sqlite3_wal_hook()] settings.
6796 */
6797 SQLITE_API void *sqlite3_wal_hook(
6798   sqlite3*, 
6799   int(*)(void *,sqlite3*,const char*,int),
6800   void*
6801 );
6802
6803 /*
6804 ** CAPI3REF: Configure an auto-checkpoint
6805 **
6806 ** ^The [sqlite3_wal_autocheckpoint(D,N)] is a wrapper around
6807 ** [sqlite3_wal_hook()] that causes any database on [database connection] D
6808 ** to automatically [checkpoint]
6809 ** after committing a transaction if there are N or
6810 ** more frames in the [write-ahead log] file.  ^Passing zero or 
6811 ** a negative value as the nFrame parameter disables automatic
6812 ** checkpoints entirely.
6813 **
6814 ** ^The callback registered by this function replaces any existing callback
6815 ** registered using [sqlite3_wal_hook()].  ^Likewise, registering a callback
6816 ** using [sqlite3_wal_hook()] disables the automatic checkpoint mechanism
6817 ** configured by this function.
6818 **
6819 ** ^The [wal_autocheckpoint pragma] can be used to invoke this interface
6820 ** from SQL.
6821 **
6822 ** ^Every new [database connection] defaults to having the auto-checkpoint
6823 ** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT]
6824 ** pages.  The use of this interface
6825 ** is only necessary if the default setting is found to be suboptimal
6826 ** for a particular application.
6827 */
6828 SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N);
6829
6830 /*
6831 ** CAPI3REF: Checkpoint a database
6832 **
6833 ** ^The [sqlite3_wal_checkpoint(D,X)] interface causes database named X
6834 ** on [database connection] D to be [checkpointed].  ^If X is NULL or an
6835 ** empty string, then a checkpoint is run on all databases of
6836 ** connection D.  ^If the database connection D is not in
6837 ** [WAL | write-ahead log mode] then this interface is a harmless no-op.
6838 **
6839 ** ^The [wal_checkpoint pragma] can be used to invoke this interface
6840 ** from SQL.  ^The [sqlite3_wal_autocheckpoint()] interface and the
6841 ** [wal_autocheckpoint pragma] can be used to cause this interface to be
6842 ** run whenever the WAL reaches a certain size threshold.
6843 **
6844 ** See also: [sqlite3_wal_checkpoint_v2()]
6845 */
6846 SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb);
6847
6848 /*
6849 ** CAPI3REF: Checkpoint a database
6850 **
6851 ** Run a checkpoint operation on WAL database zDb attached to database 
6852 ** handle db. The specific operation is determined by the value of the 
6853 ** eMode parameter:
6854 **
6855 ** <dl>
6856 ** <dt>SQLITE_CHECKPOINT_PASSIVE<dd>
6857 **   Checkpoint as many frames as possible without waiting for any database 
6858 **   readers or writers to finish. Sync the db file if all frames in the log
6859 **   are checkpointed. This mode is the same as calling 
6860 **   sqlite3_wal_checkpoint(). The busy-handler callback is never invoked.
6861 **
6862 ** <dt>SQLITE_CHECKPOINT_FULL<dd>
6863 **   This mode blocks (calls the busy-handler callback) until there is no
6864 **   database writer and all readers are reading from the most recent database
6865 **   snapshot. It then checkpoints all frames in the log file and syncs the
6866 **   database file. This call blocks database writers while it is running,
6867 **   but not database readers.
6868 **
6869 ** <dt>SQLITE_CHECKPOINT_RESTART<dd>
6870 **   This mode works the same way as SQLITE_CHECKPOINT_FULL, except after 
6871 **   checkpointing the log file it blocks (calls the busy-handler callback)
6872 **   until all readers are reading from the database file only. This ensures 
6873 **   that the next client to write to the database file restarts the log file 
6874 **   from the beginning. This call blocks database writers while it is running,
6875 **   but not database readers.
6876 ** </dl>
6877 **
6878 ** If pnLog is not NULL, then *pnLog is set to the total number of frames in
6879 ** the log file before returning. If pnCkpt is not NULL, then *pnCkpt is set to
6880 ** the total number of checkpointed frames (including any that were already
6881 ** checkpointed when this function is called). *pnLog and *pnCkpt may be
6882 ** populated even if sqlite3_wal_checkpoint_v2() returns other than SQLITE_OK.
6883 ** If no values are available because of an error, they are both set to -1
6884 ** before returning to communicate this to the caller.
6885 **
6886 ** All calls obtain an exclusive "checkpoint" lock on the database file. If
6887 ** any other process is running a checkpoint operation at the same time, the 
6888 ** lock cannot be obtained and SQLITE_BUSY is returned. Even if there is a 
6889 ** busy-handler configured, it will not be invoked in this case.
6890 **
6891 ** The SQLITE_CHECKPOINT_FULL and RESTART modes also obtain the exclusive 
6892 ** "writer" lock on the database file. If the writer lock cannot be obtained
6893 ** immediately, and a busy-handler is configured, it is invoked and the writer
6894 ** lock retried until either the busy-handler returns 0 or the lock is
6895 ** successfully obtained. The busy-handler is also invoked while waiting for
6896 ** database readers as described above. If the busy-handler returns 0 before
6897 ** the writer lock is obtained or while waiting for database readers, the
6898 ** checkpoint operation proceeds from that point in the same way as 
6899 ** SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible 
6900 ** without blocking any further. SQLITE_BUSY is returned in this case.
6901 **
6902 ** If parameter zDb is NULL or points to a zero length string, then the
6903 ** specified operation is attempted on all WAL databases. In this case the
6904 ** values written to output parameters *pnLog and *pnCkpt are undefined. If 
6905 ** an SQLITE_BUSY error is encountered when processing one or more of the 
6906 ** attached WAL databases, the operation is still attempted on any remaining 
6907 ** attached databases and SQLITE_BUSY is returned to the caller. If any other 
6908 ** error occurs while processing an attached database, processing is abandoned 
6909 ** and the error code returned to the caller immediately. If no error 
6910 ** (SQLITE_BUSY or otherwise) is encountered while processing the attached 
6911 ** databases, SQLITE_OK is returned.
6912 **
6913 ** If database zDb is the name of an attached database that is not in WAL
6914 ** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. If
6915 ** zDb is not NULL (or a zero length string) and is not the name of any
6916 ** attached database, SQLITE_ERROR is returned to the caller.
6917 */
6918 SQLITE_API int sqlite3_wal_checkpoint_v2(
6919   sqlite3 *db,                    /* Database handle */
6920   const char *zDb,                /* Name of attached database (or NULL) */
6921   int eMode,                      /* SQLITE_CHECKPOINT_* value */
6922   int *pnLog,                     /* OUT: Size of WAL log in frames */
6923   int *pnCkpt                     /* OUT: Total number of frames checkpointed */
6924 );
6925
6926 /*
6927 ** CAPI3REF: Checkpoint operation parameters
6928 **
6929 ** These constants can be used as the 3rd parameter to
6930 ** [sqlite3_wal_checkpoint_v2()].  See the [sqlite3_wal_checkpoint_v2()]
6931 ** documentation for additional information about the meaning and use of
6932 ** each of these values.
6933 */
6934 #define SQLITE_CHECKPOINT_PASSIVE 0
6935 #define SQLITE_CHECKPOINT_FULL    1
6936 #define SQLITE_CHECKPOINT_RESTART 2
6937
6938
6939 /* Begin recover.patch for Chromium */
6940 /*
6941 ** Call to initialize the recover virtual-table modules (see recover.c).
6942 **
6943 ** This could be loaded by default in main.c, but that would make the
6944 ** virtual table available to Web SQL.  Breaking it out allows only
6945 ** selected users to enable it (currently sql/recovery.cc).
6946 */
6947 int recoverVtableInit(sqlite3 *db);
6948 /* End recover.patch for Chromium */
6949
6950 /*
6951 ** Undo the hack that converts floating point types to integer for
6952 ** builds on processors without floating point support.
6953 */
6954 #ifdef SQLITE_OMIT_FLOATING_POINT
6955 # undef double
6956 #endif
6957
6958 #if 0
6959 }  /* End of the 'extern "C"' block */
6960 #endif
6961 #endif
6962
6963 /*
6964 ** 2010 August 30
6965 **
6966 ** The author disclaims copyright to this source code.  In place of
6967 ** a legal notice, here is a blessing:
6968 **
6969 **    May you do good and not evil.
6970 **    May you find forgiveness for yourself and forgive others.
6971 **    May you share freely, never taking more than you give.
6972 **
6973 *************************************************************************
6974 */
6975
6976 #ifndef _SQLITE3RTREE_H_
6977 #define _SQLITE3RTREE_H_
6978
6979
6980 #if 0
6981 extern "C" {
6982 #endif
6983
6984 typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
6985
6986 /*
6987 ** Register a geometry callback named zGeom that can be used as part of an
6988 ** R-Tree geometry query as follows:
6989 **
6990 **   SELECT ... FROM <rtree> WHERE <rtree col> MATCH $zGeom(... params ...)
6991 */
6992 SQLITE_API int sqlite3_rtree_geometry_callback(
6993   sqlite3 *db,
6994   const char *zGeom,
6995   int (*xGeom)(sqlite3_rtree_geometry *, int nCoord, double *aCoord, int *pRes),
6996   void *pContext
6997 );
6998
6999
7000 /*
7001 ** A pointer to a structure of the following type is passed as the first
7002 ** argument to callbacks registered using rtree_geometry_callback().
7003 */
7004 struct sqlite3_rtree_geometry {
7005   void *pContext;                 /* Copy of pContext passed to s_r_g_c() */
7006   int nParam;                     /* Size of array aParam[] */
7007   double *aParam;                 /* Parameters passed to SQL geom function */
7008   void *pUser;                    /* Callback implementation user data */
7009   void (*xDelUser)(void *);       /* Called by SQLite to clean up pUser */
7010 };
7011
7012
7013 #if 0
7014 }  /* end of the 'extern "C"' block */
7015 #endif
7016
7017 #endif  /* ifndef _SQLITE3RTREE_H_ */
7018
7019
7020 /************** End of sqlite3.h *********************************************/
7021 /************** Continuing where we left off in sqliteInt.h ******************/
7022 /************** Include hash.h in the middle of sqliteInt.h ******************/
7023 /************** Begin file hash.h ********************************************/
7024 /*
7025 ** 2001 September 22
7026 **
7027 ** The author disclaims copyright to this source code.  In place of
7028 ** a legal notice, here is a blessing:
7029 **
7030 **    May you do good and not evil.
7031 **    May you find forgiveness for yourself and forgive others.
7032 **    May you share freely, never taking more than you give.
7033 **
7034 *************************************************************************
7035 ** This is the header file for the generic hash-table implemenation
7036 ** used in SQLite.
7037 */
7038 #ifndef _SQLITE_HASH_H_
7039 #define _SQLITE_HASH_H_
7040
7041 /* Forward declarations of structures. */
7042 typedef struct Hash Hash;
7043 typedef struct HashElem HashElem;
7044
7045 /* A complete hash table is an instance of the following structure.
7046 ** The internals of this structure are intended to be opaque -- client
7047 ** code should not attempt to access or modify the fields of this structure
7048 ** directly.  Change this structure only by using the routines below.
7049 ** However, some of the "procedures" and "functions" for modifying and
7050 ** accessing this structure are really macros, so we can't really make
7051 ** this structure opaque.
7052 **
7053 ** All elements of the hash table are on a single doubly-linked list.
7054 ** Hash.first points to the head of this list.
7055 **
7056 ** There are Hash.htsize buckets.  Each bucket points to a spot in
7057 ** the global doubly-linked list.  The contents of the bucket are the
7058 ** element pointed to plus the next _ht.count-1 elements in the list.
7059 **
7060 ** Hash.htsize and Hash.ht may be zero.  In that case lookup is done
7061 ** by a linear search of the global list.  For small tables, the 
7062 ** Hash.ht table is never allocated because if there are few elements
7063 ** in the table, it is faster to do a linear search than to manage
7064 ** the hash table.
7065 */
7066 struct Hash {
7067   unsigned int htsize;      /* Number of buckets in the hash table */
7068   unsigned int count;       /* Number of entries in this table */
7069   HashElem *first;          /* The first element of the array */
7070   struct _ht {              /* the hash table */
7071     int count;                 /* Number of entries with this hash */
7072     HashElem *chain;           /* Pointer to first entry with this hash */
7073   } *ht;
7074 };
7075
7076 /* Each element in the hash table is an instance of the following 
7077 ** structure.  All elements are stored on a single doubly-linked list.
7078 **
7079 ** Again, this structure is intended to be opaque, but it can't really
7080 ** be opaque because it is used by macros.
7081 */
7082 struct HashElem {
7083   HashElem *next, *prev;       /* Next and previous elements in the table */
7084   void *data;                  /* Data associated with this element */
7085   const char *pKey; int nKey;  /* Key associated with this element */
7086 };
7087
7088 /*
7089 ** Access routines.  To delete, insert a NULL pointer.
7090 */
7091 SQLITE_PRIVATE void sqlite3HashInit(Hash*);
7092 SQLITE_PRIVATE void *sqlite3HashInsert(Hash*, const char *pKey, int nKey, void *pData);
7093 SQLITE_PRIVATE void *sqlite3HashFind(const Hash*, const char *pKey, int nKey);
7094 SQLITE_PRIVATE void sqlite3HashClear(Hash*);
7095
7096 /*
7097 ** Macros for looping over all elements of a hash table.  The idiom is
7098 ** like this:
7099 **
7100 **   Hash h;
7101 **   HashElem *p;
7102 **   ...
7103 **   for(p=sqliteHashFirst(&h); p; p=sqliteHashNext(p)){
7104 **     SomeStructure *pData = sqliteHashData(p);
7105 **     // do something with pData
7106 **   }
7107 */
7108 #define sqliteHashFirst(H)  ((H)->first)
7109 #define sqliteHashNext(E)   ((E)->next)
7110 #define sqliteHashData(E)   ((E)->data)
7111 /* #define sqliteHashKey(E)    ((E)->pKey) // NOT USED */
7112 /* #define sqliteHashKeysize(E) ((E)->nKey)  // NOT USED */
7113
7114 /*
7115 ** Number of entries in a hash table
7116 */
7117 /* #define sqliteHashCount(H)  ((H)->count) // NOT USED */
7118
7119 #endif /* _SQLITE_HASH_H_ */
7120
7121 /************** End of hash.h ************************************************/
7122 /************** Continuing where we left off in sqliteInt.h ******************/
7123 /************** Include parse.h in the middle of sqliteInt.h *****************/
7124 /************** Begin file parse.h *******************************************/
7125 #define TK_SEMI                            1
7126 #define TK_EXPLAIN                         2
7127 #define TK_QUERY                           3
7128 #define TK_PLAN                            4
7129 #define TK_BEGIN                           5
7130 #define TK_TRANSACTION                     6
7131 #define TK_DEFERRED                        7
7132 #define TK_IMMEDIATE                       8
7133 #define TK_EXCLUSIVE                       9
7134 #define TK_COMMIT                         10
7135 #define TK_END                            11
7136 #define TK_ROLLBACK                       12
7137 #define TK_SAVEPOINT                      13
7138 #define TK_RELEASE                        14
7139 #define TK_TO                             15
7140 #define TK_TABLE                          16
7141 #define TK_CREATE                         17
7142 #define TK_IF                             18
7143 #define TK_NOT                            19
7144 #define TK_EXISTS                         20
7145 #define TK_TEMP                           21
7146 #define TK_LP                             22
7147 #define TK_RP                             23
7148 #define TK_AS                             24
7149 #define TK_COMMA                          25
7150 #define TK_ID                             26
7151 #define TK_INDEXED                        27
7152 #define TK_ABORT                          28
7153 #define TK_ACTION                         29
7154 #define TK_AFTER                          30
7155 #define TK_ANALYZE                        31
7156 #define TK_ASC                            32
7157 #define TK_ATTACH                         33
7158 #define TK_BEFORE                         34
7159 #define TK_BY                             35
7160 #define TK_CASCADE                        36
7161 #define TK_CAST                           37
7162 #define TK_COLUMNKW                       38
7163 #define TK_CONFLICT                       39
7164 #define TK_DATABASE                       40
7165 #define TK_DESC                           41
7166 #define TK_DETACH                         42
7167 #define TK_EACH                           43
7168 #define TK_FAIL                           44
7169 #define TK_FOR                            45
7170 #define TK_IGNORE                         46
7171 #define TK_INITIALLY                      47
7172 #define TK_INSTEAD                        48
7173 #define TK_LIKE_KW                        49
7174 #define TK_MATCH                          50
7175 #define TK_NO                             51
7176 #define TK_KEY                            52
7177 #define TK_OF                             53
7178 #define TK_OFFSET                         54
7179 #define TK_PRAGMA                         55
7180 #define TK_RAISE                          56
7181 #define TK_REPLACE                        57
7182 #define TK_RESTRICT                       58
7183 #define TK_ROW                            59
7184 #define TK_TRIGGER                        60
7185 #define TK_VACUUM                         61
7186 #define TK_VIEW                           62
7187 #define TK_VIRTUAL                        63
7188 #define TK_REINDEX                        64
7189 #define TK_RENAME                         65
7190 #define TK_CTIME_KW                       66
7191 #define TK_ANY                            67
7192 #define TK_OR                             68
7193 #define TK_AND                            69
7194 #define TK_IS                             70
7195 #define TK_BETWEEN                        71
7196 #define TK_IN                             72
7197 #define TK_ISNULL                         73
7198 #define TK_NOTNULL                        74
7199 #define TK_NE                             75
7200 #define TK_EQ                             76
7201 #define TK_GT                             77
7202 #define TK_LE                             78
7203 #define TK_LT                             79
7204 #define TK_GE                             80
7205 #define TK_ESCAPE                         81
7206 #define TK_BITAND                         82
7207 #define TK_BITOR                          83
7208 #define TK_LSHIFT                         84
7209 #define TK_RSHIFT                         85
7210 #define TK_PLUS                           86
7211 #define TK_MINUS                          87
7212 #define TK_STAR                           88
7213 #define TK_SLASH                          89
7214 #define TK_REM                            90
7215 #define TK_CONCAT                         91
7216 #define TK_COLLATE                        92
7217 #define TK_BITNOT                         93
7218 #define TK_STRING                         94
7219 #define TK_JOIN_KW                        95
7220 #define TK_CONSTRAINT                     96
7221 #define TK_DEFAULT                        97
7222 #define TK_NULL                           98
7223 #define TK_PRIMARY                        99
7224 #define TK_UNIQUE                         100
7225 #define TK_CHECK                          101
7226 #define TK_REFERENCES                     102
7227 #define TK_AUTOINCR                       103
7228 #define TK_ON                             104
7229 #define TK_INSERT                         105
7230 #define TK_DELETE                         106
7231 #define TK_UPDATE                         107
7232 #define TK_SET                            108
7233 #define TK_DEFERRABLE                     109
7234 #define TK_FOREIGN                        110
7235 #define TK_DROP                           111
7236 #define TK_UNION                          112
7237 #define TK_ALL                            113
7238 #define TK_EXCEPT                         114
7239 #define TK_INTERSECT                      115
7240 #define TK_SELECT                         116
7241 #define TK_DISTINCT                       117
7242 #define TK_DOT                            118
7243 #define TK_FROM                           119
7244 #define TK_JOIN                           120
7245 #define TK_USING                          121
7246 #define TK_ORDER                          122
7247 #define TK_GROUP                          123
7248 #define TK_HAVING                         124
7249 #define TK_LIMIT                          125
7250 #define TK_WHERE                          126
7251 #define TK_INTO                           127
7252 #define TK_VALUES                         128
7253 #define TK_INTEGER                        129
7254 #define TK_FLOAT                          130
7255 #define TK_BLOB                           131
7256 #define TK_REGISTER                       132
7257 #define TK_VARIABLE                       133
7258 #define TK_CASE                           134
7259 #define TK_WHEN                           135
7260 #define TK_THEN                           136
7261 #define TK_ELSE                           137
7262 #define TK_INDEX                          138
7263 #define TK_ALTER                          139
7264 #define TK_ADD                            140
7265 #define TK_TO_TEXT                        141
7266 #define TK_TO_BLOB                        142
7267 #define TK_TO_NUMERIC                     143
7268 #define TK_TO_INT                         144
7269 #define TK_TO_REAL                        145
7270 #define TK_ISNOT                          146
7271 #define TK_END_OF_FILE                    147
7272 #define TK_ILLEGAL                        148
7273 #define TK_SPACE                          149
7274 #define TK_UNCLOSED_STRING                150
7275 #define TK_FUNCTION                       151
7276 #define TK_COLUMN                         152
7277 #define TK_AGG_FUNCTION                   153
7278 #define TK_AGG_COLUMN                     154
7279 #define TK_CONST_FUNC                     155
7280 #define TK_UMINUS                         156
7281 #define TK_UPLUS                          157
7282
7283 /************** End of parse.h ***********************************************/
7284 /************** Continuing where we left off in sqliteInt.h ******************/
7285 #include <stdio.h>
7286 #include <stdlib.h>
7287 #include <string.h>
7288 #include <assert.h>
7289 #include <stddef.h>
7290
7291 /*
7292 ** If compiling for a processor that lacks floating point support,
7293 ** substitute integer for floating-point
7294 */
7295 #ifdef SQLITE_OMIT_FLOATING_POINT
7296 # define double sqlite_int64
7297 # define float sqlite_int64
7298 # define LONGDOUBLE_TYPE sqlite_int64
7299 # ifndef SQLITE_BIG_DBL
7300 #   define SQLITE_BIG_DBL (((sqlite3_int64)1)<<50)
7301 # endif
7302 # define SQLITE_OMIT_DATETIME_FUNCS 1
7303 # define SQLITE_OMIT_TRACE 1
7304 # undef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
7305 # undef SQLITE_HAVE_ISNAN
7306 #endif
7307 #ifndef SQLITE_BIG_DBL
7308 # define SQLITE_BIG_DBL (1e99)
7309 #endif
7310
7311 /*
7312 ** OMIT_TEMPDB is set to 1 if SQLITE_OMIT_TEMPDB is defined, or 0
7313 ** afterward. Having this macro allows us to cause the C compiler 
7314 ** to omit code used by TEMP tables without messy #ifndef statements.
7315 */
7316 #ifdef SQLITE_OMIT_TEMPDB
7317 #define OMIT_TEMPDB 1
7318 #else
7319 #define OMIT_TEMPDB 0
7320 #endif
7321
7322 /*
7323 ** The "file format" number is an integer that is incremented whenever
7324 ** the VDBE-level file format changes.  The following macros define the
7325 ** the default file format for new databases and the maximum file format
7326 ** that the library can read.
7327 */
7328 #define SQLITE_MAX_FILE_FORMAT 4
7329 #ifndef SQLITE_DEFAULT_FILE_FORMAT
7330 # define SQLITE_DEFAULT_FILE_FORMAT 1
7331 #endif
7332
7333 /*
7334 ** Determine whether triggers are recursive by default.  This can be
7335 ** changed at run-time using a pragma.
7336 */
7337 #ifndef SQLITE_DEFAULT_RECURSIVE_TRIGGERS
7338 # define SQLITE_DEFAULT_RECURSIVE_TRIGGERS 0
7339 #endif
7340
7341 /*
7342 ** Provide a default value for SQLITE_TEMP_STORE in case it is not specified
7343 ** on the command-line
7344 */
7345 #ifndef SQLITE_TEMP_STORE
7346 # define SQLITE_TEMP_STORE 1
7347 #endif
7348
7349 /*
7350 ** GCC does not define the offsetof() macro so we'll have to do it
7351 ** ourselves.
7352 */
7353 #ifndef offsetof
7354 #define offsetof(STRUCTURE,FIELD) ((int)((char*)&((STRUCTURE*)0)->FIELD))
7355 #endif
7356
7357 /*
7358 ** Check to see if this machine uses EBCDIC.  (Yes, believe it or
7359 ** not, there are still machines out there that use EBCDIC.)
7360 */
7361 #if 'A' == '\301'
7362 # define SQLITE_EBCDIC 1
7363 #else
7364 # define SQLITE_ASCII 1
7365 #endif
7366
7367 /*
7368 ** Integers of known sizes.  These typedefs might change for architectures
7369 ** where the sizes very.  Preprocessor macros are available so that the
7370 ** types can be conveniently redefined at compile-type.  Like this:
7371 **
7372 **         cc '-DUINTPTR_TYPE=long long int' ...
7373 */
7374 #ifndef UINT32_TYPE
7375 # ifdef HAVE_UINT32_T
7376 #  define UINT32_TYPE uint32_t
7377 # else
7378 #  define UINT32_TYPE unsigned int
7379 # endif
7380 #endif
7381 #ifndef UINT16_TYPE
7382 # ifdef HAVE_UINT16_T
7383 #  define UINT16_TYPE uint16_t
7384 # else
7385 #  define UINT16_TYPE unsigned short int
7386 # endif
7387 #endif
7388 #ifndef INT16_TYPE
7389 # ifdef HAVE_INT16_T
7390 #  define INT16_TYPE int16_t
7391 # else
7392 #  define INT16_TYPE short int
7393 # endif
7394 #endif
7395 #ifndef UINT8_TYPE
7396 # ifdef HAVE_UINT8_T
7397 #  define UINT8_TYPE uint8_t
7398 # else
7399 #  define UINT8_TYPE unsigned char
7400 # endif
7401 #endif
7402 #ifndef INT8_TYPE
7403 # ifdef HAVE_INT8_T
7404 #  define INT8_TYPE int8_t
7405 # else
7406 #  define INT8_TYPE signed char
7407 # endif
7408 #endif
7409 #ifndef LONGDOUBLE_TYPE
7410 # define LONGDOUBLE_TYPE long double
7411 #endif
7412 typedef sqlite_int64 i64;          /* 8-byte signed integer */
7413 typedef sqlite_uint64 u64;         /* 8-byte unsigned integer */
7414 typedef UINT32_TYPE u32;           /* 4-byte unsigned integer */
7415 typedef UINT16_TYPE u16;           /* 2-byte unsigned integer */
7416 typedef INT16_TYPE i16;            /* 2-byte signed integer */
7417 typedef UINT8_TYPE u8;             /* 1-byte unsigned integer */
7418 typedef INT8_TYPE i8;              /* 1-byte signed integer */
7419
7420 /*
7421 ** SQLITE_MAX_U32 is a u64 constant that is the maximum u64 value
7422 ** that can be stored in a u32 without loss of data.  The value
7423 ** is 0x00000000ffffffff.  But because of quirks of some compilers, we
7424 ** have to specify the value in the less intuitive manner shown:
7425 */
7426 #define SQLITE_MAX_U32  ((((u64)1)<<32)-1)
7427
7428 /*
7429 ** Macros to determine whether the machine is big or little endian,
7430 ** evaluated at runtime.
7431 */
7432 #ifdef SQLITE_AMALGAMATION
7433 SQLITE_PRIVATE const int sqlite3one = 1;
7434 #else
7435 SQLITE_PRIVATE const int sqlite3one;
7436 #endif
7437 #if defined(i386) || defined(__i386__) || defined(_M_IX86)\
7438                              || defined(__x86_64) || defined(__x86_64__)
7439 # define SQLITE_BIGENDIAN    0
7440 # define SQLITE_LITTLEENDIAN 1
7441 # define SQLITE_UTF16NATIVE  SQLITE_UTF16LE
7442 #else
7443 # define SQLITE_BIGENDIAN    (*(char *)(&sqlite3one)==0)
7444 # define SQLITE_LITTLEENDIAN (*(char *)(&sqlite3one)==1)
7445 # define SQLITE_UTF16NATIVE (SQLITE_BIGENDIAN?SQLITE_UTF16BE:SQLITE_UTF16LE)
7446 #endif
7447
7448 /*
7449 ** Constants for the largest and smallest possible 64-bit signed integers.
7450 ** These macros are designed to work correctly on both 32-bit and 64-bit
7451 ** compilers.
7452 */
7453 #define LARGEST_INT64  (0xffffffff|(((i64)0x7fffffff)<<32))
7454 #define SMALLEST_INT64 (((i64)-1) - LARGEST_INT64)
7455
7456 /* 
7457 ** Round up a number to the next larger multiple of 8.  This is used
7458 ** to force 8-byte alignment on 64-bit architectures.
7459 */
7460 #define ROUND8(x)     (((x)+7)&~7)
7461
7462 /*
7463 ** Round down to the nearest multiple of 8
7464 */
7465 #define ROUNDDOWN8(x) ((x)&~7)
7466
7467 /*
7468 ** Assert that the pointer X is aligned to an 8-byte boundary.  This
7469 ** macro is used only within assert() to verify that the code gets
7470 ** all alignment restrictions correct.
7471 **
7472 ** Except, if SQLITE_4_BYTE_ALIGNED_MALLOC is defined, then the
7473 ** underlying malloc() implemention might return us 4-byte aligned
7474 ** pointers.  In that case, only verify 4-byte alignment.
7475 */
7476 #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC
7477 # define EIGHT_BYTE_ALIGNMENT(X)   ((((char*)(X) - (char*)0)&3)==0)
7478 #else
7479 # define EIGHT_BYTE_ALIGNMENT(X)   ((((char*)(X) - (char*)0)&7)==0)
7480 #endif
7481
7482
7483 /*
7484 ** An instance of the following structure is used to store the busy-handler
7485 ** callback for a given sqlite handle. 
7486 **
7487 ** The sqlite.busyHandler member of the sqlite struct contains the busy
7488 ** callback for the database handle. Each pager opened via the sqlite
7489 ** handle is passed a pointer to sqlite.busyHandler. The busy-handler
7490 ** callback is currently invoked only from within pager.c.
7491 */
7492 typedef struct BusyHandler BusyHandler;
7493 struct BusyHandler {
7494   int (*xFunc)(void *,int);  /* The busy callback */
7495   void *pArg;                /* First arg to busy callback */
7496   int nBusy;                 /* Incremented with each busy call */
7497 };
7498
7499 /*
7500 ** Name of the master database table.  The master database table
7501 ** is a special table that holds the names and attributes of all
7502 ** user tables and indices.
7503 */
7504 #define MASTER_NAME       "sqlite_master"
7505 #define TEMP_MASTER_NAME  "sqlite_temp_master"
7506
7507 /*
7508 ** The root-page of the master database table.
7509 */
7510 #define MASTER_ROOT       1
7511
7512 /*
7513 ** The name of the schema table.
7514 */
7515 #define SCHEMA_TABLE(x)  ((!OMIT_TEMPDB)&&(x==1)?TEMP_MASTER_NAME:MASTER_NAME)
7516
7517 /*
7518 ** A convenience macro that returns the number of elements in
7519 ** an array.
7520 */
7521 #define ArraySize(X)    ((int)(sizeof(X)/sizeof(X[0])))
7522
7523 /*
7524 ** The following value as a destructor means to use sqlite3DbFree().
7525 ** This is an internal extension to SQLITE_STATIC and SQLITE_TRANSIENT.
7526 */
7527 #define SQLITE_DYNAMIC   ((sqlite3_destructor_type)sqlite3DbFree)
7528
7529 /*
7530 ** When SQLITE_OMIT_WSD is defined, it means that the target platform does
7531 ** not support Writable Static Data (WSD) such as global and static variables.
7532 ** All variables must either be on the stack or dynamically allocated from
7533 ** the heap.  When WSD is unsupported, the variable declarations scattered
7534 ** throughout the SQLite code must become constants instead.  The SQLITE_WSD
7535 ** macro is used for this purpose.  And instead of referencing the variable
7536 ** directly, we use its constant as a key to lookup the run-time allocated
7537 ** buffer that holds real variable.  The constant is also the initializer
7538 ** for the run-time allocated buffer.
7539 **
7540 ** In the usual case where WSD is supported, the SQLITE_WSD and GLOBAL
7541 ** macros become no-ops and have zero performance impact.
7542 */
7543 #ifdef SQLITE_OMIT_WSD
7544   #define SQLITE_WSD const
7545   #define GLOBAL(t,v) (*(t*)sqlite3_wsd_find((void*)&(v), sizeof(v)))
7546   #define sqlite3GlobalConfig GLOBAL(struct Sqlite3Config, sqlite3Config)
7547 SQLITE_API   int sqlite3_wsd_init(int N, int J);
7548 SQLITE_API   void *sqlite3_wsd_find(void *K, int L);
7549 #else
7550   #define SQLITE_WSD 
7551   #define GLOBAL(t,v) v
7552   #define sqlite3GlobalConfig sqlite3Config
7553 #endif
7554
7555 /*
7556 ** The following macros are used to suppress compiler warnings and to
7557 ** make it clear to human readers when a function parameter is deliberately 
7558 ** left unused within the body of a function. This usually happens when
7559 ** a function is called via a function pointer. For example the 
7560 ** implementation of an SQL aggregate step callback may not use the
7561 ** parameter indicating the number of arguments passed to the aggregate,
7562 ** if it knows that this is enforced elsewhere.
7563 **
7564 ** When a function parameter is not used at all within the body of a function,
7565 ** it is generally named "NotUsed" or "NotUsed2" to make things even clearer.
7566 ** However, these macros may also be used to suppress warnings related to
7567 ** parameters that may or may not be used depending on compilation options.
7568 ** For example those parameters only used in assert() statements. In these
7569 ** cases the parameters are named as per the usual conventions.
7570 */
7571 #define UNUSED_PARAMETER(x) (void)(x)
7572 #define UNUSED_PARAMETER2(x,y) UNUSED_PARAMETER(x),UNUSED_PARAMETER(y)
7573
7574 /*
7575 ** Forward references to structures
7576 */
7577 typedef struct AggInfo AggInfo;
7578 typedef struct AuthContext AuthContext;
7579 typedef struct AutoincInfo AutoincInfo;
7580 typedef struct Bitvec Bitvec;
7581 typedef struct CollSeq CollSeq;
7582 typedef struct Column Column;
7583 typedef struct Db Db;
7584 typedef struct Schema Schema;
7585 typedef struct Expr Expr;
7586 typedef struct ExprList ExprList;
7587 typedef struct ExprSpan ExprSpan;
7588 typedef struct FKey FKey;
7589 typedef struct FuncDestructor FuncDestructor;
7590 typedef struct FuncDef FuncDef;
7591 typedef struct FuncDefHash FuncDefHash;
7592 typedef struct IdList IdList;
7593 typedef struct Index Index;
7594 typedef struct IndexSample IndexSample;
7595 typedef struct KeyClass KeyClass;
7596 typedef struct KeyInfo KeyInfo;
7597 typedef struct Lookaside Lookaside;
7598 typedef struct LookasideSlot LookasideSlot;
7599 typedef struct Module Module;
7600 typedef struct NameContext NameContext;
7601 typedef struct Parse Parse;
7602 typedef struct RowSet RowSet;
7603 typedef struct Savepoint Savepoint;
7604 typedef struct Select Select;
7605 typedef struct SrcList SrcList;
7606 typedef struct StrAccum StrAccum;
7607 typedef struct Table Table;
7608 typedef struct TableLock TableLock;
7609 typedef struct Token Token;
7610 typedef struct Trigger Trigger;
7611 typedef struct TriggerPrg TriggerPrg;
7612 typedef struct TriggerStep TriggerStep;
7613 typedef struct UnpackedRecord UnpackedRecord;
7614 typedef struct VTable VTable;
7615 typedef struct Walker Walker;
7616 typedef struct WherePlan WherePlan;
7617 typedef struct WhereInfo WhereInfo;
7618 typedef struct WhereLevel WhereLevel;
7619
7620 /*
7621 ** Defer sourcing vdbe.h and btree.h until after the "u8" and 
7622 ** "BusyHandler" typedefs. vdbe.h also requires a few of the opaque
7623 ** pointer types (i.e. FuncDef) defined above.
7624 */
7625 /************** Include btree.h in the middle of sqliteInt.h *****************/
7626 /************** Begin file btree.h *******************************************/
7627 /*
7628 ** 2001 September 15
7629 **
7630 ** The author disclaims copyright to this source code.  In place of
7631 ** a legal notice, here is a blessing:
7632 **
7633 **    May you do good and not evil.
7634 **    May you find forgiveness for yourself and forgive others.
7635 **    May you share freely, never taking more than you give.
7636 **
7637 *************************************************************************
7638 ** This header file defines the interface that the sqlite B-Tree file
7639 ** subsystem.  See comments in the source code for a detailed description
7640 ** of what each interface routine does.
7641 */
7642 #ifndef _BTREE_H_
7643 #define _BTREE_H_
7644
7645 /* TODO: This definition is just included so other modules compile. It
7646 ** needs to be revisited.
7647 */
7648 #define SQLITE_N_BTREE_META 10
7649
7650 /*
7651 ** If defined as non-zero, auto-vacuum is enabled by default. Otherwise
7652 ** it must be turned on for each database using "PRAGMA auto_vacuum = 1".
7653 */
7654 #ifndef SQLITE_DEFAULT_AUTOVACUUM
7655   #define SQLITE_DEFAULT_AUTOVACUUM 0
7656 #endif
7657
7658 #define BTREE_AUTOVACUUM_NONE 0        /* Do not do auto-vacuum */
7659 #define BTREE_AUTOVACUUM_FULL 1        /* Do full auto-vacuum */
7660 #define BTREE_AUTOVACUUM_INCR 2        /* Incremental vacuum */
7661
7662 /*
7663 ** Forward declarations of structure
7664 */
7665 typedef struct Btree Btree;
7666 typedef struct BtCursor BtCursor;
7667 typedef struct BtShared BtShared;
7668
7669
7670 SQLITE_PRIVATE int sqlite3BtreeOpen(
7671   const char *zFilename,   /* Name of database file to open */
7672   sqlite3 *db,             /* Associated database connection */
7673   Btree **ppBtree,         /* Return open Btree* here */
7674   int flags,               /* Flags */
7675   int vfsFlags             /* Flags passed through to VFS open */
7676 );
7677
7678 /* The flags parameter to sqlite3BtreeOpen can be the bitwise or of the
7679 ** following values.
7680 **
7681 ** NOTE:  These values must match the corresponding PAGER_ values in
7682 ** pager.h.
7683 */
7684 #define BTREE_OMIT_JOURNAL  1  /* Do not create or use a rollback journal */
7685 #define BTREE_NO_READLOCK   2  /* Omit readlocks on readonly files */
7686 #define BTREE_MEMORY        4  /* This is an in-memory DB */
7687 #define BTREE_SINGLE        8  /* The file contains at most 1 b-tree */
7688 #define BTREE_UNORDERED    16  /* Use of a hash implementation is OK */
7689
7690 SQLITE_PRIVATE int sqlite3BtreeClose(Btree*);
7691 SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree*,int);
7692 SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree*,int,int,int);
7693 SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree*);
7694 SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int nPagesize, int nReserve, int eFix);
7695 SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree*);
7696 SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree*,int);
7697 SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree*);
7698 SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree*,int);
7699 SQLITE_PRIVATE int sqlite3BtreeGetReserve(Btree*);
7700 SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *, int);
7701 SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *);
7702 SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree*,int);
7703 SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree*, const char *zMaster);
7704 SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree*, int);
7705 SQLITE_PRIVATE int sqlite3BtreeCommit(Btree*);
7706 SQLITE_PRIVATE int sqlite3BtreeRollback(Btree*);
7707 SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree*,int);
7708 SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree*, int*, int flags);
7709 SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree*);
7710 SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree*);
7711 SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree*);
7712 SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *, int, void(*)(void *));
7713 SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *pBtree);
7714 SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *pBtree, int iTab, u8 isWriteLock);
7715 SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *, int, int);
7716
7717 SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *);
7718 SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *);
7719 SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *, Btree *);
7720
7721 SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *);
7722
7723 /* The flags parameter to sqlite3BtreeCreateTable can be the bitwise OR
7724 ** of the flags shown below.
7725 **
7726 ** Every SQLite table must have either BTREE_INTKEY or BTREE_BLOBKEY set.
7727 ** With BTREE_INTKEY, the table key is a 64-bit integer and arbitrary data
7728 ** is stored in the leaves.  (BTREE_INTKEY is used for SQL tables.)  With
7729 ** BTREE_BLOBKEY, the key is an arbitrary BLOB and no content is stored
7730 ** anywhere - the key is the content.  (BTREE_BLOBKEY is used for SQL
7731 ** indices.)
7732 */
7733 #define BTREE_INTKEY     1    /* Table has only 64-bit signed integer keys */
7734 #define BTREE_BLOBKEY    2    /* Table has keys only - no data */
7735
7736 SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree*, int, int*);
7737 SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree*, int, int*);
7738 SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree*, int);
7739
7740 SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *pBtree, int idx, u32 *pValue);
7741 SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree*, int idx, u32 value);
7742
7743 /*
7744 ** The second parameter to sqlite3BtreeGetMeta or sqlite3BtreeUpdateMeta
7745 ** should be one of the following values. The integer values are assigned 
7746 ** to constants so that the offset of the corresponding field in an
7747 ** SQLite database header may be found using the following formula:
7748 **
7749 **   offset = 36 + (idx * 4)
7750 **
7751 ** For example, the free-page-count field is located at byte offset 36 of
7752 ** the database file header. The incr-vacuum-flag field is located at
7753 ** byte offset 64 (== 36+4*7).
7754 */
7755 #define BTREE_FREE_PAGE_COUNT     0
7756 #define BTREE_SCHEMA_VERSION      1
7757 #define BTREE_FILE_FORMAT         2
7758 #define BTREE_DEFAULT_CACHE_SIZE  3
7759 #define BTREE_LARGEST_ROOT_PAGE   4
7760 #define BTREE_TEXT_ENCODING       5
7761 #define BTREE_USER_VERSION        6
7762 #define BTREE_INCR_VACUUM         7
7763
7764 SQLITE_PRIVATE int sqlite3BtreeCursor(
7765   Btree*,                              /* BTree containing table to open */
7766   int iTable,                          /* Index of root page */
7767   int wrFlag,                          /* 1 for writing.  0 for read-only */
7768   struct KeyInfo*,                     /* First argument to compare function */
7769   BtCursor *pCursor                    /* Space to write cursor structure */
7770 );
7771 SQLITE_PRIVATE int sqlite3BtreeCursorSize(void);
7772 SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor*);
7773
7774 SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor*);
7775 SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
7776   BtCursor*,
7777   UnpackedRecord *pUnKey,
7778   i64 intKey,
7779   int bias,
7780   int *pRes
7781 );
7782 SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor*, int*);
7783 SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor*);
7784 SQLITE_PRIVATE int sqlite3BtreeInsert(BtCursor*, const void *pKey, i64 nKey,
7785                                   const void *pData, int nData,
7786                                   int nZero, int bias, int seekResult);
7787 SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor*, int *pRes);
7788 SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor*, int *pRes);
7789 SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int *pRes);
7790 SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*);
7791 SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor*, int *pRes);
7792 SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor*, i64 *pSize);
7793 SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor*, u32 offset, u32 amt, void*);
7794 SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor*, int *pAmt);
7795 SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor*, int *pAmt);
7796 SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor*, u32 *pSize);
7797 SQLITE_PRIVATE int sqlite3BtreeData(BtCursor*, u32 offset, u32 amt, void*);
7798 SQLITE_PRIVATE void sqlite3BtreeSetCachedRowid(BtCursor*, sqlite3_int64);
7799 SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeGetCachedRowid(BtCursor*);
7800
7801 SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(Btree*, int *aRoot, int nRoot, int, int*);
7802 SQLITE_PRIVATE struct Pager *sqlite3BtreePager(Btree*);
7803
7804 SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor*, u32 offset, u32 amt, void*);
7805 SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *);
7806 SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *);
7807
7808 SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBt, int iVersion);
7809
7810 #ifndef NDEBUG
7811 SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor*);
7812 #endif
7813
7814 #ifndef SQLITE_OMIT_BTREECOUNT
7815 SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *, i64 *);
7816 #endif
7817
7818 #ifdef SQLITE_TEST
7819 SQLITE_PRIVATE int sqlite3BtreeCursorInfo(BtCursor*, int*, int);
7820 SQLITE_PRIVATE void sqlite3BtreeCursorList(Btree*);
7821 #endif
7822
7823 #ifndef SQLITE_OMIT_WAL
7824 SQLITE_PRIVATE   int sqlite3BtreeCheckpoint(Btree*, int, int *, int *);
7825 #endif
7826
7827 /*
7828 ** If we are not using shared cache, then there is no need to
7829 ** use mutexes to access the BtShared structures.  So make the
7830 ** Enter and Leave procedures no-ops.
7831 */
7832 #ifndef SQLITE_OMIT_SHARED_CACHE
7833 SQLITE_PRIVATE   void sqlite3BtreeEnter(Btree*);
7834 SQLITE_PRIVATE   void sqlite3BtreeEnterAll(sqlite3*);
7835 #else
7836 # define sqlite3BtreeEnter(X) 
7837 # define sqlite3BtreeEnterAll(X)
7838 #endif
7839
7840 #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE
7841 SQLITE_PRIVATE   int sqlite3BtreeSharable(Btree*);
7842 SQLITE_PRIVATE   void sqlite3BtreeLeave(Btree*);
7843 SQLITE_PRIVATE   void sqlite3BtreeEnterCursor(BtCursor*);
7844 SQLITE_PRIVATE   void sqlite3BtreeLeaveCursor(BtCursor*);
7845 SQLITE_PRIVATE   void sqlite3BtreeLeaveAll(sqlite3*);
7846 #ifndef NDEBUG
7847   /* These routines are used inside assert() statements only. */
7848 SQLITE_PRIVATE   int sqlite3BtreeHoldsMutex(Btree*);
7849 SQLITE_PRIVATE   int sqlite3BtreeHoldsAllMutexes(sqlite3*);
7850 SQLITE_PRIVATE   int sqlite3SchemaMutexHeld(sqlite3*,int,Schema*);
7851 #endif
7852 #else
7853
7854 # define sqlite3BtreeSharable(X) 0
7855 # define sqlite3BtreeLeave(X)
7856 # define sqlite3BtreeEnterCursor(X)
7857 # define sqlite3BtreeLeaveCursor(X)
7858 # define sqlite3BtreeLeaveAll(X)
7859
7860 # define sqlite3BtreeHoldsMutex(X) 1
7861 # define sqlite3BtreeHoldsAllMutexes(X) 1
7862 # define sqlite3SchemaMutexHeld(X,Y,Z) 1
7863 #endif
7864
7865
7866 #endif /* _BTREE_H_ */
7867
7868 /************** End of btree.h ***********************************************/
7869 /************** Continuing where we left off in sqliteInt.h ******************/
7870 /************** Include vdbe.h in the middle of sqliteInt.h ******************/
7871 /************** Begin file vdbe.h ********************************************/
7872 /*
7873 ** 2001 September 15
7874 **
7875 ** The author disclaims copyright to this source code.  In place of
7876 ** a legal notice, here is a blessing:
7877 **
7878 **    May you do good and not evil.
7879 **    May you find forgiveness for yourself and forgive others.
7880 **    May you share freely, never taking more than you give.
7881 **
7882 *************************************************************************
7883 ** Header file for the Virtual DataBase Engine (VDBE)
7884 **
7885 ** This header defines the interface to the virtual database engine
7886 ** or VDBE.  The VDBE implements an abstract machine that runs a
7887 ** simple program to access and modify the underlying database.
7888 */
7889 #ifndef _SQLITE_VDBE_H_
7890 #define _SQLITE_VDBE_H_
7891
7892 /*
7893 ** A single VDBE is an opaque structure named "Vdbe".  Only routines
7894 ** in the source file sqliteVdbe.c are allowed to see the insides
7895 ** of this structure.
7896 */
7897 typedef struct Vdbe Vdbe;
7898
7899 /*
7900 ** The names of the following types declared in vdbeInt.h are required
7901 ** for the VdbeOp definition.
7902 */
7903 typedef struct VdbeFunc VdbeFunc;
7904 typedef struct Mem Mem;
7905 typedef struct SubProgram SubProgram;
7906
7907 /*
7908 ** A single instruction of the virtual machine has an opcode
7909 ** and as many as three operands.  The instruction is recorded
7910 ** as an instance of the following structure:
7911 */
7912 struct VdbeOp {
7913   u8 opcode;          /* What operation to perform */
7914   signed char p4type; /* One of the P4_xxx constants for p4 */
7915   u8 opflags;         /* Mask of the OPFLG_* flags in opcodes.h */
7916   u8 p5;              /* Fifth parameter is an unsigned character */
7917   int p1;             /* First operand */
7918   int p2;             /* Second parameter (often the jump destination) */
7919   int p3;             /* The third parameter */
7920   union {             /* fourth parameter */
7921     int i;                 /* Integer value if p4type==P4_INT32 */
7922     void *p;               /* Generic pointer */
7923     char *z;               /* Pointer to data for string (char array) types */
7924     i64 *pI64;             /* Used when p4type is P4_INT64 */
7925     double *pReal;         /* Used when p4type is P4_REAL */
7926     FuncDef *pFunc;        /* Used when p4type is P4_FUNCDEF */
7927     VdbeFunc *pVdbeFunc;   /* Used when p4type is P4_VDBEFUNC */
7928     CollSeq *pColl;        /* Used when p4type is P4_COLLSEQ */
7929     Mem *pMem;             /* Used when p4type is P4_MEM */
7930     VTable *pVtab;         /* Used when p4type is P4_VTAB */
7931     KeyInfo *pKeyInfo;     /* Used when p4type is P4_KEYINFO */
7932     int *ai;               /* Used when p4type is P4_INTARRAY */
7933     SubProgram *pProgram;  /* Used when p4type is P4_SUBPROGRAM */
7934   } p4;
7935 #ifdef SQLITE_DEBUG
7936   char *zComment;          /* Comment to improve readability */
7937 #endif
7938 #ifdef VDBE_PROFILE
7939   int cnt;                 /* Number of times this instruction was executed */
7940   u64 cycles;              /* Total time spent executing this instruction */
7941 #endif
7942 };
7943 typedef struct VdbeOp VdbeOp;
7944
7945
7946 /*
7947 ** A sub-routine used to implement a trigger program.
7948 */
7949 struct SubProgram {
7950   VdbeOp *aOp;                  /* Array of opcodes for sub-program */
7951   int nOp;                      /* Elements in aOp[] */
7952   int nMem;                     /* Number of memory cells required */
7953   int nCsr;                     /* Number of cursors required */
7954   void *token;                  /* id that may be used to recursive triggers */
7955   SubProgram *pNext;            /* Next sub-program already visited */
7956 };
7957
7958 /*
7959 ** A smaller version of VdbeOp used for the VdbeAddOpList() function because
7960 ** it takes up less space.
7961 */
7962 struct VdbeOpList {
7963   u8 opcode;          /* What operation to perform */
7964   signed char p1;     /* First operand */
7965   signed char p2;     /* Second parameter (often the jump destination) */
7966   signed char p3;     /* Third parameter */
7967 };
7968 typedef struct VdbeOpList VdbeOpList;
7969
7970 /*
7971 ** Allowed values of VdbeOp.p4type
7972 */
7973 #define P4_NOTUSED    0   /* The P4 parameter is not used */
7974 #define P4_DYNAMIC  (-1)  /* Pointer to a string obtained from sqliteMalloc() */
7975 #define P4_STATIC   (-2)  /* Pointer to a static string */
7976 #define P4_COLLSEQ  (-4)  /* P4 is a pointer to a CollSeq structure */
7977 #define P4_FUNCDEF  (-5)  /* P4 is a pointer to a FuncDef structure */
7978 #define P4_KEYINFO  (-6)  /* P4 is a pointer to a KeyInfo structure */
7979 #define P4_VDBEFUNC (-7)  /* P4 is a pointer to a VdbeFunc structure */
7980 #define P4_MEM      (-8)  /* P4 is a pointer to a Mem*    structure */
7981 #define P4_TRANSIENT  0   /* P4 is a pointer to a transient string */
7982 #define P4_VTAB     (-10) /* P4 is a pointer to an sqlite3_vtab structure */
7983 #define P4_MPRINTF  (-11) /* P4 is a string obtained from sqlite3_mprintf() */
7984 #define P4_REAL     (-12) /* P4 is a 64-bit floating point value */
7985 #define P4_INT64    (-13) /* P4 is a 64-bit signed integer */
7986 #define P4_INT32    (-14) /* P4 is a 32-bit signed integer */
7987 #define P4_INTARRAY (-15) /* P4 is a vector of 32-bit integers */
7988 #define P4_SUBPROGRAM  (-18) /* P4 is a pointer to a SubProgram structure */
7989
7990 /* When adding a P4 argument using P4_KEYINFO, a copy of the KeyInfo structure
7991 ** is made.  That copy is freed when the Vdbe is finalized.  But if the
7992 ** argument is P4_KEYINFO_HANDOFF, the passed in pointer is used.  It still
7993 ** gets freed when the Vdbe is finalized so it still should be obtained
7994 ** from a single sqliteMalloc().  But no copy is made and the calling
7995 ** function should *not* try to free the KeyInfo.
7996 */
7997 #define P4_KEYINFO_HANDOFF (-16)
7998 #define P4_KEYINFO_STATIC  (-17)
7999
8000 /*
8001 ** The Vdbe.aColName array contains 5n Mem structures, where n is the 
8002 ** number of columns of data returned by the statement.
8003 */
8004 #define COLNAME_NAME     0
8005 #define COLNAME_DECLTYPE 1
8006 #define COLNAME_DATABASE 2
8007 #define COLNAME_TABLE    3
8008 #define COLNAME_COLUMN   4
8009 #ifdef SQLITE_ENABLE_COLUMN_METADATA
8010 # define COLNAME_N        5      /* Number of COLNAME_xxx symbols */
8011 #else
8012 # ifdef SQLITE_OMIT_DECLTYPE
8013 #   define COLNAME_N      1      /* Store only the name */
8014 # else
8015 #   define COLNAME_N      2      /* Store the name and decltype */
8016 # endif
8017 #endif
8018
8019 /*
8020 ** The following macro converts a relative address in the p2 field
8021 ** of a VdbeOp structure into a negative number so that 
8022 ** sqlite3VdbeAddOpList() knows that the address is relative.  Calling
8023 ** the macro again restores the address.
8024 */
8025 #define ADDR(X)  (-1-(X))
8026
8027 /*
8028 ** The makefile scans the vdbe.c source file and creates the "opcodes.h"
8029 ** header file that defines a number for each opcode used by the VDBE.
8030 */
8031 /************** Include opcodes.h in the middle of vdbe.h ********************/
8032 /************** Begin file opcodes.h *****************************************/
8033 /* Automatically generated.  Do not edit */
8034 /* See the mkopcodeh.awk script for details */
8035 #define OP_Goto                                 1
8036 #define OP_Gosub                                2
8037 #define OP_Return                               3
8038 #define OP_Yield                                4
8039 #define OP_HaltIfNull                           5
8040 #define OP_Halt                                 6
8041 #define OP_Integer                              7
8042 #define OP_Int64                                8
8043 #define OP_Real                               130   /* same as TK_FLOAT    */
8044 #define OP_String8                             94   /* same as TK_STRING   */
8045 #define OP_String                               9
8046 #define OP_Null                                10
8047 #define OP_Blob                                11
8048 #define OP_Variable                            12
8049 #define OP_Move                                13
8050 #define OP_Copy                                14
8051 #define OP_SCopy                               15
8052 #define OP_ResultRow                           16
8053 #define OP_Concat                              91   /* same as TK_CONCAT   */
8054 #define OP_Add                                 86   /* same as TK_PLUS     */
8055 #define OP_Subtract                            87   /* same as TK_MINUS    */
8056 #define OP_Multiply                            88   /* same as TK_STAR     */
8057 #define OP_Divide                              89   /* same as TK_SLASH    */
8058 #define OP_Remainder                           90   /* same as TK_REM      */
8059 #define OP_CollSeq                             17
8060 #define OP_Function                            18
8061 #define OP_BitAnd                              82   /* same as TK_BITAND   */
8062 #define OP_BitOr                               83   /* same as TK_BITOR    */
8063 #define OP_ShiftLeft                           84   /* same as TK_LSHIFT   */
8064 #define OP_ShiftRight                          85   /* same as TK_RSHIFT   */
8065 #define OP_AddImm                              20
8066 #define OP_MustBeInt                           21
8067 #define OP_RealAffinity                        22
8068 #define OP_ToText                             141   /* same as TK_TO_TEXT  */
8069 #define OP_ToBlob                             142   /* same as TK_TO_BLOB  */
8070 #define OP_ToNumeric                          143   /* same as TK_TO_NUMERIC*/
8071 #define OP_ToInt                              144   /* same as TK_TO_INT   */
8072 #define OP_ToReal                             145   /* same as TK_TO_REAL  */
8073 #define OP_Eq                                  76   /* same as TK_EQ       */
8074 #define OP_Ne                                  75   /* same as TK_NE       */
8075 #define OP_Lt                                  79   /* same as TK_LT       */
8076 #define OP_Le                                  78   /* same as TK_LE       */
8077 #define OP_Gt                                  77   /* same as TK_GT       */
8078 #define OP_Ge                                  80   /* same as TK_GE       */
8079 #define OP_Permutation                         23
8080 #define OP_Compare                             24
8081 #define OP_Jump                                25
8082 #define OP_And                                 69   /* same as TK_AND      */
8083 #define OP_Or                                  68   /* same as TK_OR       */
8084 #define OP_Not                                 19   /* same as TK_NOT      */
8085 #define OP_BitNot                              93   /* same as TK_BITNOT   */
8086 #define OP_If                                  26
8087 #define OP_IfNot                               27
8088 #define OP_IsNull                              73   /* same as TK_ISNULL   */
8089 #define OP_NotNull                             74   /* same as TK_NOTNULL  */
8090 #define OP_Column                              28
8091 #define OP_Affinity                            29
8092 #define OP_MakeRecord                          30
8093 #define OP_Count                               31
8094 #define OP_Savepoint                           32
8095 #define OP_AutoCommit                          33
8096 #define OP_Transaction                         34
8097 #define OP_ReadCookie                          35
8098 #define OP_SetCookie                           36
8099 #define OP_VerifyCookie                        37
8100 #define OP_OpenRead                            38
8101 #define OP_OpenWrite                           39
8102 #define OP_OpenAutoindex                       40
8103 #define OP_OpenEphemeral                       41
8104 #define OP_OpenPseudo                          42
8105 #define OP_Close                               43
8106 #define OP_SeekLt                              44
8107 #define OP_SeekLe                              45
8108 #define OP_SeekGe                              46
8109 #define OP_SeekGt                              47
8110 #define OP_Seek                                48
8111 #define OP_NotFound                            49
8112 #define OP_Found                               50
8113 #define OP_IsUnique                            51
8114 #define OP_NotExists                           52
8115 #define OP_Sequence                            53
8116 #define OP_NewRowid                            54
8117 #define OP_Insert                              55
8118 #define OP_InsertInt                           56
8119 #define OP_Delete                              57
8120 #define OP_ResetCount                          58
8121 #define OP_RowKey                              59
8122 #define OP_RowData                             60
8123 #define OP_Rowid                               61
8124 #define OP_NullRow                             62
8125 #define OP_Last                                63
8126 #define OP_Sort                                64
8127 #define OP_Rewind                              65
8128 #define OP_Prev                                66
8129 #define OP_Next                                67
8130 #define OP_IdxInsert                           70
8131 #define OP_IdxDelete                           71
8132 #define OP_IdxRowid                            72
8133 #define OP_IdxLT                               81
8134 #define OP_IdxGE                               92
8135 #define OP_Destroy                             95
8136 #define OP_Clear                               96
8137 #define OP_CreateIndex                         97
8138 #define OP_CreateTable                         98
8139 #define OP_ParseSchema                         99
8140 #define OP_LoadAnalysis                       100
8141 #define OP_DropTable                          101
8142 #define OP_DropIndex                          102
8143 #define OP_DropTrigger                        103
8144 #define OP_IntegrityCk                        104
8145 #define OP_RowSetAdd                          105
8146 #define OP_RowSetRead                         106
8147 #define OP_RowSetTest                         107
8148 #define OP_Program                            108
8149 #define OP_Param                              109
8150 #define OP_FkCounter                          110
8151 #define OP_FkIfZero                           111
8152 #define OP_MemMax                             112
8153 #define OP_IfPos                              113
8154 #define OP_IfNeg                              114
8155 #define OP_IfZero                             115
8156 #define OP_AggStep                            116
8157 #define OP_AggFinal                           117
8158 #define OP_Checkpoint                         118
8159 #define OP_JournalMode                        119
8160 #define OP_Vacuum                             120
8161 #define OP_IncrVacuum                         121
8162 #define OP_Expire                             122
8163 #define OP_TableLock                          123
8164 #define OP_VBegin                             124
8165 #define OP_VCreate                            125
8166 #define OP_VDestroy                           126
8167 #define OP_VOpen                              127
8168 #define OP_VFilter                            128
8169 #define OP_VColumn                            129
8170 #define OP_VNext                              131
8171 #define OP_VRename                            132
8172 #define OP_VUpdate                            133
8173 #define OP_Pagecount                          134
8174 #define OP_MaxPgcnt                           135
8175 #define OP_Trace                              136
8176 #define OP_Noop                               137
8177 #define OP_Explain                            138
8178
8179 /* The following opcode values are never used */
8180 #define OP_NotUsed_139                        139
8181 #define OP_NotUsed_140                        140
8182
8183
8184 /* Properties such as "out2" or "jump" that are specified in
8185 ** comments following the "case" for each opcode in the vdbe.c
8186 ** are encoded into bitvectors as follows:
8187 */
8188 #define OPFLG_JUMP            0x0001  /* jump:  P2 holds jmp target */
8189 #define OPFLG_OUT2_PRERELEASE 0x0002  /* out2-prerelease: */
8190 #define OPFLG_IN1             0x0004  /* in1:   P1 is an input */
8191 #define OPFLG_IN2             0x0008  /* in2:   P2 is an input */
8192 #define OPFLG_IN3             0x0010  /* in3:   P3 is an input */
8193 #define OPFLG_OUT2            0x0020  /* out2:  P2 is an output */
8194 #define OPFLG_OUT3            0x0040  /* out3:  P3 is an output */
8195 #define OPFLG_INITIALIZER {\
8196 /*   0 */ 0x00, 0x01, 0x05, 0x04, 0x04, 0x10, 0x00, 0x02,\
8197 /*   8 */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x24, 0x24,\
8198 /*  16 */ 0x00, 0x00, 0x00, 0x24, 0x04, 0x05, 0x04, 0x00,\
8199 /*  24 */ 0x00, 0x01, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02,\
8200 /*  32 */ 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00,\
8201 /*  40 */ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11,\
8202 /*  48 */ 0x08, 0x11, 0x11, 0x11, 0x11, 0x02, 0x02, 0x00,\
8203 /*  56 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,\
8204 /*  64 */ 0x01, 0x01, 0x01, 0x01, 0x4c, 0x4c, 0x08, 0x00,\
8205 /*  72 */ 0x02, 0x05, 0x05, 0x15, 0x15, 0x15, 0x15, 0x15,\
8206 /*  80 */ 0x15, 0x01, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,\
8207 /*  88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x01, 0x24, 0x02, 0x02,\
8208 /*  96 */ 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,\
8209 /* 104 */ 0x00, 0x0c, 0x45, 0x15, 0x01, 0x02, 0x00, 0x01,\
8210 /* 112 */ 0x08, 0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02,\
8211 /* 120 */ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
8212 /* 128 */ 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x02, 0x02,\
8213 /* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04,\
8214 /* 144 */ 0x04, 0x04,}
8215
8216 /************** End of opcodes.h *********************************************/
8217 /************** Continuing where we left off in vdbe.h ***********************/
8218
8219 /*
8220 ** Prototypes for the VDBE interface.  See comments on the implementation
8221 ** for a description of what each of these routines does.
8222 */
8223 SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3*);
8224 SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe*,int);
8225 SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe*,int,int);
8226 SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe*,int,int,int);
8227 SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe*,int,int,int,int);
8228 SQLITE_PRIVATE int sqlite3VdbeAddOp4(Vdbe*,int,int,int,int,const char *zP4,int);
8229 SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(Vdbe*,int,int,int,int,int);
8230 SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp);
8231 SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe*, int addr, int P1);
8232 SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe*, int addr, int P2);
8233 SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe*, int addr, int P3);
8234 SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe*, u8 P5);
8235 SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe*, int addr);
8236 SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe*, int addr, int N);
8237 SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N);
8238 SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int);
8239 SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int);
8240 SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe*);
8241 SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*);
8242 SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*);
8243 SQLITE_PRIVATE void sqlite3VdbeDeleteObject(sqlite3*,Vdbe*);
8244 SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,int,int,int,int,int,int);
8245 SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe*);
8246 SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe*, int);
8247 SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe*);
8248 #ifdef SQLITE_DEBUG
8249 SQLITE_PRIVATE   int sqlite3VdbeAssertMayAbort(Vdbe *, int);
8250 SQLITE_PRIVATE   void sqlite3VdbeTrace(Vdbe*,FILE*);
8251 #endif
8252 SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe*);
8253 SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe*);
8254 SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe*,int);
8255 SQLITE_PRIVATE int sqlite3VdbeSetColName(Vdbe*, int, int, const char *, void(*)(void*));
8256 SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe*);
8257 SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe*);
8258 SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, int);
8259 SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe*,Vdbe*);
8260 SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe*, int*, int*);
8261 SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetValue(Vdbe*, int, u8);
8262 SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe*, int);
8263 #ifndef SQLITE_OMIT_TRACE
8264 SQLITE_PRIVATE   char *sqlite3VdbeExpandSql(Vdbe*, const char*);
8265 #endif
8266
8267 SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeRecordUnpack(KeyInfo*,int,const void*,char*,int);
8268 SQLITE_PRIVATE void sqlite3VdbeDeleteUnpackedRecord(UnpackedRecord*);
8269 SQLITE_PRIVATE int sqlite3VdbeRecordCompare(int,const void*,UnpackedRecord*);
8270
8271 #ifndef SQLITE_OMIT_TRIGGER
8272 SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *);
8273 #endif
8274
8275
8276 #ifndef NDEBUG
8277 SQLITE_PRIVATE   void sqlite3VdbeComment(Vdbe*, const char*, ...);
8278 # define VdbeComment(X)  sqlite3VdbeComment X
8279 SQLITE_PRIVATE   void sqlite3VdbeNoopComment(Vdbe*, const char*, ...);
8280 # define VdbeNoopComment(X)  sqlite3VdbeNoopComment X
8281 #else
8282 # define VdbeComment(X)
8283 # define VdbeNoopComment(X)
8284 #endif
8285
8286 #endif
8287
8288 /************** End of vdbe.h ************************************************/
8289 /************** Continuing where we left off in sqliteInt.h ******************/
8290 /************** Include pager.h in the middle of sqliteInt.h *****************/
8291 /************** Begin file pager.h *******************************************/
8292 /*
8293 ** 2001 September 15
8294 **
8295 ** The author disclaims copyright to this source code.  In place of
8296 ** a legal notice, here is a blessing:
8297 **
8298 **    May you do good and not evil.
8299 **    May you find forgiveness for yourself and forgive others.
8300 **    May you share freely, never taking more than you give.
8301 **
8302 *************************************************************************
8303 ** This header file defines the interface that the sqlite page cache
8304 ** subsystem.  The page cache subsystem reads and writes a file a page
8305 ** at a time and provides a journal for rollback.
8306 */
8307
8308 #ifndef _PAGER_H_
8309 #define _PAGER_H_
8310
8311 /*
8312 ** Default maximum size for persistent journal files. A negative 
8313 ** value means no limit. This value may be overridden using the 
8314 ** sqlite3PagerJournalSizeLimit() API. See also "PRAGMA journal_size_limit".
8315 */
8316 #ifndef SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT
8317   #define SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT -1
8318 #endif
8319
8320 /*
8321 ** The type used to represent a page number.  The first page in a file
8322 ** is called page 1.  0 is used to represent "not a page".
8323 */
8324 typedef u32 Pgno;
8325
8326 /*
8327 ** Each open file is managed by a separate instance of the "Pager" structure.
8328 */
8329 typedef struct Pager Pager;
8330
8331 /*
8332 ** Handle type for pages.
8333 */
8334 typedef struct PgHdr DbPage;
8335
8336 /*
8337 ** Page number PAGER_MJ_PGNO is never used in an SQLite database (it is
8338 ** reserved for working around a windows/posix incompatibility). It is
8339 ** used in the journal to signify that the remainder of the journal file 
8340 ** is devoted to storing a master journal name - there are no more pages to
8341 ** roll back. See comments for function writeMasterJournal() in pager.c 
8342 ** for details.
8343 */
8344 #define PAGER_MJ_PGNO(x) ((Pgno)((PENDING_BYTE/((x)->pageSize))+1))
8345
8346 /*
8347 ** Allowed values for the flags parameter to sqlite3PagerOpen().
8348 **
8349 ** NOTE: These values must match the corresponding BTREE_ values in btree.h.
8350 */
8351 #define PAGER_OMIT_JOURNAL  0x0001    /* Do not use a rollback journal */
8352 #define PAGER_NO_READLOCK   0x0002    /* Omit readlocks on readonly files */
8353 #define PAGER_MEMORY        0x0004    /* In-memory database */
8354
8355 /*
8356 ** Valid values for the second argument to sqlite3PagerLockingMode().
8357 */
8358 #define PAGER_LOCKINGMODE_QUERY      -1
8359 #define PAGER_LOCKINGMODE_NORMAL      0
8360 #define PAGER_LOCKINGMODE_EXCLUSIVE   1
8361
8362 /*
8363 ** Numeric constants that encode the journalmode.  
8364 */
8365 #define PAGER_JOURNALMODE_QUERY     (-1)  /* Query the value of journalmode */
8366 #define PAGER_JOURNALMODE_DELETE      0   /* Commit by deleting journal file */
8367 #define PAGER_JOURNALMODE_PERSIST     1   /* Commit by zeroing journal header */
8368 #define PAGER_JOURNALMODE_OFF         2   /* Journal omitted.  */
8369 #define PAGER_JOURNALMODE_TRUNCATE    3   /* Commit by truncating journal */
8370 #define PAGER_JOURNALMODE_MEMORY      4   /* In-memory journal file */
8371 #define PAGER_JOURNALMODE_WAL         5   /* Use write-ahead logging */
8372
8373 /*
8374 ** The remainder of this file contains the declarations of the functions
8375 ** that make up the Pager sub-system API. See source code comments for 
8376 ** a detailed description of each routine.
8377 */
8378
8379 /* Open and close a Pager connection. */ 
8380 SQLITE_PRIVATE int sqlite3PagerOpen(
8381   sqlite3_vfs*,
8382   Pager **ppPager,
8383   const char*,
8384   int,
8385   int,
8386   int,
8387   void(*)(DbPage*)
8388 );
8389 SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager);
8390 SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager*, int, unsigned char*);
8391
8392 /* Functions used to configure a Pager object. */
8393 SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(Pager*, int(*)(void *), void *);
8394 SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager*, u32*, int);
8395 SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager*, int);
8396 SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager*, int);
8397 SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(Pager*,int,int,int);
8398 SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *, int);
8399 SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *, int);
8400 SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager*);
8401 SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager*);
8402 SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *, i64);
8403 SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager*);
8404
8405 /* Functions used to obtain and release page references. */ 
8406 SQLITE_PRIVATE int sqlite3PagerAcquire(Pager *pPager, Pgno pgno, DbPage **ppPage, int clrFlag);
8407 #define sqlite3PagerGet(A,B,C) sqlite3PagerAcquire(A,B,C,0)
8408 SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno);
8409 SQLITE_PRIVATE void sqlite3PagerRef(DbPage*);
8410 SQLITE_PRIVATE void sqlite3PagerUnref(DbPage*);
8411
8412 /* Operations on page references. */
8413 SQLITE_PRIVATE int sqlite3PagerWrite(DbPage*);
8414 SQLITE_PRIVATE void sqlite3PagerDontWrite(DbPage*);
8415 SQLITE_PRIVATE int sqlite3PagerMovepage(Pager*,DbPage*,Pgno,int);
8416 SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage*);
8417 SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *); 
8418 SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *); 
8419
8420 /* Functions used to manage pager transactions and savepoints. */
8421 SQLITE_PRIVATE void sqlite3PagerPagecount(Pager*, int*);
8422 SQLITE_PRIVATE int sqlite3PagerBegin(Pager*, int exFlag, int);
8423 SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(Pager*,const char *zMaster, int);
8424 SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager*);
8425 SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager);
8426 SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager*);
8427 SQLITE_PRIVATE int sqlite3PagerRollback(Pager*);
8428 SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int n);
8429 SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint);
8430 SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager);
8431
8432 SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int, int*, int*);
8433 SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager);
8434 SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager);
8435 SQLITE_PRIVATE int sqlite3PagerOpenWal(Pager *pPager, int *pisOpen);
8436 SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager);
8437
8438 /* Functions used to query pager state and configuration. */
8439 SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager*);
8440 SQLITE_PRIVATE int sqlite3PagerRefcount(Pager*);
8441 SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager*);
8442 SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager*);
8443 SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager*);
8444 SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager*);
8445 SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager*);
8446 SQLITE_PRIVATE int sqlite3PagerNosync(Pager*);
8447 SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager*);
8448 SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager*);
8449
8450 /* Functions used to truncate the database file. */
8451 SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager*,Pgno);
8452
8453 #if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL)
8454 SQLITE_PRIVATE void *sqlite3PagerCodec(DbPage *);
8455 #endif
8456
8457 /* Functions to support testing and debugging. */
8458 #if !defined(NDEBUG) || defined(SQLITE_TEST)
8459 SQLITE_PRIVATE   Pgno sqlite3PagerPagenumber(DbPage*);
8460 SQLITE_PRIVATE   int sqlite3PagerIswriteable(DbPage*);
8461 #endif
8462 #ifdef SQLITE_TEST
8463 SQLITE_PRIVATE   int *sqlite3PagerStats(Pager*);
8464 SQLITE_PRIVATE   void sqlite3PagerRefdump(Pager*);
8465   void disable_simulated_io_errors(void);
8466   void enable_simulated_io_errors(void);
8467 #else
8468 # define disable_simulated_io_errors()
8469 # define enable_simulated_io_errors()
8470 #endif
8471
8472 #endif /* _PAGER_H_ */
8473
8474 /************** End of pager.h ***********************************************/
8475 /************** Continuing where we left off in sqliteInt.h ******************/
8476 /************** Include pcache.h in the middle of sqliteInt.h ****************/
8477 /************** Begin file pcache.h ******************************************/
8478 /*
8479 ** 2008 August 05
8480 **
8481 ** The author disclaims copyright to this source code.  In place of
8482 ** a legal notice, here is a blessing:
8483 **
8484 **    May you do good and not evil.
8485 **    May you find forgiveness for yourself and forgive others.
8486 **    May you share freely, never taking more than you give.
8487 **
8488 *************************************************************************
8489 ** This header file defines the interface that the sqlite page cache
8490 ** subsystem. 
8491 */
8492
8493 #ifndef _PCACHE_H_
8494
8495 typedef struct PgHdr PgHdr;
8496 typedef struct PCache PCache;
8497
8498 /*
8499 ** Every page in the cache is controlled by an instance of the following
8500 ** structure.
8501 */
8502 struct PgHdr {
8503   void *pData;                   /* Content of this page */
8504   void *pExtra;                  /* Extra content */
8505   PgHdr *pDirty;                 /* Transient list of dirty pages */
8506   Pgno pgno;                     /* Page number for this page */
8507   Pager *pPager;                 /* The pager this page is part of */
8508 #ifdef SQLITE_CHECK_PAGES
8509   u32 pageHash;                  /* Hash of page content */
8510 #endif
8511   u16 flags;                     /* PGHDR flags defined below */
8512
8513   /**********************************************************************
8514   ** Elements above are public.  All that follows is private to pcache.c
8515   ** and should not be accessed by other modules.
8516   */
8517   i16 nRef;                      /* Number of users of this page */
8518   PCache *pCache;                /* Cache that owns this page */
8519
8520   PgHdr *pDirtyNext;             /* Next element in list of dirty pages */
8521   PgHdr *pDirtyPrev;             /* Previous element in list of dirty pages */
8522 };
8523
8524 /* Bit values for PgHdr.flags */
8525 #define PGHDR_DIRTY             0x002  /* Page has changed */
8526 #define PGHDR_NEED_SYNC         0x004  /* Fsync the rollback journal before
8527                                        ** writing this page to the database */
8528 #define PGHDR_NEED_READ         0x008  /* Content is unread */
8529 #define PGHDR_REUSE_UNLIKELY    0x010  /* A hint that reuse is unlikely */
8530 #define PGHDR_DONT_WRITE        0x020  /* Do not write content to disk */
8531
8532 /* Initialize and shutdown the page cache subsystem */
8533 SQLITE_PRIVATE int sqlite3PcacheInitialize(void);
8534 SQLITE_PRIVATE void sqlite3PcacheShutdown(void);
8535
8536 /* Page cache buffer management:
8537 ** These routines implement SQLITE_CONFIG_PAGECACHE.
8538 */
8539 SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *, int sz, int n);
8540
8541 /* Create a new pager cache.
8542 ** Under memory stress, invoke xStress to try to make pages clean.
8543 ** Only clean and unpinned pages can be reclaimed.
8544 */
8545 SQLITE_PRIVATE void sqlite3PcacheOpen(
8546   int szPage,                    /* Size of every page */
8547   int szExtra,                   /* Extra space associated with each page */
8548   int bPurgeable,                /* True if pages are on backing store */
8549   int (*xStress)(void*, PgHdr*), /* Call to try to make pages clean */
8550   void *pStress,                 /* Argument to xStress */
8551   PCache *pToInit                /* Preallocated space for the PCache */
8552 );
8553
8554 /* Modify the page-size after the cache has been created. */
8555 SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *, int);
8556
8557 /* Return the size in bytes of a PCache object.  Used to preallocate
8558 ** storage space.
8559 */
8560 SQLITE_PRIVATE int sqlite3PcacheSize(void);
8561
8562 /* One release per successful fetch.  Page is pinned until released.
8563 ** Reference counted. 
8564 */
8565 SQLITE_PRIVATE int sqlite3PcacheFetch(PCache*, Pgno, int createFlag, PgHdr**);
8566 SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr*);
8567
8568 SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr*);         /* Remove page from cache */
8569 SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr*);    /* Make sure page is marked dirty */
8570 SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr*);    /* Mark a single page as clean */
8571 SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache*);    /* Mark all dirty list pages as clean */
8572
8573 /* Change a page number.  Used by incr-vacuum. */
8574 SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr*, Pgno);
8575
8576 /* Remove all pages with pgno>x.  Reset the cache if x==0 */
8577 SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache*, Pgno x);
8578
8579 /* Get a list of all dirty pages in the cache, sorted by page number */
8580 SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache*);
8581
8582 /* Reset and close the cache object */
8583 SQLITE_PRIVATE void sqlite3PcacheClose(PCache*);
8584
8585 /* Clear flags from pages of the page cache */
8586 SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *);
8587
8588 /* Discard the contents of the cache */
8589 SQLITE_PRIVATE void sqlite3PcacheClear(PCache*);
8590
8591 /* Return the total number of outstanding page references */
8592 SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache*);
8593
8594 /* Increment the reference count of an existing page */
8595 SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr*);
8596
8597 SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr*);
8598
8599 /* Return the total number of pages stored in the cache */
8600 SQLITE_PRIVATE int sqlite3PcachePagecount(PCache*);
8601
8602 #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
8603 /* Iterate through all dirty pages currently stored in the cache. This
8604 ** interface is only available if SQLITE_CHECK_PAGES is defined when the 
8605 ** library is built.
8606 */
8607 SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *));
8608 #endif
8609
8610 /* Set and get the suggested cache-size for the specified pager-cache.
8611 **
8612 ** If no global maximum is configured, then the system attempts to limit
8613 ** the total number of pages cached by purgeable pager-caches to the sum
8614 ** of the suggested cache-sizes.
8615 */
8616 SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *, int);
8617 #ifdef SQLITE_TEST
8618 SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *);
8619 #endif
8620
8621 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
8622 /* Try to return memory used by the pcache module to the main memory heap */
8623 SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int);
8624 #endif
8625
8626 #ifdef SQLITE_TEST
8627 SQLITE_PRIVATE void sqlite3PcacheStats(int*,int*,int*,int*);
8628 #endif
8629
8630 SQLITE_PRIVATE void sqlite3PCacheSetDefault(void);
8631
8632 #endif /* _PCACHE_H_ */
8633
8634 /************** End of pcache.h **********************************************/
8635 /************** Continuing where we left off in sqliteInt.h ******************/
8636
8637 /************** Include os.h in the middle of sqliteInt.h ********************/
8638 /************** Begin file os.h **********************************************/
8639 /*
8640 ** 2001 September 16
8641 **
8642 ** The author disclaims copyright to this source code.  In place of
8643 ** a legal notice, here is a blessing:
8644 **
8645 **    May you do good and not evil.
8646 **    May you find forgiveness for yourself and forgive others.
8647 **    May you share freely, never taking more than you give.
8648 **
8649 ******************************************************************************
8650 **
8651 ** This header file (together with is companion C source-code file
8652 ** "os.c") attempt to abstract the underlying operating system so that
8653 ** the SQLite library will work on both POSIX and windows systems.
8654 **
8655 ** This header file is #include-ed by sqliteInt.h and thus ends up
8656 ** being included by every source file.
8657 */
8658 #ifndef _SQLITE_OS_H_
8659 #define _SQLITE_OS_H_
8660
8661 /*
8662 ** Figure out if we are dealing with Unix, Windows, or some other
8663 ** operating system.  After the following block of preprocess macros,
8664 ** all of SQLITE_OS_UNIX, SQLITE_OS_WIN, SQLITE_OS_OS2, and SQLITE_OS_OTHER 
8665 ** will defined to either 1 or 0.  One of the four will be 1.  The other 
8666 ** three will be 0.
8667 */
8668 #if defined(SQLITE_OS_OTHER)
8669 # if SQLITE_OS_OTHER==1
8670 #   undef SQLITE_OS_UNIX
8671 #   define SQLITE_OS_UNIX 0
8672 #   undef SQLITE_OS_WIN
8673 #   define SQLITE_OS_WIN 0
8674 #   undef SQLITE_OS_OS2
8675 #   define SQLITE_OS_OS2 0
8676 # else
8677 #   undef SQLITE_OS_OTHER
8678 # endif
8679 #endif
8680 #if !defined(SQLITE_OS_UNIX) && !defined(SQLITE_OS_OTHER)
8681 # define SQLITE_OS_OTHER 0
8682 # ifndef SQLITE_OS_WIN
8683 #   if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__)
8684 #     define SQLITE_OS_WIN 1
8685 #     define SQLITE_OS_UNIX 0
8686 #     define SQLITE_OS_OS2 0
8687 #   elif defined(__EMX__) || defined(_OS2) || defined(OS2) || defined(_OS2_) || defined(__OS2__)
8688 #     define SQLITE_OS_WIN 0
8689 #     define SQLITE_OS_UNIX 0
8690 #     define SQLITE_OS_OS2 1
8691 #   else
8692 #     define SQLITE_OS_WIN 0
8693 #     define SQLITE_OS_UNIX 1
8694 #     define SQLITE_OS_OS2 0
8695 #  endif
8696 # else
8697 #  define SQLITE_OS_UNIX 0
8698 #  define SQLITE_OS_OS2 0
8699 # endif
8700 #else
8701 # ifndef SQLITE_OS_WIN
8702 #  define SQLITE_OS_WIN 0
8703 # endif
8704 #endif
8705
8706 /*
8707 ** Determine if we are dealing with WindowsCE - which has a much
8708 ** reduced API.
8709 */
8710 #if defined(_WIN32_WCE)
8711 # define SQLITE_OS_WINCE 1
8712 #else
8713 # define SQLITE_OS_WINCE 0
8714 #endif
8715
8716
8717 /*
8718 ** Define the maximum size of a temporary filename
8719 */
8720 #if SQLITE_OS_WIN
8721 # include <windows.h>
8722 # define SQLITE_TEMPNAME_SIZE (MAX_PATH+50)
8723 #elif SQLITE_OS_OS2
8724 # if (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >= 3) && defined(OS2_HIGH_MEMORY)
8725 #  include <os2safe.h> /* has to be included before os2.h for linking to work */
8726 # endif
8727 # define INCL_DOSDATETIME
8728 # define INCL_DOSFILEMGR
8729 # define INCL_DOSERRORS
8730 # define INCL_DOSMISC
8731 # define INCL_DOSPROCESS
8732 # define INCL_DOSMODULEMGR
8733 # define INCL_DOSSEMAPHORES
8734 # include <os2.h>
8735 # include <uconv.h>
8736 # define SQLITE_TEMPNAME_SIZE (CCHMAXPATHCOMP)
8737 #else
8738 # define SQLITE_TEMPNAME_SIZE 200
8739 #endif
8740
8741 /* If the SET_FULLSYNC macro is not defined above, then make it
8742 ** a no-op
8743 */
8744 #ifndef SET_FULLSYNC
8745 # define SET_FULLSYNC(x,y)
8746 #endif
8747
8748 /*
8749 ** The default size of a disk sector
8750 */
8751 #ifndef SQLITE_DEFAULT_SECTOR_SIZE
8752 # define SQLITE_DEFAULT_SECTOR_SIZE 512
8753 #endif
8754
8755 /*
8756 ** Temporary files are named starting with this prefix followed by 16 random
8757 ** alphanumeric characters, and no file extension. They are stored in the
8758 ** OS's standard temporary file directory, and are deleted prior to exit.
8759 ** If sqlite is being embedded in another program, you may wish to change the
8760 ** prefix to reflect your program's name, so that if your program exits
8761 ** prematurely, old temporary files can be easily identified. This can be done
8762 ** using -DSQLITE_TEMP_FILE_PREFIX=myprefix_ on the compiler command line.
8763 **
8764 ** 2006-10-31:  The default prefix used to be "sqlite_".  But then
8765 ** Mcafee started using SQLite in their anti-virus product and it
8766 ** started putting files with the "sqlite" name in the c:/temp folder.
8767 ** This annoyed many windows users.  Those users would then do a 
8768 ** Google search for "sqlite", find the telephone numbers of the
8769 ** developers and call to wake them up at night and complain.
8770 ** For this reason, the default name prefix is changed to be "sqlite" 
8771 ** spelled backwards.  So the temp files are still identified, but
8772 ** anybody smart enough to figure out the code is also likely smart
8773 ** enough to know that calling the developer will not help get rid
8774 ** of the file.
8775 */
8776 #ifndef SQLITE_TEMP_FILE_PREFIX
8777 # define SQLITE_TEMP_FILE_PREFIX "etilqs_"
8778 #endif
8779
8780 /*
8781 ** The following values may be passed as the second argument to
8782 ** sqlite3OsLock(). The various locks exhibit the following semantics:
8783 **
8784 ** SHARED:    Any number of processes may hold a SHARED lock simultaneously.
8785 ** RESERVED:  A single process may hold a RESERVED lock on a file at
8786 **            any time. Other processes may hold and obtain new SHARED locks.
8787 ** PENDING:   A single process may hold a PENDING lock on a file at
8788 **            any one time. Existing SHARED locks may persist, but no new
8789 **            SHARED locks may be obtained by other processes.
8790 ** EXCLUSIVE: An EXCLUSIVE lock precludes all other locks.
8791 **
8792 ** PENDING_LOCK may not be passed directly to sqlite3OsLock(). Instead, a
8793 ** process that requests an EXCLUSIVE lock may actually obtain a PENDING
8794 ** lock. This can be upgraded to an EXCLUSIVE lock by a subsequent call to
8795 ** sqlite3OsLock().
8796 */
8797 #define NO_LOCK         0
8798 #define SHARED_LOCK     1
8799 #define RESERVED_LOCK   2
8800 #define PENDING_LOCK    3
8801 #define EXCLUSIVE_LOCK  4
8802
8803 /*
8804 ** File Locking Notes:  (Mostly about windows but also some info for Unix)
8805 **
8806 ** We cannot use LockFileEx() or UnlockFileEx() on Win95/98/ME because
8807 ** those functions are not available.  So we use only LockFile() and
8808 ** UnlockFile().
8809 **
8810 ** LockFile() prevents not just writing but also reading by other processes.
8811 ** A SHARED_LOCK is obtained by locking a single randomly-chosen 
8812 ** byte out of a specific range of bytes. The lock byte is obtained at 
8813 ** random so two separate readers can probably access the file at the 
8814 ** same time, unless they are unlucky and choose the same lock byte.
8815 ** An EXCLUSIVE_LOCK is obtained by locking all bytes in the range.
8816 ** There can only be one writer.  A RESERVED_LOCK is obtained by locking
8817 ** a single byte of the file that is designated as the reserved lock byte.
8818 ** A PENDING_LOCK is obtained by locking a designated byte different from
8819 ** the RESERVED_LOCK byte.
8820 **
8821 ** On WinNT/2K/XP systems, LockFileEx() and UnlockFileEx() are available,
8822 ** which means we can use reader/writer locks.  When reader/writer locks
8823 ** are used, the lock is placed on the same range of bytes that is used
8824 ** for probabilistic locking in Win95/98/ME.  Hence, the locking scheme
8825 ** will support two or more Win95 readers or two or more WinNT readers.
8826 ** But a single Win95 reader will lock out all WinNT readers and a single
8827 ** WinNT reader will lock out all other Win95 readers.
8828 **
8829 ** The following #defines specify the range of bytes used for locking.
8830 ** SHARED_SIZE is the number of bytes available in the pool from which
8831 ** a random byte is selected for a shared lock.  The pool of bytes for
8832 ** shared locks begins at SHARED_FIRST. 
8833 **
8834 ** The same locking strategy and
8835 ** byte ranges are used for Unix.  This leaves open the possiblity of having
8836 ** clients on win95, winNT, and unix all talking to the same shared file
8837 ** and all locking correctly.  To do so would require that samba (or whatever
8838 ** tool is being used for file sharing) implements locks correctly between
8839 ** windows and unix.  I'm guessing that isn't likely to happen, but by
8840 ** using the same locking range we are at least open to the possibility.
8841 **
8842 ** Locking in windows is manditory.  For this reason, we cannot store
8843 ** actual data in the bytes used for locking.  The pager never allocates
8844 ** the pages involved in locking therefore.  SHARED_SIZE is selected so
8845 ** that all locks will fit on a single page even at the minimum page size.
8846 ** PENDING_BYTE defines the beginning of the locks.  By default PENDING_BYTE
8847 ** is set high so that we don't have to allocate an unused page except
8848 ** for very large databases.  But one should test the page skipping logic 
8849 ** by setting PENDING_BYTE low and running the entire regression suite.
8850 **
8851 ** Changing the value of PENDING_BYTE results in a subtly incompatible
8852 ** file format.  Depending on how it is changed, you might not notice
8853 ** the incompatibility right away, even running a full regression test.
8854 ** The default location of PENDING_BYTE is the first byte past the
8855 ** 1GB boundary.
8856 **
8857 */
8858 #ifdef SQLITE_OMIT_WSD
8859 # define PENDING_BYTE     (0x40000000)
8860 #else
8861 # define PENDING_BYTE      sqlite3PendingByte
8862 #endif
8863 #define RESERVED_BYTE     (PENDING_BYTE+1)
8864 #define SHARED_FIRST      (PENDING_BYTE+2)
8865 #define SHARED_SIZE       510
8866
8867 /*
8868 ** Wrapper around OS specific sqlite3_os_init() function.
8869 */
8870 SQLITE_PRIVATE int sqlite3OsInit(void);
8871
8872 /* 
8873 ** Functions for accessing sqlite3_file methods 
8874 */
8875 SQLITE_PRIVATE int sqlite3OsClose(sqlite3_file*);
8876 SQLITE_PRIVATE int sqlite3OsRead(sqlite3_file*, void*, int amt, i64 offset);
8877 SQLITE_PRIVATE int sqlite3OsWrite(sqlite3_file*, const void*, int amt, i64 offset);
8878 SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file*, i64 size);
8879 SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file*, int);
8880 SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file*, i64 *pSize);
8881 SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file*, int);
8882 SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file*, int);
8883 SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut);
8884 SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file*,int,void*);
8885 #define SQLITE_FCNTL_DB_UNCHANGED 0xca093fa0
8886 SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id);
8887 SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id);
8888 SQLITE_PRIVATE int sqlite3OsShmMap(sqlite3_file *,int,int,int,void volatile **);
8889 SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int, int, int);
8890 SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id);
8891 SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int);
8892
8893 /* 
8894 ** Functions for accessing sqlite3_vfs methods 
8895 */
8896 SQLITE_PRIVATE int sqlite3OsOpen(sqlite3_vfs *, const char *, sqlite3_file*, int, int *);
8897 SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *, const char *, int);
8898 SQLITE_PRIVATE int sqlite3OsAccess(sqlite3_vfs *, const char *, int, int *pResOut);
8899 SQLITE_PRIVATE int sqlite3OsFullPathname(sqlite3_vfs *, const char *, int, char *);
8900 #ifndef SQLITE_OMIT_LOAD_EXTENSION
8901 SQLITE_PRIVATE void *sqlite3OsDlOpen(sqlite3_vfs *, const char *);
8902 SQLITE_PRIVATE void sqlite3OsDlError(sqlite3_vfs *, int, char *);
8903 SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *, void *, const char *))(void);
8904 SQLITE_PRIVATE void sqlite3OsDlClose(sqlite3_vfs *, void *);
8905 #endif /* SQLITE_OMIT_LOAD_EXTENSION */
8906 SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *, int, char *);
8907 SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *, int);
8908 SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *, sqlite3_int64*);
8909
8910 /*
8911 ** Convenience functions for opening and closing files using 
8912 ** sqlite3_malloc() to obtain space for the file-handle structure.
8913 */
8914 SQLITE_PRIVATE int sqlite3OsOpenMalloc(sqlite3_vfs *, const char *, sqlite3_file **, int,int*);
8915 SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *);
8916
8917 #endif /* _SQLITE_OS_H_ */
8918
8919 /************** End of os.h **************************************************/
8920 /************** Continuing where we left off in sqliteInt.h ******************/
8921 /************** Include mutex.h in the middle of sqliteInt.h *****************/
8922 /************** Begin file mutex.h *******************************************/
8923 /*
8924 ** 2007 August 28
8925 **
8926 ** The author disclaims copyright to this source code.  In place of
8927 ** a legal notice, here is a blessing:
8928 **
8929 **    May you do good and not evil.
8930 **    May you find forgiveness for yourself and forgive others.
8931 **    May you share freely, never taking more than you give.
8932 **
8933 *************************************************************************
8934 **
8935 ** This file contains the common header for all mutex implementations.
8936 ** The sqliteInt.h header #includes this file so that it is available
8937 ** to all source files.  We break it out in an effort to keep the code
8938 ** better organized.
8939 **
8940 ** NOTE:  source files should *not* #include this header file directly.
8941 ** Source files should #include the sqliteInt.h file and let that file
8942 ** include this one indirectly.
8943 */
8944
8945
8946 /*
8947 ** Figure out what version of the code to use.  The choices are
8948 **
8949 **   SQLITE_MUTEX_OMIT         No mutex logic.  Not even stubs.  The
8950 **                             mutexes implemention cannot be overridden
8951 **                             at start-time.
8952 **
8953 **   SQLITE_MUTEX_NOOP         For single-threaded applications.  No
8954 **                             mutual exclusion is provided.  But this
8955 **                             implementation can be overridden at
8956 **                             start-time.
8957 **
8958 **   SQLITE_MUTEX_PTHREADS     For multi-threaded applications on Unix.
8959 **
8960 **   SQLITE_MUTEX_W32          For multi-threaded applications on Win32.
8961 **
8962 **   SQLITE_MUTEX_OS2          For multi-threaded applications on OS/2.
8963 */
8964 #if !SQLITE_THREADSAFE
8965 # define SQLITE_MUTEX_OMIT
8966 #endif
8967 #if SQLITE_THREADSAFE && !defined(SQLITE_MUTEX_NOOP)
8968 #  if SQLITE_OS_UNIX
8969 #    define SQLITE_MUTEX_PTHREADS
8970 #  elif SQLITE_OS_WIN
8971 #    define SQLITE_MUTEX_W32
8972 #  elif SQLITE_OS_OS2
8973 #    define SQLITE_MUTEX_OS2
8974 #  else
8975 #    define SQLITE_MUTEX_NOOP
8976 #  endif
8977 #endif
8978
8979 #ifdef SQLITE_MUTEX_OMIT
8980 /*
8981 ** If this is a no-op implementation, implement everything as macros.
8982 */
8983 #define sqlite3_mutex_alloc(X)    ((sqlite3_mutex*)8)
8984 #define sqlite3_mutex_free(X)
8985 #define sqlite3_mutex_enter(X)
8986 #define sqlite3_mutex_try(X)      SQLITE_OK
8987 #define sqlite3_mutex_leave(X)
8988 #define sqlite3_mutex_held(X)     ((void)(X),1)
8989 #define sqlite3_mutex_notheld(X)  ((void)(X),1)
8990 #define sqlite3MutexAlloc(X)      ((sqlite3_mutex*)8)
8991 #define sqlite3MutexInit()        SQLITE_OK
8992 #define sqlite3MutexEnd()
8993 #endif /* defined(SQLITE_MUTEX_OMIT) */
8994
8995 /************** End of mutex.h ***********************************************/
8996 /************** Continuing where we left off in sqliteInt.h ******************/
8997
8998
8999 /*
9000 ** Each database file to be accessed by the system is an instance
9001 ** of the following structure.  There are normally two of these structures
9002 ** in the sqlite.aDb[] array.  aDb[0] is the main database file and
9003 ** aDb[1] is the database file used to hold temporary tables.  Additional
9004 ** databases may be attached.
9005 */
9006 struct Db {
9007   char *zName;         /* Name of this database */
9008   Btree *pBt;          /* The B*Tree structure for this database file */
9009   u8 inTrans;          /* 0: not writable.  1: Transaction.  2: Checkpoint */
9010   u8 safety_level;     /* How aggressive at syncing data to disk */
9011   Schema *pSchema;     /* Pointer to database schema (possibly shared) */
9012 };
9013
9014 /*
9015 ** An instance of the following structure stores a database schema.
9016 **
9017 ** Most Schema objects are associated with a Btree.  The exception is
9018 ** the Schema for the TEMP databaes (sqlite3.aDb[1]) which is free-standing.
9019 ** In shared cache mode, a single Schema object can be shared by multiple
9020 ** Btrees that refer to the same underlying BtShared object.
9021 ** 
9022 ** Schema objects are automatically deallocated when the last Btree that
9023 ** references them is destroyed.   The TEMP Schema is manually freed by
9024 ** sqlite3_close().
9025 *
9026 ** A thread must be holding a mutex on the corresponding Btree in order
9027 ** to access Schema content.  This implies that the thread must also be
9028 ** holding a mutex on the sqlite3 connection pointer that owns the Btree.
9029 ** For a TEMP Schema, on the connection mutex is required.
9030 */
9031 struct Schema {
9032   int schema_cookie;   /* Database schema version number for this file */
9033   int iGeneration;     /* Generation counter.  Incremented with each change */
9034   Hash tblHash;        /* All tables indexed by name */
9035   Hash idxHash;        /* All (named) indices indexed by name */
9036   Hash trigHash;       /* All triggers indexed by name */
9037   Hash fkeyHash;       /* All foreign keys by referenced table name */
9038   Table *pSeqTab;      /* The sqlite_sequence table used by AUTOINCREMENT */
9039   u8 file_format;      /* Schema format version for this file */
9040   u8 enc;              /* Text encoding used by this database */
9041   u16 flags;           /* Flags associated with this schema */
9042   int cache_size;      /* Number of pages to use in the cache */
9043 };
9044
9045 /*
9046 ** These macros can be used to test, set, or clear bits in the 
9047 ** Db.pSchema->flags field.
9048 */
9049 #define DbHasProperty(D,I,P)     (((D)->aDb[I].pSchema->flags&(P))==(P))
9050 #define DbHasAnyProperty(D,I,P)  (((D)->aDb[I].pSchema->flags&(P))!=0)
9051 #define DbSetProperty(D,I,P)     (D)->aDb[I].pSchema->flags|=(P)
9052 #define DbClearProperty(D,I,P)   (D)->aDb[I].pSchema->flags&=~(P)
9053
9054 /*
9055 ** Allowed values for the DB.pSchema->flags field.
9056 **
9057 ** The DB_SchemaLoaded flag is set after the database schema has been
9058 ** read into internal hash tables.
9059 **
9060 ** DB_UnresetViews means that one or more views have column names that
9061 ** have been filled out.  If the schema changes, these column names might
9062 ** changes and so the view will need to be reset.
9063 */
9064 #define DB_SchemaLoaded    0x0001  /* The schema has been loaded */
9065 #define DB_UnresetViews    0x0002  /* Some views have defined column names */
9066 #define DB_Empty           0x0004  /* The file is empty (length 0 bytes) */
9067
9068 /*
9069 ** The number of different kinds of things that can be limited
9070 ** using the sqlite3_limit() interface.
9071 */
9072 #define SQLITE_N_LIMIT (SQLITE_LIMIT_TRIGGER_DEPTH+1)
9073
9074 /*
9075 ** Lookaside malloc is a set of fixed-size buffers that can be used
9076 ** to satisfy small transient memory allocation requests for objects
9077 ** associated with a particular database connection.  The use of
9078 ** lookaside malloc provides a significant performance enhancement
9079 ** (approx 10%) by avoiding numerous malloc/free requests while parsing
9080 ** SQL statements.
9081 **
9082 ** The Lookaside structure holds configuration information about the
9083 ** lookaside malloc subsystem.  Each available memory allocation in
9084 ** the lookaside subsystem is stored on a linked list of LookasideSlot
9085 ** objects.
9086 **
9087 ** Lookaside allocations are only allowed for objects that are associated
9088 ** with a particular database connection.  Hence, schema information cannot
9089 ** be stored in lookaside because in shared cache mode the schema information
9090 ** is shared by multiple database connections.  Therefore, while parsing
9091 ** schema information, the Lookaside.bEnabled flag is cleared so that
9092 ** lookaside allocations are not used to construct the schema objects.
9093 */
9094 struct Lookaside {
9095   u16 sz;                 /* Size of each buffer in bytes */
9096   u8 bEnabled;            /* False to disable new lookaside allocations */
9097   u8 bMalloced;           /* True if pStart obtained from sqlite3_malloc() */
9098   int nOut;               /* Number of buffers currently checked out */
9099   int mxOut;              /* Highwater mark for nOut */
9100   int anStat[3];          /* 0: hits.  1: size misses.  2: full misses */
9101   LookasideSlot *pFree;   /* List of available buffers */
9102   void *pStart;           /* First byte of available memory space */
9103   void *pEnd;             /* First byte past end of available space */
9104 };
9105 struct LookasideSlot {
9106   LookasideSlot *pNext;    /* Next buffer in the list of free buffers */
9107 };
9108
9109 /*
9110 ** A hash table for function definitions.
9111 **
9112 ** Hash each FuncDef structure into one of the FuncDefHash.a[] slots.
9113 ** Collisions are on the FuncDef.pHash chain.
9114 */
9115 struct FuncDefHash {
9116   FuncDef *a[23];       /* Hash table for functions */
9117 };
9118
9119 /*
9120 ** Each database connection is an instance of the following structure.
9121 **
9122 ** The sqlite.lastRowid records the last insert rowid generated by an
9123 ** insert statement.  Inserts on views do not affect its value.  Each
9124 ** trigger has its own context, so that lastRowid can be updated inside
9125 ** triggers as usual.  The previous value will be restored once the trigger
9126 ** exits.  Upon entering a before or instead of trigger, lastRowid is no
9127 ** longer (since after version 2.8.12) reset to -1.
9128 **
9129 ** The sqlite.nChange does not count changes within triggers and keeps no
9130 ** context.  It is reset at start of sqlite3_exec.
9131 ** The sqlite.lsChange represents the number of changes made by the last
9132 ** insert, update, or delete statement.  It remains constant throughout the
9133 ** length of a statement and is then updated by OP_SetCounts.  It keeps a
9134 ** context stack just like lastRowid so that the count of changes
9135 ** within a trigger is not seen outside the trigger.  Changes to views do not
9136 ** affect the value of lsChange.
9137 ** The sqlite.csChange keeps track of the number of current changes (since
9138 ** the last statement) and is used to update sqlite_lsChange.
9139 **
9140 ** The member variables sqlite.errCode, sqlite.zErrMsg and sqlite.zErrMsg16
9141 ** store the most recent error code and, if applicable, string. The
9142 ** internal function sqlite3Error() is used to set these variables
9143 ** consistently.
9144 */
9145 struct sqlite3 {
9146   sqlite3_vfs *pVfs;            /* OS Interface */
9147   int nDb;                      /* Number of backends currently in use */
9148   Db *aDb;                      /* All backends */
9149   int flags;                    /* Miscellaneous flags. See below */
9150   int openFlags;                /* Flags passed to sqlite3_vfs.xOpen() */
9151   int errCode;                  /* Most recent error code (SQLITE_*) */
9152   int errMask;                  /* & result codes with this before returning */
9153   u8 autoCommit;                /* The auto-commit flag. */
9154   u8 temp_store;                /* 1: file 2: memory 0: default */
9155   u8 mallocFailed;              /* True if we have seen a malloc failure */
9156   u8 dfltLockMode;              /* Default locking-mode for attached dbs */
9157   signed char nextAutovac;      /* Autovac setting after VACUUM if >=0 */
9158   u8 suppressErr;               /* Do not issue error messages if true */
9159   int nextPagesize;             /* Pagesize after VACUUM if >0 */
9160   int nTable;                   /* Number of tables in the database */
9161   CollSeq *pDfltColl;           /* The default collating sequence (BINARY) */
9162   i64 lastRowid;                /* ROWID of most recent insert (see above) */
9163   u32 magic;                    /* Magic number for detect library misuse */
9164   int nChange;                  /* Value returned by sqlite3_changes() */
9165   int nTotalChange;             /* Value returned by sqlite3_total_changes() */
9166   sqlite3_mutex *mutex;         /* Connection mutex */
9167   int aLimit[SQLITE_N_LIMIT];   /* Limits */
9168   struct sqlite3InitInfo {      /* Information used during initialization */
9169     int iDb;                    /* When back is being initialized */
9170     int newTnum;                /* Rootpage of table being initialized */
9171     u8 busy;                    /* TRUE if currently initializing */
9172     u8 orphanTrigger;           /* Last statement is orphaned TEMP trigger */
9173   } init;
9174   int nExtension;               /* Number of loaded extensions */
9175   void **aExtension;            /* Array of shared library handles */
9176   struct Vdbe *pVdbe;           /* List of active virtual machines */
9177   int activeVdbeCnt;            /* Number of VDBEs currently executing */
9178   int writeVdbeCnt;             /* Number of active VDBEs that are writing */
9179   int vdbeExecCnt;              /* Number of nested calls to VdbeExec() */
9180   void (*xTrace)(void*,const char*);        /* Trace function */
9181   void *pTraceArg;                          /* Argument to the trace function */
9182   void (*xProfile)(void*,const char*,u64);  /* Profiling function */
9183   void *pProfileArg;                        /* Argument to profile function */
9184   void *pCommitArg;                 /* Argument to xCommitCallback() */   
9185   int (*xCommitCallback)(void*);    /* Invoked at every commit. */
9186   void *pRollbackArg;               /* Argument to xRollbackCallback() */   
9187   void (*xRollbackCallback)(void*); /* Invoked at every commit. */
9188   void *pUpdateArg;
9189   void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64);
9190 #ifndef SQLITE_OMIT_WAL
9191   int (*xWalCallback)(void *, sqlite3 *, const char *, int);
9192   void *pWalArg;
9193 #endif
9194   void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*);
9195   void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*);
9196   void *pCollNeededArg;
9197   sqlite3_value *pErr;          /* Most recent error message */
9198   char *zErrMsg;                /* Most recent error message (UTF-8 encoded) */
9199   char *zErrMsg16;              /* Most recent error message (UTF-16 encoded) */
9200   union {
9201     volatile int isInterrupted; /* True if sqlite3_interrupt has been called */
9202     double notUsed1;            /* Spacer */
9203   } u1;
9204   Lookaside lookaside;          /* Lookaside malloc configuration */
9205 #ifndef SQLITE_OMIT_AUTHORIZATION
9206   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
9207                                 /* Access authorization function */
9208   void *pAuthArg;               /* 1st argument to the access auth function */
9209 #endif
9210 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
9211   int (*xProgress)(void *);     /* The progress callback */
9212   void *pProgressArg;           /* Argument to the progress callback */
9213   int nProgressOps;             /* Number of opcodes for progress callback */
9214 #endif
9215 #ifndef SQLITE_OMIT_VIRTUALTABLE
9216   Hash aModule;                 /* populated by sqlite3_create_module() */
9217   Table *pVTab;                 /* vtab with active Connect/Create method */
9218   VTable **aVTrans;             /* Virtual tables with open transactions */
9219   int nVTrans;                  /* Allocated size of aVTrans */
9220   VTable *pDisconnect;    /* Disconnect these in next sqlite3_prepare() */
9221 #endif
9222   FuncDefHash aFunc;            /* Hash table of connection functions */
9223   Hash aCollSeq;                /* All collating sequences */
9224   BusyHandler busyHandler;      /* Busy callback */
9225   int busyTimeout;              /* Busy handler timeout, in msec */
9226   Db aDbStatic[2];              /* Static space for the 2 default backends */
9227   Savepoint *pSavepoint;        /* List of active savepoints */
9228   int nSavepoint;               /* Number of non-transaction savepoints */
9229   int nStatement;               /* Number of nested statement-transactions  */
9230   u8 isTransactionSavepoint;    /* True if the outermost savepoint is a TS */
9231   i64 nDeferredCons;            /* Net deferred constraints this transaction. */
9232   int *pnBytesFreed;            /* If not NULL, increment this in DbFree() */
9233
9234 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
9235   /* The following variables are all protected by the STATIC_MASTER 
9236   ** mutex, not by sqlite3.mutex. They are used by code in notify.c. 
9237   **
9238   ** When X.pUnlockConnection==Y, that means that X is waiting for Y to
9239   ** unlock so that it can proceed.
9240   **
9241   ** When X.pBlockingConnection==Y, that means that something that X tried
9242   ** tried to do recently failed with an SQLITE_LOCKED error due to locks
9243   ** held by Y.
9244   */
9245   sqlite3 *pBlockingConnection; /* Connection that caused SQLITE_LOCKED */
9246   sqlite3 *pUnlockConnection;           /* Connection to watch for unlock */
9247   void *pUnlockArg;                     /* Argument to xUnlockNotify */
9248   void (*xUnlockNotify)(void **, int);  /* Unlock notify callback */
9249   sqlite3 *pNextBlocked;        /* Next in list of all blocked connections */
9250 #endif
9251 };
9252
9253 /*
9254 ** A macro to discover the encoding of a database.
9255 */
9256 #define ENC(db) ((db)->aDb[0].pSchema->enc)
9257
9258 /*
9259 ** Possible values for the sqlite3.flags.
9260 */
9261 #define SQLITE_VdbeTrace      0x00000100  /* True to trace VDBE execution */
9262 #define SQLITE_InternChanges  0x00000200  /* Uncommitted Hash table changes */
9263 #define SQLITE_FullColNames   0x00000400  /* Show full column names on SELECT */
9264 #define SQLITE_ShortColNames  0x00000800  /* Show short columns names */
9265 #define SQLITE_CountRows      0x00001000  /* Count rows changed by INSERT, */
9266                                           /*   DELETE, or UPDATE and return */
9267                                           /*   the count using a callback. */
9268 #define SQLITE_NullCallback   0x00002000  /* Invoke the callback once if the */
9269                                           /*   result set is empty */
9270 #define SQLITE_SqlTrace       0x00004000  /* Debug print SQL as it executes */
9271 #define SQLITE_VdbeListing    0x00008000  /* Debug listings of VDBE programs */
9272 #define SQLITE_WriteSchema    0x00010000  /* OK to update SQLITE_MASTER */
9273 #define SQLITE_NoReadlock     0x00020000  /* Readlocks are omitted when 
9274                                           ** accessing read-only databases */
9275 #define SQLITE_IgnoreChecks   0x00040000  /* Do not enforce check constraints */
9276 #define SQLITE_ReadUncommitted 0x0080000  /* For shared-cache mode */
9277 #define SQLITE_LegacyFileFmt  0x00100000  /* Create new databases in format 1 */
9278 #define SQLITE_FullFSync      0x00200000  /* Use full fsync on the backend */
9279 #define SQLITE_CkptFullFSync  0x00400000  /* Use full fsync for checkpoint */
9280 #define SQLITE_RecoveryMode   0x00800000  /* Ignore schema errors */
9281 #define SQLITE_ReverseOrder   0x01000000  /* Reverse unordered SELECTs */
9282 #define SQLITE_RecTriggers    0x02000000  /* Enable recursive triggers */
9283 #define SQLITE_ForeignKeys    0x04000000  /* Enforce foreign key constraints  */
9284 #define SQLITE_AutoIndex      0x08000000  /* Enable automatic indexes */
9285 #define SQLITE_PreferBuiltin  0x10000000  /* Preference to built-in funcs */
9286 #define SQLITE_LoadExtension  0x20000000  /* Enable load_extension */
9287 #define SQLITE_EnableTrigger  0x40000000  /* True to enable triggers */
9288
9289 /*
9290 ** Bits of the sqlite3.flags field that are used by the
9291 ** sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS,...) interface.
9292 ** These must be the low-order bits of the flags field.
9293 */
9294 #define SQLITE_QueryFlattener 0x01        /* Disable query flattening */
9295 #define SQLITE_ColumnCache    0x02        /* Disable the column cache */
9296 #define SQLITE_IndexSort      0x04        /* Disable indexes for sorting */
9297 #define SQLITE_IndexSearch    0x08        /* Disable indexes for searching */
9298 #define SQLITE_IndexCover     0x10        /* Disable index covering table */
9299 #define SQLITE_GroupByOrder   0x20        /* Disable GROUPBY cover of ORDERBY */
9300 #define SQLITE_FactorOutConst 0x40        /* Disable factoring out constants */
9301 #define SQLITE_OptMask        0xff        /* Mask of all disablable opts */
9302
9303 /*
9304 ** Possible values for the sqlite.magic field.
9305 ** The numbers are obtained at random and have no special meaning, other
9306 ** than being distinct from one another.
9307 */
9308 #define SQLITE_MAGIC_OPEN     0xa029a697  /* Database is open */
9309 #define SQLITE_MAGIC_CLOSED   0x9f3c2d33  /* Database is closed */
9310 #define SQLITE_MAGIC_SICK     0x4b771290  /* Error and awaiting close */
9311 #define SQLITE_MAGIC_BUSY     0xf03b7906  /* Database currently in use */
9312 #define SQLITE_MAGIC_ERROR    0xb5357930  /* An SQLITE_MISUSE error occurred */
9313
9314 /*
9315 ** Each SQL function is defined by an instance of the following
9316 ** structure.  A pointer to this structure is stored in the sqlite.aFunc
9317 ** hash table.  When multiple functions have the same name, the hash table
9318 ** points to a linked list of these structures.
9319 */
9320 struct FuncDef {
9321   i16 nArg;            /* Number of arguments.  -1 means unlimited */
9322   u8 iPrefEnc;         /* Preferred text encoding (SQLITE_UTF8, 16LE, 16BE) */
9323   u8 flags;            /* Some combination of SQLITE_FUNC_* */
9324   void *pUserData;     /* User data parameter */
9325   FuncDef *pNext;      /* Next function with same name */
9326   void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */
9327   void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */
9328   void (*xFinalize)(sqlite3_context*);                /* Aggregate finalizer */
9329   char *zName;         /* SQL name of the function. */
9330   FuncDef *pHash;      /* Next with a different name but the same hash */
9331   FuncDestructor *pDestructor;   /* Reference counted destructor function */
9332 };
9333
9334 /*
9335 ** This structure encapsulates a user-function destructor callback (as
9336 ** configured using create_function_v2()) and a reference counter. When
9337 ** create_function_v2() is called to create a function with a destructor,
9338 ** a single object of this type is allocated. FuncDestructor.nRef is set to 
9339 ** the number of FuncDef objects created (either 1 or 3, depending on whether
9340 ** or not the specified encoding is SQLITE_ANY). The FuncDef.pDestructor
9341 ** member of each of the new FuncDef objects is set to point to the allocated
9342 ** FuncDestructor.
9343 **
9344 ** Thereafter, when one of the FuncDef objects is deleted, the reference
9345 ** count on this object is decremented. When it reaches 0, the destructor
9346 ** is invoked and the FuncDestructor structure freed.
9347 */
9348 struct FuncDestructor {
9349   int nRef;
9350   void (*xDestroy)(void *);
9351   void *pUserData;
9352 };
9353
9354 /*
9355 ** Possible values for FuncDef.flags
9356 */
9357 #define SQLITE_FUNC_LIKE     0x01 /* Candidate for the LIKE optimization */
9358 #define SQLITE_FUNC_CASE     0x02 /* Case-sensitive LIKE-type function */
9359 #define SQLITE_FUNC_EPHEM    0x04 /* Ephemeral.  Delete with VDBE */
9360 #define SQLITE_FUNC_NEEDCOLL 0x08 /* sqlite3GetFuncCollSeq() might be called */
9361 #define SQLITE_FUNC_PRIVATE  0x10 /* Allowed for internal use only */
9362 #define SQLITE_FUNC_COUNT    0x20 /* Built-in count(*) aggregate */
9363 #define SQLITE_FUNC_COALESCE 0x40 /* Built-in coalesce() or ifnull() function */
9364
9365 /*
9366 ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are
9367 ** used to create the initializers for the FuncDef structures.
9368 **
9369 **   FUNCTION(zName, nArg, iArg, bNC, xFunc)
9370 **     Used to create a scalar function definition of a function zName 
9371 **     implemented by C function xFunc that accepts nArg arguments. The
9372 **     value passed as iArg is cast to a (void*) and made available
9373 **     as the user-data (sqlite3_user_data()) for the function. If 
9374 **     argument bNC is true, then the SQLITE_FUNC_NEEDCOLL flag is set.
9375 **
9376 **   AGGREGATE(zName, nArg, iArg, bNC, xStep, xFinal)
9377 **     Used to create an aggregate function definition implemented by
9378 **     the C functions xStep and xFinal. The first four parameters
9379 **     are interpreted in the same way as the first 4 parameters to
9380 **     FUNCTION().
9381 **
9382 **   LIKEFUNC(zName, nArg, pArg, flags)
9383 **     Used to create a scalar function definition of a function zName 
9384 **     that accepts nArg arguments and is implemented by a call to C 
9385 **     function likeFunc. Argument pArg is cast to a (void *) and made
9386 **     available as the function user-data (sqlite3_user_data()). The
9387 **     FuncDef.flags variable is set to the value passed as the flags
9388 **     parameter.
9389 */
9390 #define FUNCTION(zName, nArg, iArg, bNC, xFunc) \
9391   {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \
9392    SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0}
9393 #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \
9394   {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \
9395    pArg, 0, xFunc, 0, 0, #zName, 0, 0}
9396 #define LIKEFUNC(zName, nArg, arg, flags) \
9397   {nArg, SQLITE_UTF8, flags, (void *)arg, 0, likeFunc, 0, 0, #zName, 0, 0}
9398 #define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \
9399   {nArg, SQLITE_UTF8, nc*SQLITE_FUNC_NEEDCOLL, \
9400    SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0}
9401
9402 /*
9403 ** All current savepoints are stored in a linked list starting at
9404 ** sqlite3.pSavepoint. The first element in the list is the most recently
9405 ** opened savepoint. Savepoints are added to the list by the vdbe
9406 ** OP_Savepoint instruction.
9407 */
9408 struct Savepoint {
9409   char *zName;                        /* Savepoint name (nul-terminated) */
9410   i64 nDeferredCons;                  /* Number of deferred fk violations */
9411   Savepoint *pNext;                   /* Parent savepoint (if any) */
9412 };
9413
9414 /*
9415 ** The following are used as the second parameter to sqlite3Savepoint(),
9416 ** and as the P1 argument to the OP_Savepoint instruction.
9417 */
9418 #define SAVEPOINT_BEGIN      0
9419 #define SAVEPOINT_RELEASE    1
9420 #define SAVEPOINT_ROLLBACK   2
9421
9422
9423 /*
9424 ** Each SQLite module (virtual table definition) is defined by an
9425 ** instance of the following structure, stored in the sqlite3.aModule
9426 ** hash table.
9427 */
9428 struct Module {
9429   const sqlite3_module *pModule;       /* Callback pointers */
9430   const char *zName;                   /* Name passed to create_module() */
9431   void *pAux;                          /* pAux passed to create_module() */
9432   void (*xDestroy)(void *);            /* Module destructor function */
9433 };
9434
9435 /*
9436 ** information about each column of an SQL table is held in an instance
9437 ** of this structure.
9438 */
9439 struct Column {
9440   char *zName;     /* Name of this column */
9441   Expr *pDflt;     /* Default value of this column */
9442   char *zDflt;     /* Original text of the default value */
9443   char *zType;     /* Data type for this column */
9444   char *zColl;     /* Collating sequence.  If NULL, use the default */
9445   u8 notNull;      /* True if there is a NOT NULL constraint */
9446   u8 isPrimKey;    /* True if this column is part of the PRIMARY KEY */
9447   char affinity;   /* One of the SQLITE_AFF_... values */
9448 #ifndef SQLITE_OMIT_VIRTUALTABLE
9449   u8 isHidden;     /* True if this column is 'hidden' */
9450 #endif
9451 };
9452
9453 /*
9454 ** A "Collating Sequence" is defined by an instance of the following
9455 ** structure. Conceptually, a collating sequence consists of a name and
9456 ** a comparison routine that defines the order of that sequence.
9457 **
9458 ** There may two separate implementations of the collation function, one
9459 ** that processes text in UTF-8 encoding (CollSeq.xCmp) and another that
9460 ** processes text encoded in UTF-16 (CollSeq.xCmp16), using the machine
9461 ** native byte order. When a collation sequence is invoked, SQLite selects
9462 ** the version that will require the least expensive encoding
9463 ** translations, if any.
9464 **
9465 ** The CollSeq.pUser member variable is an extra parameter that passed in
9466 ** as the first argument to the UTF-8 comparison function, xCmp.
9467 ** CollSeq.pUser16 is the equivalent for the UTF-16 comparison function,
9468 ** xCmp16.
9469 **
9470 ** If both CollSeq.xCmp and CollSeq.xCmp16 are NULL, it means that the
9471 ** collating sequence is undefined.  Indices built on an undefined
9472 ** collating sequence may not be read or written.
9473 */
9474 struct CollSeq {
9475   char *zName;          /* Name of the collating sequence, UTF-8 encoded */
9476   u8 enc;               /* Text encoding handled by xCmp() */
9477   u8 type;              /* One of the SQLITE_COLL_... values below */
9478   void *pUser;          /* First argument to xCmp() */
9479   int (*xCmp)(void*,int, const void*, int, const void*);
9480   void (*xDel)(void*);  /* Destructor for pUser */
9481 };
9482
9483 /*
9484 ** Allowed values of CollSeq.type:
9485 */
9486 #define SQLITE_COLL_BINARY  1  /* The default memcmp() collating sequence */
9487 #define SQLITE_COLL_NOCASE  2  /* The built-in NOCASE collating sequence */
9488 #define SQLITE_COLL_REVERSE 3  /* The built-in REVERSE collating sequence */
9489 #define SQLITE_COLL_USER    0  /* Any other user-defined collating sequence */
9490
9491 /*
9492 ** A sort order can be either ASC or DESC.
9493 */
9494 #define SQLITE_SO_ASC       0  /* Sort in ascending order */
9495 #define SQLITE_SO_DESC      1  /* Sort in ascending order */
9496
9497 /*
9498 ** Column affinity types.
9499 **
9500 ** These used to have mnemonic name like 'i' for SQLITE_AFF_INTEGER and
9501 ** 't' for SQLITE_AFF_TEXT.  But we can save a little space and improve
9502 ** the speed a little by numbering the values consecutively.  
9503 **
9504 ** But rather than start with 0 or 1, we begin with 'a'.  That way,
9505 ** when multiple affinity types are concatenated into a string and
9506 ** used as the P4 operand, they will be more readable.
9507 **
9508 ** Note also that the numeric types are grouped together so that testing
9509 ** for a numeric type is a single comparison.
9510 */
9511 #define SQLITE_AFF_TEXT     'a'
9512 #define SQLITE_AFF_NONE     'b'
9513 #define SQLITE_AFF_NUMERIC  'c'
9514 #define SQLITE_AFF_INTEGER  'd'
9515 #define SQLITE_AFF_REAL     'e'
9516
9517 #define sqlite3IsNumericAffinity(X)  ((X)>=SQLITE_AFF_NUMERIC)
9518
9519 /*
9520 ** The SQLITE_AFF_MASK values masks off the significant bits of an
9521 ** affinity value. 
9522 */
9523 #define SQLITE_AFF_MASK     0x67
9524
9525 /*
9526 ** Additional bit values that can be ORed with an affinity without
9527 ** changing the affinity.
9528 */
9529 #define SQLITE_JUMPIFNULL   0x08  /* jumps if either operand is NULL */
9530 #define SQLITE_STOREP2      0x10  /* Store result in reg[P2] rather than jump */
9531 #define SQLITE_NULLEQ       0x80  /* NULL=NULL */
9532
9533 /*
9534 ** An object of this type is created for each virtual table present in
9535 ** the database schema. 
9536 **
9537 ** If the database schema is shared, then there is one instance of this
9538 ** structure for each database connection (sqlite3*) that uses the shared
9539 ** schema. This is because each database connection requires its own unique
9540 ** instance of the sqlite3_vtab* handle used to access the virtual table 
9541 ** implementation. sqlite3_vtab* handles can not be shared between 
9542 ** database connections, even when the rest of the in-memory database 
9543 ** schema is shared, as the implementation often stores the database
9544 ** connection handle passed to it via the xConnect() or xCreate() method
9545 ** during initialization internally. This database connection handle may
9546 ** then be used by the virtual table implementation to access real tables 
9547 ** within the database. So that they appear as part of the callers 
9548 ** transaction, these accesses need to be made via the same database 
9549 ** connection as that used to execute SQL operations on the virtual table.
9550 **
9551 ** All VTable objects that correspond to a single table in a shared
9552 ** database schema are initially stored in a linked-list pointed to by
9553 ** the Table.pVTable member variable of the corresponding Table object.
9554 ** When an sqlite3_prepare() operation is required to access the virtual
9555 ** table, it searches the list for the VTable that corresponds to the
9556 ** database connection doing the preparing so as to use the correct
9557 ** sqlite3_vtab* handle in the compiled query.
9558 **
9559 ** When an in-memory Table object is deleted (for example when the
9560 ** schema is being reloaded for some reason), the VTable objects are not 
9561 ** deleted and the sqlite3_vtab* handles are not xDisconnect()ed 
9562 ** immediately. Instead, they are moved from the Table.pVTable list to
9563 ** another linked list headed by the sqlite3.pDisconnect member of the
9564 ** corresponding sqlite3 structure. They are then deleted/xDisconnected 
9565 ** next time a statement is prepared using said sqlite3*. This is done
9566 ** to avoid deadlock issues involving multiple sqlite3.mutex mutexes.
9567 ** Refer to comments above function sqlite3VtabUnlockList() for an
9568 ** explanation as to why it is safe to add an entry to an sqlite3.pDisconnect
9569 ** list without holding the corresponding sqlite3.mutex mutex.
9570 **
9571 ** The memory for objects of this type is always allocated by 
9572 ** sqlite3DbMalloc(), using the connection handle stored in VTable.db as 
9573 ** the first argument.
9574 */
9575 struct VTable {
9576   sqlite3 *db;              /* Database connection associated with this table */
9577   Module *pMod;             /* Pointer to module implementation */
9578   sqlite3_vtab *pVtab;      /* Pointer to vtab instance */
9579   int nRef;                 /* Number of pointers to this structure */
9580   VTable *pNext;            /* Next in linked list (see above) */
9581 };
9582
9583 /*
9584 ** Each SQL table is represented in memory by an instance of the
9585 ** following structure.
9586 **
9587 ** Table.zName is the name of the table.  The case of the original
9588 ** CREATE TABLE statement is stored, but case is not significant for
9589 ** comparisons.
9590 **
9591 ** Table.nCol is the number of columns in this table.  Table.aCol is a
9592 ** pointer to an array of Column structures, one for each column.
9593 **
9594 ** If the table has an INTEGER PRIMARY KEY, then Table.iPKey is the index of
9595 ** the column that is that key.   Otherwise Table.iPKey is negative.  Note
9596 ** that the datatype of the PRIMARY KEY must be INTEGER for this field to
9597 ** be set.  An INTEGER PRIMARY KEY is used as the rowid for each row of
9598 ** the table.  If a table has no INTEGER PRIMARY KEY, then a random rowid
9599 ** is generated for each row of the table.  TF_HasPrimaryKey is set if
9600 ** the table has any PRIMARY KEY, INTEGER or otherwise.
9601 **
9602 ** Table.tnum is the page number for the root BTree page of the table in the
9603 ** database file.  If Table.iDb is the index of the database table backend
9604 ** in sqlite.aDb[].  0 is for the main database and 1 is for the file that
9605 ** holds temporary tables and indices.  If TF_Ephemeral is set
9606 ** then the table is stored in a file that is automatically deleted
9607 ** when the VDBE cursor to the table is closed.  In this case Table.tnum 
9608 ** refers VDBE cursor number that holds the table open, not to the root
9609 ** page number.  Transient tables are used to hold the results of a
9610 ** sub-query that appears instead of a real table name in the FROM clause 
9611 ** of a SELECT statement.
9612 */
9613 struct Table {
9614   char *zName;         /* Name of the table or view */
9615   int iPKey;           /* If not negative, use aCol[iPKey] as the primary key */
9616   int nCol;            /* Number of columns in this table */
9617   Column *aCol;        /* Information about each column */
9618   Index *pIndex;       /* List of SQL indexes on this table. */
9619   int tnum;            /* Root BTree node for this table (see note above) */
9620   unsigned nRowEst;    /* Estimated rows in table - from sqlite_stat1 table */
9621   Select *pSelect;     /* NULL for tables.  Points to definition if a view. */
9622   u16 nRef;            /* Number of pointers to this Table */
9623   u8 tabFlags;         /* Mask of TF_* values */
9624   u8 keyConf;          /* What to do in case of uniqueness conflict on iPKey */
9625   FKey *pFKey;         /* Linked list of all foreign keys in this table */
9626   char *zColAff;       /* String defining the affinity of each column */
9627 #ifndef SQLITE_OMIT_CHECK
9628   Expr *pCheck;        /* The AND of all CHECK constraints */
9629 #endif
9630 #ifndef SQLITE_OMIT_ALTERTABLE
9631   int addColOffset;    /* Offset in CREATE TABLE stmt to add a new column */
9632 #endif
9633 #ifndef SQLITE_OMIT_VIRTUALTABLE
9634   VTable *pVTable;     /* List of VTable objects. */
9635   int nModuleArg;      /* Number of arguments to the module */
9636   char **azModuleArg;  /* Text of all module args. [0] is module name */
9637 #endif
9638   Trigger *pTrigger;   /* List of triggers stored in pSchema */
9639   Schema *pSchema;     /* Schema that contains this table */
9640   Table *pNextZombie;  /* Next on the Parse.pZombieTab list */
9641 };
9642
9643 /*
9644 ** Allowed values for Tabe.tabFlags.
9645 */
9646 #define TF_Readonly        0x01    /* Read-only system table */
9647 #define TF_Ephemeral       0x02    /* An ephemeral table */
9648 #define TF_HasPrimaryKey   0x04    /* Table has a primary key */
9649 #define TF_Autoincrement   0x08    /* Integer primary key is autoincrement */
9650 #define TF_Virtual         0x10    /* Is a virtual table */
9651 #define TF_NeedMetadata    0x20    /* aCol[].zType and aCol[].pColl missing */
9652
9653
9654
9655 /*
9656 ** Test to see whether or not a table is a virtual table.  This is
9657 ** done as a macro so that it will be optimized out when virtual
9658 ** table support is omitted from the build.
9659 */
9660 #ifndef SQLITE_OMIT_VIRTUALTABLE
9661 #  define IsVirtual(X)      (((X)->tabFlags & TF_Virtual)!=0)
9662 #  define IsHiddenColumn(X) ((X)->isHidden)
9663 #else
9664 #  define IsVirtual(X)      0
9665 #  define IsHiddenColumn(X) 0
9666 #endif
9667
9668 /*
9669 ** Each foreign key constraint is an instance of the following structure.
9670 **
9671 ** A foreign key is associated with two tables.  The "from" table is
9672 ** the table that contains the REFERENCES clause that creates the foreign
9673 ** key.  The "to" table is the table that is named in the REFERENCES clause.
9674 ** Consider this example:
9675 **
9676 **     CREATE TABLE ex1(
9677 **       a INTEGER PRIMARY KEY,
9678 **       b INTEGER CONSTRAINT fk1 REFERENCES ex2(x)
9679 **     );
9680 **
9681 ** For foreign key "fk1", the from-table is "ex1" and the to-table is "ex2".
9682 **
9683 ** Each REFERENCES clause generates an instance of the following structure
9684 ** which is attached to the from-table.  The to-table need not exist when
9685 ** the from-table is created.  The existence of the to-table is not checked.
9686 */
9687 struct FKey {
9688   Table *pFrom;     /* Table containing the REFERENCES clause (aka: Child) */
9689   FKey *pNextFrom;  /* Next foreign key in pFrom */
9690   char *zTo;        /* Name of table that the key points to (aka: Parent) */
9691   FKey *pNextTo;    /* Next foreign key on table named zTo */
9692   FKey *pPrevTo;    /* Previous foreign key on table named zTo */
9693   int nCol;         /* Number of columns in this key */
9694   /* EV: R-30323-21917 */
9695   u8 isDeferred;    /* True if constraint checking is deferred till COMMIT */
9696   u8 aAction[2];          /* ON DELETE and ON UPDATE actions, respectively */
9697   Trigger *apTrigger[2];  /* Triggers for aAction[] actions */
9698   struct sColMap {  /* Mapping of columns in pFrom to columns in zTo */
9699     int iFrom;         /* Index of column in pFrom */
9700     char *zCol;        /* Name of column in zTo.  If 0 use PRIMARY KEY */
9701   } aCol[1];        /* One entry for each of nCol column s */
9702 };
9703
9704 /*
9705 ** SQLite supports many different ways to resolve a constraint
9706 ** error.  ROLLBACK processing means that a constraint violation
9707 ** causes the operation in process to fail and for the current transaction
9708 ** to be rolled back.  ABORT processing means the operation in process
9709 ** fails and any prior changes from that one operation are backed out,
9710 ** but the transaction is not rolled back.  FAIL processing means that
9711 ** the operation in progress stops and returns an error code.  But prior
9712 ** changes due to the same operation are not backed out and no rollback
9713 ** occurs.  IGNORE means that the particular row that caused the constraint
9714 ** error is not inserted or updated.  Processing continues and no error
9715 ** is returned.  REPLACE means that preexisting database rows that caused
9716 ** a UNIQUE constraint violation are removed so that the new insert or
9717 ** update can proceed.  Processing continues and no error is reported.
9718 **
9719 ** RESTRICT, SETNULL, and CASCADE actions apply only to foreign keys.
9720 ** RESTRICT is the same as ABORT for IMMEDIATE foreign keys and the
9721 ** same as ROLLBACK for DEFERRED keys.  SETNULL means that the foreign
9722 ** key is set to NULL.  CASCADE means that a DELETE or UPDATE of the
9723 ** referenced table row is propagated into the row that holds the
9724 ** foreign key.
9725 ** 
9726 ** The following symbolic values are used to record which type
9727 ** of action to take.
9728 */
9729 #define OE_None     0   /* There is no constraint to check */
9730 #define OE_Rollback 1   /* Fail the operation and rollback the transaction */
9731 #define OE_Abort    2   /* Back out changes but do no rollback transaction */
9732 #define OE_Fail     3   /* Stop the operation but leave all prior changes */
9733 #define OE_Ignore   4   /* Ignore the error. Do not do the INSERT or UPDATE */
9734 #define OE_Replace  5   /* Delete existing record, then do INSERT or UPDATE */
9735
9736 #define OE_Restrict 6   /* OE_Abort for IMMEDIATE, OE_Rollback for DEFERRED */
9737 #define OE_SetNull  7   /* Set the foreign key value to NULL */
9738 #define OE_SetDflt  8   /* Set the foreign key value to its default */
9739 #define OE_Cascade  9   /* Cascade the changes */
9740
9741 #define OE_Default  99  /* Do whatever the default action is */
9742
9743
9744 /*
9745 ** An instance of the following structure is passed as the first
9746 ** argument to sqlite3VdbeKeyCompare and is used to control the 
9747 ** comparison of the two index keys.
9748 */
9749 struct KeyInfo {
9750   sqlite3 *db;        /* The database connection */
9751   u8 enc;             /* Text encoding - one of the SQLITE_UTF* values */
9752   u16 nField;         /* Number of entries in aColl[] */
9753   u8 *aSortOrder;     /* Sort order for each column.  May be NULL */
9754   CollSeq *aColl[1];  /* Collating sequence for each term of the key */
9755 };
9756
9757 /*
9758 ** An instance of the following structure holds information about a
9759 ** single index record that has already been parsed out into individual
9760 ** values.
9761 **
9762 ** A record is an object that contains one or more fields of data.
9763 ** Records are used to store the content of a table row and to store
9764 ** the key of an index.  A blob encoding of a record is created by
9765 ** the OP_MakeRecord opcode of the VDBE and is disassembled by the
9766 ** OP_Column opcode.
9767 **
9768 ** This structure holds a record that has already been disassembled
9769 ** into its constituent fields.
9770 */
9771 struct UnpackedRecord {
9772   KeyInfo *pKeyInfo;  /* Collation and sort-order information */
9773   u16 nField;         /* Number of entries in apMem[] */
9774   u16 flags;          /* Boolean settings.  UNPACKED_... below */
9775   i64 rowid;          /* Used by UNPACKED_PREFIX_SEARCH */
9776   Mem *aMem;          /* Values */
9777 };
9778
9779 /*
9780 ** Allowed values of UnpackedRecord.flags
9781 */
9782 #define UNPACKED_NEED_FREE     0x0001  /* Memory is from sqlite3Malloc() */
9783 #define UNPACKED_NEED_DESTROY  0x0002  /* apMem[]s should all be destroyed */
9784 #define UNPACKED_IGNORE_ROWID  0x0004  /* Ignore trailing rowid on key1 */
9785 #define UNPACKED_INCRKEY       0x0008  /* Make this key an epsilon larger */
9786 #define UNPACKED_PREFIX_MATCH  0x0010  /* A prefix match is considered OK */
9787 #define UNPACKED_PREFIX_SEARCH 0x0020  /* A prefix match is considered OK */
9788
9789 /*
9790 ** Each SQL index is represented in memory by an
9791 ** instance of the following structure.
9792 **
9793 ** The columns of the table that are to be indexed are described
9794 ** by the aiColumn[] field of this structure.  For example, suppose
9795 ** we have the following table and index:
9796 **
9797 **     CREATE TABLE Ex1(c1 int, c2 int, c3 text);
9798 **     CREATE INDEX Ex2 ON Ex1(c3,c1);
9799 **
9800 ** In the Table structure describing Ex1, nCol==3 because there are
9801 ** three columns in the table.  In the Index structure describing
9802 ** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed.
9803 ** The value of aiColumn is {2, 0}.  aiColumn[0]==2 because the 
9804 ** first column to be indexed (c3) has an index of 2 in Ex1.aCol[].
9805 ** The second column to be indexed (c1) has an index of 0 in
9806 ** Ex1.aCol[], hence Ex2.aiColumn[1]==0.
9807 **
9808 ** The Index.onError field determines whether or not the indexed columns
9809 ** must be unique and what to do if they are not.  When Index.onError=OE_None,
9810 ** it means this is not a unique index.  Otherwise it is a unique index
9811 ** and the value of Index.onError indicate the which conflict resolution 
9812 ** algorithm to employ whenever an attempt is made to insert a non-unique
9813 ** element.
9814 */
9815 struct Index {
9816   char *zName;     /* Name of this index */
9817   int nColumn;     /* Number of columns in the table used by this index */
9818   int *aiColumn;   /* Which columns are used by this index.  1st is 0 */
9819   unsigned *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */
9820   Table *pTable;   /* The SQL table being indexed */
9821   int tnum;        /* Page containing root of this index in database file */
9822   u8 onError;      /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
9823   u8 autoIndex;    /* True if is automatically created (ex: by UNIQUE) */
9824   u8 bUnordered;   /* Use this index for == or IN queries only */
9825   char *zColAff;   /* String defining the affinity of each column */
9826   Index *pNext;    /* The next index associated with the same table */
9827   Schema *pSchema; /* Schema containing this index */
9828   u8 *aSortOrder;  /* Array of size Index.nColumn. True==DESC, False==ASC */
9829   char **azColl;   /* Array of collation sequence names for index */
9830   IndexSample *aSample;    /* Array of SQLITE_INDEX_SAMPLES samples */
9831 };
9832
9833 /*
9834 ** Each sample stored in the sqlite_stat2 table is represented in memory 
9835 ** using a structure of this type.
9836 */
9837 struct IndexSample {
9838   union {
9839     char *z;        /* Value if eType is SQLITE_TEXT or SQLITE_BLOB */
9840     double r;       /* Value if eType is SQLITE_FLOAT or SQLITE_INTEGER */
9841   } u;
9842   u8 eType;         /* SQLITE_NULL, SQLITE_INTEGER ... etc. */
9843   u8 nByte;         /* Size in byte of text or blob. */
9844 };
9845
9846 /*
9847 ** Each token coming out of the lexer is an instance of
9848 ** this structure.  Tokens are also used as part of an expression.
9849 **
9850 ** Note if Token.z==0 then Token.dyn and Token.n are undefined and
9851 ** may contain random values.  Do not make any assumptions about Token.dyn
9852 ** and Token.n when Token.z==0.
9853 */
9854 struct Token {
9855   const char *z;     /* Text of the token.  Not NULL-terminated! */
9856   unsigned int n;    /* Number of characters in this token */
9857 };
9858
9859 /*
9860 ** An instance of this structure contains information needed to generate
9861 ** code for a SELECT that contains aggregate functions.
9862 **
9863 ** If Expr.op==TK_AGG_COLUMN or TK_AGG_FUNCTION then Expr.pAggInfo is a
9864 ** pointer to this structure.  The Expr.iColumn field is the index in
9865 ** AggInfo.aCol[] or AggInfo.aFunc[] of information needed to generate
9866 ** code for that node.
9867 **
9868 ** AggInfo.pGroupBy and AggInfo.aFunc.pExpr point to fields within the
9869 ** original Select structure that describes the SELECT statement.  These
9870 ** fields do not need to be freed when deallocating the AggInfo structure.
9871 */
9872 struct AggInfo {
9873   u8 directMode;          /* Direct rendering mode means take data directly
9874                           ** from source tables rather than from accumulators */
9875   u8 useSortingIdx;       /* In direct mode, reference the sorting index rather
9876                           ** than the source table */
9877   int sortingIdx;         /* Cursor number of the sorting index */
9878   ExprList *pGroupBy;     /* The group by clause */
9879   int nSortingColumn;     /* Number of columns in the sorting index */
9880   struct AggInfo_col {    /* For each column used in source tables */
9881     Table *pTab;             /* Source table */
9882     int iTable;              /* Cursor number of the source table */
9883     int iColumn;             /* Column number within the source table */
9884     int iSorterColumn;       /* Column number in the sorting index */
9885     int iMem;                /* Memory location that acts as accumulator */
9886     Expr *pExpr;             /* The original expression */
9887   } *aCol;
9888   int nColumn;            /* Number of used entries in aCol[] */
9889   int nColumnAlloc;       /* Number of slots allocated for aCol[] */
9890   int nAccumulator;       /* Number of columns that show through to the output.
9891                           ** Additional columns are used only as parameters to
9892                           ** aggregate functions */
9893   struct AggInfo_func {   /* For each aggregate function */
9894     Expr *pExpr;             /* Expression encoding the function */
9895     FuncDef *pFunc;          /* The aggregate function implementation */
9896     int iMem;                /* Memory location that acts as accumulator */
9897     int iDistinct;           /* Ephemeral table used to enforce DISTINCT */
9898   } *aFunc;
9899   int nFunc;              /* Number of entries in aFunc[] */
9900   int nFuncAlloc;         /* Number of slots allocated for aFunc[] */
9901 };
9902
9903 /*
9904 ** The datatype ynVar is a signed integer, either 16-bit or 32-bit.
9905 ** Usually it is 16-bits.  But if SQLITE_MAX_VARIABLE_NUMBER is greater
9906 ** than 32767 we have to make it 32-bit.  16-bit is preferred because
9907 ** it uses less memory in the Expr object, which is a big memory user
9908 ** in systems with lots of prepared statements.  And few applications
9909 ** need more than about 10 or 20 variables.  But some extreme users want
9910 ** to have prepared statements with over 32767 variables, and for them
9911 ** the option is available (at compile-time).
9912 */
9913 #if SQLITE_MAX_VARIABLE_NUMBER<=32767
9914 typedef i16 ynVar;
9915 #else
9916 typedef int ynVar;
9917 #endif
9918
9919 /*
9920 ** Each node of an expression in the parse tree is an instance
9921 ** of this structure.
9922 **
9923 ** Expr.op is the opcode. The integer parser token codes are reused
9924 ** as opcodes here. For example, the parser defines TK_GE to be an integer
9925 ** code representing the ">=" operator. This same integer code is reused
9926 ** to represent the greater-than-or-equal-to operator in the expression
9927 ** tree.
9928 **
9929 ** If the expression is an SQL literal (TK_INTEGER, TK_FLOAT, TK_BLOB, 
9930 ** or TK_STRING), then Expr.token contains the text of the SQL literal. If
9931 ** the expression is a variable (TK_VARIABLE), then Expr.token contains the 
9932 ** variable name. Finally, if the expression is an SQL function (TK_FUNCTION),
9933 ** then Expr.token contains the name of the function.
9934 **
9935 ** Expr.pRight and Expr.pLeft are the left and right subexpressions of a
9936 ** binary operator. Either or both may be NULL.
9937 **
9938 ** Expr.x.pList is a list of arguments if the expression is an SQL function,
9939 ** a CASE expression or an IN expression of the form "<lhs> IN (<y>, <z>...)".
9940 ** Expr.x.pSelect is used if the expression is a sub-select or an expression of
9941 ** the form "<lhs> IN (SELECT ...)". If the EP_xIsSelect bit is set in the
9942 ** Expr.flags mask, then Expr.x.pSelect is valid. Otherwise, Expr.x.pList is 
9943 ** valid.
9944 **
9945 ** An expression of the form ID or ID.ID refers to a column in a table.
9946 ** For such expressions, Expr.op is set to TK_COLUMN and Expr.iTable is
9947 ** the integer cursor number of a VDBE cursor pointing to that table and
9948 ** Expr.iColumn is the column number for the specific column.  If the
9949 ** expression is used as a result in an aggregate SELECT, then the
9950 ** value is also stored in the Expr.iAgg column in the aggregate so that
9951 ** it can be accessed after all aggregates are computed.
9952 **
9953 ** If the expression is an unbound variable marker (a question mark 
9954 ** character '?' in the original SQL) then the Expr.iTable holds the index 
9955 ** number for that variable.
9956 **
9957 ** If the expression is a subquery then Expr.iColumn holds an integer
9958 ** register number containing the result of the subquery.  If the
9959 ** subquery gives a constant result, then iTable is -1.  If the subquery
9960 ** gives a different answer at different times during statement processing
9961 ** then iTable is the address of a subroutine that computes the subquery.
9962 **
9963 ** If the Expr is of type OP_Column, and the table it is selecting from
9964 ** is a disk table or the "old.*" pseudo-table, then pTab points to the
9965 ** corresponding table definition.
9966 **
9967 ** ALLOCATION NOTES:
9968 **
9969 ** Expr objects can use a lot of memory space in database schema.  To
9970 ** help reduce memory requirements, sometimes an Expr object will be
9971 ** truncated.  And to reduce the number of memory allocations, sometimes
9972 ** two or more Expr objects will be stored in a single memory allocation,
9973 ** together with Expr.zToken strings.
9974 **
9975 ** If the EP_Reduced and EP_TokenOnly flags are set when
9976 ** an Expr object is truncated.  When EP_Reduced is set, then all
9977 ** the child Expr objects in the Expr.pLeft and Expr.pRight subtrees
9978 ** are contained within the same memory allocation.  Note, however, that
9979 ** the subtrees in Expr.x.pList or Expr.x.pSelect are always separately
9980 ** allocated, regardless of whether or not EP_Reduced is set.
9981 */
9982 struct Expr {
9983   u8 op;                 /* Operation performed by this node */
9984   char affinity;         /* The affinity of the column or 0 if not a column */
9985   u16 flags;             /* Various flags.  EP_* See below */
9986   union {
9987     char *zToken;          /* Token value. Zero terminated and dequoted */
9988     int iValue;            /* Non-negative integer value if EP_IntValue */
9989   } u;
9990
9991   /* If the EP_TokenOnly flag is set in the Expr.flags mask, then no
9992   ** space is allocated for the fields below this point. An attempt to
9993   ** access them will result in a segfault or malfunction. 
9994   *********************************************************************/
9995
9996   Expr *pLeft;           /* Left subnode */
9997   Expr *pRight;          /* Right subnode */
9998   union {
9999     ExprList *pList;     /* Function arguments or in "<expr> IN (<expr-list)" */
10000     Select *pSelect;     /* Used for sub-selects and "<expr> IN (<select>)" */
10001   } x;
10002   CollSeq *pColl;        /* The collation type of the column or 0 */
10003
10004   /* If the EP_Reduced flag is set in the Expr.flags mask, then no
10005   ** space is allocated for the fields below this point. An attempt to
10006   ** access them will result in a segfault or malfunction.
10007   *********************************************************************/
10008
10009   int iTable;            /* TK_COLUMN: cursor number of table holding column
10010                          ** TK_REGISTER: register number
10011                          ** TK_TRIGGER: 1 -> new, 0 -> old */
10012   ynVar iColumn;         /* TK_COLUMN: column index.  -1 for rowid.
10013                          ** TK_VARIABLE: variable number (always >= 1). */
10014   i16 iAgg;              /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
10015   i16 iRightJoinTable;   /* If EP_FromJoin, the right table of the join */
10016   u8 flags2;             /* Second set of flags.  EP2_... */
10017   u8 op2;                /* If a TK_REGISTER, the original value of Expr.op */
10018   AggInfo *pAggInfo;     /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */
10019   Table *pTab;           /* Table for TK_COLUMN expressions. */
10020 #if SQLITE_MAX_EXPR_DEPTH>0
10021   int nHeight;           /* Height of the tree headed by this node */
10022 #endif
10023 };
10024
10025 /*
10026 ** The following are the meanings of bits in the Expr.flags field.
10027 */
10028 #define EP_FromJoin   0x0001  /* Originated in ON or USING clause of a join */
10029 #define EP_Agg        0x0002  /* Contains one or more aggregate functions */
10030 #define EP_Resolved   0x0004  /* IDs have been resolved to COLUMNs */
10031 #define EP_Error      0x0008  /* Expression contains one or more errors */
10032 #define EP_Distinct   0x0010  /* Aggregate function with DISTINCT keyword */
10033 #define EP_VarSelect  0x0020  /* pSelect is correlated, not constant */
10034 #define EP_DblQuoted  0x0040  /* token.z was originally in "..." */
10035 #define EP_InfixFunc  0x0080  /* True for an infix function: LIKE, GLOB, etc */
10036 #define EP_ExpCollate 0x0100  /* Collating sequence specified explicitly */
10037 #define EP_FixedDest  0x0200  /* Result needed in a specific register */
10038 #define EP_IntValue   0x0400  /* Integer value contained in u.iValue */
10039 #define EP_xIsSelect  0x0800  /* x.pSelect is valid (otherwise x.pList is) */
10040
10041 #define EP_Reduced    0x1000  /* Expr struct is EXPR_REDUCEDSIZE bytes only */
10042 #define EP_TokenOnly  0x2000  /* Expr struct is EXPR_TOKENONLYSIZE bytes only */
10043 #define EP_Static     0x4000  /* Held in memory not obtained from malloc() */
10044
10045 /*
10046 ** The following are the meanings of bits in the Expr.flags2 field.
10047 */
10048 #define EP2_MallocedToken  0x0001  /* Need to sqlite3DbFree() Expr.zToken */
10049 #define EP2_Irreducible    0x0002  /* Cannot EXPRDUP_REDUCE this Expr */
10050
10051 /*
10052 ** The pseudo-routine sqlite3ExprSetIrreducible sets the EP2_Irreducible
10053 ** flag on an expression structure.  This flag is used for VV&A only.  The
10054 ** routine is implemented as a macro that only works when in debugging mode,
10055 ** so as not to burden production code.
10056 */
10057 #ifdef SQLITE_DEBUG
10058 # define ExprSetIrreducible(X)  (X)->flags2 |= EP2_Irreducible
10059 #else
10060 # define ExprSetIrreducible(X)
10061 #endif
10062
10063 /*
10064 ** These macros can be used to test, set, or clear bits in the 
10065 ** Expr.flags field.
10066 */
10067 #define ExprHasProperty(E,P)     (((E)->flags&(P))==(P))
10068 #define ExprHasAnyProperty(E,P)  (((E)->flags&(P))!=0)
10069 #define ExprSetProperty(E,P)     (E)->flags|=(P)
10070 #define ExprClearProperty(E,P)   (E)->flags&=~(P)
10071
10072 /*
10073 ** Macros to determine the number of bytes required by a normal Expr 
10074 ** struct, an Expr struct with the EP_Reduced flag set in Expr.flags 
10075 ** and an Expr struct with the EP_TokenOnly flag set.
10076 */
10077 #define EXPR_FULLSIZE           sizeof(Expr)           /* Full size */
10078 #define EXPR_REDUCEDSIZE        offsetof(Expr,iTable)  /* Common features */
10079 #define EXPR_TOKENONLYSIZE      offsetof(Expr,pLeft)   /* Fewer features */
10080
10081 /*
10082 ** Flags passed to the sqlite3ExprDup() function. See the header comment 
10083 ** above sqlite3ExprDup() for details.
10084 */
10085 #define EXPRDUP_REDUCE         0x0001  /* Used reduced-size Expr nodes */
10086
10087 /*
10088 ** A list of expressions.  Each expression may optionally have a
10089 ** name.  An expr/name combination can be used in several ways, such
10090 ** as the list of "expr AS ID" fields following a "SELECT" or in the
10091 ** list of "ID = expr" items in an UPDATE.  A list of expressions can
10092 ** also be used as the argument to a function, in which case the a.zName
10093 ** field is not used.
10094 */
10095 struct ExprList {
10096   int nExpr;             /* Number of expressions on the list */
10097   int nAlloc;            /* Number of entries allocated below */
10098   int iECursor;          /* VDBE Cursor associated with this ExprList */
10099   struct ExprList_item {
10100     Expr *pExpr;           /* The list of expressions */
10101     char *zName;           /* Token associated with this expression */
10102     char *zSpan;           /* Original text of the expression */
10103     u8 sortOrder;          /* 1 for DESC or 0 for ASC */
10104     u8 done;               /* A flag to indicate when processing is finished */
10105     u16 iCol;              /* For ORDER BY, column number in result set */
10106     u16 iAlias;            /* Index into Parse.aAlias[] for zName */
10107   } *a;                  /* One entry for each expression */
10108 };
10109
10110 /*
10111 ** An instance of this structure is used by the parser to record both
10112 ** the parse tree for an expression and the span of input text for an
10113 ** expression.
10114 */
10115 struct ExprSpan {
10116   Expr *pExpr;          /* The expression parse tree */
10117   const char *zStart;   /* First character of input text */
10118   const char *zEnd;     /* One character past the end of input text */
10119 };
10120
10121 /*
10122 ** An instance of this structure can hold a simple list of identifiers,
10123 ** such as the list "a,b,c" in the following statements:
10124 **
10125 **      INSERT INTO t(a,b,c) VALUES ...;
10126 **      CREATE INDEX idx ON t(a,b,c);
10127 **      CREATE TRIGGER trig BEFORE UPDATE ON t(a,b,c) ...;
10128 **
10129 ** The IdList.a.idx field is used when the IdList represents the list of
10130 ** column names after a table name in an INSERT statement.  In the statement
10131 **
10132 **     INSERT INTO t(a,b,c) ...
10133 **
10134 ** If "a" is the k-th column of table "t", then IdList.a[0].idx==k.
10135 */
10136 struct IdList {
10137   struct IdList_item {
10138     char *zName;      /* Name of the identifier */
10139     int idx;          /* Index in some Table.aCol[] of a column named zName */
10140   } *a;
10141   int nId;         /* Number of identifiers on the list */
10142   int nAlloc;      /* Number of entries allocated for a[] below */
10143 };
10144
10145 /*
10146 ** The bitmask datatype defined below is used for various optimizations.
10147 **
10148 ** Changing this from a 64-bit to a 32-bit type limits the number of
10149 ** tables in a join to 32 instead of 64.  But it also reduces the size
10150 ** of the library by 738 bytes on ix86.
10151 */
10152 typedef u64 Bitmask;
10153
10154 /*
10155 ** The number of bits in a Bitmask.  "BMS" means "BitMask Size".
10156 */
10157 #define BMS  ((int)(sizeof(Bitmask)*8))
10158
10159 /*
10160 ** The following structure describes the FROM clause of a SELECT statement.
10161 ** Each table or subquery in the FROM clause is a separate element of
10162 ** the SrcList.a[] array.
10163 **
10164 ** With the addition of multiple database support, the following structure
10165 ** can also be used to describe a particular table such as the table that
10166 ** is modified by an INSERT, DELETE, or UPDATE statement.  In standard SQL,
10167 ** such a table must be a simple name: ID.  But in SQLite, the table can
10168 ** now be identified by a database name, a dot, then the table name: ID.ID.
10169 **
10170 ** The jointype starts out showing the join type between the current table
10171 ** and the next table on the list.  The parser builds the list this way.
10172 ** But sqlite3SrcListShiftJoinType() later shifts the jointypes so that each
10173 ** jointype expresses the join between the table and the previous table.
10174 **
10175 ** In the colUsed field, the high-order bit (bit 63) is set if the table
10176 ** contains more than 63 columns and the 64-th or later column is used.
10177 */
10178 struct SrcList {
10179   i16 nSrc;        /* Number of tables or subqueries in the FROM clause */
10180   i16 nAlloc;      /* Number of entries allocated in a[] below */
10181   struct SrcList_item {
10182     char *zDatabase;  /* Name of database holding this table */
10183     char *zName;      /* Name of the table */
10184     char *zAlias;     /* The "B" part of a "A AS B" phrase.  zName is the "A" */
10185     Table *pTab;      /* An SQL table corresponding to zName */
10186     Select *pSelect;  /* A SELECT statement used in place of a table name */
10187     u8 isPopulated;   /* Temporary table associated with SELECT is populated */
10188     u8 jointype;      /* Type of join between this able and the previous */
10189     u8 notIndexed;    /* True if there is a NOT INDEXED clause */
10190 #ifndef SQLITE_OMIT_EXPLAIN
10191     u8 iSelectId;     /* If pSelect!=0, the id of the sub-select in EQP */
10192 #endif
10193     int iCursor;      /* The VDBE cursor number used to access this table */
10194     Expr *pOn;        /* The ON clause of a join */
10195     IdList *pUsing;   /* The USING clause of a join */
10196     Bitmask colUsed;  /* Bit N (1<<N) set if column N of pTab is used */
10197     char *zIndex;     /* Identifier from "INDEXED BY <zIndex>" clause */
10198     Index *pIndex;    /* Index structure corresponding to zIndex, if any */
10199   } a[1];             /* One entry for each identifier on the list */
10200 };
10201
10202 /*
10203 ** Permitted values of the SrcList.a.jointype field
10204 */
10205 #define JT_INNER     0x0001    /* Any kind of inner or cross join */
10206 #define JT_CROSS     0x0002    /* Explicit use of the CROSS keyword */
10207 #define JT_NATURAL   0x0004    /* True for a "natural" join */
10208 #define JT_LEFT      0x0008    /* Left outer join */
10209 #define JT_RIGHT     0x0010    /* Right outer join */
10210 #define JT_OUTER     0x0020    /* The "OUTER" keyword is present */
10211 #define JT_ERROR     0x0040    /* unknown or unsupported join type */
10212
10213
10214 /*
10215 ** A WherePlan object holds information that describes a lookup
10216 ** strategy.
10217 **
10218 ** This object is intended to be opaque outside of the where.c module.
10219 ** It is included here only so that that compiler will know how big it
10220 ** is.  None of the fields in this object should be used outside of
10221 ** the where.c module.
10222 **
10223 ** Within the union, pIdx is only used when wsFlags&WHERE_INDEXED is true.
10224 ** pTerm is only used when wsFlags&WHERE_MULTI_OR is true.  And pVtabIdx
10225 ** is only used when wsFlags&WHERE_VIRTUALTABLE is true.  It is never the
10226 ** case that more than one of these conditions is true.
10227 */
10228 struct WherePlan {
10229   u32 wsFlags;                   /* WHERE_* flags that describe the strategy */
10230   u32 nEq;                       /* Number of == constraints */
10231   double nRow;                   /* Estimated number of rows (for EQP) */
10232   union {
10233     Index *pIdx;                   /* Index when WHERE_INDEXED is true */
10234     struct WhereTerm *pTerm;       /* WHERE clause term for OR-search */
10235     sqlite3_index_info *pVtabIdx;  /* Virtual table index to use */
10236   } u;
10237 };
10238
10239 /*
10240 ** For each nested loop in a WHERE clause implementation, the WhereInfo
10241 ** structure contains a single instance of this structure.  This structure
10242 ** is intended to be private the the where.c module and should not be
10243 ** access or modified by other modules.
10244 **
10245 ** The pIdxInfo field is used to help pick the best index on a
10246 ** virtual table.  The pIdxInfo pointer contains indexing
10247 ** information for the i-th table in the FROM clause before reordering.
10248 ** All the pIdxInfo pointers are freed by whereInfoFree() in where.c.
10249 ** All other information in the i-th WhereLevel object for the i-th table
10250 ** after FROM clause ordering.
10251 */
10252 struct WhereLevel {
10253   WherePlan plan;       /* query plan for this element of the FROM clause */
10254   int iLeftJoin;        /* Memory cell used to implement LEFT OUTER JOIN */
10255   int iTabCur;          /* The VDBE cursor used to access the table */
10256   int iIdxCur;          /* The VDBE cursor used to access pIdx */
10257   int addrBrk;          /* Jump here to break out of the loop */
10258   int addrNxt;          /* Jump here to start the next IN combination */
10259   int addrCont;         /* Jump here to continue with the next loop cycle */
10260   int addrFirst;        /* First instruction of interior of the loop */
10261   u8 iFrom;             /* Which entry in the FROM clause */
10262   u8 op, p5;            /* Opcode and P5 of the opcode that ends the loop */
10263   int p1, p2;           /* Operands of the opcode used to ends the loop */
10264   union {               /* Information that depends on plan.wsFlags */
10265     struct {
10266       int nIn;              /* Number of entries in aInLoop[] */
10267       struct InLoop {
10268         int iCur;              /* The VDBE cursor used by this IN operator */
10269         int addrInTop;         /* Top of the IN loop */
10270       } *aInLoop;           /* Information about each nested IN operator */
10271     } in;                 /* Used when plan.wsFlags&WHERE_IN_ABLE */
10272   } u;
10273
10274   /* The following field is really not part of the current level.  But
10275   ** we need a place to cache virtual table index information for each
10276   ** virtual table in the FROM clause and the WhereLevel structure is
10277   ** a convenient place since there is one WhereLevel for each FROM clause
10278   ** element.
10279   */
10280   sqlite3_index_info *pIdxInfo;  /* Index info for n-th source table */
10281 };
10282
10283 /*
10284 ** Flags appropriate for the wctrlFlags parameter of sqlite3WhereBegin()
10285 ** and the WhereInfo.wctrlFlags member.
10286 */
10287 #define WHERE_ORDERBY_NORMAL   0x0000 /* No-op */
10288 #define WHERE_ORDERBY_MIN      0x0001 /* ORDER BY processing for min() func */
10289 #define WHERE_ORDERBY_MAX      0x0002 /* ORDER BY processing for max() func */
10290 #define WHERE_ONEPASS_DESIRED  0x0004 /* Want to do one-pass UPDATE/DELETE */
10291 #define WHERE_DUPLICATES_OK    0x0008 /* Ok to return a row more than once */
10292 #define WHERE_OMIT_OPEN        0x0010 /* Table cursors are already open */
10293 #define WHERE_OMIT_CLOSE       0x0020 /* Omit close of table & index cursors */
10294 #define WHERE_FORCE_TABLE      0x0040 /* Do not use an index-only search */
10295 #define WHERE_ONETABLE_ONLY    0x0080 /* Only code the 1st table in pTabList */
10296
10297 /*
10298 ** The WHERE clause processing routine has two halves.  The
10299 ** first part does the start of the WHERE loop and the second
10300 ** half does the tail of the WHERE loop.  An instance of
10301 ** this structure is returned by the first half and passed
10302 ** into the second half to give some continuity.
10303 */
10304 struct WhereInfo {
10305   Parse *pParse;       /* Parsing and code generating context */
10306   u16 wctrlFlags;      /* Flags originally passed to sqlite3WhereBegin() */
10307   u8 okOnePass;        /* Ok to use one-pass algorithm for UPDATE or DELETE */
10308   u8 untestedTerms;    /* Not all WHERE terms resolved by outer loop */
10309   SrcList *pTabList;             /* List of tables in the join */
10310   int iTop;                      /* The very beginning of the WHERE loop */
10311   int iContinue;                 /* Jump here to continue with next record */
10312   int iBreak;                    /* Jump here to break out of the loop */
10313   int nLevel;                    /* Number of nested loop */
10314   struct WhereClause *pWC;       /* Decomposition of the WHERE clause */
10315   double savedNQueryLoop;        /* pParse->nQueryLoop outside the WHERE loop */
10316   double nRowOut;                /* Estimated number of output rows */
10317   WhereLevel a[1];               /* Information about each nest loop in WHERE */
10318 };
10319
10320 /*
10321 ** A NameContext defines a context in which to resolve table and column
10322 ** names.  The context consists of a list of tables (the pSrcList) field and
10323 ** a list of named expression (pEList).  The named expression list may
10324 ** be NULL.  The pSrc corresponds to the FROM clause of a SELECT or
10325 ** to the table being operated on by INSERT, UPDATE, or DELETE.  The
10326 ** pEList corresponds to the result set of a SELECT and is NULL for
10327 ** other statements.
10328 **
10329 ** NameContexts can be nested.  When resolving names, the inner-most 
10330 ** context is searched first.  If no match is found, the next outer
10331 ** context is checked.  If there is still no match, the next context
10332 ** is checked.  This process continues until either a match is found
10333 ** or all contexts are check.  When a match is found, the nRef member of
10334 ** the context containing the match is incremented. 
10335 **
10336 ** Each subquery gets a new NameContext.  The pNext field points to the
10337 ** NameContext in the parent query.  Thus the process of scanning the
10338 ** NameContext list corresponds to searching through successively outer
10339 ** subqueries looking for a match.
10340 */
10341 struct NameContext {
10342   Parse *pParse;       /* The parser */
10343   SrcList *pSrcList;   /* One or more tables used to resolve names */
10344   ExprList *pEList;    /* Optional list of named expressions */
10345   int nRef;            /* Number of names resolved by this context */
10346   int nErr;            /* Number of errors encountered while resolving names */
10347   u8 allowAgg;         /* Aggregate functions allowed here */
10348   u8 hasAgg;           /* True if aggregates are seen */
10349   u8 isCheck;          /* True if resolving names in a CHECK constraint */
10350   int nDepth;          /* Depth of subquery recursion. 1 for no recursion */
10351   AggInfo *pAggInfo;   /* Information about aggregates at this level */
10352   NameContext *pNext;  /* Next outer name context.  NULL for outermost */
10353 };
10354
10355 /*
10356 ** An instance of the following structure contains all information
10357 ** needed to generate code for a single SELECT statement.
10358 **
10359 ** nLimit is set to -1 if there is no LIMIT clause.  nOffset is set to 0.
10360 ** If there is a LIMIT clause, the parser sets nLimit to the value of the
10361 ** limit and nOffset to the value of the offset (or 0 if there is not
10362 ** offset).  But later on, nLimit and nOffset become the memory locations
10363 ** in the VDBE that record the limit and offset counters.
10364 **
10365 ** addrOpenEphm[] entries contain the address of OP_OpenEphemeral opcodes.
10366 ** These addresses must be stored so that we can go back and fill in
10367 ** the P4_KEYINFO and P2 parameters later.  Neither the KeyInfo nor
10368 ** the number of columns in P2 can be computed at the same time
10369 ** as the OP_OpenEphm instruction is coded because not
10370 ** enough information about the compound query is known at that point.
10371 ** The KeyInfo for addrOpenTran[0] and [1] contains collating sequences
10372 ** for the result set.  The KeyInfo for addrOpenTran[2] contains collating
10373 ** sequences for the ORDER BY clause.
10374 */
10375 struct Select {
10376   ExprList *pEList;      /* The fields of the result */
10377   u8 op;                 /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */
10378   char affinity;         /* MakeRecord with this affinity for SRT_Set */
10379   u16 selFlags;          /* Various SF_* values */
10380   SrcList *pSrc;         /* The FROM clause */
10381   Expr *pWhere;          /* The WHERE clause */
10382   ExprList *pGroupBy;    /* The GROUP BY clause */
10383   Expr *pHaving;         /* The HAVING clause */
10384   ExprList *pOrderBy;    /* The ORDER BY clause */
10385   Select *pPrior;        /* Prior select in a compound select statement */
10386   Select *pNext;         /* Next select to the left in a compound */
10387   Select *pRightmost;    /* Right-most select in a compound select statement */
10388   Expr *pLimit;          /* LIMIT expression. NULL means not used. */
10389   Expr *pOffset;         /* OFFSET expression. NULL means not used. */
10390   int iLimit, iOffset;   /* Memory registers holding LIMIT & OFFSET counters */
10391   int addrOpenEphm[3];   /* OP_OpenEphem opcodes related to this select */
10392   double nSelectRow;     /* Estimated number of result rows */
10393 };
10394
10395 /*
10396 ** Allowed values for Select.selFlags.  The "SF" prefix stands for
10397 ** "Select Flag".
10398 */
10399 #define SF_Distinct        0x0001  /* Output should be DISTINCT */
10400 #define SF_Resolved        0x0002  /* Identifiers have been resolved */
10401 #define SF_Aggregate       0x0004  /* Contains aggregate functions */
10402 #define SF_UsesEphemeral   0x0008  /* Uses the OpenEphemeral opcode */
10403 #define SF_Expanded        0x0010  /* sqlite3SelectExpand() called on this */
10404 #define SF_HasTypeInfo     0x0020  /* FROM subqueries have Table metadata */
10405
10406
10407 /*
10408 ** The results of a select can be distributed in several ways.  The
10409 ** "SRT" prefix means "SELECT Result Type".
10410 */
10411 #define SRT_Union        1  /* Store result as keys in an index */
10412 #define SRT_Except       2  /* Remove result from a UNION index */
10413 #define SRT_Exists       3  /* Store 1 if the result is not empty */
10414 #define SRT_Discard      4  /* Do not save the results anywhere */
10415
10416 /* The ORDER BY clause is ignored for all of the above */
10417 #define IgnorableOrderby(X) ((X->eDest)<=SRT_Discard)
10418
10419 #define SRT_Output       5  /* Output each row of result */
10420 #define SRT_Mem          6  /* Store result in a memory cell */
10421 #define SRT_Set          7  /* Store results as keys in an index */
10422 #define SRT_Table        8  /* Store result as data with an automatic rowid */
10423 #define SRT_EphemTab     9  /* Create transient tab and store like SRT_Table */
10424 #define SRT_Coroutine   10  /* Generate a single row of result */
10425
10426 /*
10427 ** A structure used to customize the behavior of sqlite3Select(). See
10428 ** comments above sqlite3Select() for details.
10429 */
10430 typedef struct SelectDest SelectDest;
10431 struct SelectDest {
10432   u8 eDest;         /* How to dispose of the results */
10433   u8 affinity;      /* Affinity used when eDest==SRT_Set */
10434   int iParm;        /* A parameter used by the eDest disposal method */
10435   int iMem;         /* Base register where results are written */
10436   int nMem;         /* Number of registers allocated */
10437 };
10438
10439 /*
10440 ** During code generation of statements that do inserts into AUTOINCREMENT 
10441 ** tables, the following information is attached to the Table.u.autoInc.p
10442 ** pointer of each autoincrement table to record some side information that
10443 ** the code generator needs.  We have to keep per-table autoincrement
10444 ** information in case inserts are down within triggers.  Triggers do not
10445 ** normally coordinate their activities, but we do need to coordinate the
10446 ** loading and saving of autoincrement information.
10447 */
10448 struct AutoincInfo {
10449   AutoincInfo *pNext;   /* Next info block in a list of them all */
10450   Table *pTab;          /* Table this info block refers to */
10451   int iDb;              /* Index in sqlite3.aDb[] of database holding pTab */
10452   int regCtr;           /* Memory register holding the rowid counter */
10453 };
10454
10455 /*
10456 ** Size of the column cache
10457 */
10458 #ifndef SQLITE_N_COLCACHE
10459 # define SQLITE_N_COLCACHE 10
10460 #endif
10461
10462 /*
10463 ** At least one instance of the following structure is created for each 
10464 ** trigger that may be fired while parsing an INSERT, UPDATE or DELETE
10465 ** statement. All such objects are stored in the linked list headed at
10466 ** Parse.pTriggerPrg and deleted once statement compilation has been
10467 ** completed.
10468 **
10469 ** A Vdbe sub-program that implements the body and WHEN clause of trigger
10470 ** TriggerPrg.pTrigger, assuming a default ON CONFLICT clause of
10471 ** TriggerPrg.orconf, is stored in the TriggerPrg.pProgram variable.
10472 ** The Parse.pTriggerPrg list never contains two entries with the same
10473 ** values for both pTrigger and orconf.
10474 **
10475 ** The TriggerPrg.aColmask[0] variable is set to a mask of old.* columns
10476 ** accessed (or set to 0 for triggers fired as a result of INSERT 
10477 ** statements). Similarly, the TriggerPrg.aColmask[1] variable is set to
10478 ** a mask of new.* columns used by the program.
10479 */
10480 struct TriggerPrg {
10481   Trigger *pTrigger;      /* Trigger this program was coded from */
10482   int orconf;             /* Default ON CONFLICT policy */
10483   SubProgram *pProgram;   /* Program implementing pTrigger/orconf */
10484   u32 aColmask[2];        /* Masks of old.*, new.* columns accessed */
10485   TriggerPrg *pNext;      /* Next entry in Parse.pTriggerPrg list */
10486 };
10487
10488 /*
10489 ** The yDbMask datatype for the bitmask of all attached databases.
10490 */
10491 #if SQLITE_MAX_ATTACHED>30
10492   typedef sqlite3_uint64 yDbMask;
10493 #else
10494   typedef unsigned int yDbMask;
10495 #endif
10496
10497 /*
10498 ** An SQL parser context.  A copy of this structure is passed through
10499 ** the parser and down into all the parser action routine in order to
10500 ** carry around information that is global to the entire parse.
10501 **
10502 ** The structure is divided into two parts.  When the parser and code
10503 ** generate call themselves recursively, the first part of the structure
10504 ** is constant but the second part is reset at the beginning and end of
10505 ** each recursion.
10506 **
10507 ** The nTableLock and aTableLock variables are only used if the shared-cache 
10508 ** feature is enabled (if sqlite3Tsd()->useSharedData is true). They are
10509 ** used to store the set of table-locks required by the statement being
10510 ** compiled. Function sqlite3TableLock() is used to add entries to the
10511 ** list.
10512 */
10513 struct Parse {
10514   sqlite3 *db;         /* The main database structure */
10515   int rc;              /* Return code from execution */
10516   char *zErrMsg;       /* An error message */
10517   Vdbe *pVdbe;         /* An engine for executing database bytecode */
10518   u8 colNamesSet;      /* TRUE after OP_ColumnName has been issued to pVdbe */
10519   u8 nameClash;        /* A permanent table name clashes with temp table name */
10520   u8 checkSchema;      /* Causes schema cookie check after an error */
10521   u8 nested;           /* Number of nested calls to the parser/code generator */
10522   u8 parseError;       /* True after a parsing error.  Ticket #1794 */
10523   u8 nTempReg;         /* Number of temporary registers in aTempReg[] */
10524   u8 nTempInUse;       /* Number of aTempReg[] currently checked out */
10525   int aTempReg[8];     /* Holding area for temporary registers */
10526   int nRangeReg;       /* Size of the temporary register block */
10527   int iRangeReg;       /* First register in temporary register block */
10528   int nErr;            /* Number of errors seen */
10529   int nTab;            /* Number of previously allocated VDBE cursors */
10530   int nMem;            /* Number of memory cells used so far */
10531   int nSet;            /* Number of sets used so far */
10532   int ckBase;          /* Base register of data during check constraints */
10533   int iCacheLevel;     /* ColCache valid when aColCache[].iLevel<=iCacheLevel */
10534   int iCacheCnt;       /* Counter used to generate aColCache[].lru values */
10535   u8 nColCache;        /* Number of entries in the column cache */
10536   u8 iColCache;        /* Next entry of the cache to replace */
10537   struct yColCache {
10538     int iTable;           /* Table cursor number */
10539     int iColumn;          /* Table column number */
10540     u8 tempReg;           /* iReg is a temp register that needs to be freed */
10541     int iLevel;           /* Nesting level */
10542     int iReg;             /* Reg with value of this column. 0 means none. */
10543     int lru;              /* Least recently used entry has the smallest value */
10544   } aColCache[SQLITE_N_COLCACHE];  /* One for each column cache entry */
10545   yDbMask writeMask;   /* Start a write transaction on these databases */
10546   yDbMask cookieMask;  /* Bitmask of schema verified databases */
10547   u8 isMultiWrite;     /* True if statement may affect/insert multiple rows */
10548   u8 mayAbort;         /* True if statement may throw an ABORT exception */
10549   int cookieGoto;      /* Address of OP_Goto to cookie verifier subroutine */
10550   int cookieValue[SQLITE_MAX_ATTACHED+2];  /* Values of cookies to verify */
10551 #ifndef SQLITE_OMIT_SHARED_CACHE
10552   int nTableLock;        /* Number of locks in aTableLock */
10553   TableLock *aTableLock; /* Required table locks for shared-cache mode */
10554 #endif
10555   int regRowid;        /* Register holding rowid of CREATE TABLE entry */
10556   int regRoot;         /* Register holding root page number for new objects */
10557   AutoincInfo *pAinc;  /* Information about AUTOINCREMENT counters */
10558   int nMaxArg;         /* Max args passed to user function by sub-program */
10559
10560   /* Information used while coding trigger programs. */
10561   Parse *pToplevel;    /* Parse structure for main program (or NULL) */
10562   Table *pTriggerTab;  /* Table triggers are being coded for */
10563   u32 oldmask;         /* Mask of old.* columns referenced */
10564   u32 newmask;         /* Mask of new.* columns referenced */
10565   u8 eTriggerOp;       /* TK_UPDATE, TK_INSERT or TK_DELETE */
10566   u8 eOrconf;          /* Default ON CONFLICT policy for trigger steps */
10567   u8 disableTriggers;  /* True to disable triggers */
10568   double nQueryLoop;   /* Estimated number of iterations of a query */
10569
10570   /* Above is constant between recursions.  Below is reset before and after
10571   ** each recursion */
10572
10573   int nVar;            /* Number of '?' variables seen in the SQL so far */
10574   int nVarExpr;        /* Number of used slots in apVarExpr[] */
10575   int nVarExprAlloc;   /* Number of allocated slots in apVarExpr[] */
10576   Expr **apVarExpr;    /* Pointers to :aaa and $aaaa wildcard expressions */
10577   Vdbe *pReprepare;    /* VM being reprepared (sqlite3Reprepare()) */
10578   int nAlias;          /* Number of aliased result set columns */
10579   int nAliasAlloc;     /* Number of allocated slots for aAlias[] */
10580   int *aAlias;         /* Register used to hold aliased result */
10581   u8 explain;          /* True if the EXPLAIN flag is found on the query */
10582   Token sNameToken;    /* Token with unqualified schema object name */
10583   Token sLastToken;    /* The last token parsed */
10584   const char *zTail;   /* All SQL text past the last semicolon parsed */
10585   Table *pNewTable;    /* A table being constructed by CREATE TABLE */
10586   Trigger *pNewTrigger;     /* Trigger under construct by a CREATE TRIGGER */
10587   const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */
10588 #ifndef SQLITE_OMIT_VIRTUALTABLE
10589   Token sArg;                /* Complete text of a module argument */
10590   u8 declareVtab;            /* True if inside sqlite3_declare_vtab() */
10591   int nVtabLock;             /* Number of virtual tables to lock */
10592   Table **apVtabLock;        /* Pointer to virtual tables needing locking */
10593 #endif
10594   int nHeight;            /* Expression tree height of current sub-select */
10595   Table *pZombieTab;      /* List of Table objects to delete after code gen */
10596   TriggerPrg *pTriggerPrg;    /* Linked list of coded triggers */
10597
10598 #ifndef SQLITE_OMIT_EXPLAIN
10599   int iSelectId;
10600   int iNextSelectId;
10601 #endif
10602 };
10603
10604 #ifdef SQLITE_OMIT_VIRTUALTABLE
10605   #define IN_DECLARE_VTAB 0
10606 #else
10607   #define IN_DECLARE_VTAB (pParse->declareVtab)
10608 #endif
10609
10610 /*
10611 ** An instance of the following structure can be declared on a stack and used
10612 ** to save the Parse.zAuthContext value so that it can be restored later.
10613 */
10614 struct AuthContext {
10615   const char *zAuthContext;   /* Put saved Parse.zAuthContext here */
10616   Parse *pParse;              /* The Parse structure */
10617 };
10618
10619 /*
10620 ** Bitfield flags for P5 value in OP_Insert and OP_Delete
10621 */
10622 #define OPFLAG_NCHANGE       0x01    /* Set to update db->nChange */
10623 #define OPFLAG_LASTROWID     0x02    /* Set to update db->lastRowid */
10624 #define OPFLAG_ISUPDATE      0x04    /* This OP_Insert is an sql UPDATE */
10625 #define OPFLAG_APPEND        0x08    /* This is likely to be an append */
10626 #define OPFLAG_USESEEKRESULT 0x10    /* Try to avoid a seek in BtreeInsert() */
10627 #define OPFLAG_CLEARCACHE    0x20    /* Clear pseudo-table cache in OP_Column */
10628
10629 /*
10630  * Each trigger present in the database schema is stored as an instance of
10631  * struct Trigger. 
10632  *
10633  * Pointers to instances of struct Trigger are stored in two ways.
10634  * 1. In the "trigHash" hash table (part of the sqlite3* that represents the 
10635  *    database). This allows Trigger structures to be retrieved by name.
10636  * 2. All triggers associated with a single table form a linked list, using the
10637  *    pNext member of struct Trigger. A pointer to the first element of the
10638  *    linked list is stored as the "pTrigger" member of the associated
10639  *    struct Table.
10640  *
10641  * The "step_list" member points to the first element of a linked list
10642  * containing the SQL statements specified as the trigger program.
10643  */
10644 struct Trigger {
10645   char *zName;            /* The name of the trigger                        */
10646   char *table;            /* The table or view to which the trigger applies */
10647   u8 op;                  /* One of TK_DELETE, TK_UPDATE, TK_INSERT         */
10648   u8 tr_tm;               /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
10649   Expr *pWhen;            /* The WHEN clause of the expression (may be NULL) */
10650   IdList *pColumns;       /* If this is an UPDATE OF <column-list> trigger,
10651                              the <column-list> is stored here */
10652   Schema *pSchema;        /* Schema containing the trigger */
10653   Schema *pTabSchema;     /* Schema containing the table */
10654   TriggerStep *step_list; /* Link list of trigger program steps             */
10655   Trigger *pNext;         /* Next trigger associated with the table */
10656 };
10657
10658 /*
10659 ** A trigger is either a BEFORE or an AFTER trigger.  The following constants
10660 ** determine which. 
10661 **
10662 ** If there are multiple triggers, you might of some BEFORE and some AFTER.
10663 ** In that cases, the constants below can be ORed together.
10664 */
10665 #define TRIGGER_BEFORE  1
10666 #define TRIGGER_AFTER   2
10667
10668 /*
10669  * An instance of struct TriggerStep is used to store a single SQL statement
10670  * that is a part of a trigger-program. 
10671  *
10672  * Instances of struct TriggerStep are stored in a singly linked list (linked
10673  * using the "pNext" member) referenced by the "step_list" member of the 
10674  * associated struct Trigger instance. The first element of the linked list is
10675  * the first step of the trigger-program.
10676  * 
10677  * The "op" member indicates whether this is a "DELETE", "INSERT", "UPDATE" or
10678  * "SELECT" statement. The meanings of the other members is determined by the 
10679  * value of "op" as follows:
10680  *
10681  * (op == TK_INSERT)
10682  * orconf    -> stores the ON CONFLICT algorithm
10683  * pSelect   -> If this is an INSERT INTO ... SELECT ... statement, then
10684  *              this stores a pointer to the SELECT statement. Otherwise NULL.
10685  * target    -> A token holding the quoted name of the table to insert into.
10686  * pExprList -> If this is an INSERT INTO ... VALUES ... statement, then
10687  *              this stores values to be inserted. Otherwise NULL.
10688  * pIdList   -> If this is an INSERT INTO ... (<column-names>) VALUES ... 
10689  *              statement, then this stores the column-names to be
10690  *              inserted into.
10691  *
10692  * (op == TK_DELETE)
10693  * target    -> A token holding the quoted name of the table to delete from.
10694  * pWhere    -> The WHERE clause of the DELETE statement if one is specified.
10695  *              Otherwise NULL.
10696  * 
10697  * (op == TK_UPDATE)
10698  * target    -> A token holding the quoted name of the table to update rows of.
10699  * pWhere    -> The WHERE clause of the UPDATE statement if one is specified.
10700  *              Otherwise NULL.
10701  * pExprList -> A list of the columns to update and the expressions to update
10702  *              them to. See sqlite3Update() documentation of "pChanges"
10703  *              argument.
10704  * 
10705  */
10706 struct TriggerStep {
10707   u8 op;               /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */
10708   u8 orconf;           /* OE_Rollback etc. */
10709   Trigger *pTrig;      /* The trigger that this step is a part of */
10710   Select *pSelect;     /* SELECT statment or RHS of INSERT INTO .. SELECT ... */
10711   Token target;        /* Target table for DELETE, UPDATE, INSERT */
10712   Expr *pWhere;        /* The WHERE clause for DELETE or UPDATE steps */
10713   ExprList *pExprList; /* SET clause for UPDATE.  VALUES clause for INSERT */
10714   IdList *pIdList;     /* Column names for INSERT */
10715   TriggerStep *pNext;  /* Next in the link-list */
10716   TriggerStep *pLast;  /* Last element in link-list. Valid for 1st elem only */
10717 };
10718
10719 /*
10720 ** The following structure contains information used by the sqliteFix...
10721 ** routines as they walk the parse tree to make database references
10722 ** explicit.  
10723 */
10724 typedef struct DbFixer DbFixer;
10725 struct DbFixer {
10726   Parse *pParse;      /* The parsing context.  Error messages written here */
10727   const char *zDb;    /* Make sure all objects are contained in this database */
10728   const char *zType;  /* Type of the container - used for error messages */
10729   const Token *pName; /* Name of the container - used for error messages */
10730 };
10731
10732 /*
10733 ** An objected used to accumulate the text of a string where we
10734 ** do not necessarily know how big the string will be in the end.
10735 */
10736 struct StrAccum {
10737   sqlite3 *db;         /* Optional database for lookaside.  Can be NULL */
10738   char *zBase;         /* A base allocation.  Not from malloc. */
10739   char *zText;         /* The string collected so far */
10740   int  nChar;          /* Length of the string so far */
10741   int  nAlloc;         /* Amount of space allocated in zText */
10742   int  mxAlloc;        /* Maximum allowed string length */
10743   u8   mallocFailed;   /* Becomes true if any memory allocation fails */
10744   u8   useMalloc;      /* 0: none,  1: sqlite3DbMalloc,  2: sqlite3_malloc */
10745   u8   tooBig;         /* Becomes true if string size exceeds limits */
10746 };
10747
10748 /*
10749 ** A pointer to this structure is used to communicate information
10750 ** from sqlite3Init and OP_ParseSchema into the sqlite3InitCallback.
10751 */
10752 typedef struct {
10753   sqlite3 *db;        /* The database being initialized */
10754   int iDb;            /* 0 for main database.  1 for TEMP, 2.. for ATTACHed */
10755   char **pzErrMsg;    /* Error message stored here */
10756   int rc;             /* Result code stored here */
10757 } InitData;
10758
10759 /*
10760 ** Structure containing global configuration data for the SQLite library.
10761 **
10762 ** This structure also contains some state information.
10763 */
10764 struct Sqlite3Config {
10765   int bMemstat;                     /* True to enable memory status */
10766   int bCoreMutex;                   /* True to enable core mutexing */
10767   int bFullMutex;                   /* True to enable full mutexing */
10768   int mxStrlen;                     /* Maximum string length */
10769   int szLookaside;                  /* Default lookaside buffer size */
10770   int nLookaside;                   /* Default lookaside buffer count */
10771   sqlite3_mem_methods m;            /* Low-level memory allocation interface */
10772   sqlite3_mutex_methods mutex;      /* Low-level mutex interface */
10773   sqlite3_pcache_methods pcache;    /* Low-level page-cache interface */
10774   void *pHeap;                      /* Heap storage space */
10775   int nHeap;                        /* Size of pHeap[] */
10776   int mnReq, mxReq;                 /* Min and max heap requests sizes */
10777   void *pScratch;                   /* Scratch memory */
10778   int szScratch;                    /* Size of each scratch buffer */
10779   int nScratch;                     /* Number of scratch buffers */
10780   void *pPage;                      /* Page cache memory */
10781   int szPage;                       /* Size of each page in pPage[] */
10782   int nPage;                        /* Number of pages in pPage[] */
10783   int mxParserStack;                /* maximum depth of the parser stack */
10784   int sharedCacheEnabled;           /* true if shared-cache mode enabled */
10785   /* The above might be initialized to non-zero.  The following need to always
10786   ** initially be zero, however. */
10787   int isInit;                       /* True after initialization has finished */
10788   int inProgress;                   /* True while initialization in progress */
10789   int isMutexInit;                  /* True after mutexes are initialized */
10790   int isMallocInit;                 /* True after malloc is initialized */
10791   int isPCacheInit;                 /* True after malloc is initialized */
10792   sqlite3_mutex *pInitMutex;        /* Mutex used by sqlite3_initialize() */
10793   int nRefInitMutex;                /* Number of users of pInitMutex */
10794   void (*xLog)(void*,int,const char*); /* Function for logging */
10795   void *pLogArg;                       /* First argument to xLog() */
10796 };
10797
10798 /*
10799 ** Context pointer passed down through the tree-walk.
10800 */
10801 struct Walker {
10802   int (*xExprCallback)(Walker*, Expr*);     /* Callback for expressions */
10803   int (*xSelectCallback)(Walker*,Select*);  /* Callback for SELECTs */
10804   Parse *pParse;                            /* Parser context.  */
10805   union {                                   /* Extra data for callback */
10806     NameContext *pNC;                          /* Naming context */
10807     int i;                                     /* Integer value */
10808   } u;
10809 };
10810
10811 /* Forward declarations */
10812 SQLITE_PRIVATE int sqlite3WalkExpr(Walker*, Expr*);
10813 SQLITE_PRIVATE int sqlite3WalkExprList(Walker*, ExprList*);
10814 SQLITE_PRIVATE int sqlite3WalkSelect(Walker*, Select*);
10815 SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker*, Select*);
10816 SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker*, Select*);
10817
10818 /*
10819 ** Return code from the parse-tree walking primitives and their
10820 ** callbacks.
10821 */
10822 #define WRC_Continue    0   /* Continue down into children */
10823 #define WRC_Prune       1   /* Omit children but continue walking siblings */
10824 #define WRC_Abort       2   /* Abandon the tree walk */
10825
10826 /*
10827 ** Assuming zIn points to the first byte of a UTF-8 character,
10828 ** advance zIn to point to the first byte of the next UTF-8 character.
10829 */
10830 #define SQLITE_SKIP_UTF8(zIn) {                        \
10831   if( (*(zIn++))>=0xc0 ){                              \
10832     while( (*zIn & 0xc0)==0x80 ){ zIn++; }             \
10833   }                                                    \
10834 }
10835
10836 /*
10837 ** The SQLITE_*_BKPT macros are substitutes for the error codes with
10838 ** the same name but without the _BKPT suffix.  These macros invoke
10839 ** routines that report the line-number on which the error originated
10840 ** using sqlite3_log().  The routines also provide a convenient place
10841 ** to set a debugger breakpoint.
10842 */
10843 SQLITE_PRIVATE int sqlite3CorruptError(int);
10844 SQLITE_PRIVATE int sqlite3MisuseError(int);
10845 SQLITE_PRIVATE int sqlite3CantopenError(int);
10846 #define SQLITE_CORRUPT_BKPT sqlite3CorruptError(__LINE__)
10847 #define SQLITE_MISUSE_BKPT sqlite3MisuseError(__LINE__)
10848 #define SQLITE_CANTOPEN_BKPT sqlite3CantopenError(__LINE__)
10849
10850
10851 /*
10852 ** FTS4 is really an extension for FTS3.  It is enabled using the
10853 ** SQLITE_ENABLE_FTS3 macro.  But to avoid confusion we also all
10854 ** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3.
10855 */
10856 #if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3)
10857 # define SQLITE_ENABLE_FTS3
10858 #endif
10859
10860 /*
10861 ** The ctype.h header is needed for non-ASCII systems.  It is also
10862 ** needed by FTS3 when FTS3 is included in the amalgamation.
10863 */
10864 #if !defined(SQLITE_ASCII) || \
10865     (defined(SQLITE_ENABLE_FTS3) && defined(SQLITE_AMALGAMATION))
10866 # include <ctype.h>
10867 #endif
10868
10869 /*
10870 ** The CoreServices.h and CoreFoundation.h headers are needed for excluding a
10871 ** -journal file from Time Machine backups when its associated database has
10872 ** previously been excluded by the client code.
10873 */
10874 #if defined(__APPLE__)
10875 #include <CoreServices/CoreServices.h>
10876 #include <CoreFoundation/CoreFoundation.h>
10877 #endif
10878
10879 /*
10880 ** The following macros mimic the standard library functions toupper(),
10881 ** isspace(), isalnum(), isdigit() and isxdigit(), respectively. The
10882 ** sqlite versions only work for ASCII characters, regardless of locale.
10883 */
10884 #ifdef SQLITE_ASCII
10885 # define sqlite3Toupper(x)  ((x)&~(sqlite3CtypeMap[(unsigned char)(x)]&0x20))
10886 # define sqlite3Isspace(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x01)
10887 # define sqlite3Isalnum(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x06)
10888 # define sqlite3Isalpha(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x02)
10889 # define sqlite3Isdigit(x)   (sqlite3CtypeMap[(unsigned char)(x)]&0x04)
10890 # define sqlite3Isxdigit(x)  (sqlite3CtypeMap[(unsigned char)(x)]&0x08)
10891 # define sqlite3Tolower(x)   (sqlite3UpperToLower[(unsigned char)(x)])
10892 #else
10893 # define sqlite3Toupper(x)   toupper((unsigned char)(x))
10894 # define sqlite3Isspace(x)   isspace((unsigned char)(x))
10895 # define sqlite3Isalnum(x)   isalnum((unsigned char)(x))
10896 # define sqlite3Isalpha(x)   isalpha((unsigned char)(x))
10897 # define sqlite3Isdigit(x)   isdigit((unsigned char)(x))
10898 # define sqlite3Isxdigit(x)  isxdigit((unsigned char)(x))
10899 # define sqlite3Tolower(x)   tolower((unsigned char)(x))
10900 #endif
10901
10902 /*
10903 ** Internal function prototypes
10904 */
10905 SQLITE_PRIVATE int sqlite3StrICmp(const char *, const char *);
10906 SQLITE_PRIVATE int sqlite3Strlen30(const char*);
10907 #define sqlite3StrNICmp sqlite3_strnicmp
10908
10909 SQLITE_PRIVATE int sqlite3MallocInit(void);
10910 SQLITE_PRIVATE void sqlite3MallocEnd(void);
10911 SQLITE_PRIVATE void *sqlite3Malloc(int);
10912 SQLITE_PRIVATE void *sqlite3MallocZero(int);
10913 SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3*, int);
10914 SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3*, int);
10915 SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3*,const char*);
10916 SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3*,const char*, int);
10917 SQLITE_PRIVATE void *sqlite3Realloc(void*, int);
10918 SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, int);
10919 SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, int);
10920 SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*);
10921 SQLITE_PRIVATE int sqlite3MallocSize(void*);
10922 SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, void*);
10923 SQLITE_PRIVATE void *sqlite3ScratchMalloc(int);
10924 SQLITE_PRIVATE void sqlite3ScratchFree(void*);
10925 SQLITE_PRIVATE void *sqlite3PageMalloc(int);
10926 SQLITE_PRIVATE void sqlite3PageFree(void*);
10927 SQLITE_PRIVATE void sqlite3MemSetDefault(void);
10928 SQLITE_PRIVATE void sqlite3BenignMallocHooks(void (*)(void), void (*)(void));
10929 SQLITE_PRIVATE int sqlite3HeapNearlyFull(void);
10930
10931 /*
10932 ** On systems with ample stack space and that support alloca(), make
10933 ** use of alloca() to obtain space for large automatic objects.  By default,
10934 ** obtain space from malloc().
10935 **
10936 ** The alloca() routine never returns NULL.  This will cause code paths
10937 ** that deal with sqlite3StackAlloc() failures to be unreachable.
10938 */
10939 #ifdef SQLITE_USE_ALLOCA
10940 # define sqlite3StackAllocRaw(D,N)   alloca(N)
10941 # define sqlite3StackAllocZero(D,N)  memset(alloca(N), 0, N)
10942 # define sqlite3StackFree(D,P)       
10943 #else
10944 # define sqlite3StackAllocRaw(D,N)   sqlite3DbMallocRaw(D,N)
10945 # define sqlite3StackAllocZero(D,N)  sqlite3DbMallocZero(D,N)
10946 # define sqlite3StackFree(D,P)       sqlite3DbFree(D,P)
10947 #endif
10948
10949 #ifdef SQLITE_ENABLE_MEMSYS3
10950 SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void);
10951 #endif
10952 #ifdef SQLITE_ENABLE_MEMSYS5
10953 SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void);
10954 #endif
10955
10956
10957 #ifndef SQLITE_MUTEX_OMIT
10958 SQLITE_PRIVATE   sqlite3_mutex_methods const *sqlite3DefaultMutex(void);
10959 SQLITE_PRIVATE   sqlite3_mutex_methods const *sqlite3NoopMutex(void);
10960 SQLITE_PRIVATE   sqlite3_mutex *sqlite3MutexAlloc(int);
10961 SQLITE_PRIVATE   int sqlite3MutexInit(void);
10962 SQLITE_PRIVATE   int sqlite3MutexEnd(void);
10963 #endif
10964
10965 SQLITE_PRIVATE int sqlite3StatusValue(int);
10966 SQLITE_PRIVATE void sqlite3StatusAdd(int, int);
10967 SQLITE_PRIVATE void sqlite3StatusSet(int, int);
10968
10969 #ifndef SQLITE_OMIT_FLOATING_POINT
10970 SQLITE_PRIVATE   int sqlite3IsNaN(double);
10971 #else
10972 # define sqlite3IsNaN(X)  0
10973 #endif
10974
10975 SQLITE_PRIVATE void sqlite3VXPrintf(StrAccum*, int, const char*, va_list);
10976 #ifndef SQLITE_OMIT_TRACE
10977 SQLITE_PRIVATE void sqlite3XPrintf(StrAccum*, const char*, ...);
10978 #endif
10979 SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3*,const char*, ...);
10980 SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3*,const char*, va_list);
10981 SQLITE_PRIVATE char *sqlite3MAppendf(sqlite3*,char*,const char*,...);
10982 #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
10983 SQLITE_PRIVATE   void sqlite3DebugPrintf(const char*, ...);
10984 #endif
10985 #if defined(SQLITE_TEST)
10986 SQLITE_PRIVATE   void *sqlite3TestTextToPtr(const char*);
10987 #endif
10988 SQLITE_PRIVATE void sqlite3SetString(char **, sqlite3*, const char*, ...);
10989 SQLITE_PRIVATE void sqlite3ErrorMsg(Parse*, const char*, ...);
10990 SQLITE_PRIVATE int sqlite3Dequote(char*);
10991 SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char*, int);
10992 SQLITE_PRIVATE int sqlite3RunParser(Parse*, const char*, char **);
10993 SQLITE_PRIVATE void sqlite3FinishCoding(Parse*);
10994 SQLITE_PRIVATE int sqlite3GetTempReg(Parse*);
10995 SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse*,int);
10996 SQLITE_PRIVATE int sqlite3GetTempRange(Parse*,int);
10997 SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse*,int,int);
10998 SQLITE_PRIVATE Expr *sqlite3ExprAlloc(sqlite3*,int,const Token*,int);
10999 SQLITE_PRIVATE Expr *sqlite3Expr(sqlite3*,int,const char*);
11000 SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(sqlite3*,Expr*,Expr*,Expr*);
11001 SQLITE_PRIVATE Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*);
11002 SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*);
11003 SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*);
11004 SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*);
11005 SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*);
11006 SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*);
11007 SQLITE_PRIVATE void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int);
11008 SQLITE_PRIVATE void sqlite3ExprListSetSpan(Parse*,ExprList*,ExprSpan*);
11009 SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3*, ExprList*);
11010 SQLITE_PRIVATE int sqlite3Init(sqlite3*, char**);
11011 SQLITE_PRIVATE int sqlite3InitCallback(void*, int, char**, char**);
11012 SQLITE_PRIVATE void sqlite3Pragma(Parse*,Token*,Token*,Token*,int);
11013 SQLITE_PRIVATE void sqlite3ResetInternalSchema(sqlite3*, int);
11014 SQLITE_PRIVATE void sqlite3BeginParse(Parse*,int);
11015 SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3*);
11016 SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse*,Select*);
11017 SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *, int);
11018 SQLITE_PRIVATE void sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int);
11019 SQLITE_PRIVATE void sqlite3AddColumn(Parse*,Token*);
11020 SQLITE_PRIVATE void sqlite3AddNotNull(Parse*, int);
11021 SQLITE_PRIVATE void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int);
11022 SQLITE_PRIVATE void sqlite3AddCheckConstraint(Parse*, Expr*);
11023 SQLITE_PRIVATE void sqlite3AddColumnType(Parse*,Token*);
11024 SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse*,ExprSpan*);
11025 SQLITE_PRIVATE void sqlite3AddCollateType(Parse*, Token*);
11026 SQLITE_PRIVATE void sqlite3EndTable(Parse*,Token*,Token*,Select*);
11027
11028 SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32);
11029 SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec*, u32);
11030 SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec*, u32);
11031 SQLITE_PRIVATE void sqlite3BitvecClear(Bitvec*, u32, void*);
11032 SQLITE_PRIVATE void sqlite3BitvecDestroy(Bitvec*);
11033 SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec*);
11034 SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int,int*);
11035
11036 SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3*, void*, unsigned int);
11037 SQLITE_PRIVATE void sqlite3RowSetClear(RowSet*);
11038 SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet*, i64);
11039 SQLITE_PRIVATE int sqlite3RowSetTest(RowSet*, u8 iBatch, i64);
11040 SQLITE_PRIVATE int sqlite3RowSetNext(RowSet*, i64*);
11041
11042 SQLITE_PRIVATE void sqlite3CreateView(Parse*,Token*,Token*,Token*,Select*,int,int);
11043
11044 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
11045 SQLITE_PRIVATE   int sqlite3ViewGetColumnNames(Parse*,Table*);
11046 #else
11047 # define sqlite3ViewGetColumnNames(A,B) 0
11048 #endif
11049
11050 SQLITE_PRIVATE void sqlite3DropTable(Parse*, SrcList*, int, int);
11051 SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3*, Table*);
11052 #ifndef SQLITE_OMIT_AUTOINCREMENT
11053 SQLITE_PRIVATE   void sqlite3AutoincrementBegin(Parse *pParse);
11054 SQLITE_PRIVATE   void sqlite3AutoincrementEnd(Parse *pParse);
11055 #else
11056 # define sqlite3AutoincrementBegin(X)
11057 # define sqlite3AutoincrementEnd(X)
11058 #endif
11059 SQLITE_PRIVATE void sqlite3Insert(Parse*, SrcList*, ExprList*, Select*, IdList*, int);
11060 SQLITE_PRIVATE void *sqlite3ArrayAllocate(sqlite3*,void*,int,int,int*,int*,int*);
11061 SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*);
11062 SQLITE_PRIVATE int sqlite3IdListIndex(IdList*,const char*);
11063 SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(sqlite3*, SrcList*, int, int);
11064 SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(sqlite3*, SrcList*, Token*, Token*);
11065 SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(Parse*, SrcList*, Token*, Token*,
11066                                       Token*, Select*, Expr*, IdList*);
11067 SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *, SrcList *, Token *);
11068 SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *, struct SrcList_item *);
11069 SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList*);
11070 SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse*, SrcList*);
11071 SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3*, IdList*);
11072 SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3*, SrcList*);
11073 SQLITE_PRIVATE Index *sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*,
11074                         Token*, int, int);
11075 SQLITE_PRIVATE void sqlite3DropIndex(Parse*, SrcList*, int);
11076 SQLITE_PRIVATE int sqlite3Select(Parse*, Select*, SelectDest*);
11077 SQLITE_PRIVATE Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*,
11078                          Expr*,ExprList*,int,Expr*,Expr*);
11079 SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*);
11080 SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*);
11081 SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, int);
11082 SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int);
11083 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
11084 SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse *, SrcList *, Expr *, ExprList *, Expr *, Expr *, char *);
11085 #endif
11086 SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*);
11087 SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int);
11088 SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, ExprList**, u16);
11089 SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo*);
11090 SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(Parse*, Table*, int, int, int);
11091 SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(Vdbe*, Table*, int, int, int);
11092 SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse*, int, int, int);
11093 SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse*, int, int, int);
11094 SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse*, int, int, int);
11095 SQLITE_PRIVATE void sqlite3ExprCachePush(Parse*);
11096 SQLITE_PRIVATE void sqlite3ExprCachePop(Parse*, int);
11097 SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse*, int, int);
11098 SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse*);
11099 SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse*, int, int);
11100 SQLITE_PRIVATE int sqlite3ExprCode(Parse*, Expr*, int);
11101 SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse*, Expr*, int*);
11102 SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse*, Expr*, int);
11103 SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse*, Expr*, int);
11104 SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse*, Expr*);
11105 SQLITE_PRIVATE int sqlite3ExprCodeExprList(Parse*, ExprList*, int, int);
11106 SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse*, Expr*, int, int);
11107 SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse*, Expr*, int, int);
11108 SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3*,const char*, const char*);
11109 SQLITE_PRIVATE Table *sqlite3LocateTable(Parse*,int isView,const char*, const char*);
11110 SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3*,const char*, const char*);
11111 SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3*,int,const char*);
11112 SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*);
11113 SQLITE_PRIVATE void sqlite3Vacuum(Parse*);
11114 SQLITE_PRIVATE int sqlite3RunVacuum(char**, sqlite3*);
11115 SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3*, Token*);
11116 SQLITE_PRIVATE int sqlite3ExprCompare(Expr*, Expr*);
11117 SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList*, ExprList*);
11118 SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*);
11119 SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*);
11120 SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse*);
11121 SQLITE_PRIVATE void sqlite3PrngSaveState(void);
11122 SQLITE_PRIVATE void sqlite3PrngRestoreState(void);
11123 SQLITE_PRIVATE void sqlite3PrngResetState(void);
11124 SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3*);
11125 SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse*, int);
11126 SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse*, const char *zDb);
11127 SQLITE_PRIVATE void sqlite3BeginTransaction(Parse*, int);
11128 SQLITE_PRIVATE void sqlite3CommitTransaction(Parse*);
11129 SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse*);
11130 SQLITE_PRIVATE void sqlite3Savepoint(Parse*, int, Token*);
11131 SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *);
11132 SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*);
11133 SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*);
11134 SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*);
11135 SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr*, int*);
11136 SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr*);
11137 SQLITE_PRIVATE void sqlite3ExprCodeIsNullJump(Vdbe*, const Expr*, int, int);
11138 SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr*, char);
11139 SQLITE_PRIVATE int sqlite3IsRowid(const char*);
11140 SQLITE_PRIVATE void sqlite3GenerateRowDelete(Parse*, Table*, int, int, int, Trigger *, int);
11141 SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(Parse*, Table*, int, int*);
11142 SQLITE_PRIVATE int sqlite3GenerateIndexKey(Parse*, Index*, int, int, int);
11143 SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(Parse*,Table*,int,int,
11144                                      int*,int,int,int,int,int*);
11145 SQLITE_PRIVATE void sqlite3CompleteInsertion(Parse*, Table*, int, int, int*, int, int, int);
11146 SQLITE_PRIVATE int sqlite3OpenTableAndIndices(Parse*, Table*, int, int);
11147 SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse*, int, int);
11148 SQLITE_PRIVATE void sqlite3MultiWrite(Parse*);
11149 SQLITE_PRIVATE void sqlite3MayAbort(Parse*);
11150 SQLITE_PRIVATE void sqlite3HaltConstraint(Parse*, int, char*, int);
11151 SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3*,Expr*,int);
11152 SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3*,ExprList*,int);
11153 SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3*,SrcList*,int);
11154 SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3*,IdList*);
11155 SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3*,Select*,int);
11156 SQLITE_PRIVATE void sqlite3FuncDefInsert(FuncDefHash*, FuncDef*);
11157 SQLITE_PRIVATE FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,int);
11158 SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3*);
11159 SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void);
11160 SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void);
11161 SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3*);
11162 SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3*);
11163 SQLITE_PRIVATE void sqlite3ChangeCookie(Parse*, int);
11164
11165 #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
11166 SQLITE_PRIVATE void sqlite3MaterializeView(Parse*, Table*, Expr*, int);
11167 #endif
11168
11169 #ifndef SQLITE_OMIT_TRIGGER
11170 SQLITE_PRIVATE   void sqlite3BeginTrigger(Parse*, Token*,Token*,int,int,IdList*,SrcList*,
11171                            Expr*,int, int);
11172 SQLITE_PRIVATE   void sqlite3FinishTrigger(Parse*, TriggerStep*, Token*);
11173 SQLITE_PRIVATE   void sqlite3DropTrigger(Parse*, SrcList*, int);
11174 SQLITE_PRIVATE   void sqlite3DropTriggerPtr(Parse*, Trigger*);
11175 SQLITE_PRIVATE   Trigger *sqlite3TriggersExist(Parse *, Table*, int, ExprList*, int *pMask);
11176 SQLITE_PRIVATE   Trigger *sqlite3TriggerList(Parse *, Table *);
11177 SQLITE_PRIVATE   void sqlite3CodeRowTrigger(Parse*, Trigger *, int, ExprList*, int, Table *,
11178                             int, int, int);
11179 SQLITE_PRIVATE   void sqlite3CodeRowTriggerDirect(Parse *, Trigger *, Table *, int, int, int);
11180   void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*);
11181 SQLITE_PRIVATE   void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*);
11182 SQLITE_PRIVATE   TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*);
11183 SQLITE_PRIVATE   TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*,
11184                                         ExprList*,Select*,u8);
11185 SQLITE_PRIVATE   TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8);
11186 SQLITE_PRIVATE   TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*);
11187 SQLITE_PRIVATE   void sqlite3DeleteTrigger(sqlite3*, Trigger*);
11188 SQLITE_PRIVATE   void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*);
11189 SQLITE_PRIVATE   u32 sqlite3TriggerColmask(Parse*,Trigger*,ExprList*,int,int,Table*,int);
11190 # define sqlite3ParseToplevel(p) ((p)->pToplevel ? (p)->pToplevel : (p))
11191 #else
11192 # define sqlite3TriggersExist(B,C,D,E,F) 0
11193 # define sqlite3DeleteTrigger(A,B)
11194 # define sqlite3DropTriggerPtr(A,B)
11195 # define sqlite3UnlinkAndDeleteTrigger(A,B,C)
11196 # define sqlite3CodeRowTrigger(A,B,C,D,E,F,G,H,I)
11197 # define sqlite3CodeRowTriggerDirect(A,B,C,D,E,F)
11198 # define sqlite3TriggerList(X, Y) 0
11199 # define sqlite3ParseToplevel(p) p
11200 # define sqlite3TriggerColmask(A,B,C,D,E,F,G) 0
11201 #endif
11202
11203 SQLITE_PRIVATE int sqlite3JoinType(Parse*, Token*, Token*, Token*);
11204 SQLITE_PRIVATE void sqlite3CreateForeignKey(Parse*, ExprList*, Token*, ExprList*, int);
11205 SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse*, int);
11206 #ifndef SQLITE_OMIT_AUTHORIZATION
11207 SQLITE_PRIVATE   void sqlite3AuthRead(Parse*,Expr*,Schema*,SrcList*);
11208 SQLITE_PRIVATE   int sqlite3AuthCheck(Parse*,int, const char*, const char*, const char*);
11209 SQLITE_PRIVATE   void sqlite3AuthContextPush(Parse*, AuthContext*, const char*);
11210 SQLITE_PRIVATE   void sqlite3AuthContextPop(AuthContext*);
11211 SQLITE_PRIVATE   int sqlite3AuthReadCol(Parse*, const char *, const char *, int);
11212 #else
11213 # define sqlite3AuthRead(a,b,c,d)
11214 # define sqlite3AuthCheck(a,b,c,d,e)    SQLITE_OK
11215 # define sqlite3AuthContextPush(a,b,c)
11216 # define sqlite3AuthContextPop(a)  ((void)(a))
11217 #endif
11218 SQLITE_PRIVATE void sqlite3Attach(Parse*, Expr*, Expr*, Expr*);
11219 SQLITE_PRIVATE void sqlite3Detach(Parse*, Expr*);
11220 SQLITE_PRIVATE int sqlite3FixInit(DbFixer*, Parse*, int, const char*, const Token*);
11221 SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*);
11222 SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*);
11223 SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*);
11224 SQLITE_PRIVATE int sqlite3FixExprList(DbFixer*, ExprList*);
11225 SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
11226 SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8);
11227 SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*);
11228 SQLITE_PRIVATE int sqlite3Atoi(const char*);
11229 SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *pData, int nChar);
11230 SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *pData, int nByte);
11231 SQLITE_PRIVATE int sqlite3Utf8Read(const u8*, const u8**);
11232
11233 /*
11234 ** Routines to read and write variable-length integers.  These used to
11235 ** be defined locally, but now we use the varint routines in the util.c
11236 ** file.  Code should use the MACRO forms below, as the Varint32 versions
11237 ** are coded to assume the single byte case is already handled (which 
11238 ** the MACRO form does).
11239 */
11240 SQLITE_PRIVATE int sqlite3PutVarint(unsigned char*, u64);
11241 SQLITE_PRIVATE int sqlite3PutVarint32(unsigned char*, u32);
11242 SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *, u64 *);
11243 SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *, u32 *);
11244 SQLITE_PRIVATE int sqlite3VarintLen(u64 v);
11245
11246 /*
11247 ** The header of a record consists of a sequence variable-length integers.
11248 ** These integers are almost always small and are encoded as a single byte.
11249 ** The following macros take advantage this fact to provide a fast encode
11250 ** and decode of the integers in a record header.  It is faster for the common
11251 ** case where the integer is a single byte.  It is a little slower when the
11252 ** integer is two or more bytes.  But overall it is faster.
11253 **
11254 ** The following expressions are equivalent:
11255 **
11256 **     x = sqlite3GetVarint32( A, &B );
11257 **     x = sqlite3PutVarint32( A, B );
11258 **
11259 **     x = getVarint32( A, B );
11260 **     x = putVarint32( A, B );
11261 **
11262 */
11263 #define getVarint32(A,B)  (u8)((*(A)<(u8)0x80) ? ((B) = (u32)*(A)),1 : sqlite3GetVarint32((A), (u32 *)&(B)))
11264 #define putVarint32(A,B)  (u8)(((u32)(B)<(u32)0x80) ? (*(A) = (unsigned char)(B)),1 : sqlite3PutVarint32((A), (B)))
11265 #define getVarint    sqlite3GetVarint
11266 #define putVarint    sqlite3PutVarint
11267
11268
11269 SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *, Index *);
11270 SQLITE_PRIVATE void sqlite3TableAffinityStr(Vdbe *, Table *);
11271 SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2);
11272 SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity);
11273 SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr);
11274 SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*, int, u8);
11275 SQLITE_PRIVATE void sqlite3Error(sqlite3*, int, const char*,...);
11276 SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
11277 SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
11278 SQLITE_PRIVATE const char *sqlite3ErrStr(int);
11279 SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse);
11280 SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int);
11281 SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char*zName);
11282 SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr);
11283 SQLITE_PRIVATE Expr *sqlite3ExprSetColl(Expr*, CollSeq*);
11284 SQLITE_PRIVATE Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr*, Token*);
11285 SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *, CollSeq *);
11286 SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *, const char *);
11287 SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *, int);
11288 SQLITE_PRIVATE int sqlite3AddInt64(i64*,i64);
11289 SQLITE_PRIVATE int sqlite3SubInt64(i64*,i64);
11290 SQLITE_PRIVATE int sqlite3MulInt64(i64*,i64);
11291 SQLITE_PRIVATE int sqlite3AbsInt32(int);
11292
11293 SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value*, u8);
11294 SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value*, u8);
11295 SQLITE_PRIVATE void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8, 
11296                         void(*)(void*));
11297 SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value*);
11298 SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *);
11299 SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *, const void*, int, u8);
11300 #ifdef SQLITE_ENABLE_STAT2
11301 SQLITE_PRIVATE char *sqlite3Utf8to16(sqlite3 *, u8, char *, int, int *);
11302 #endif
11303 SQLITE_PRIVATE int sqlite3ValueFromExpr(sqlite3 *, Expr *, u8, u8, sqlite3_value **);
11304 SQLITE_PRIVATE void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8);
11305 #ifndef SQLITE_AMALGAMATION
11306 SQLITE_PRIVATE const unsigned char sqlite3OpcodeProperty[];
11307 SQLITE_PRIVATE const unsigned char sqlite3UpperToLower[];
11308 SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[];
11309 SQLITE_PRIVATE const Token sqlite3IntTokens[];
11310 SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config;
11311 SQLITE_PRIVATE SQLITE_WSD FuncDefHash sqlite3GlobalFunctions;
11312 #ifndef SQLITE_OMIT_WSD
11313 SQLITE_PRIVATE int sqlite3PendingByte;
11314 #endif
11315 #endif
11316 SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3*, int, int, int);
11317 SQLITE_PRIVATE void sqlite3Reindex(Parse*, Token*, Token*);
11318 SQLITE_PRIVATE void sqlite3AlterFunctions(void);
11319 SQLITE_PRIVATE void sqlite3AlterRenameTable(Parse*, SrcList*, Token*);
11320 SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *, int *);
11321 SQLITE_PRIVATE void sqlite3NestedParse(Parse*, const char*, ...);
11322 SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3*);
11323 SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *, Expr *, int, int);
11324 SQLITE_PRIVATE void sqlite3SelectPrep(Parse*, Select*, NameContext*);
11325 SQLITE_PRIVATE int sqlite3ResolveExprNames(NameContext*, Expr*);
11326 SQLITE_PRIVATE void sqlite3ResolveSelectNames(Parse*, Select*, NameContext*);
11327 SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(Parse*, Select*, ExprList*, const char*);
11328 SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *, Table *, int, int);
11329 SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *, Token *);
11330 SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *, SrcList *);
11331 SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(sqlite3*, u8, CollSeq *, const char*);
11332 SQLITE_PRIVATE char sqlite3AffinityType(const char*);
11333 SQLITE_PRIVATE void sqlite3Analyze(Parse*, Token*, Token*);
11334 SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler*);
11335 SQLITE_PRIVATE int sqlite3FindDb(sqlite3*, Token*);
11336 SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *, const char *);
11337 SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3*,int iDB);
11338 SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3*,Index*);
11339 SQLITE_PRIVATE void sqlite3DefaultRowEst(Index*);
11340 SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3*, int);
11341 SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3*,Expr*,int*,char*);
11342 SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse*, int, int);
11343 SQLITE_PRIVATE void sqlite3SchemaClear(void *);
11344 SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *, Btree *);
11345 SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *);
11346 SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *, Index *);
11347 SQLITE_PRIVATE int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *, 
11348   void (*)(sqlite3_context*,int,sqlite3_value **),
11349   void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*),
11350   FuncDestructor *pDestructor
11351 );
11352 SQLITE_PRIVATE int sqlite3ApiExit(sqlite3 *db, int);
11353 SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *);
11354
11355 SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum*, char*, int, int);
11356 SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum*,const char*,int);
11357 SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum*);
11358 SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum*);
11359 SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest*,int,int);
11360 SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *, SrcList *, int, int);
11361
11362 SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *);
11363 SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *, Pgno, const u8 *);
11364
11365 /*
11366 ** The interface to the LEMON-generated parser
11367 */
11368 SQLITE_PRIVATE void *sqlite3ParserAlloc(void*(*)(size_t));
11369 SQLITE_PRIVATE void sqlite3ParserFree(void*, void(*)(void*));
11370 SQLITE_PRIVATE void sqlite3Parser(void*, int, Token, Parse*);
11371 #ifdef YYTRACKMAXSTACKDEPTH
11372 SQLITE_PRIVATE   int sqlite3ParserStackPeak(void*);
11373 #endif
11374
11375 SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3*);
11376 #ifndef SQLITE_OMIT_LOAD_EXTENSION
11377 SQLITE_PRIVATE   void sqlite3CloseExtensions(sqlite3*);
11378 #else
11379 # define sqlite3CloseExtensions(X)
11380 #endif
11381
11382 #ifndef SQLITE_OMIT_SHARED_CACHE
11383 SQLITE_PRIVATE   void sqlite3TableLock(Parse *, int, int, u8, const char *);
11384 #else
11385   #define sqlite3TableLock(v,w,x,y,z)
11386 #endif
11387
11388 #ifdef SQLITE_TEST
11389 SQLITE_PRIVATE   int sqlite3Utf8To8(unsigned char*);
11390 #endif
11391
11392 #ifdef SQLITE_OMIT_VIRTUALTABLE
11393 #  define sqlite3VtabClear(Y)
11394 #  define sqlite3VtabSync(X,Y) SQLITE_OK
11395 #  define sqlite3VtabRollback(X)
11396 #  define sqlite3VtabCommit(X)
11397 #  define sqlite3VtabInSync(db) 0
11398 #  define sqlite3VtabLock(X) 
11399 #  define sqlite3VtabUnlock(X)
11400 #  define sqlite3VtabUnlockList(X)
11401 #else
11402 SQLITE_PRIVATE    void sqlite3VtabClear(sqlite3 *db, Table*);
11403 SQLITE_PRIVATE    int sqlite3VtabSync(sqlite3 *db, char **);
11404 SQLITE_PRIVATE    int sqlite3VtabRollback(sqlite3 *db);
11405 SQLITE_PRIVATE    int sqlite3VtabCommit(sqlite3 *db);
11406 SQLITE_PRIVATE    void sqlite3VtabLock(VTable *);
11407 SQLITE_PRIVATE    void sqlite3VtabUnlock(VTable *);
11408 SQLITE_PRIVATE    void sqlite3VtabUnlockList(sqlite3*);
11409 #  define sqlite3VtabInSync(db) ((db)->nVTrans>0 && (db)->aVTrans==0)
11410 #endif
11411 SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse*,Table*);
11412 SQLITE_PRIVATE void sqlite3VtabBeginParse(Parse*, Token*, Token*, Token*);
11413 SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse*, Token*);
11414 SQLITE_PRIVATE void sqlite3VtabArgInit(Parse*);
11415 SQLITE_PRIVATE void sqlite3VtabArgExtend(Parse*, Token*);
11416 SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3*, int, const char *, char **);
11417 SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse*, Table*);
11418 SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3*, int, const char *);
11419 SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *, VTable *);
11420 SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction(sqlite3 *,FuncDef*, int nArg, Expr*);
11421 SQLITE_PRIVATE void sqlite3InvalidFunction(sqlite3_context*,int,sqlite3_value**);
11422 SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe*, const char*, int);
11423 SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *, sqlite3_stmt *);
11424 SQLITE_PRIVATE int sqlite3Reprepare(Vdbe*);
11425 SQLITE_PRIVATE void sqlite3ExprListCheckLength(Parse*, ExprList*, const char*);
11426 SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq(Parse *, Expr *, Expr *);
11427 SQLITE_PRIVATE int sqlite3TempInMemory(const sqlite3*);
11428 SQLITE_PRIVATE VTable *sqlite3GetVTable(sqlite3*, Table*);
11429 SQLITE_PRIVATE const char *sqlite3JournalModename(int);
11430 SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3*, int, int, int*, int*);
11431 SQLITE_PRIVATE int sqlite3WalDefaultHook(void*,sqlite3*,const char*,int);
11432
11433 /* Declarations for functions in fkey.c. All of these are replaced by
11434 ** no-op macros if OMIT_FOREIGN_KEY is defined. In this case no foreign
11435 ** key functionality is available. If OMIT_TRIGGER is defined but
11436 ** OMIT_FOREIGN_KEY is not, only some of the functions are no-oped. In
11437 ** this case foreign keys are parsed, but no other functionality is 
11438 ** provided (enforcement of FK constraints requires the triggers sub-system).
11439 */
11440 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
11441 SQLITE_PRIVATE   void sqlite3FkCheck(Parse*, Table*, int, int);
11442 SQLITE_PRIVATE   void sqlite3FkDropTable(Parse*, SrcList *, Table*);
11443 SQLITE_PRIVATE   void sqlite3FkActions(Parse*, Table*, ExprList*, int);
11444 SQLITE_PRIVATE   int sqlite3FkRequired(Parse*, Table*, int*, int);
11445 SQLITE_PRIVATE   u32 sqlite3FkOldmask(Parse*, Table*);
11446 SQLITE_PRIVATE   FKey *sqlite3FkReferences(Table *);
11447 #else
11448   #define sqlite3FkActions(a,b,c,d)
11449   #define sqlite3FkCheck(a,b,c,d)
11450   #define sqlite3FkDropTable(a,b,c)
11451   #define sqlite3FkOldmask(a,b)      0
11452   #define sqlite3FkRequired(a,b,c,d) 0
11453 #endif
11454 #ifndef SQLITE_OMIT_FOREIGN_KEY
11455 SQLITE_PRIVATE   void sqlite3FkDelete(sqlite3 *, Table*);
11456 #else
11457   #define sqlite3FkDelete(a,b)
11458 #endif
11459
11460
11461 /*
11462 ** Available fault injectors.  Should be numbered beginning with 0.
11463 */
11464 #define SQLITE_FAULTINJECTOR_MALLOC     0
11465 #define SQLITE_FAULTINJECTOR_COUNT      1
11466
11467 /*
11468 ** The interface to the code in fault.c used for identifying "benign"
11469 ** malloc failures. This is only present if SQLITE_OMIT_BUILTIN_TEST
11470 ** is not defined.
11471 */
11472 #ifndef SQLITE_OMIT_BUILTIN_TEST
11473 SQLITE_PRIVATE   void sqlite3BeginBenignMalloc(void);
11474 SQLITE_PRIVATE   void sqlite3EndBenignMalloc(void);
11475 #else
11476   #define sqlite3BeginBenignMalloc()
11477   #define sqlite3EndBenignMalloc()
11478 #endif
11479
11480 #define IN_INDEX_ROWID           1
11481 #define IN_INDEX_EPH             2
11482 #define IN_INDEX_INDEX           3
11483 SQLITE_PRIVATE int sqlite3FindInIndex(Parse *, Expr *, int*);
11484
11485 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
11486 SQLITE_PRIVATE   int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int);
11487 SQLITE_PRIVATE   int sqlite3JournalSize(sqlite3_vfs *);
11488 SQLITE_PRIVATE   int sqlite3JournalCreate(sqlite3_file *);
11489 #else
11490   #define sqlite3JournalSize(pVfs) ((pVfs)->szOsFile)
11491 #endif
11492
11493 SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *);
11494 SQLITE_PRIVATE int sqlite3MemJournalSize(void);
11495 SQLITE_PRIVATE int sqlite3IsMemJournal(sqlite3_file *);
11496
11497 #if SQLITE_MAX_EXPR_DEPTH>0
11498 SQLITE_PRIVATE   void sqlite3ExprSetHeight(Parse *pParse, Expr *p);
11499 SQLITE_PRIVATE   int sqlite3SelectExprHeight(Select *);
11500 SQLITE_PRIVATE   int sqlite3ExprCheckHeight(Parse*, int);
11501 #else
11502   #define sqlite3ExprSetHeight(x,y)
11503   #define sqlite3SelectExprHeight(x) 0
11504   #define sqlite3ExprCheckHeight(x,y)
11505 #endif
11506
11507 SQLITE_PRIVATE u32 sqlite3Get4byte(const u8*);
11508 SQLITE_PRIVATE void sqlite3Put4byte(u8*, u32);
11509
11510 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
11511 SQLITE_PRIVATE   void sqlite3ConnectionBlocked(sqlite3 *, sqlite3 *);
11512 SQLITE_PRIVATE   void sqlite3ConnectionUnlocked(sqlite3 *db);
11513 SQLITE_PRIVATE   void sqlite3ConnectionClosed(sqlite3 *db);
11514 #else
11515   #define sqlite3ConnectionBlocked(x,y)
11516   #define sqlite3ConnectionUnlocked(x)
11517   #define sqlite3ConnectionClosed(x)
11518 #endif
11519
11520 #ifdef SQLITE_DEBUG
11521 SQLITE_PRIVATE   void sqlite3ParserTrace(FILE*, char *);
11522 #endif
11523
11524 /*
11525 ** If the SQLITE_ENABLE IOTRACE exists then the global variable
11526 ** sqlite3IoTrace is a pointer to a printf-like routine used to
11527 ** print I/O tracing messages. 
11528 */
11529 #ifdef SQLITE_ENABLE_IOTRACE
11530 # define IOTRACE(A)  if( sqlite3IoTrace ){ sqlite3IoTrace A; }
11531 SQLITE_PRIVATE   void sqlite3VdbeIOTraceSql(Vdbe*);
11532 SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*,...);
11533 #else
11534 # define IOTRACE(A)
11535 # define sqlite3VdbeIOTraceSql(X)
11536 #endif
11537
11538 /*
11539 ** These routines are available for the mem2.c debugging memory allocator
11540 ** only.  They are used to verify that different "types" of memory
11541 ** allocations are properly tracked by the system.
11542 **
11543 ** sqlite3MemdebugSetType() sets the "type" of an allocation to one of
11544 ** the MEMTYPE_* macros defined below.  The type must be a bitmask with
11545 ** a single bit set.
11546 **
11547 ** sqlite3MemdebugHasType() returns true if any of the bits in its second
11548 ** argument match the type set by the previous sqlite3MemdebugSetType().
11549 ** sqlite3MemdebugHasType() is intended for use inside assert() statements.
11550 **
11551 ** sqlite3MemdebugNoType() returns true if none of the bits in its second
11552 ** argument match the type set by the previous sqlite3MemdebugSetType().
11553 **
11554 ** Perhaps the most important point is the difference between MEMTYPE_HEAP
11555 ** and MEMTYPE_LOOKASIDE.  If an allocation is MEMTYPE_LOOKASIDE, that means
11556 ** it might have been allocated by lookaside, except the allocation was
11557 ** too large or lookaside was already full.  It is important to verify
11558 ** that allocations that might have been satisfied by lookaside are not
11559 ** passed back to non-lookaside free() routines.  Asserts such as the
11560 ** example above are placed on the non-lookaside free() routines to verify
11561 ** this constraint. 
11562 **
11563 ** All of this is no-op for a production build.  It only comes into
11564 ** play when the SQLITE_MEMDEBUG compile-time option is used.
11565 */
11566 #ifdef SQLITE_MEMDEBUG
11567 SQLITE_PRIVATE   void sqlite3MemdebugSetType(void*,u8);
11568 SQLITE_PRIVATE   int sqlite3MemdebugHasType(void*,u8);
11569 SQLITE_PRIVATE   int sqlite3MemdebugNoType(void*,u8);
11570 #else
11571 # define sqlite3MemdebugSetType(X,Y)  /* no-op */
11572 # define sqlite3MemdebugHasType(X,Y)  1
11573 # define sqlite3MemdebugNoType(X,Y)   1
11574 #endif
11575 #define MEMTYPE_HEAP       0x01  /* General heap allocations */
11576 #define MEMTYPE_LOOKASIDE  0x02  /* Might have been lookaside memory */
11577 #define MEMTYPE_SCRATCH    0x04  /* Scratch allocations */
11578 #define MEMTYPE_PCACHE     0x08  /* Page cache allocations */
11579 #define MEMTYPE_DB         0x10  /* Uses sqlite3DbMalloc, not sqlite_malloc */
11580
11581 #endif /* _SQLITEINT_H_ */
11582
11583 /************** End of sqliteInt.h *******************************************/
11584 /************** Begin file global.c ******************************************/
11585 /*
11586 ** 2008 June 13
11587 **
11588 ** The author disclaims copyright to this source code.  In place of
11589 ** a legal notice, here is a blessing:
11590 **
11591 **    May you do good and not evil.
11592 **    May you find forgiveness for yourself and forgive others.
11593 **    May you share freely, never taking more than you give.
11594 **
11595 *************************************************************************
11596 **
11597 ** This file contains definitions of global variables and contants.
11598 */
11599
11600 /* An array to map all upper-case characters into their corresponding
11601 ** lower-case character. 
11602 **
11603 ** SQLite only considers US-ASCII (or EBCDIC) characters.  We do not
11604 ** handle case conversions for the UTF character set since the tables
11605 ** involved are nearly as big or bigger than SQLite itself.
11606 */
11607 SQLITE_PRIVATE const unsigned char sqlite3UpperToLower[] = {
11608 #ifdef SQLITE_ASCII
11609       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
11610      18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
11611      36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
11612      54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103,
11613     104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,
11614     122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,
11615     108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,
11616     126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
11617     144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,
11618     162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,
11619     180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,
11620     198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
11621     216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,
11622     234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,
11623     252,253,254,255
11624 #endif
11625 #ifdef SQLITE_EBCDIC
11626       0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, /* 0x */
11627      16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, /* 1x */
11628      32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, /* 2x */
11629      48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, /* 3x */
11630      64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, /* 4x */
11631      80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, /* 5x */
11632      96, 97, 66, 67, 68, 69, 70, 71, 72, 73,106,107,108,109,110,111, /* 6x */
11633     112, 81, 82, 83, 84, 85, 86, 87, 88, 89,122,123,124,125,126,127, /* 7x */
11634     128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, /* 8x */
11635     144,145,146,147,148,149,150,151,152,153,154,155,156,157,156,159, /* 9x */
11636     160,161,162,163,164,165,166,167,168,169,170,171,140,141,142,175, /* Ax */
11637     176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, /* Bx */
11638     192,129,130,131,132,133,134,135,136,137,202,203,204,205,206,207, /* Cx */
11639     208,145,146,147,148,149,150,151,152,153,218,219,220,221,222,223, /* Dx */
11640     224,225,162,163,164,165,166,167,168,169,232,203,204,205,206,207, /* Ex */
11641     239,240,241,242,243,244,245,246,247,248,249,219,220,221,222,255, /* Fx */
11642 #endif
11643 };
11644
11645 /*
11646 ** The following 256 byte lookup table is used to support SQLites built-in
11647 ** equivalents to the following standard library functions:
11648 **
11649 **   isspace()                        0x01
11650 **   isalpha()                        0x02
11651 **   isdigit()                        0x04
11652 **   isalnum()                        0x06
11653 **   isxdigit()                       0x08
11654 **   toupper()                        0x20
11655 **   SQLite identifier character      0x40
11656 **
11657 ** Bit 0x20 is set if the mapped character requires translation to upper
11658 ** case. i.e. if the character is a lower-case ASCII character.
11659 ** If x is a lower-case ASCII character, then its upper-case equivalent
11660 ** is (x - 0x20). Therefore toupper() can be implemented as:
11661 **
11662 **   (x & ~(map[x]&0x20))
11663 **
11664 ** Standard function tolower() is implemented using the sqlite3UpperToLower[]
11665 ** array. tolower() is used more often than toupper() by SQLite.
11666 **
11667 ** Bit 0x40 is set if the character non-alphanumeric and can be used in an 
11668 ** SQLite identifier.  Identifiers are alphanumerics, "_", "$", and any
11669 ** non-ASCII UTF character. Hence the test for whether or not a character is
11670 ** part of an identifier is 0x46.
11671 **
11672 ** SQLite's versions are identical to the standard versions assuming a
11673 ** locale of "C". They are implemented as macros in sqliteInt.h.
11674 */
11675 #ifdef SQLITE_ASCII
11676 SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[256] = {
11677   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 00..07    ........ */
11678   0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,  /* 08..0f    ........ */
11679   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 10..17    ........ */
11680   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 18..1f    ........ */
11681   0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,  /* 20..27     !"#$%&' */
11682   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 28..2f    ()*+,-./ */
11683   0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,  /* 30..37    01234567 */
11684   0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 38..3f    89:;<=>? */
11685
11686   0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x02,  /* 40..47    @ABCDEFG */
11687   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,  /* 48..4f    HIJKLMNO */
11688   0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,  /* 50..57    PQRSTUVW */
11689   0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40,  /* 58..5f    XYZ[\]^_ */
11690   0x00, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x22,  /* 60..67    `abcdefg */
11691   0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,  /* 68..6f    hijklmno */
11692   0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,  /* 70..77    pqrstuvw */
11693   0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00,  /* 78..7f    xyz{|}~. */
11694
11695   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* 80..87    ........ */
11696   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* 88..8f    ........ */
11697   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* 90..97    ........ */
11698   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* 98..9f    ........ */
11699   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* a0..a7    ........ */
11700   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* a8..af    ........ */
11701   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* b0..b7    ........ */
11702   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* b8..bf    ........ */
11703
11704   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* c0..c7    ........ */
11705   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* c8..cf    ........ */
11706   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* d0..d7    ........ */
11707   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* d8..df    ........ */
11708   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* e0..e7    ........ */
11709   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* e8..ef    ........ */
11710   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,  /* f0..f7    ........ */
11711   0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40   /* f8..ff    ........ */
11712 };
11713 #endif
11714
11715
11716
11717 /*
11718 ** The following singleton contains the global configuration for
11719 ** the SQLite library.
11720 */
11721 SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = {
11722    SQLITE_DEFAULT_MEMSTATUS,  /* bMemstat */
11723    1,                         /* bCoreMutex */
11724    SQLITE_THREADSAFE==1,      /* bFullMutex */
11725    0x7ffffffe,                /* mxStrlen */
11726    100,                       /* szLookaside */
11727    500,                       /* nLookaside */
11728    {0,0,0,0,0,0,0,0},         /* m */
11729    {0,0,0,0,0,0,0,0,0},       /* mutex */
11730    {0,0,0,0,0,0,0,0,0,0,0},   /* pcache */
11731    (void*)0,                  /* pHeap */
11732    0,                         /* nHeap */
11733    0, 0,                      /* mnHeap, mxHeap */
11734    (void*)0,                  /* pScratch */
11735    0,                         /* szScratch */
11736    0,                         /* nScratch */
11737    (void*)0,                  /* pPage */
11738    0,                         /* szPage */
11739    0,                         /* nPage */
11740    0,                         /* mxParserStack */
11741    0,                         /* sharedCacheEnabled */
11742    /* All the rest should always be initialized to zero */
11743    0,                         /* isInit */
11744    0,                         /* inProgress */
11745    0,                         /* isMutexInit */
11746    0,                         /* isMallocInit */
11747    0,                         /* isPCacheInit */
11748    0,                         /* pInitMutex */
11749    0,                         /* nRefInitMutex */
11750    0,                         /* xLog */
11751    0,                         /* pLogArg */
11752 };
11753
11754
11755 /*
11756 ** Hash table for global functions - functions common to all
11757 ** database connections.  After initialization, this table is
11758 ** read-only.
11759 */
11760 SQLITE_PRIVATE SQLITE_WSD FuncDefHash sqlite3GlobalFunctions;
11761
11762 /*
11763 ** Constant tokens for values 0 and 1.
11764 */
11765 SQLITE_PRIVATE const Token sqlite3IntTokens[] = {
11766    { "0", 1 },
11767    { "1", 1 }
11768 };
11769
11770
11771 /*
11772 ** The value of the "pending" byte must be 0x40000000 (1 byte past the
11773 ** 1-gibabyte boundary) in a compatible database.  SQLite never uses
11774 ** the database page that contains the pending byte.  It never attempts
11775 ** to read or write that page.  The pending byte page is set assign
11776 ** for use by the VFS layers as space for managing file locks.
11777 **
11778 ** During testing, it is often desirable to move the pending byte to
11779 ** a different position in the file.  This allows code that has to
11780 ** deal with the pending byte to run on files that are much smaller
11781 ** than 1 GiB.  The sqlite3_test_control() interface can be used to
11782 ** move the pending byte.
11783 **
11784 ** IMPORTANT:  Changing the pending byte to any value other than
11785 ** 0x40000000 results in an incompatible database file format!
11786 ** Changing the pending byte during operating results in undefined
11787 ** and dileterious behavior.
11788 */
11789 #ifndef SQLITE_OMIT_WSD
11790 SQLITE_PRIVATE int sqlite3PendingByte = 0x40000000;
11791 #endif
11792
11793 /*
11794 ** Properties of opcodes.  The OPFLG_INITIALIZER macro is
11795 ** created by mkopcodeh.awk during compilation.  Data is obtained
11796 ** from the comments following the "case OP_xxxx:" statements in
11797 ** the vdbe.c file.  
11798 */
11799 SQLITE_PRIVATE const unsigned char sqlite3OpcodeProperty[] = OPFLG_INITIALIZER;
11800
11801 /************** End of global.c **********************************************/
11802 /************** Begin file ctime.c *******************************************/
11803 /*
11804 ** 2010 February 23
11805 **
11806 ** The author disclaims copyright to this source code.  In place of
11807 ** a legal notice, here is a blessing:
11808 **
11809 **    May you do good and not evil.
11810 **    May you find forgiveness for yourself and forgive others.
11811 **    May you share freely, never taking more than you give.
11812 **
11813 *************************************************************************
11814 **
11815 ** This file implements routines used to report what compile-time options
11816 ** SQLite was built with.
11817 */
11818
11819 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
11820
11821
11822 /*
11823 ** An array of names of all compile-time options.  This array should 
11824 ** be sorted A-Z.
11825 **
11826 ** This array looks large, but in a typical installation actually uses
11827 ** only a handful of compile-time options, so most times this array is usually
11828 ** rather short and uses little memory space.
11829 */
11830 static const char * const azCompileOpt[] = {
11831
11832 /* These macros are provided to "stringify" the value of the define
11833 ** for those options in which the value is meaningful. */
11834 #define CTIMEOPT_VAL_(opt) #opt
11835 #define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt)
11836
11837 #ifdef SQLITE_32BIT_ROWID
11838   "32BIT_ROWID",
11839 #endif
11840 #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC
11841   "4_BYTE_ALIGNED_MALLOC",
11842 #endif
11843 #ifdef SQLITE_CASE_SENSITIVE_LIKE
11844   "CASE_SENSITIVE_LIKE",
11845 #endif
11846 #ifdef SQLITE_CHECK_PAGES
11847   "CHECK_PAGES",
11848 #endif
11849 #ifdef SQLITE_COVERAGE_TEST
11850   "COVERAGE_TEST",
11851 #endif
11852 #ifdef SQLITE_DEBUG
11853   "DEBUG",
11854 #endif
11855 #ifdef SQLITE_DEFAULT_LOCKING_MODE
11856   "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE),
11857 #endif
11858 #ifdef SQLITE_DISABLE_DIRSYNC
11859   "DISABLE_DIRSYNC",
11860 #endif
11861 #ifdef SQLITE_DISABLE_LFS
11862   "DISABLE_LFS",
11863 #endif
11864 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
11865   "ENABLE_ATOMIC_WRITE",
11866 #endif
11867 #ifdef SQLITE_ENABLE_CEROD
11868   "ENABLE_CEROD",
11869 #endif
11870 #ifdef SQLITE_ENABLE_COLUMN_METADATA
11871   "ENABLE_COLUMN_METADATA",
11872 #endif
11873 #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
11874   "ENABLE_EXPENSIVE_ASSERT",
11875 #endif
11876 #ifdef SQLITE_ENABLE_FTS1
11877   "ENABLE_FTS1",
11878 #endif
11879 #ifdef SQLITE_ENABLE_FTS2
11880   "ENABLE_FTS2",
11881 #endif
11882 #ifdef SQLITE_ENABLE_FTS3
11883   "ENABLE_FTS3",
11884 #endif
11885 #ifdef SQLITE_ENABLE_FTS3_PARENTHESIS
11886   "ENABLE_FTS3_PARENTHESIS",
11887 #endif
11888 #ifdef SQLITE_ENABLE_FTS4
11889   "ENABLE_FTS4",
11890 #endif
11891 #ifdef SQLITE_ENABLE_ICU
11892   "ENABLE_ICU",
11893 #endif
11894 #ifdef SQLITE_ENABLE_IOTRACE
11895   "ENABLE_IOTRACE",
11896 #endif
11897 #ifdef SQLITE_ENABLE_LOAD_EXTENSION
11898   "ENABLE_LOAD_EXTENSION",
11899 #endif
11900 #ifdef SQLITE_ENABLE_LOCKING_STYLE
11901   "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE),
11902 #endif
11903 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
11904   "ENABLE_MEMORY_MANAGEMENT",
11905 #endif
11906 #ifdef SQLITE_ENABLE_MEMSYS3
11907   "ENABLE_MEMSYS3",
11908 #endif
11909 #ifdef SQLITE_ENABLE_MEMSYS5
11910   "ENABLE_MEMSYS5",
11911 #endif
11912 #ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK
11913   "ENABLE_OVERSIZE_CELL_CHECK",
11914 #endif
11915 #ifdef SQLITE_ENABLE_RTREE
11916   "ENABLE_RTREE",
11917 #endif
11918 #ifdef SQLITE_ENABLE_STAT2
11919   "ENABLE_STAT2",
11920 #endif
11921 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
11922   "ENABLE_UNLOCK_NOTIFY",
11923 #endif
11924 #ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
11925   "ENABLE_UPDATE_DELETE_LIMIT",
11926 #endif
11927 #ifdef SQLITE_HAS_CODEC
11928   "HAS_CODEC",
11929 #endif
11930 #ifdef SQLITE_HAVE_ISNAN
11931   "HAVE_ISNAN",
11932 #endif
11933 #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
11934   "HOMEGROWN_RECURSIVE_MUTEX",
11935 #endif
11936 #ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS
11937   "IGNORE_AFP_LOCK_ERRORS",
11938 #endif
11939 #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
11940   "IGNORE_FLOCK_LOCK_ERRORS",
11941 #endif
11942 #ifdef SQLITE_INT64_TYPE
11943   "INT64_TYPE",
11944 #endif
11945 #ifdef SQLITE_LOCK_TRACE
11946   "LOCK_TRACE",
11947 #endif
11948 #ifdef SQLITE_MEMDEBUG
11949   "MEMDEBUG",
11950 #endif
11951 #ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
11952   "MIXED_ENDIAN_64BIT_FLOAT",
11953 #endif
11954 #ifdef SQLITE_NO_SYNC
11955   "NO_SYNC",
11956 #endif
11957 #ifdef SQLITE_OMIT_ALTERTABLE
11958   "OMIT_ALTERTABLE",
11959 #endif
11960 #ifdef SQLITE_OMIT_ANALYZE
11961   "OMIT_ANALYZE",
11962 #endif
11963 #ifdef SQLITE_OMIT_ATTACH
11964   "OMIT_ATTACH",
11965 #endif
11966 #ifdef SQLITE_OMIT_AUTHORIZATION
11967   "OMIT_AUTHORIZATION",
11968 #endif
11969 #ifdef SQLITE_OMIT_AUTOINCREMENT
11970   "OMIT_AUTOINCREMENT",
11971 #endif
11972 #ifdef SQLITE_OMIT_AUTOINIT
11973   "OMIT_AUTOINIT",
11974 #endif
11975 #ifdef SQLITE_OMIT_AUTOMATIC_INDEX
11976   "OMIT_AUTOMATIC_INDEX",
11977 #endif
11978 #ifdef SQLITE_OMIT_AUTORESET
11979   "OMIT_AUTORESET",
11980 #endif
11981 #ifdef SQLITE_OMIT_AUTOVACUUM
11982   "OMIT_AUTOVACUUM",
11983 #endif
11984 #ifdef SQLITE_OMIT_BETWEEN_OPTIMIZATION
11985   "OMIT_BETWEEN_OPTIMIZATION",
11986 #endif
11987 #ifdef SQLITE_OMIT_BLOB_LITERAL
11988   "OMIT_BLOB_LITERAL",
11989 #endif
11990 #ifdef SQLITE_OMIT_BTREECOUNT
11991   "OMIT_BTREECOUNT",
11992 #endif
11993 #ifdef SQLITE_OMIT_BUILTIN_TEST
11994   "OMIT_BUILTIN_TEST",
11995 #endif
11996 #ifdef SQLITE_OMIT_CAST
11997   "OMIT_CAST",
11998 #endif
11999 #ifdef SQLITE_OMIT_CHECK
12000   "OMIT_CHECK",
12001 #endif
12002 /* // redundant
12003 ** #ifdef SQLITE_OMIT_COMPILEOPTION_DIAGS
12004 **   "OMIT_COMPILEOPTION_DIAGS",
12005 ** #endif
12006 */
12007 #ifdef SQLITE_OMIT_COMPLETE
12008   "OMIT_COMPLETE",
12009 #endif
12010 #ifdef SQLITE_OMIT_COMPOUND_SELECT
12011   "OMIT_COMPOUND_SELECT",
12012 #endif
12013 #ifdef SQLITE_OMIT_DATETIME_FUNCS
12014   "OMIT_DATETIME_FUNCS",
12015 #endif
12016 #ifdef SQLITE_OMIT_DECLTYPE
12017   "OMIT_DECLTYPE",
12018 #endif
12019 #ifdef SQLITE_OMIT_DEPRECATED
12020   "OMIT_DEPRECATED",
12021 #endif
12022 #ifdef SQLITE_OMIT_DISKIO
12023   "OMIT_DISKIO",
12024 #endif
12025 #ifdef SQLITE_OMIT_EXPLAIN
12026   "OMIT_EXPLAIN",
12027 #endif
12028 #ifdef SQLITE_OMIT_FLAG_PRAGMAS
12029   "OMIT_FLAG_PRAGMAS",
12030 #endif
12031 #ifdef SQLITE_OMIT_FLOATING_POINT
12032   "OMIT_FLOATING_POINT",
12033 #endif
12034 #ifdef SQLITE_OMIT_FOREIGN_KEY
12035   "OMIT_FOREIGN_KEY",
12036 #endif
12037 #ifdef SQLITE_OMIT_GET_TABLE
12038   "OMIT_GET_TABLE",
12039 #endif
12040 #ifdef SQLITE_OMIT_INCRBLOB
12041   "OMIT_INCRBLOB",
12042 #endif
12043 #ifdef SQLITE_OMIT_INTEGRITY_CHECK
12044   "OMIT_INTEGRITY_CHECK",
12045 #endif
12046 #ifdef SQLITE_OMIT_LIKE_OPTIMIZATION
12047   "OMIT_LIKE_OPTIMIZATION",
12048 #endif
12049 #ifdef SQLITE_OMIT_LOAD_EXTENSION
12050   "OMIT_LOAD_EXTENSION",
12051 #endif
12052 #ifdef SQLITE_OMIT_LOCALTIME
12053   "OMIT_LOCALTIME",
12054 #endif
12055 #ifdef SQLITE_OMIT_LOOKASIDE
12056   "OMIT_LOOKASIDE",
12057 #endif
12058 #ifdef SQLITE_OMIT_MEMORYDB
12059   "OMIT_MEMORYDB",
12060 #endif
12061 #ifdef SQLITE_OMIT_OR_OPTIMIZATION
12062   "OMIT_OR_OPTIMIZATION",
12063 #endif
12064 #ifdef SQLITE_OMIT_PAGER_PRAGMAS
12065   "OMIT_PAGER_PRAGMAS",
12066 #endif
12067 #ifdef SQLITE_OMIT_PRAGMA
12068   "OMIT_PRAGMA",
12069 #endif
12070 #ifdef SQLITE_OMIT_PROGRESS_CALLBACK
12071   "OMIT_PROGRESS_CALLBACK",
12072 #endif
12073 #ifdef SQLITE_OMIT_QUICKBALANCE
12074   "OMIT_QUICKBALANCE",
12075 #endif
12076 #ifdef SQLITE_OMIT_REINDEX
12077   "OMIT_REINDEX",
12078 #endif
12079 #ifdef SQLITE_OMIT_SCHEMA_PRAGMAS
12080   "OMIT_SCHEMA_PRAGMAS",
12081 #endif
12082 #ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
12083   "OMIT_SCHEMA_VERSION_PRAGMAS",
12084 #endif
12085 #ifdef SQLITE_OMIT_SHARED_CACHE
12086   "OMIT_SHARED_CACHE",
12087 #endif
12088 #ifdef SQLITE_OMIT_SUBQUERY
12089   "OMIT_SUBQUERY",
12090 #endif
12091 #ifdef SQLITE_OMIT_TCL_VARIABLE
12092   "OMIT_TCL_VARIABLE",
12093 #endif
12094 #ifdef SQLITE_OMIT_TEMPDB
12095   "OMIT_TEMPDB",
12096 #endif
12097 #ifdef SQLITE_OMIT_TRACE
12098   "OMIT_TRACE",
12099 #endif
12100 #ifdef SQLITE_OMIT_TRIGGER
12101   "OMIT_TRIGGER",
12102 #endif
12103 #ifdef SQLITE_OMIT_TRUNCATE_OPTIMIZATION
12104   "OMIT_TRUNCATE_OPTIMIZATION",
12105 #endif
12106 #ifdef SQLITE_OMIT_UTF16
12107   "OMIT_UTF16",
12108 #endif
12109 #ifdef SQLITE_OMIT_VACUUM
12110   "OMIT_VACUUM",
12111 #endif
12112 #ifdef SQLITE_OMIT_VIEW
12113   "OMIT_VIEW",
12114 #endif
12115 #ifdef SQLITE_OMIT_VIRTUALTABLE
12116   "OMIT_VIRTUALTABLE",
12117 #endif
12118 #ifdef SQLITE_OMIT_WAL
12119   "OMIT_WAL",
12120 #endif
12121 #ifdef SQLITE_OMIT_WSD
12122   "OMIT_WSD",
12123 #endif
12124 #ifdef SQLITE_OMIT_XFER_OPT
12125   "OMIT_XFER_OPT",
12126 #endif
12127 #ifdef SQLITE_PERFORMANCE_TRACE
12128   "PERFORMANCE_TRACE",
12129 #endif
12130 #ifdef SQLITE_PROXY_DEBUG
12131   "PROXY_DEBUG",
12132 #endif
12133 #ifdef SQLITE_SECURE_DELETE
12134   "SECURE_DELETE",
12135 #endif
12136 #ifdef SQLITE_SMALL_STACK
12137   "SMALL_STACK",
12138 #endif
12139 #ifdef SQLITE_SOUNDEX
12140   "SOUNDEX",
12141 #endif
12142 #ifdef SQLITE_TCL
12143   "TCL",
12144 #endif
12145 #ifdef SQLITE_TEMP_STORE
12146   "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE),
12147 #endif
12148 #ifdef SQLITE_TEST
12149   "TEST",
12150 #endif
12151 #ifdef SQLITE_THREADSAFE
12152   "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE),
12153 #endif
12154 #ifdef SQLITE_USE_ALLOCA
12155   "USE_ALLOCA",
12156 #endif
12157 #ifdef SQLITE_ZERO_MALLOC
12158   "ZERO_MALLOC"
12159 #endif
12160 };
12161
12162 /*
12163 ** Given the name of a compile-time option, return true if that option
12164 ** was used and false if not.
12165 **
12166 ** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix
12167 ** is not required for a match.
12168 */
12169 SQLITE_API int sqlite3_compileoption_used(const char *zOptName){
12170   int i, n;
12171   if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7;
12172   n = sqlite3Strlen30(zOptName);
12173
12174   /* Since ArraySize(azCompileOpt) is normally in single digits, a
12175   ** linear search is adequate.  No need for a binary search. */
12176   for(i=0; i<ArraySize(azCompileOpt); i++){
12177     if(   (sqlite3StrNICmp(zOptName, azCompileOpt[i], n)==0)
12178        && ( (azCompileOpt[i][n]==0) || (azCompileOpt[i][n]=='=') ) ) return 1;
12179   }
12180   return 0;
12181 }
12182
12183 /*
12184 ** Return the N-th compile-time option string.  If N is out of range,
12185 ** return a NULL pointer.
12186 */
12187 SQLITE_API const char *sqlite3_compileoption_get(int N){
12188   if( N>=0 && N<ArraySize(azCompileOpt) ){
12189     return azCompileOpt[N];
12190   }
12191   return 0;
12192 }
12193
12194 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
12195
12196 /************** End of ctime.c ***********************************************/
12197 /************** Begin file status.c ******************************************/
12198 /*
12199 ** 2008 June 18
12200 **
12201 ** The author disclaims copyright to this source code.  In place of
12202 ** a legal notice, here is a blessing:
12203 **
12204 **    May you do good and not evil.
12205 **    May you find forgiveness for yourself and forgive others.
12206 **    May you share freely, never taking more than you give.
12207 **
12208 *************************************************************************
12209 **
12210 ** This module implements the sqlite3_status() interface and related
12211 ** functionality.
12212 */
12213 /************** Include vdbeInt.h in the middle of status.c ******************/
12214 /************** Begin file vdbeInt.h *****************************************/
12215 /*
12216 ** 2003 September 6
12217 **
12218 ** The author disclaims copyright to this source code.  In place of
12219 ** a legal notice, here is a blessing:
12220 **
12221 **    May you do good and not evil.
12222 **    May you find forgiveness for yourself and forgive others.
12223 **    May you share freely, never taking more than you give.
12224 **
12225 *************************************************************************
12226 ** This is the header file for information that is private to the
12227 ** VDBE.  This information used to all be at the top of the single
12228 ** source code file "vdbe.c".  When that file became too big (over
12229 ** 6000 lines long) it was split up into several smaller files and
12230 ** this header information was factored out.
12231 */
12232 #ifndef _VDBEINT_H_
12233 #define _VDBEINT_H_
12234
12235 /*
12236 ** SQL is translated into a sequence of instructions to be
12237 ** executed by a virtual machine.  Each instruction is an instance
12238 ** of the following structure.
12239 */
12240 typedef struct VdbeOp Op;
12241
12242 /*
12243 ** Boolean values
12244 */
12245 typedef unsigned char Bool;
12246
12247 /*
12248 ** A cursor is a pointer into a single BTree within a database file.
12249 ** The cursor can seek to a BTree entry with a particular key, or
12250 ** loop over all entries of the Btree.  You can also insert new BTree
12251 ** entries or retrieve the key or data from the entry that the cursor
12252 ** is currently pointing to.
12253 ** 
12254 ** Every cursor that the virtual machine has open is represented by an
12255 ** instance of the following structure.
12256 */
12257 struct VdbeCursor {
12258   BtCursor *pCursor;    /* The cursor structure of the backend */
12259   Btree *pBt;           /* Separate file holding temporary table */
12260   KeyInfo *pKeyInfo;    /* Info about index keys needed by index cursors */
12261   int iDb;              /* Index of cursor database in db->aDb[] (or -1) */
12262   int pseudoTableReg;   /* Register holding pseudotable content. */
12263   int nField;           /* Number of fields in the header */
12264   Bool zeroed;          /* True if zeroed out and ready for reuse */
12265   Bool rowidIsValid;    /* True if lastRowid is valid */
12266   Bool atFirst;         /* True if pointing to first entry */
12267   Bool useRandomRowid;  /* Generate new record numbers semi-randomly */
12268   Bool nullRow;         /* True if pointing to a row with no data */
12269   Bool deferredMoveto;  /* A call to sqlite3BtreeMoveto() is needed */
12270   Bool isTable;         /* True if a table requiring integer keys */
12271   Bool isIndex;         /* True if an index containing keys only - no data */
12272   Bool isOrdered;       /* True if the underlying table is BTREE_UNORDERED */
12273   sqlite3_vtab_cursor *pVtabCursor;  /* The cursor for a virtual table */
12274   const sqlite3_module *pModule;     /* Module for cursor pVtabCursor */
12275   i64 seqCount;         /* Sequence counter */
12276   i64 movetoTarget;     /* Argument to the deferred sqlite3BtreeMoveto() */
12277   i64 lastRowid;        /* Last rowid from a Next or NextIdx operation */
12278
12279   /* Result of last sqlite3BtreeMoveto() done by an OP_NotExists or 
12280   ** OP_IsUnique opcode on this cursor. */
12281   int seekResult;
12282
12283   /* Cached information about the header for the data record that the
12284   ** cursor is currently pointing to.  Only valid if cacheStatus matches
12285   ** Vdbe.cacheCtr.  Vdbe.cacheCtr will never take on the value of
12286   ** CACHE_STALE and so setting cacheStatus=CACHE_STALE guarantees that
12287   ** the cache is out of date.
12288   **
12289   ** aRow might point to (ephemeral) data for the current row, or it might
12290   ** be NULL.
12291   */
12292   u32 cacheStatus;      /* Cache is valid if this matches Vdbe.cacheCtr */
12293   int payloadSize;      /* Total number of bytes in the record */
12294   u32 *aType;           /* Type values for all entries in the record */
12295   u32 *aOffset;         /* Cached offsets to the start of each columns data */
12296   u8 *aRow;             /* Data for the current row, if all on one page */
12297 };
12298 typedef struct VdbeCursor VdbeCursor;
12299
12300 /*
12301 ** When a sub-program is executed (OP_Program), a structure of this type
12302 ** is allocated to store the current value of the program counter, as
12303 ** well as the current memory cell array and various other frame specific
12304 ** values stored in the Vdbe struct. When the sub-program is finished, 
12305 ** these values are copied back to the Vdbe from the VdbeFrame structure,
12306 ** restoring the state of the VM to as it was before the sub-program
12307 ** began executing.
12308 **
12309 ** The memory for a VdbeFrame object is allocated and managed by a memory
12310 ** cell in the parent (calling) frame. When the memory cell is deleted or
12311 ** overwritten, the VdbeFrame object is not freed immediately. Instead, it
12312 ** is linked into the Vdbe.pDelFrame list. The contents of the Vdbe.pDelFrame
12313 ** list is deleted when the VM is reset in VdbeHalt(). The reason for doing
12314 ** this instead of deleting the VdbeFrame immediately is to avoid recursive
12315 ** calls to sqlite3VdbeMemRelease() when the memory cells belonging to the
12316 ** child frame are released.
12317 **
12318 ** The currently executing frame is stored in Vdbe.pFrame. Vdbe.pFrame is
12319 ** set to NULL if the currently executing frame is the main program.
12320 */
12321 typedef struct VdbeFrame VdbeFrame;
12322 struct VdbeFrame {
12323   Vdbe *v;                /* VM this frame belongs to */
12324   int pc;                 /* Program Counter in parent (calling) frame */
12325   Op *aOp;                /* Program instructions for parent frame */
12326   int nOp;                /* Size of aOp array */
12327   Mem *aMem;              /* Array of memory cells for parent frame */
12328   int nMem;               /* Number of entries in aMem */
12329   VdbeCursor **apCsr;     /* Array of Vdbe cursors for parent frame */
12330   u16 nCursor;            /* Number of entries in apCsr */
12331   void *token;            /* Copy of SubProgram.token */
12332   int nChildMem;          /* Number of memory cells for child frame */
12333   int nChildCsr;          /* Number of cursors for child frame */
12334   i64 lastRowid;          /* Last insert rowid (sqlite3.lastRowid) */
12335   int nChange;            /* Statement changes (Vdbe.nChanges)     */
12336   VdbeFrame *pParent;     /* Parent of this frame, or NULL if parent is main */
12337 };
12338
12339 #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))])
12340
12341 /*
12342 ** A value for VdbeCursor.cacheValid that means the cache is always invalid.
12343 */
12344 #define CACHE_STALE 0
12345
12346 /*
12347 ** Internally, the vdbe manipulates nearly all SQL values as Mem
12348 ** structures. Each Mem struct may cache multiple representations (string,
12349 ** integer etc.) of the same value.
12350 */
12351 struct Mem {
12352   sqlite3 *db;        /* The associated database connection */
12353   char *z;            /* String or BLOB value */
12354   double r;           /* Real value */
12355   union {
12356     i64 i;              /* Integer value used when MEM_Int is set in flags */
12357     int nZero;          /* Used when bit MEM_Zero is set in flags */
12358     FuncDef *pDef;      /* Used only when flags==MEM_Agg */
12359     RowSet *pRowSet;    /* Used only when flags==MEM_RowSet */
12360     VdbeFrame *pFrame;  /* Used when flags==MEM_Frame */
12361   } u;
12362   int n;              /* Number of characters in string value, excluding '\0' */
12363   u16 flags;          /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */
12364   u8  type;           /* One of SQLITE_NULL, SQLITE_TEXT, SQLITE_INTEGER, etc */
12365   u8  enc;            /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */
12366 #ifdef SQLITE_DEBUG
12367   Mem *pScopyFrom;    /* This Mem is a shallow copy of pScopyFrom */
12368   void *pFiller;      /* So that sizeof(Mem) is a multiple of 8 */
12369 #endif
12370   void (*xDel)(void *);  /* If not null, call this function to delete Mem.z */
12371   char *zMalloc;      /* Dynamic buffer allocated by sqlite3_malloc() */
12372 };
12373
12374 /* One or more of the following flags are set to indicate the validOK
12375 ** representations of the value stored in the Mem struct.
12376 **
12377 ** If the MEM_Null flag is set, then the value is an SQL NULL value.
12378 ** No other flags may be set in this case.
12379 **
12380 ** If the MEM_Str flag is set then Mem.z points at a string representation.
12381 ** Usually this is encoded in the same unicode encoding as the main
12382 ** database (see below for exceptions). If the MEM_Term flag is also
12383 ** set, then the string is nul terminated. The MEM_Int and MEM_Real 
12384 ** flags may coexist with the MEM_Str flag.
12385 */
12386 #define MEM_Null      0x0001   /* Value is NULL */
12387 #define MEM_Str       0x0002   /* Value is a string */
12388 #define MEM_Int       0x0004   /* Value is an integer */
12389 #define MEM_Real      0x0008   /* Value is a real number */
12390 #define MEM_Blob      0x0010   /* Value is a BLOB */
12391 #define MEM_RowSet    0x0020   /* Value is a RowSet object */
12392 #define MEM_Frame     0x0040   /* Value is a VdbeFrame object */
12393 #define MEM_Invalid   0x0080   /* Value is undefined */
12394 #define MEM_TypeMask  0x00ff   /* Mask of type bits */
12395
12396 /* Whenever Mem contains a valid string or blob representation, one of
12397 ** the following flags must be set to determine the memory management
12398 ** policy for Mem.z.  The MEM_Term flag tells us whether or not the
12399 ** string is \000 or \u0000 terminated
12400 */
12401 #define MEM_Term      0x0200   /* String rep is nul terminated */
12402 #define MEM_Dyn       0x0400   /* Need to call sqliteFree() on Mem.z */
12403 #define MEM_Static    0x0800   /* Mem.z points to a static string */
12404 #define MEM_Ephem     0x1000   /* Mem.z points to an ephemeral string */
12405 #define MEM_Agg       0x2000   /* Mem.z points to an agg function context */
12406 #define MEM_Zero      0x4000   /* Mem.i contains count of 0s appended to blob */
12407 #ifdef SQLITE_OMIT_INCRBLOB
12408   #undef MEM_Zero
12409   #define MEM_Zero 0x0000
12410 #endif
12411
12412 /*
12413 ** Clear any existing type flags from a Mem and replace them with f
12414 */
12415 #define MemSetTypeFlag(p, f) \
12416    ((p)->flags = ((p)->flags&~(MEM_TypeMask|MEM_Zero))|f)
12417
12418 /*
12419 ** Return true if a memory cell is not marked as invalid.  This macro
12420 ** is for use inside assert() statements only.
12421 */
12422 #ifdef SQLITE_DEBUG
12423 #define memIsValid(M)  ((M)->flags & MEM_Invalid)==0
12424 #endif
12425
12426
12427 /* A VdbeFunc is just a FuncDef (defined in sqliteInt.h) that contains
12428 ** additional information about auxiliary information bound to arguments
12429 ** of the function.  This is used to implement the sqlite3_get_auxdata()
12430 ** and sqlite3_set_auxdata() APIs.  The "auxdata" is some auxiliary data
12431 ** that can be associated with a constant argument to a function.  This
12432 ** allows functions such as "regexp" to compile their constant regular
12433 ** expression argument once and reused the compiled code for multiple
12434 ** invocations.
12435 */
12436 struct VdbeFunc {
12437   FuncDef *pFunc;               /* The definition of the function */
12438   int nAux;                     /* Number of entries allocated for apAux[] */
12439   struct AuxData {
12440     void *pAux;                   /* Aux data for the i-th argument */
12441     void (*xDelete)(void *);      /* Destructor for the aux data */
12442   } apAux[1];                   /* One slot for each function argument */
12443 };
12444
12445 /*
12446 ** The "context" argument for a installable function.  A pointer to an
12447 ** instance of this structure is the first argument to the routines used
12448 ** implement the SQL functions.
12449 **
12450 ** There is a typedef for this structure in sqlite.h.  So all routines,
12451 ** even the public interface to SQLite, can use a pointer to this structure.
12452 ** But this file is the only place where the internal details of this
12453 ** structure are known.
12454 **
12455 ** This structure is defined inside of vdbeInt.h because it uses substructures
12456 ** (Mem) which are only defined there.
12457 */
12458 struct sqlite3_context {
12459   FuncDef *pFunc;       /* Pointer to function information.  MUST BE FIRST */
12460   VdbeFunc *pVdbeFunc;  /* Auxilary data, if created. */
12461   Mem s;                /* The return value is stored here */
12462   Mem *pMem;            /* Memory cell used to store aggregate context */
12463   int isError;          /* Error code returned by the function. */
12464   CollSeq *pColl;       /* Collating sequence */
12465 };
12466
12467 /*
12468 ** An instance of the virtual machine.  This structure contains the complete
12469 ** state of the virtual machine.
12470 **
12471 ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
12472 ** is really a pointer to an instance of this structure.
12473 **
12474 ** The Vdbe.inVtabMethod variable is set to non-zero for the duration of
12475 ** any virtual table method invocations made by the vdbe program. It is
12476 ** set to 2 for xDestroy method calls and 1 for all other methods. This
12477 ** variable is used for two purposes: to allow xDestroy methods to execute
12478 ** "DROP TABLE" statements and to prevent some nasty side effects of
12479 ** malloc failure when SQLite is invoked recursively by a virtual table 
12480 ** method function.
12481 */
12482 struct Vdbe {
12483   sqlite3 *db;            /* The database connection that owns this statement */
12484   Op *aOp;                /* Space to hold the virtual machine's program */
12485   Mem *aMem;              /* The memory locations */
12486   Mem **apArg;            /* Arguments to currently executing user function */
12487   Mem *aColName;          /* Column names to return */
12488   Mem *pResultSet;        /* Pointer to an array of results */
12489   int nMem;               /* Number of memory locations currently allocated */
12490   int nOp;                /* Number of instructions in the program */
12491   int nOpAlloc;           /* Number of slots allocated for aOp[] */
12492   int nLabel;             /* Number of labels used */
12493   int nLabelAlloc;        /* Number of slots allocated in aLabel[] */
12494   int *aLabel;            /* Space to hold the labels */
12495   u16 nResColumn;         /* Number of columns in one row of the result set */
12496   u16 nCursor;            /* Number of slots in apCsr[] */
12497   u32 magic;              /* Magic number for sanity checking */
12498   char *zErrMsg;          /* Error message written here */
12499   Vdbe *pPrev,*pNext;     /* Linked list of VDBEs with the same Vdbe.db */
12500   VdbeCursor **apCsr;     /* One element of this array for each open cursor */
12501   Mem *aVar;              /* Values for the OP_Variable opcode. */
12502   char **azVar;           /* Name of variables */
12503   ynVar nVar;             /* Number of entries in aVar[] */
12504   u32 cacheCtr;           /* VdbeCursor row cache generation counter */
12505   int pc;                 /* The program counter */
12506   int rc;                 /* Value to return */
12507   u8 errorAction;         /* Recovery action to do in case of an error */
12508   u8 okVar;               /* True if azVar[] has been initialized */
12509   u8 explain;             /* True if EXPLAIN present on SQL command */
12510   u8 changeCntOn;         /* True to update the change-counter */
12511   u8 expired;             /* True if the VM needs to be recompiled */
12512   u8 runOnlyOnce;         /* Automatically expire on reset */
12513   u8 minWriteFileFormat;  /* Minimum file format for writable database files */
12514   u8 inVtabMethod;        /* See comments above */
12515   u8 usesStmtJournal;     /* True if uses a statement journal */
12516   u8 readOnly;            /* True for read-only statements */
12517   u8 isPrepareV2;         /* True if prepared with prepare_v2() */
12518   int nChange;            /* Number of db changes made since last reset */
12519   yDbMask btreeMask;      /* Bitmask of db->aDb[] entries referenced */
12520   yDbMask lockMask;       /* Subset of btreeMask that requires a lock */
12521   int iStatement;         /* Statement number (or 0 if has not opened stmt) */
12522   int aCounter[3];        /* Counters used by sqlite3_stmt_status() */
12523 #ifndef SQLITE_OMIT_TRACE
12524   i64 startTime;          /* Time when query started - used for profiling */
12525 #endif
12526   i64 nFkConstraint;      /* Number of imm. FK constraints this VM */
12527   i64 nStmtDefCons;       /* Number of def. constraints when stmt started */
12528   char *zSql;             /* Text of the SQL statement that generated this */
12529   void *pFree;            /* Free this when deleting the vdbe */
12530 #ifdef SQLITE_DEBUG
12531   FILE *trace;            /* Write an execution trace here, if not NULL */
12532 #endif
12533   VdbeFrame *pFrame;      /* Parent frame */
12534   VdbeFrame *pDelFrame;   /* List of frame objects to free on VM reset */
12535   int nFrame;             /* Number of frames in pFrame list */
12536   u32 expmask;            /* Binding to these vars invalidates VM */
12537   SubProgram *pProgram;   /* Linked list of all sub-programs used by VM */
12538 };
12539
12540 /*
12541 ** The following are allowed values for Vdbe.magic
12542 */
12543 #define VDBE_MAGIC_INIT     0x26bceaa5    /* Building a VDBE program */
12544 #define VDBE_MAGIC_RUN      0xbdf20da3    /* VDBE is ready to execute */
12545 #define VDBE_MAGIC_HALT     0x519c2973    /* VDBE has completed execution */
12546 #define VDBE_MAGIC_DEAD     0xb606c3c8    /* The VDBE has been deallocated */
12547
12548 /*
12549 ** Function prototypes
12550 */
12551 SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *, VdbeCursor*);
12552 void sqliteVdbePopStack(Vdbe*,int);
12553 SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor*);
12554 #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
12555 SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE*, int, Op*);
12556 #endif
12557 SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32);
12558 SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem*, int);
12559 SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(unsigned char*, int, Mem*, int);
12560 SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*);
12561 SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(VdbeFunc*, int);
12562
12563 int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *);
12564 SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(VdbeCursor*,UnpackedRecord*,int*);
12565 SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3*, BtCursor *, i64 *);
12566 SQLITE_PRIVATE int sqlite3MemCompare(const Mem*, const Mem*, const CollSeq*);
12567 SQLITE_PRIVATE int sqlite3VdbeExec(Vdbe*);
12568 SQLITE_PRIVATE int sqlite3VdbeList(Vdbe*);
12569 SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe*);
12570 SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *, int);
12571 SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem*);
12572 SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem*, const Mem*);
12573 SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem*, const Mem*, int);
12574 SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem*, Mem*);
12575 SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem*);
12576 SQLITE_PRIVATE int sqlite3VdbeMemSetStr(Mem*, const char*, int, u8, void(*)(void*));
12577 SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem*, i64);
12578 #ifdef SQLITE_OMIT_FLOATING_POINT
12579 # define sqlite3VdbeMemSetDouble sqlite3VdbeMemSetInt64
12580 #else
12581 SQLITE_PRIVATE   void sqlite3VdbeMemSetDouble(Mem*, double);
12582 #endif
12583 SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem*);
12584 SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem*,int);
12585 SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem*);
12586 SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem*);
12587 SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem*, int);
12588 SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem*);
12589 SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem*);
12590 SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem*);
12591 SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem*);
12592 SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem*);
12593 SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem*);
12594 SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(BtCursor*,int,int,int,Mem*);
12595 SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p);
12596 SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p);
12597 SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem*, FuncDef*);
12598 SQLITE_PRIVATE const char *sqlite3OpcodeName(int);
12599 SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve);
12600 SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *, int);
12601 SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame*);
12602 SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *);
12603 SQLITE_PRIVATE void sqlite3VdbeMemStoreType(Mem *pMem);
12604
12605 #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
12606 SQLITE_PRIVATE   void sqlite3VdbeEnter(Vdbe*);
12607 SQLITE_PRIVATE   void sqlite3VdbeLeave(Vdbe*);
12608 #else
12609 # define sqlite3VdbeEnter(X)
12610 # define sqlite3VdbeLeave(X)
12611 #endif
12612
12613 #ifdef SQLITE_DEBUG
12614 SQLITE_PRIVATE void sqlite3VdbeMemPrepareToChange(Vdbe*,Mem*);
12615 #endif
12616
12617 #ifndef SQLITE_OMIT_FOREIGN_KEY
12618 SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *, int);
12619 #else
12620 # define sqlite3VdbeCheckFk(p,i) 0
12621 #endif
12622
12623 SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem*, u8);
12624 #ifdef SQLITE_DEBUG
12625 SQLITE_PRIVATE   void sqlite3VdbePrintSql(Vdbe*);
12626 SQLITE_PRIVATE   void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf);
12627 #endif
12628 SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem);
12629
12630 #ifndef SQLITE_OMIT_INCRBLOB
12631 SQLITE_PRIVATE   int sqlite3VdbeMemExpandBlob(Mem *);
12632 #else
12633   #define sqlite3VdbeMemExpandBlob(x) SQLITE_OK
12634 #endif
12635
12636 #endif /* !defined(_VDBEINT_H_) */
12637
12638 /************** End of vdbeInt.h *********************************************/
12639 /************** Continuing where we left off in status.c *********************/
12640
12641 /*
12642 ** Variables in which to record status information.
12643 */
12644 typedef struct sqlite3StatType sqlite3StatType;
12645 static SQLITE_WSD struct sqlite3StatType {
12646   int nowValue[10];         /* Current value */
12647   int mxValue[10];          /* Maximum value */
12648 } sqlite3Stat = { {0,}, {0,} };
12649
12650
12651 /* The "wsdStat" macro will resolve to the status information
12652 ** state vector.  If writable static data is unsupported on the target,
12653 ** we have to locate the state vector at run-time.  In the more common
12654 ** case where writable static data is supported, wsdStat can refer directly
12655 ** to the "sqlite3Stat" state vector declared above.
12656 */
12657 #ifdef SQLITE_OMIT_WSD
12658 # define wsdStatInit  sqlite3StatType *x = &GLOBAL(sqlite3StatType,sqlite3Stat)
12659 # define wsdStat x[0]
12660 #else
12661 # define wsdStatInit
12662 # define wsdStat sqlite3Stat
12663 #endif
12664
12665 /*
12666 ** Return the current value of a status parameter.
12667 */
12668 SQLITE_PRIVATE int sqlite3StatusValue(int op){
12669   wsdStatInit;
12670   assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
12671   return wsdStat.nowValue[op];
12672 }
12673
12674 /*
12675 ** Add N to the value of a status record.  It is assumed that the
12676 ** caller holds appropriate locks.
12677 */
12678 SQLITE_PRIVATE void sqlite3StatusAdd(int op, int N){
12679   wsdStatInit;
12680   assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
12681   wsdStat.nowValue[op] += N;
12682   if( wsdStat.nowValue[op]>wsdStat.mxValue[op] ){
12683     wsdStat.mxValue[op] = wsdStat.nowValue[op];
12684   }
12685 }
12686
12687 /*
12688 ** Set the value of a status to X.
12689 */
12690 SQLITE_PRIVATE void sqlite3StatusSet(int op, int X){
12691   wsdStatInit;
12692   assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
12693   wsdStat.nowValue[op] = X;
12694   if( wsdStat.nowValue[op]>wsdStat.mxValue[op] ){
12695     wsdStat.mxValue[op] = wsdStat.nowValue[op];
12696   }
12697 }
12698
12699 /*
12700 ** Query status information.
12701 **
12702 ** This implementation assumes that reading or writing an aligned
12703 ** 32-bit integer is an atomic operation.  If that assumption is not true,
12704 ** then this routine is not threadsafe.
12705 */
12706 SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag){
12707   wsdStatInit;
12708   if( op<0 || op>=ArraySize(wsdStat.nowValue) ){
12709     return SQLITE_MISUSE_BKPT;
12710   }
12711   *pCurrent = wsdStat.nowValue[op];
12712   *pHighwater = wsdStat.mxValue[op];
12713   if( resetFlag ){
12714     wsdStat.mxValue[op] = wsdStat.nowValue[op];
12715   }
12716   return SQLITE_OK;
12717 }
12718
12719 /*
12720 ** Query status information for a single database connection
12721 */
12722 SQLITE_API int sqlite3_db_status(
12723   sqlite3 *db,          /* The database connection whose status is desired */
12724   int op,               /* Status verb */
12725   int *pCurrent,        /* Write current value here */
12726   int *pHighwater,      /* Write high-water mark here */
12727   int resetFlag         /* Reset high-water mark if true */
12728 ){
12729   int rc = SQLITE_OK;   /* Return code */
12730   sqlite3_mutex_enter(db->mutex);
12731   switch( op ){
12732     case SQLITE_DBSTATUS_LOOKASIDE_USED: {
12733       *pCurrent = db->lookaside.nOut;
12734       *pHighwater = db->lookaside.mxOut;
12735       if( resetFlag ){
12736         db->lookaside.mxOut = db->lookaside.nOut;
12737       }
12738       break;
12739     }
12740
12741     case SQLITE_DBSTATUS_LOOKASIDE_HIT:
12742     case SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE:
12743     case SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: {
12744       testcase( op==SQLITE_DBSTATUS_LOOKASIDE_HIT );
12745       testcase( op==SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE );
12746       testcase( op==SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL );
12747       assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)>=0 );
12748       assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)<3 );
12749       *pCurrent = 0;
12750       *pHighwater = db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT];
12751       if( resetFlag ){
12752         db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT] = 0;
12753       }
12754       break;
12755     }
12756
12757     /* 
12758     ** Return an approximation for the amount of memory currently used
12759     ** by all pagers associated with the given database connection.  The
12760     ** highwater mark is meaningless and is returned as zero.
12761     */
12762     case SQLITE_DBSTATUS_CACHE_USED: {
12763       int totalUsed = 0;
12764       int i;
12765       sqlite3BtreeEnterAll(db);
12766       for(i=0; i<db->nDb; i++){
12767         Btree *pBt = db->aDb[i].pBt;
12768         if( pBt ){
12769           Pager *pPager = sqlite3BtreePager(pBt);
12770           totalUsed += sqlite3PagerMemUsed(pPager);
12771         }
12772       }
12773       sqlite3BtreeLeaveAll(db);
12774       *pCurrent = totalUsed;
12775       *pHighwater = 0;
12776       break;
12777     }
12778
12779     /*
12780     ** *pCurrent gets an accurate estimate of the amount of memory used
12781     ** to store the schema for all databases (main, temp, and any ATTACHed
12782     ** databases.  *pHighwater is set to zero.
12783     */
12784     case SQLITE_DBSTATUS_SCHEMA_USED: {
12785       int i;                      /* Used to iterate through schemas */
12786       int nByte = 0;              /* Used to accumulate return value */
12787
12788       sqlite3BtreeEnterAll(db);
12789       db->pnBytesFreed = &nByte;
12790       for(i=0; i<db->nDb; i++){
12791         Schema *pSchema = db->aDb[i].pSchema;
12792         if( ALWAYS(pSchema!=0) ){
12793           HashElem *p;
12794
12795           nByte += sqlite3GlobalConfig.m.xRoundup(sizeof(HashElem)) * (
12796               pSchema->tblHash.count 
12797             + pSchema->trigHash.count
12798             + pSchema->idxHash.count
12799             + pSchema->fkeyHash.count
12800           );
12801           nByte += sqlite3MallocSize(pSchema->tblHash.ht);
12802           nByte += sqlite3MallocSize(pSchema->trigHash.ht);
12803           nByte += sqlite3MallocSize(pSchema->idxHash.ht);
12804           nByte += sqlite3MallocSize(pSchema->fkeyHash.ht);
12805
12806           for(p=sqliteHashFirst(&pSchema->trigHash); p; p=sqliteHashNext(p)){
12807             sqlite3DeleteTrigger(db, (Trigger*)sqliteHashData(p));
12808           }
12809           for(p=sqliteHashFirst(&pSchema->tblHash); p; p=sqliteHashNext(p)){
12810             sqlite3DeleteTable(db, (Table *)sqliteHashData(p));
12811           }
12812         }
12813       }
12814       db->pnBytesFreed = 0;
12815       sqlite3BtreeLeaveAll(db);
12816
12817       *pHighwater = 0;
12818       *pCurrent = nByte;
12819       break;
12820     }
12821
12822     /*
12823     ** *pCurrent gets an accurate estimate of the amount of memory used
12824     ** to store all prepared statements.
12825     ** *pHighwater is set to zero.
12826     */
12827     case SQLITE_DBSTATUS_STMT_USED: {
12828       struct Vdbe *pVdbe;         /* Used to iterate through VMs */
12829       int nByte = 0;              /* Used to accumulate return value */
12830
12831       db->pnBytesFreed = &nByte;
12832       for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){
12833         sqlite3VdbeDeleteObject(db, pVdbe);
12834       }
12835       db->pnBytesFreed = 0;
12836
12837       *pHighwater = 0;
12838       *pCurrent = nByte;
12839
12840       break;
12841     }
12842
12843     default: {
12844       rc = SQLITE_ERROR;
12845     }
12846   }
12847   sqlite3_mutex_leave(db->mutex);
12848   return rc;
12849 }
12850
12851 /************** End of status.c **********************************************/
12852 /************** Begin file date.c ********************************************/
12853 /*
12854 ** 2003 October 31
12855 **
12856 ** The author disclaims copyright to this source code.  In place of
12857 ** a legal notice, here is a blessing:
12858 **
12859 **    May you do good and not evil.
12860 **    May you find forgiveness for yourself and forgive others.
12861 **    May you share freely, never taking more than you give.
12862 **
12863 *************************************************************************
12864 ** This file contains the C functions that implement date and time
12865 ** functions for SQLite.  
12866 **
12867 ** There is only one exported symbol in this file - the function
12868 ** sqlite3RegisterDateTimeFunctions() found at the bottom of the file.
12869 ** All other code has file scope.
12870 **
12871 ** SQLite processes all times and dates as Julian Day numbers.  The
12872 ** dates and times are stored as the number of days since noon
12873 ** in Greenwich on November 24, 4714 B.C. according to the Gregorian
12874 ** calendar system. 
12875 **
12876 ** 1970-01-01 00:00:00 is JD 2440587.5
12877 ** 2000-01-01 00:00:00 is JD 2451544.5
12878 **
12879 ** This implemention requires years to be expressed as a 4-digit number
12880 ** which means that only dates between 0000-01-01 and 9999-12-31 can
12881 ** be represented, even though julian day numbers allow a much wider
12882 ** range of dates.
12883 **
12884 ** The Gregorian calendar system is used for all dates and times,
12885 ** even those that predate the Gregorian calendar.  Historians usually
12886 ** use the Julian calendar for dates prior to 1582-10-15 and for some
12887 ** dates afterwards, depending on locale.  Beware of this difference.
12888 **
12889 ** The conversion algorithms are implemented based on descriptions
12890 ** in the following text:
12891 **
12892 **      Jean Meeus
12893 **      Astronomical Algorithms, 2nd Edition, 1998
12894 **      ISBM 0-943396-61-1
12895 **      Willmann-Bell, Inc
12896 **      Richmond, Virginia (USA)
12897 */
12898 #include <time.h>
12899
12900 #ifndef SQLITE_OMIT_DATETIME_FUNCS
12901
12902 /*
12903 ** On recent Windows platforms, the localtime_s() function is available
12904 ** as part of the "Secure CRT". It is essentially equivalent to 
12905 ** localtime_r() available under most POSIX platforms, except that the 
12906 ** order of the parameters is reversed.
12907 **
12908 ** See http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx.
12909 **
12910 ** If the user has not indicated to use localtime_r() or localtime_s()
12911 ** already, check for an MSVC build environment that provides 
12912 ** localtime_s().
12913 */
12914 #if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S) && \
12915      defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE)
12916 #define HAVE_LOCALTIME_S 1
12917 #endif
12918
12919 /*
12920 ** A structure for holding a single date and time.
12921 */
12922 typedef struct DateTime DateTime;
12923 struct DateTime {
12924   sqlite3_int64 iJD; /* The julian day number times 86400000 */
12925   int Y, M, D;       /* Year, month, and day */
12926   int h, m;          /* Hour and minutes */
12927   int tz;            /* Timezone offset in minutes */
12928   double s;          /* Seconds */
12929   char validYMD;     /* True (1) if Y,M,D are valid */
12930   char validHMS;     /* True (1) if h,m,s are valid */
12931   char validJD;      /* True (1) if iJD is valid */
12932   char validTZ;      /* True (1) if tz is valid */
12933 };
12934
12935
12936 /*
12937 ** Convert zDate into one or more integers.  Additional arguments
12938 ** come in groups of 5 as follows:
12939 **
12940 **       N       number of digits in the integer
12941 **       min     minimum allowed value of the integer
12942 **       max     maximum allowed value of the integer
12943 **       nextC   first character after the integer
12944 **       pVal    where to write the integers value.
12945 **
12946 ** Conversions continue until one with nextC==0 is encountered.
12947 ** The function returns the number of successful conversions.
12948 */
12949 static int getDigits(const char *zDate, ...){
12950   va_list ap;
12951   int val;
12952   int N;
12953   int min;
12954   int max;
12955   int nextC;
12956   int *pVal;
12957   int cnt = 0;
12958   va_start(ap, zDate);
12959   do{
12960     N = va_arg(ap, int);
12961     min = va_arg(ap, int);
12962     max = va_arg(ap, int);
12963     nextC = va_arg(ap, int);
12964     pVal = va_arg(ap, int*);
12965     val = 0;
12966     while( N-- ){
12967       if( !sqlite3Isdigit(*zDate) ){
12968         goto end_getDigits;
12969       }
12970       val = val*10 + *zDate - '0';
12971       zDate++;
12972     }
12973     if( val<min || val>max || (nextC!=0 && nextC!=*zDate) ){
12974       goto end_getDigits;
12975     }
12976     *pVal = val;
12977     zDate++;
12978     cnt++;
12979   }while( nextC );
12980 end_getDigits:
12981   va_end(ap);
12982   return cnt;
12983 }
12984
12985 /*
12986 ** Parse a timezone extension on the end of a date-time.
12987 ** The extension is of the form:
12988 **
12989 **        (+/-)HH:MM
12990 **
12991 ** Or the "zulu" notation:
12992 **
12993 **        Z
12994 **
12995 ** If the parse is successful, write the number of minutes
12996 ** of change in p->tz and return 0.  If a parser error occurs,
12997 ** return non-zero.
12998 **
12999 ** A missing specifier is not considered an error.
13000 */
13001 static int parseTimezone(const char *zDate, DateTime *p){
13002   int sgn = 0;
13003   int nHr, nMn;
13004   int c;
13005   while( sqlite3Isspace(*zDate) ){ zDate++; }
13006   p->tz = 0;
13007   c = *zDate;
13008   if( c=='-' ){
13009     sgn = -1;
13010   }else if( c=='+' ){
13011     sgn = +1;
13012   }else if( c=='Z' || c=='z' ){
13013     zDate++;
13014     goto zulu_time;
13015   }else{
13016     return c!=0;
13017   }
13018   zDate++;
13019   if( getDigits(zDate, 2, 0, 14, ':', &nHr, 2, 0, 59, 0, &nMn)!=2 ){
13020     return 1;
13021   }
13022   zDate += 5;
13023   p->tz = sgn*(nMn + nHr*60);
13024 zulu_time:
13025   while( sqlite3Isspace(*zDate) ){ zDate++; }
13026   return *zDate!=0;
13027 }
13028
13029 /*
13030 ** Parse times of the form HH:MM or HH:MM:SS or HH:MM:SS.FFFF.
13031 ** The HH, MM, and SS must each be exactly 2 digits.  The
13032 ** fractional seconds FFFF can be one or more digits.
13033 **
13034 ** Return 1 if there is a parsing error and 0 on success.
13035 */
13036 static int parseHhMmSs(const char *zDate, DateTime *p){
13037   int h, m, s;
13038   double ms = 0.0;
13039   if( getDigits(zDate, 2, 0, 24, ':', &h, 2, 0, 59, 0, &m)!=2 ){
13040     return 1;
13041   }
13042   zDate += 5;
13043   if( *zDate==':' ){
13044     zDate++;
13045     if( getDigits(zDate, 2, 0, 59, 0, &s)!=1 ){
13046       return 1;
13047     }
13048     zDate += 2;
13049     if( *zDate=='.' && sqlite3Isdigit(zDate[1]) ){
13050       double rScale = 1.0;
13051       zDate++;
13052       while( sqlite3Isdigit(*zDate) ){
13053         ms = ms*10.0 + *zDate - '0';
13054         rScale *= 10.0;
13055         zDate++;
13056       }
13057       ms /= rScale;
13058     }
13059   }else{
13060     s = 0;
13061   }
13062   p->validJD = 0;
13063   p->validHMS = 1;
13064   p->h = h;
13065   p->m = m;
13066   p->s = s + ms;
13067   if( parseTimezone(zDate, p) ) return 1;
13068   p->validTZ = (p->tz!=0)?1:0;
13069   return 0;
13070 }
13071
13072 /*
13073 ** Convert from YYYY-MM-DD HH:MM:SS to julian day.  We always assume
13074 ** that the YYYY-MM-DD is according to the Gregorian calendar.
13075 **
13076 ** Reference:  Meeus page 61
13077 */
13078 static void computeJD(DateTime *p){
13079   int Y, M, D, A, B, X1, X2;
13080
13081   if( p->validJD ) return;
13082   if( p->validYMD ){
13083     Y = p->Y;
13084     M = p->M;
13085     D = p->D;
13086   }else{
13087     Y = 2000;  /* If no YMD specified, assume 2000-Jan-01 */
13088     M = 1;
13089     D = 1;
13090   }
13091   if( M<=2 ){
13092     Y--;
13093     M += 12;
13094   }
13095   A = Y/100;
13096   B = 2 - A + (A/4);
13097   X1 = 36525*(Y+4716)/100;
13098   X2 = 306001*(M+1)/10000;
13099   p->iJD = (sqlite3_int64)((X1 + X2 + D + B - 1524.5 ) * 86400000);
13100   p->validJD = 1;
13101   if( p->validHMS ){
13102     p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000);
13103     if( p->validTZ ){
13104       p->iJD -= p->tz*60000;
13105       p->validYMD = 0;
13106       p->validHMS = 0;
13107       p->validTZ = 0;
13108     }
13109   }
13110 }
13111
13112 /*
13113 ** Parse dates of the form
13114 **
13115 **     YYYY-MM-DD HH:MM:SS.FFF
13116 **     YYYY-MM-DD HH:MM:SS
13117 **     YYYY-MM-DD HH:MM
13118 **     YYYY-MM-DD
13119 **
13120 ** Write the result into the DateTime structure and return 0
13121 ** on success and 1 if the input string is not a well-formed
13122 ** date.
13123 */
13124 static int parseYyyyMmDd(const char *zDate, DateTime *p){
13125   int Y, M, D, neg;
13126
13127   if( zDate[0]=='-' ){
13128     zDate++;
13129     neg = 1;
13130   }else{
13131     neg = 0;
13132   }
13133   if( getDigits(zDate,4,0,9999,'-',&Y,2,1,12,'-',&M,2,1,31,0,&D)!=3 ){
13134     return 1;
13135   }
13136   zDate += 10;
13137   while( sqlite3Isspace(*zDate) || 'T'==*(u8*)zDate ){ zDate++; }
13138   if( parseHhMmSs(zDate, p)==0 ){
13139     /* We got the time */
13140   }else if( *zDate==0 ){
13141     p->validHMS = 0;
13142   }else{
13143     return 1;
13144   }
13145   p->validJD = 0;
13146   p->validYMD = 1;
13147   p->Y = neg ? -Y : Y;
13148   p->M = M;
13149   p->D = D;
13150   if( p->validTZ ){
13151     computeJD(p);
13152   }
13153   return 0;
13154 }
13155
13156 /*
13157 ** Set the time to the current time reported by the VFS
13158 */
13159 static void setDateTimeToCurrent(sqlite3_context *context, DateTime *p){
13160   sqlite3 *db = sqlite3_context_db_handle(context);
13161   sqlite3OsCurrentTimeInt64(db->pVfs, &p->iJD);
13162   p->validJD = 1;
13163 }
13164
13165 /*
13166 ** Attempt to parse the given string into a Julian Day Number.  Return
13167 ** the number of errors.
13168 **
13169 ** The following are acceptable forms for the input string:
13170 **
13171 **      YYYY-MM-DD HH:MM:SS.FFF  +/-HH:MM
13172 **      DDDD.DD 
13173 **      now
13174 **
13175 ** In the first form, the +/-HH:MM is always optional.  The fractional
13176 ** seconds extension (the ".FFF") is optional.  The seconds portion
13177 ** (":SS.FFF") is option.  The year and date can be omitted as long
13178 ** as there is a time string.  The time string can be omitted as long
13179 ** as there is a year and date.
13180 */
13181 static int parseDateOrTime(
13182   sqlite3_context *context, 
13183   const char *zDate, 
13184   DateTime *p
13185 ){
13186   double r;
13187   if( parseYyyyMmDd(zDate,p)==0 ){
13188     return 0;
13189   }else if( parseHhMmSs(zDate, p)==0 ){
13190     return 0;
13191   }else if( sqlite3StrICmp(zDate,"now")==0){
13192     setDateTimeToCurrent(context, p);
13193     return 0;
13194   }else if( sqlite3AtoF(zDate, &r, sqlite3Strlen30(zDate), SQLITE_UTF8) ){
13195     p->iJD = (sqlite3_int64)(r*86400000.0 + 0.5);
13196     p->validJD = 1;
13197     return 0;
13198   }
13199   return 1;
13200 }
13201
13202 /*
13203 ** Compute the Year, Month, and Day from the julian day number.
13204 */
13205 static void computeYMD(DateTime *p){
13206   int Z, A, B, C, D, E, X1;
13207   if( p->validYMD ) return;
13208   if( !p->validJD ){
13209     p->Y = 2000;
13210     p->M = 1;
13211     p->D = 1;
13212   }else{
13213     Z = (int)((p->iJD + 43200000)/86400000);
13214     A = (int)((Z - 1867216.25)/36524.25);
13215     A = Z + 1 + A - (A/4);
13216     B = A + 1524;
13217     C = (int)((B - 122.1)/365.25);
13218     D = (36525*C)/100;
13219     E = (int)((B-D)/30.6001);
13220     X1 = (int)(30.6001*E);
13221     p->D = B - D - X1;
13222     p->M = E<14 ? E-1 : E-13;
13223     p->Y = p->M>2 ? C - 4716 : C - 4715;
13224   }
13225   p->validYMD = 1;
13226 }
13227
13228 /*
13229 ** Compute the Hour, Minute, and Seconds from the julian day number.
13230 */
13231 static void computeHMS(DateTime *p){
13232   int s;
13233   if( p->validHMS ) return;
13234   computeJD(p);
13235   s = (int)((p->iJD + 43200000) % 86400000);
13236   p->s = s/1000.0;
13237   s = (int)p->s;
13238   p->s -= s;
13239   p->h = s/3600;
13240   s -= p->h*3600;
13241   p->m = s/60;
13242   p->s += s - p->m*60;
13243   p->validHMS = 1;
13244 }
13245
13246 /*
13247 ** Compute both YMD and HMS
13248 */
13249 static void computeYMD_HMS(DateTime *p){
13250   computeYMD(p);
13251   computeHMS(p);
13252 }
13253
13254 /*
13255 ** Clear the YMD and HMS and the TZ
13256 */
13257 static void clearYMD_HMS_TZ(DateTime *p){
13258   p->validYMD = 0;
13259   p->validHMS = 0;
13260   p->validTZ = 0;
13261 }
13262
13263 #ifndef SQLITE_OMIT_LOCALTIME
13264 /*
13265 ** Compute the difference (in milliseconds)
13266 ** between localtime and UTC (a.k.a. GMT)
13267 ** for the time value p where p is in UTC.
13268 */
13269 static sqlite3_int64 localtimeOffset(DateTime *p){
13270   DateTime x, y;
13271   time_t t;
13272   x = *p;
13273   computeYMD_HMS(&x);
13274   if( x.Y<1971 || x.Y>=2038 ){
13275     x.Y = 2000;
13276     x.M = 1;
13277     x.D = 1;
13278     x.h = 0;
13279     x.m = 0;
13280     x.s = 0.0;
13281   } else {
13282     int s = (int)(x.s + 0.5);
13283     x.s = s;
13284   }
13285   x.tz = 0;
13286   x.validJD = 0;
13287   computeJD(&x);
13288   t = (time_t)(x.iJD/1000 - 21086676*(i64)10000);
13289 #ifdef HAVE_LOCALTIME_R
13290   {
13291     struct tm sLocal;
13292     localtime_r(&t, &sLocal);
13293     y.Y = sLocal.tm_year + 1900;
13294     y.M = sLocal.tm_mon + 1;
13295     y.D = sLocal.tm_mday;
13296     y.h = sLocal.tm_hour;
13297     y.m = sLocal.tm_min;
13298     y.s = sLocal.tm_sec;
13299   }
13300 #elif defined(HAVE_LOCALTIME_S) && HAVE_LOCALTIME_S
13301   {
13302     struct tm sLocal;
13303     localtime_s(&sLocal, &t);
13304     y.Y = sLocal.tm_year + 1900;
13305     y.M = sLocal.tm_mon + 1;
13306     y.D = sLocal.tm_mday;
13307     y.h = sLocal.tm_hour;
13308     y.m = sLocal.tm_min;
13309     y.s = sLocal.tm_sec;
13310   }
13311 #else
13312   {
13313     struct tm *pTm;
13314     sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
13315     pTm = localtime(&t);
13316     y.Y = pTm->tm_year + 1900;
13317     y.M = pTm->tm_mon + 1;
13318     y.D = pTm->tm_mday;
13319     y.h = pTm->tm_hour;
13320     y.m = pTm->tm_min;
13321     y.s = pTm->tm_sec;
13322     sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
13323   }
13324 #endif
13325   y.validYMD = 1;
13326   y.validHMS = 1;
13327   y.validJD = 0;
13328   y.validTZ = 0;
13329   computeJD(&y);
13330   return y.iJD - x.iJD;
13331 }
13332 #endif /* SQLITE_OMIT_LOCALTIME */
13333
13334 /*
13335 ** Process a modifier to a date-time stamp.  The modifiers are
13336 ** as follows:
13337 **
13338 **     NNN days
13339 **     NNN hours
13340 **     NNN minutes
13341 **     NNN.NNNN seconds
13342 **     NNN months
13343 **     NNN years
13344 **     start of month
13345 **     start of year
13346 **     start of week
13347 **     start of day
13348 **     weekday N
13349 **     unixepoch
13350 **     localtime
13351 **     utc
13352 **
13353 ** Return 0 on success and 1 if there is any kind of error.
13354 */
13355 static int parseModifier(const char *zMod, DateTime *p){
13356   int rc = 1;
13357   int n;
13358   double r;
13359   char *z, zBuf[30];
13360   z = zBuf;
13361   for(n=0; n<ArraySize(zBuf)-1 && zMod[n]; n++){
13362     z[n] = (char)sqlite3UpperToLower[(u8)zMod[n]];
13363   }
13364   z[n] = 0;
13365   switch( z[0] ){
13366 #ifndef SQLITE_OMIT_LOCALTIME
13367     case 'l': {
13368       /*    localtime
13369       **
13370       ** Assuming the current time value is UTC (a.k.a. GMT), shift it to
13371       ** show local time.
13372       */
13373       if( strcmp(z, "localtime")==0 ){
13374         computeJD(p);
13375         p->iJD += localtimeOffset(p);
13376         clearYMD_HMS_TZ(p);
13377         rc = 0;
13378       }
13379       break;
13380     }
13381 #endif
13382     case 'u': {
13383       /*
13384       **    unixepoch
13385       **
13386       ** Treat the current value of p->iJD as the number of
13387       ** seconds since 1970.  Convert to a real julian day number.
13388       */
13389       if( strcmp(z, "unixepoch")==0 && p->validJD ){
13390         p->iJD = (p->iJD + 43200)/86400 + 21086676*(i64)10000000;
13391         clearYMD_HMS_TZ(p);
13392         rc = 0;
13393       }
13394 #ifndef SQLITE_OMIT_LOCALTIME
13395       else if( strcmp(z, "utc")==0 ){
13396         sqlite3_int64 c1;
13397         computeJD(p);
13398         c1 = localtimeOffset(p);
13399         p->iJD -= c1;
13400         clearYMD_HMS_TZ(p);
13401         p->iJD += c1 - localtimeOffset(p);
13402         rc = 0;
13403       }
13404 #endif
13405       break;
13406     }
13407     case 'w': {
13408       /*
13409       **    weekday N
13410       **
13411       ** Move the date to the same time on the next occurrence of
13412       ** weekday N where 0==Sunday, 1==Monday, and so forth.  If the
13413       ** date is already on the appropriate weekday, this is a no-op.
13414       */
13415       if( strncmp(z, "weekday ", 8)==0
13416                && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)
13417                && (n=(int)r)==r && n>=0 && r<7 ){
13418         sqlite3_int64 Z;
13419         computeYMD_HMS(p);
13420         p->validTZ = 0;
13421         p->validJD = 0;
13422         computeJD(p);
13423         Z = ((p->iJD + 129600000)/86400000) % 7;
13424         if( Z>n ) Z -= 7;
13425         p->iJD += (n - Z)*86400000;
13426         clearYMD_HMS_TZ(p);
13427         rc = 0;
13428       }
13429       break;
13430     }
13431     case 's': {
13432       /*
13433       **    start of TTTTT
13434       **
13435       ** Move the date backwards to the beginning of the current day,
13436       ** or month or year.
13437       */
13438       if( strncmp(z, "start of ", 9)!=0 ) break;
13439       z += 9;
13440       computeYMD(p);
13441       p->validHMS = 1;
13442       p->h = p->m = 0;
13443       p->s = 0.0;
13444       p->validTZ = 0;
13445       p->validJD = 0;
13446       if( strcmp(z,"month")==0 ){
13447         p->D = 1;
13448         rc = 0;
13449       }else if( strcmp(z,"year")==0 ){
13450         computeYMD(p);
13451         p->M = 1;
13452         p->D = 1;
13453         rc = 0;
13454       }else if( strcmp(z,"day")==0 ){
13455         rc = 0;
13456       }
13457       break;
13458     }
13459     case '+':
13460     case '-':
13461     case '0':
13462     case '1':
13463     case '2':
13464     case '3':
13465     case '4':
13466     case '5':
13467     case '6':
13468     case '7':
13469     case '8':
13470     case '9': {
13471       double rRounder;
13472       for(n=1; z[n] && z[n]!=':' && !sqlite3Isspace(z[n]); n++){}
13473       if( !sqlite3AtoF(z, &r, n, SQLITE_UTF8) ){
13474         rc = 1;
13475         break;
13476       }
13477       if( z[n]==':' ){
13478         /* A modifier of the form (+|-)HH:MM:SS.FFF adds (or subtracts) the
13479         ** specified number of hours, minutes, seconds, and fractional seconds
13480         ** to the time.  The ".FFF" may be omitted.  The ":SS.FFF" may be
13481         ** omitted.
13482         */
13483         const char *z2 = z;
13484         DateTime tx;
13485         sqlite3_int64 day;
13486         if( !sqlite3Isdigit(*z2) ) z2++;
13487         memset(&tx, 0, sizeof(tx));
13488         if( parseHhMmSs(z2, &tx) ) break;
13489         computeJD(&tx);
13490         tx.iJD -= 43200000;
13491         day = tx.iJD/86400000;
13492         tx.iJD -= day*86400000;
13493         if( z[0]=='-' ) tx.iJD = -tx.iJD;
13494         computeJD(p);
13495         clearYMD_HMS_TZ(p);
13496         p->iJD += tx.iJD;
13497         rc = 0;
13498         break;
13499       }
13500       z += n;
13501       while( sqlite3Isspace(*z) ) z++;
13502       n = sqlite3Strlen30(z);
13503       if( n>10 || n<3 ) break;
13504       if( z[n-1]=='s' ){ z[n-1] = 0; n--; }
13505       computeJD(p);
13506       rc = 0;
13507       rRounder = r<0 ? -0.5 : +0.5;
13508       if( n==3 && strcmp(z,"day")==0 ){
13509         p->iJD += (sqlite3_int64)(r*86400000.0 + rRounder);
13510       }else if( n==4 && strcmp(z,"hour")==0 ){
13511         p->iJD += (sqlite3_int64)(r*(86400000.0/24.0) + rRounder);
13512       }else if( n==6 && strcmp(z,"minute")==0 ){
13513         p->iJD += (sqlite3_int64)(r*(86400000.0/(24.0*60.0)) + rRounder);
13514       }else if( n==6 && strcmp(z,"second")==0 ){
13515         p->iJD += (sqlite3_int64)(r*(86400000.0/(24.0*60.0*60.0)) + rRounder);
13516       }else if( n==5 && strcmp(z,"month")==0 ){
13517         int x, y;
13518         computeYMD_HMS(p);
13519         p->M += (int)r;
13520         x = p->M>0 ? (p->M-1)/12 : (p->M-12)/12;
13521         p->Y += x;
13522         p->M -= x*12;
13523         p->validJD = 0;
13524         computeJD(p);
13525         y = (int)r;
13526         if( y!=r ){
13527           p->iJD += (sqlite3_int64)((r - y)*30.0*86400000.0 + rRounder);
13528         }
13529       }else if( n==4 && strcmp(z,"year")==0 ){
13530         int y = (int)r;
13531         computeYMD_HMS(p);
13532         p->Y += y;
13533         p->validJD = 0;
13534         computeJD(p);
13535         if( y!=r ){
13536           p->iJD += (sqlite3_int64)((r - y)*365.0*86400000.0 + rRounder);
13537         }
13538       }else{
13539         rc = 1;
13540       }
13541       clearYMD_HMS_TZ(p);
13542       break;
13543     }
13544     default: {
13545       break;
13546     }
13547   }
13548   return rc;
13549 }
13550
13551 /*
13552 ** Process time function arguments.  argv[0] is a date-time stamp.
13553 ** argv[1] and following are modifiers.  Parse them all and write
13554 ** the resulting time into the DateTime structure p.  Return 0
13555 ** on success and 1 if there are any errors.
13556 **
13557 ** If there are zero parameters (if even argv[0] is undefined)
13558 ** then assume a default value of "now" for argv[0].
13559 */
13560 static int isDate(
13561   sqlite3_context *context, 
13562   int argc, 
13563   sqlite3_value **argv, 
13564   DateTime *p
13565 ){
13566   int i;
13567   const unsigned char *z;
13568   int eType;
13569   memset(p, 0, sizeof(*p));
13570   if( argc==0 ){
13571     setDateTimeToCurrent(context, p);
13572   }else if( (eType = sqlite3_value_type(argv[0]))==SQLITE_FLOAT
13573                    || eType==SQLITE_INTEGER ){
13574     p->iJD = (sqlite3_int64)(sqlite3_value_double(argv[0])*86400000.0 + 0.5);
13575     p->validJD = 1;
13576   }else{
13577     z = sqlite3_value_text(argv[0]);
13578     if( !z || parseDateOrTime(context, (char*)z, p) ){
13579       return 1;
13580     }
13581   }
13582   for(i=1; i<argc; i++){
13583     if( (z = sqlite3_value_text(argv[i]))==0 || parseModifier((char*)z, p) ){
13584       return 1;
13585     }
13586   }
13587   return 0;
13588 }
13589
13590
13591 /*
13592 ** The following routines implement the various date and time functions
13593 ** of SQLite.
13594 */
13595
13596 /*
13597 **    julianday( TIMESTRING, MOD, MOD, ...)
13598 **
13599 ** Return the julian day number of the date specified in the arguments
13600 */
13601 static void juliandayFunc(
13602   sqlite3_context *context,
13603   int argc,
13604   sqlite3_value **argv
13605 ){
13606   DateTime x;
13607   if( isDate(context, argc, argv, &x)==0 ){
13608     computeJD(&x);
13609     sqlite3_result_double(context, x.iJD/86400000.0);
13610   }
13611 }
13612
13613 /*
13614 **    datetime( TIMESTRING, MOD, MOD, ...)
13615 **
13616 ** Return YYYY-MM-DD HH:MM:SS
13617 */
13618 static void datetimeFunc(
13619   sqlite3_context *context,
13620   int argc,
13621   sqlite3_value **argv
13622 ){
13623   DateTime x;
13624   if( isDate(context, argc, argv, &x)==0 ){
13625     char zBuf[100];
13626     computeYMD_HMS(&x);
13627     sqlite3_snprintf(sizeof(zBuf), zBuf, "%04d-%02d-%02d %02d:%02d:%02d",
13628                      x.Y, x.M, x.D, x.h, x.m, (int)(x.s));
13629     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
13630   }
13631 }
13632
13633 /*
13634 **    time( TIMESTRING, MOD, MOD, ...)
13635 **
13636 ** Return HH:MM:SS
13637 */
13638 static void timeFunc(
13639   sqlite3_context *context,
13640   int argc,
13641   sqlite3_value **argv
13642 ){
13643   DateTime x;
13644   if( isDate(context, argc, argv, &x)==0 ){
13645     char zBuf[100];
13646     computeHMS(&x);
13647     sqlite3_snprintf(sizeof(zBuf), zBuf, "%02d:%02d:%02d", x.h, x.m, (int)x.s);
13648     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
13649   }
13650 }
13651
13652 /*
13653 **    date( TIMESTRING, MOD, MOD, ...)
13654 **
13655 ** Return YYYY-MM-DD
13656 */
13657 static void dateFunc(
13658   sqlite3_context *context,
13659   int argc,
13660   sqlite3_value **argv
13661 ){
13662   DateTime x;
13663   if( isDate(context, argc, argv, &x)==0 ){
13664     char zBuf[100];
13665     computeYMD(&x);
13666     sqlite3_snprintf(sizeof(zBuf), zBuf, "%04d-%02d-%02d", x.Y, x.M, x.D);
13667     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
13668   }
13669 }
13670
13671 /*
13672 **    strftime( FORMAT, TIMESTRING, MOD, MOD, ...)
13673 **
13674 ** Return a string described by FORMAT.  Conversions as follows:
13675 **
13676 **   %d  day of month
13677 **   %f  ** fractional seconds  SS.SSS
13678 **   %H  hour 00-24
13679 **   %j  day of year 000-366
13680 **   %J  ** Julian day number
13681 **   %m  month 01-12
13682 **   %M  minute 00-59
13683 **   %s  seconds since 1970-01-01
13684 **   %S  seconds 00-59
13685 **   %w  day of week 0-6  sunday==0
13686 **   %W  week of year 00-53
13687 **   %Y  year 0000-9999
13688 **   %%  %
13689 */
13690 static void strftimeFunc(
13691   sqlite3_context *context,
13692   int argc,
13693   sqlite3_value **argv
13694 ){
13695   DateTime x;
13696   u64 n;
13697   size_t i,j;
13698   char *z;
13699   sqlite3 *db;
13700   const char *zFmt = (const char*)sqlite3_value_text(argv[0]);
13701   char zBuf[100];
13702   if( zFmt==0 || isDate(context, argc-1, argv+1, &x) ) return;
13703   db = sqlite3_context_db_handle(context);
13704   for(i=0, n=1; zFmt[i]; i++, n++){
13705     if( zFmt[i]=='%' ){
13706       switch( zFmt[i+1] ){
13707         case 'd':
13708         case 'H':
13709         case 'm':
13710         case 'M':
13711         case 'S':
13712         case 'W':
13713           n++;
13714           /* fall thru */
13715         case 'w':
13716         case '%':
13717           break;
13718         case 'f':
13719           n += 8;
13720           break;
13721         case 'j':
13722           n += 3;
13723           break;
13724         case 'Y':
13725           n += 8;
13726           break;
13727         case 's':
13728         case 'J':
13729           n += 50;
13730           break;
13731         default:
13732           return;  /* ERROR.  return a NULL */
13733       }
13734       i++;
13735     }
13736   }
13737   testcase( n==sizeof(zBuf)-1 );
13738   testcase( n==sizeof(zBuf) );
13739   testcase( n==(u64)db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
13740   testcase( n==(u64)db->aLimit[SQLITE_LIMIT_LENGTH] );
13741   if( n<sizeof(zBuf) ){
13742     z = zBuf;
13743   }else if( n>(u64)db->aLimit[SQLITE_LIMIT_LENGTH] ){
13744     sqlite3_result_error_toobig(context);
13745     return;
13746   }else{
13747     z = sqlite3DbMallocRaw(db, (int)n);
13748     if( z==0 ){
13749       sqlite3_result_error_nomem(context);
13750       return;
13751     }
13752   }
13753   computeJD(&x);
13754   computeYMD_HMS(&x);
13755   for(i=j=0; zFmt[i]; i++){
13756     if( zFmt[i]!='%' ){
13757       z[j++] = zFmt[i];
13758     }else{
13759       i++;
13760       switch( zFmt[i] ){
13761         case 'd':  sqlite3_snprintf(3, &z[j],"%02d",x.D); j+=2; break;
13762         case 'f': {
13763           double s = x.s;
13764           if( s>59.999 ) s = 59.999;
13765           sqlite3_snprintf(7, &z[j],"%06.3f", s);
13766           j += sqlite3Strlen30(&z[j]);
13767           break;
13768         }
13769         case 'H':  sqlite3_snprintf(3, &z[j],"%02d",x.h); j+=2; break;
13770         case 'W': /* Fall thru */
13771         case 'j': {
13772           int nDay;             /* Number of days since 1st day of year */
13773           DateTime y = x;
13774           y.validJD = 0;
13775           y.M = 1;
13776           y.D = 1;
13777           computeJD(&y);
13778           nDay = (int)((x.iJD-y.iJD+43200000)/86400000);
13779           if( zFmt[i]=='W' ){
13780             int wd;   /* 0=Monday, 1=Tuesday, ... 6=Sunday */
13781             wd = (int)(((x.iJD+43200000)/86400000)%7);
13782             sqlite3_snprintf(3, &z[j],"%02d",(nDay+7-wd)/7);
13783             j += 2;
13784           }else{
13785             sqlite3_snprintf(4, &z[j],"%03d",nDay+1);
13786             j += 3;
13787           }
13788           break;
13789         }
13790         case 'J': {
13791           sqlite3_snprintf(20, &z[j],"%.16g",x.iJD/86400000.0);
13792           j+=sqlite3Strlen30(&z[j]);
13793           break;
13794         }
13795         case 'm':  sqlite3_snprintf(3, &z[j],"%02d",x.M); j+=2; break;
13796         case 'M':  sqlite3_snprintf(3, &z[j],"%02d",x.m); j+=2; break;
13797         case 's': {
13798           sqlite3_snprintf(30,&z[j],"%lld",
13799                            (i64)(x.iJD/1000 - 21086676*(i64)10000));
13800           j += sqlite3Strlen30(&z[j]);
13801           break;
13802         }
13803         case 'S':  sqlite3_snprintf(3,&z[j],"%02d",(int)x.s); j+=2; break;
13804         case 'w': {
13805           z[j++] = (char)(((x.iJD+129600000)/86400000) % 7) + '0';
13806           break;
13807         }
13808         case 'Y': {
13809           sqlite3_snprintf(5,&z[j],"%04d",x.Y); j+=sqlite3Strlen30(&z[j]);
13810           break;
13811         }
13812         default:   z[j++] = '%'; break;
13813       }
13814     }
13815   }
13816   z[j] = 0;
13817   sqlite3_result_text(context, z, -1,
13818                       z==zBuf ? SQLITE_TRANSIENT : SQLITE_DYNAMIC);
13819 }
13820
13821 /*
13822 ** current_time()
13823 **
13824 ** This function returns the same value as time('now').
13825 */
13826 static void ctimeFunc(
13827   sqlite3_context *context,
13828   int NotUsed,
13829   sqlite3_value **NotUsed2
13830 ){
13831   UNUSED_PARAMETER2(NotUsed, NotUsed2);
13832   timeFunc(context, 0, 0);
13833 }
13834
13835 /*
13836 ** current_date()
13837 **
13838 ** This function returns the same value as date('now').
13839 */
13840 static void cdateFunc(
13841   sqlite3_context *context,
13842   int NotUsed,
13843   sqlite3_value **NotUsed2
13844 ){
13845   UNUSED_PARAMETER2(NotUsed, NotUsed2);
13846   dateFunc(context, 0, 0);
13847 }
13848
13849 /*
13850 ** current_timestamp()
13851 **
13852 ** This function returns the same value as datetime('now').
13853 */
13854 static void ctimestampFunc(
13855   sqlite3_context *context,
13856   int NotUsed,
13857   sqlite3_value **NotUsed2
13858 ){
13859   UNUSED_PARAMETER2(NotUsed, NotUsed2);
13860   datetimeFunc(context, 0, 0);
13861 }
13862 #endif /* !defined(SQLITE_OMIT_DATETIME_FUNCS) */
13863
13864 #ifdef SQLITE_OMIT_DATETIME_FUNCS
13865 /*
13866 ** If the library is compiled to omit the full-scale date and time
13867 ** handling (to get a smaller binary), the following minimal version
13868 ** of the functions current_time(), current_date() and current_timestamp()
13869 ** are included instead. This is to support column declarations that
13870 ** include "DEFAULT CURRENT_TIME" etc.
13871 **
13872 ** This function uses the C-library functions time(), gmtime()
13873 ** and strftime(). The format string to pass to strftime() is supplied
13874 ** as the user-data for the function.
13875 */
13876 static void currentTimeFunc(
13877   sqlite3_context *context,
13878   int argc,
13879   sqlite3_value **argv
13880 ){
13881   time_t t;
13882   char *zFormat = (char *)sqlite3_user_data(context);
13883   sqlite3 *db;
13884   sqlite3_int64 iT;
13885   char zBuf[20];
13886
13887   UNUSED_PARAMETER(argc);
13888   UNUSED_PARAMETER(argv);
13889
13890   db = sqlite3_context_db_handle(context);
13891   sqlite3OsCurrentTimeInt64(db->pVfs, &iT);
13892   t = iT/1000 - 10000*(sqlite3_int64)21086676;
13893 #ifdef HAVE_GMTIME_R
13894   {
13895     struct tm sNow;
13896     gmtime_r(&t, &sNow);
13897     strftime(zBuf, 20, zFormat, &sNow);
13898   }
13899 #else
13900   {
13901     struct tm *pTm;
13902     sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
13903     pTm = gmtime(&t);
13904     strftime(zBuf, 20, zFormat, pTm);
13905     sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
13906   }
13907 #endif
13908
13909   sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
13910 }
13911 #endif
13912
13913 /*
13914 ** This function registered all of the above C functions as SQL
13915 ** functions.  This should be the only routine in this file with
13916 ** external linkage.
13917 */
13918 SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){
13919   static SQLITE_WSD FuncDef aDateTimeFuncs[] = {
13920 #ifndef SQLITE_OMIT_DATETIME_FUNCS
13921     FUNCTION(julianday,        -1, 0, 0, juliandayFunc ),
13922     FUNCTION(date,             -1, 0, 0, dateFunc      ),
13923     FUNCTION(time,             -1, 0, 0, timeFunc      ),
13924     FUNCTION(datetime,         -1, 0, 0, datetimeFunc  ),
13925     FUNCTION(strftime,         -1, 0, 0, strftimeFunc  ),
13926     FUNCTION(current_time,      0, 0, 0, ctimeFunc     ),
13927     FUNCTION(current_timestamp, 0, 0, 0, ctimestampFunc),
13928     FUNCTION(current_date,      0, 0, 0, cdateFunc     ),
13929 #else
13930     STR_FUNCTION(current_time,      0, "%H:%M:%S",          0, currentTimeFunc),
13931     STR_FUNCTION(current_date,      0, "%Y-%m-%d",          0, currentTimeFunc),
13932     STR_FUNCTION(current_timestamp, 0, "%Y-%m-%d %H:%M:%S", 0, currentTimeFunc),
13933 #endif
13934   };
13935   int i;
13936   FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
13937   FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aDateTimeFuncs);
13938
13939   for(i=0; i<ArraySize(aDateTimeFuncs); i++){
13940     sqlite3FuncDefInsert(pHash, &aFunc[i]);
13941   }
13942 }
13943
13944 /************** End of date.c ************************************************/
13945 /************** Begin file os.c **********************************************/
13946 /*
13947 ** 2005 November 29
13948 **
13949 ** The author disclaims copyright to this source code.  In place of
13950 ** a legal notice, here is a blessing:
13951 **
13952 **    May you do good and not evil.
13953 **    May you find forgiveness for yourself and forgive others.
13954 **    May you share freely, never taking more than you give.
13955 **
13956 ******************************************************************************
13957 **
13958 ** This file contains OS interface code that is common to all
13959 ** architectures.
13960 */
13961 #define _SQLITE_OS_C_ 1
13962 #undef _SQLITE_OS_C_
13963
13964 /*
13965 ** The default SQLite sqlite3_vfs implementations do not allocate
13966 ** memory (actually, os_unix.c allocates a small amount of memory
13967 ** from within OsOpen()), but some third-party implementations may.
13968 ** So we test the effects of a malloc() failing and the sqlite3OsXXX()
13969 ** function returning SQLITE_IOERR_NOMEM using the DO_OS_MALLOC_TEST macro.
13970 **
13971 ** The following functions are instrumented for malloc() failure 
13972 ** testing:
13973 **
13974 **     sqlite3OsOpen()
13975 **     sqlite3OsRead()
13976 **     sqlite3OsWrite()
13977 **     sqlite3OsSync()
13978 **     sqlite3OsLock()
13979 **
13980 */
13981 #if defined(SQLITE_TEST)
13982 SQLITE_API int sqlite3_memdebug_vfs_oom_test = 1;
13983   #define DO_OS_MALLOC_TEST(x)                                       \
13984   if (sqlite3_memdebug_vfs_oom_test && (!x || !sqlite3IsMemJournal(x))) {  \
13985     void *pTstAlloc = sqlite3Malloc(10);                             \
13986     if (!pTstAlloc) return SQLITE_IOERR_NOMEM;                       \
13987     sqlite3_free(pTstAlloc);                                         \
13988   }
13989 #else
13990   #define DO_OS_MALLOC_TEST(x)
13991 #endif
13992
13993 /*
13994 ** The following routines are convenience wrappers around methods
13995 ** of the sqlite3_file object.  This is mostly just syntactic sugar. All
13996 ** of this would be completely automatic if SQLite were coded using
13997 ** C++ instead of plain old C.
13998 */
13999 SQLITE_PRIVATE int sqlite3OsClose(sqlite3_file *pId){
14000   int rc = SQLITE_OK;
14001   if( pId->pMethods ){
14002     rc = pId->pMethods->xClose(pId);
14003     pId->pMethods = 0;
14004   }
14005   return rc;
14006 }
14007 SQLITE_PRIVATE int sqlite3OsRead(sqlite3_file *id, void *pBuf, int amt, i64 offset){
14008   DO_OS_MALLOC_TEST(id);
14009   return id->pMethods->xRead(id, pBuf, amt, offset);
14010 }
14011 SQLITE_PRIVATE int sqlite3OsWrite(sqlite3_file *id, const void *pBuf, int amt, i64 offset){
14012   DO_OS_MALLOC_TEST(id);
14013   return id->pMethods->xWrite(id, pBuf, amt, offset);
14014 }
14015 SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file *id, i64 size){
14016   return id->pMethods->xTruncate(id, size);
14017 }
14018 SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file *id, int flags){
14019   DO_OS_MALLOC_TEST(id);
14020   return id->pMethods->xSync(id, flags);
14021 }
14022 SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file *id, i64 *pSize){
14023   DO_OS_MALLOC_TEST(id);
14024   return id->pMethods->xFileSize(id, pSize);
14025 }
14026 SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file *id, int lockType){
14027   DO_OS_MALLOC_TEST(id);
14028   return id->pMethods->xLock(id, lockType);
14029 }
14030 SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file *id, int lockType){
14031   return id->pMethods->xUnlock(id, lockType);
14032 }
14033 SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut){
14034   DO_OS_MALLOC_TEST(id);
14035   return id->pMethods->xCheckReservedLock(id, pResOut);
14036 }
14037 SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){
14038   return id->pMethods->xFileControl(id, op, pArg);
14039 }
14040 SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id){
14041   int (*xSectorSize)(sqlite3_file*) = id->pMethods->xSectorSize;
14042   return (xSectorSize ? xSectorSize(id) : SQLITE_DEFAULT_SECTOR_SIZE);
14043 }
14044 SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id){
14045   return id->pMethods->xDeviceCharacteristics(id);
14046 }
14047 SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int offset, int n, int flags){
14048   return id->pMethods->xShmLock(id, offset, n, flags);
14049 }
14050 SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id){
14051   id->pMethods->xShmBarrier(id);
14052 }
14053 SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int deleteFlag){
14054   return id->pMethods->xShmUnmap(id, deleteFlag);
14055 }
14056 SQLITE_PRIVATE int sqlite3OsShmMap(
14057   sqlite3_file *id,               /* Database file handle */
14058   int iPage,
14059   int pgsz,
14060   int bExtend,                    /* True to extend file if necessary */
14061   void volatile **pp              /* OUT: Pointer to mapping */
14062 ){
14063   return id->pMethods->xShmMap(id, iPage, pgsz, bExtend, pp);
14064 }
14065
14066 /*
14067 ** The next group of routines are convenience wrappers around the
14068 ** VFS methods.
14069 */
14070 SQLITE_PRIVATE int sqlite3OsOpen(
14071   sqlite3_vfs *pVfs, 
14072   const char *zPath, 
14073   sqlite3_file *pFile, 
14074   int flags, 
14075   int *pFlagsOut
14076 ){
14077   int rc;
14078   DO_OS_MALLOC_TEST(0);
14079   /* 0x87f3f is a mask of SQLITE_OPEN_ flags that are valid to be passed
14080   ** down into the VFS layer.  Some SQLITE_OPEN_ flags (for example,
14081   ** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before
14082   ** reaching the VFS. */
14083   rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x87f3f, pFlagsOut);
14084   assert( rc==SQLITE_OK || pFile->pMethods==0 );
14085   return rc;
14086 }
14087 SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
14088   return pVfs->xDelete(pVfs, zPath, dirSync);
14089 }
14090 SQLITE_PRIVATE int sqlite3OsAccess(
14091   sqlite3_vfs *pVfs, 
14092   const char *zPath, 
14093   int flags, 
14094   int *pResOut
14095 ){
14096   DO_OS_MALLOC_TEST(0);
14097   return pVfs->xAccess(pVfs, zPath, flags, pResOut);
14098 }
14099 SQLITE_PRIVATE int sqlite3OsFullPathname(
14100   sqlite3_vfs *pVfs, 
14101   const char *zPath, 
14102   int nPathOut, 
14103   char *zPathOut
14104 ){
14105   zPathOut[0] = 0;
14106   return pVfs->xFullPathname(pVfs, zPath, nPathOut, zPathOut);
14107 }
14108 #ifndef SQLITE_OMIT_LOAD_EXTENSION
14109 SQLITE_PRIVATE void *sqlite3OsDlOpen(sqlite3_vfs *pVfs, const char *zPath){
14110   return pVfs->xDlOpen(pVfs, zPath);
14111 }
14112 SQLITE_PRIVATE void sqlite3OsDlError(sqlite3_vfs *pVfs, int nByte, char *zBufOut){
14113   pVfs->xDlError(pVfs, nByte, zBufOut);
14114 }
14115 SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *pVfs, void *pHdle, const char *zSym))(void){
14116   return pVfs->xDlSym(pVfs, pHdle, zSym);
14117 }
14118 SQLITE_PRIVATE void sqlite3OsDlClose(sqlite3_vfs *pVfs, void *pHandle){
14119   pVfs->xDlClose(pVfs, pHandle);
14120 }
14121 #endif /* SQLITE_OMIT_LOAD_EXTENSION */
14122 SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut){
14123   return pVfs->xRandomness(pVfs, nByte, zBufOut);
14124 }
14125 SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *pVfs, int nMicro){
14126   return pVfs->xSleep(pVfs, nMicro);
14127 }
14128 SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *pTimeOut){
14129   int rc;
14130   /* IMPLEMENTATION-OF: R-49045-42493 SQLite will use the xCurrentTimeInt64()
14131   ** method to get the current date and time if that method is available
14132   ** (if iVersion is 2 or greater and the function pointer is not NULL) and
14133   ** will fall back to xCurrentTime() if xCurrentTimeInt64() is
14134   ** unavailable.
14135   */
14136   if( pVfs->iVersion>=2 && pVfs->xCurrentTimeInt64 ){
14137     rc = pVfs->xCurrentTimeInt64(pVfs, pTimeOut);
14138   }else{
14139     double r;
14140     rc = pVfs->xCurrentTime(pVfs, &r);
14141     *pTimeOut = (sqlite3_int64)(r*86400000.0);
14142   }
14143   return rc;
14144 }
14145
14146 SQLITE_PRIVATE int sqlite3OsOpenMalloc(
14147   sqlite3_vfs *pVfs, 
14148   const char *zFile, 
14149   sqlite3_file **ppFile, 
14150   int flags,
14151   int *pOutFlags
14152 ){
14153   int rc = SQLITE_NOMEM;
14154   sqlite3_file *pFile;
14155   pFile = (sqlite3_file *)sqlite3Malloc(pVfs->szOsFile);
14156   if( pFile ){
14157     rc = sqlite3OsOpen(pVfs, zFile, pFile, flags, pOutFlags);
14158     if( rc!=SQLITE_OK ){
14159       sqlite3_free(pFile);
14160     }else{
14161       *ppFile = pFile;
14162     }
14163   }
14164   return rc;
14165 }
14166 SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *pFile){
14167   int rc = SQLITE_OK;
14168   assert( pFile );
14169   rc = sqlite3OsClose(pFile);
14170   sqlite3_free(pFile);
14171   return rc;
14172 }
14173
14174 /*
14175 ** This function is a wrapper around the OS specific implementation of
14176 ** sqlite3_os_init(). The purpose of the wrapper is to provide the
14177 ** ability to simulate a malloc failure, so that the handling of an
14178 ** error in sqlite3_os_init() by the upper layers can be tested.
14179 */
14180 SQLITE_PRIVATE int sqlite3OsInit(void){
14181   void *p = sqlite3_malloc(10);
14182   if( p==0 ) return SQLITE_NOMEM;
14183   sqlite3_free(p);
14184   return sqlite3_os_init();
14185 }
14186
14187 /*
14188 ** The list of all registered VFS implementations.
14189 */
14190 static sqlite3_vfs * SQLITE_WSD vfsList = 0;
14191 #define vfsList GLOBAL(sqlite3_vfs *, vfsList)
14192
14193 /*
14194 ** Locate a VFS by name.  If no name is given, simply return the
14195 ** first VFS on the list.
14196 */
14197 SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfs){
14198   sqlite3_vfs *pVfs = 0;
14199 #if SQLITE_THREADSAFE
14200   sqlite3_mutex *mutex;
14201 #endif
14202 #ifndef SQLITE_OMIT_AUTOINIT
14203   int rc = sqlite3_initialize();
14204   if( rc ) return 0;
14205 #endif
14206 #if SQLITE_THREADSAFE
14207   mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
14208 #endif
14209   sqlite3_mutex_enter(mutex);
14210   for(pVfs = vfsList; pVfs; pVfs=pVfs->pNext){
14211     if( zVfs==0 ) break;
14212     if( strcmp(zVfs, pVfs->zName)==0 ) break;
14213   }
14214   sqlite3_mutex_leave(mutex);
14215   return pVfs;
14216 }
14217
14218 /*
14219 ** Unlink a VFS from the linked list
14220 */
14221 static void vfsUnlink(sqlite3_vfs *pVfs){
14222   assert( sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)) );
14223   if( pVfs==0 ){
14224     /* No-op */
14225   }else if( vfsList==pVfs ){
14226     vfsList = pVfs->pNext;
14227   }else if( vfsList ){
14228     sqlite3_vfs *p = vfsList;
14229     while( p->pNext && p->pNext!=pVfs ){
14230       p = p->pNext;
14231     }
14232     if( p->pNext==pVfs ){
14233       p->pNext = pVfs->pNext;
14234     }
14235   }
14236 }
14237
14238 /*
14239 ** Register a VFS with the system.  It is harmless to register the same
14240 ** VFS multiple times.  The new VFS becomes the default if makeDflt is
14241 ** true.
14242 */
14243 SQLITE_API int sqlite3_vfs_register(sqlite3_vfs *pVfs, int makeDflt){
14244   sqlite3_mutex *mutex = 0;
14245 #ifndef SQLITE_OMIT_AUTOINIT
14246   int rc = sqlite3_initialize();
14247   if( rc ) return rc;
14248 #endif
14249   mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
14250   sqlite3_mutex_enter(mutex);
14251   vfsUnlink(pVfs);
14252   if( makeDflt || vfsList==0 ){
14253     pVfs->pNext = vfsList;
14254     vfsList = pVfs;
14255   }else{
14256     pVfs->pNext = vfsList->pNext;
14257     vfsList->pNext = pVfs;
14258   }
14259   assert(vfsList);
14260   sqlite3_mutex_leave(mutex);
14261   return SQLITE_OK;
14262 }
14263
14264 /*
14265 ** Unregister a VFS so that it is no longer accessible.
14266 */
14267 SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs *pVfs){
14268 #if SQLITE_THREADSAFE
14269   sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
14270 #endif
14271   sqlite3_mutex_enter(mutex);
14272   vfsUnlink(pVfs);
14273   sqlite3_mutex_leave(mutex);
14274   return SQLITE_OK;
14275 }
14276
14277 /************** End of os.c **************************************************/
14278 /************** Begin file fault.c *******************************************/
14279 /*
14280 ** 2008 Jan 22
14281 **
14282 ** The author disclaims copyright to this source code.  In place of
14283 ** a legal notice, here is a blessing:
14284 **
14285 **    May you do good and not evil.
14286 **    May you find forgiveness for yourself and forgive others.
14287 **    May you share freely, never taking more than you give.
14288 **
14289 *************************************************************************
14290 **
14291 ** This file contains code to support the concept of "benign" 
14292 ** malloc failures (when the xMalloc() or xRealloc() method of the
14293 ** sqlite3_mem_methods structure fails to allocate a block of memory
14294 ** and returns 0). 
14295 **
14296 ** Most malloc failures are non-benign. After they occur, SQLite
14297 ** abandons the current operation and returns an error code (usually
14298 ** SQLITE_NOMEM) to the user. However, sometimes a fault is not necessarily
14299 ** fatal. For example, if a malloc fails while resizing a hash table, this 
14300 ** is completely recoverable simply by not carrying out the resize. The 
14301 ** hash table will continue to function normally.  So a malloc failure 
14302 ** during a hash table resize is a benign fault.
14303 */
14304
14305
14306 #ifndef SQLITE_OMIT_BUILTIN_TEST
14307
14308 /*
14309 ** Global variables.
14310 */
14311 typedef struct BenignMallocHooks BenignMallocHooks;
14312 static SQLITE_WSD struct BenignMallocHooks {
14313   void (*xBenignBegin)(void);
14314   void (*xBenignEnd)(void);
14315 } sqlite3Hooks = { 0, 0 };
14316
14317 /* The "wsdHooks" macro will resolve to the appropriate BenignMallocHooks
14318 ** structure.  If writable static data is unsupported on the target,
14319 ** we have to locate the state vector at run-time.  In the more common
14320 ** case where writable static data is supported, wsdHooks can refer directly
14321 ** to the "sqlite3Hooks" state vector declared above.
14322 */
14323 #ifdef SQLITE_OMIT_WSD
14324 # define wsdHooksInit \
14325   BenignMallocHooks *x = &GLOBAL(BenignMallocHooks,sqlite3Hooks)
14326 # define wsdHooks x[0]
14327 #else
14328 # define wsdHooksInit
14329 # define wsdHooks sqlite3Hooks
14330 #endif
14331
14332
14333 /*
14334 ** Register hooks to call when sqlite3BeginBenignMalloc() and
14335 ** sqlite3EndBenignMalloc() are called, respectively.
14336 */
14337 SQLITE_PRIVATE void sqlite3BenignMallocHooks(
14338   void (*xBenignBegin)(void),
14339   void (*xBenignEnd)(void)
14340 ){
14341   wsdHooksInit;
14342   wsdHooks.xBenignBegin = xBenignBegin;
14343   wsdHooks.xBenignEnd = xBenignEnd;
14344 }
14345
14346 /*
14347 ** This (sqlite3EndBenignMalloc()) is called by SQLite code to indicate that
14348 ** subsequent malloc failures are benign. A call to sqlite3EndBenignMalloc()
14349 ** indicates that subsequent malloc failures are non-benign.
14350 */
14351 SQLITE_PRIVATE void sqlite3BeginBenignMalloc(void){
14352   wsdHooksInit;
14353   if( wsdHooks.xBenignBegin ){
14354     wsdHooks.xBenignBegin();
14355   }
14356 }
14357 SQLITE_PRIVATE void sqlite3EndBenignMalloc(void){
14358   wsdHooksInit;
14359   if( wsdHooks.xBenignEnd ){
14360     wsdHooks.xBenignEnd();
14361   }
14362 }
14363
14364 #endif   /* #ifndef SQLITE_OMIT_BUILTIN_TEST */
14365
14366 /************** End of fault.c ***********************************************/
14367 /************** Begin file mem0.c ********************************************/
14368 /*
14369 ** 2008 October 28
14370 **
14371 ** The author disclaims copyright to this source code.  In place of
14372 ** a legal notice, here is a blessing:
14373 **
14374 **    May you do good and not evil.
14375 **    May you find forgiveness for yourself and forgive others.
14376 **    May you share freely, never taking more than you give.
14377 **
14378 *************************************************************************
14379 **
14380 ** This file contains a no-op memory allocation drivers for use when
14381 ** SQLITE_ZERO_MALLOC is defined.  The allocation drivers implemented
14382 ** here always fail.  SQLite will not operate with these drivers.  These
14383 ** are merely placeholders.  Real drivers must be substituted using
14384 ** sqlite3_config() before SQLite will operate.
14385 */
14386
14387 /*
14388 ** This version of the memory allocator is the default.  It is
14389 ** used when no other memory allocator is specified using compile-time
14390 ** macros.
14391 */
14392 #ifdef SQLITE_ZERO_MALLOC
14393
14394 /*
14395 ** No-op versions of all memory allocation routines
14396 */
14397 static void *sqlite3MemMalloc(int nByte){ return 0; }
14398 static void sqlite3MemFree(void *pPrior){ return; }
14399 static void *sqlite3MemRealloc(void *pPrior, int nByte){ return 0; }
14400 static int sqlite3MemSize(void *pPrior){ return 0; }
14401 static int sqlite3MemRoundup(int n){ return n; }
14402 static int sqlite3MemInit(void *NotUsed){ return SQLITE_OK; }
14403 static void sqlite3MemShutdown(void *NotUsed){ return; }
14404
14405 /*
14406 ** This routine is the only routine in this file with external linkage.
14407 **
14408 ** Populate the low-level memory allocation function pointers in
14409 ** sqlite3GlobalConfig.m with pointers to the routines in this file.
14410 */
14411 SQLITE_PRIVATE void sqlite3MemSetDefault(void){
14412   static const sqlite3_mem_methods defaultMethods = {
14413      sqlite3MemMalloc,
14414      sqlite3MemFree,
14415      sqlite3MemRealloc,
14416      sqlite3MemSize,
14417      sqlite3MemRoundup,
14418      sqlite3MemInit,
14419      sqlite3MemShutdown,
14420      0
14421   };
14422   sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
14423 }
14424
14425 #endif /* SQLITE_ZERO_MALLOC */
14426
14427 /************** End of mem0.c ************************************************/
14428 /************** Begin file mem1.c ********************************************/
14429 /*
14430 ** 2007 August 14
14431 **
14432 ** The author disclaims copyright to this source code.  In place of
14433 ** a legal notice, here is a blessing:
14434 **
14435 **    May you do good and not evil.
14436 **    May you find forgiveness for yourself and forgive others.
14437 **    May you share freely, never taking more than you give.
14438 **
14439 *************************************************************************
14440 **
14441 ** This file contains low-level memory allocation drivers for when
14442 ** SQLite will use the standard C-library malloc/realloc/free interface
14443 ** to obtain the memory it needs.
14444 **
14445 ** This file contains implementations of the low-level memory allocation
14446 ** routines specified in the sqlite3_mem_methods object.
14447 */
14448
14449 /*
14450 ** This version of the memory allocator is the default.  It is
14451 ** used when no other memory allocator is specified using compile-time
14452 ** macros.
14453 */
14454 #ifdef SQLITE_SYSTEM_MALLOC
14455
14456 /*
14457 ** Like malloc(), but remember the size of the allocation
14458 ** so that we can find it later using sqlite3MemSize().
14459 **
14460 ** For this low-level routine, we are guaranteed that nByte>0 because
14461 ** cases of nByte<=0 will be intercepted and dealt with by higher level
14462 ** routines.
14463 */
14464 static void *sqlite3MemMalloc(int nByte){
14465   sqlite3_int64 *p;
14466   assert( nByte>0 );
14467   nByte = ROUND8(nByte);
14468   p = malloc( nByte+8 );
14469   if( p ){
14470     p[0] = nByte;
14471     p++;
14472   }else{
14473     testcase( sqlite3GlobalConfig.xLog!=0 );
14474     sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes of memory", nByte);
14475   }
14476   return (void *)p;
14477 }
14478
14479 /*
14480 ** Like free() but works for allocations obtained from sqlite3MemMalloc()
14481 ** or sqlite3MemRealloc().
14482 **
14483 ** For this low-level routine, we already know that pPrior!=0 since
14484 ** cases where pPrior==0 will have been intecepted and dealt with
14485 ** by higher-level routines.
14486 */
14487 static void sqlite3MemFree(void *pPrior){
14488   sqlite3_int64 *p = (sqlite3_int64*)pPrior;
14489   assert( pPrior!=0 );
14490   p--;
14491   free(p);
14492 }
14493
14494 /*
14495 ** Report the allocated size of a prior return from xMalloc()
14496 ** or xRealloc().
14497 */
14498 static int sqlite3MemSize(void *pPrior){
14499   sqlite3_int64 *p;
14500   if( pPrior==0 ) return 0;
14501   p = (sqlite3_int64*)pPrior;
14502   p--;
14503   return (int)p[0];
14504 }
14505
14506 /*
14507 ** Like realloc().  Resize an allocation previously obtained from
14508 ** sqlite3MemMalloc().
14509 **
14510 ** For this low-level interface, we know that pPrior!=0.  Cases where
14511 ** pPrior==0 while have been intercepted by higher-level routine and
14512 ** redirected to xMalloc.  Similarly, we know that nByte>0 becauses
14513 ** cases where nByte<=0 will have been intercepted by higher-level
14514 ** routines and redirected to xFree.
14515 */
14516 static void *sqlite3MemRealloc(void *pPrior, int nByte){
14517   sqlite3_int64 *p = (sqlite3_int64*)pPrior;
14518   assert( pPrior!=0 && nByte>0 );
14519   assert( nByte==ROUND8(nByte) ); /* EV: R-46199-30249 */
14520   p--;
14521   p = realloc(p, nByte+8 );
14522   if( p ){
14523     p[0] = nByte;
14524     p++;
14525   }else{
14526     testcase( sqlite3GlobalConfig.xLog!=0 );
14527     sqlite3_log(SQLITE_NOMEM,
14528       "failed memory resize %u to %u bytes",
14529       sqlite3MemSize(pPrior), nByte);
14530   }
14531   return (void*)p;
14532 }
14533
14534 /*
14535 ** Round up a request size to the next valid allocation size.
14536 */
14537 static int sqlite3MemRoundup(int n){
14538   return ROUND8(n);
14539 }
14540
14541 /*
14542 ** Initialize this module.
14543 */
14544 static int sqlite3MemInit(void *NotUsed){
14545   UNUSED_PARAMETER(NotUsed);
14546   return SQLITE_OK;
14547 }
14548
14549 /*
14550 ** Deinitialize this module.
14551 */
14552 static void sqlite3MemShutdown(void *NotUsed){
14553   UNUSED_PARAMETER(NotUsed);
14554   return;
14555 }
14556
14557 /*
14558 ** This routine is the only routine in this file with external linkage.
14559 **
14560 ** Populate the low-level memory allocation function pointers in
14561 ** sqlite3GlobalConfig.m with pointers to the routines in this file.
14562 */
14563 SQLITE_PRIVATE void sqlite3MemSetDefault(void){
14564   static const sqlite3_mem_methods defaultMethods = {
14565      sqlite3MemMalloc,
14566      sqlite3MemFree,
14567      sqlite3MemRealloc,
14568      sqlite3MemSize,
14569      sqlite3MemRoundup,
14570      sqlite3MemInit,
14571      sqlite3MemShutdown,
14572      0
14573   };
14574   sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
14575 }
14576
14577 #endif /* SQLITE_SYSTEM_MALLOC */
14578
14579 /************** End of mem1.c ************************************************/
14580 /************** Begin file mem2.c ********************************************/
14581 /*
14582 ** 2007 August 15
14583 **
14584 ** The author disclaims copyright to this source code.  In place of
14585 ** a legal notice, here is a blessing:
14586 **
14587 **    May you do good and not evil.
14588 **    May you find forgiveness for yourself and forgive others.
14589 **    May you share freely, never taking more than you give.
14590 **
14591 *************************************************************************
14592 **
14593 ** This file contains low-level memory allocation drivers for when
14594 ** SQLite will use the standard C-library malloc/realloc/free interface
14595 ** to obtain the memory it needs while adding lots of additional debugging
14596 ** information to each allocation in order to help detect and fix memory
14597 ** leaks and memory usage errors.
14598 **
14599 ** This file contains implementations of the low-level memory allocation
14600 ** routines specified in the sqlite3_mem_methods object.
14601 */
14602
14603 /*
14604 ** This version of the memory allocator is used only if the
14605 ** SQLITE_MEMDEBUG macro is defined
14606 */
14607 #ifdef SQLITE_MEMDEBUG
14608
14609 /*
14610 ** The backtrace functionality is only available with GLIBC
14611 */
14612 #ifdef __GLIBC__
14613   extern int backtrace(void**,int);
14614   extern void backtrace_symbols_fd(void*const*,int,int);
14615 #else
14616 # define backtrace(A,B) 1
14617 # define backtrace_symbols_fd(A,B,C)
14618 #endif
14619
14620 /*
14621 ** Each memory allocation looks like this:
14622 **
14623 **  ------------------------------------------------------------------------
14624 **  | Title |  backtrace pointers |  MemBlockHdr |  allocation |  EndGuard |
14625 **  ------------------------------------------------------------------------
14626 **
14627 ** The application code sees only a pointer to the allocation.  We have
14628 ** to back up from the allocation pointer to find the MemBlockHdr.  The
14629 ** MemBlockHdr tells us the size of the allocation and the number of
14630 ** backtrace pointers.  There is also a guard word at the end of the
14631 ** MemBlockHdr.
14632 */
14633 struct MemBlockHdr {
14634   i64 iSize;                          /* Size of this allocation */
14635   struct MemBlockHdr *pNext, *pPrev;  /* Linked list of all unfreed memory */
14636   char nBacktrace;                    /* Number of backtraces on this alloc */
14637   char nBacktraceSlots;               /* Available backtrace slots */
14638   u8 nTitle;                          /* Bytes of title; includes '\0' */
14639   u8 eType;                           /* Allocation type code */
14640   int iForeGuard;                     /* Guard word for sanity */
14641 };
14642
14643 /*
14644 ** Guard words
14645 */
14646 #define FOREGUARD 0x80F5E153
14647 #define REARGUARD 0xE4676B53
14648
14649 /*
14650 ** Number of malloc size increments to track.
14651 */
14652 #define NCSIZE  1000
14653
14654 /*
14655 ** All of the static variables used by this module are collected
14656 ** into a single structure named "mem".  This is to keep the
14657 ** static variables organized and to reduce namespace pollution
14658 ** when this module is combined with other in the amalgamation.
14659 */
14660 static struct {
14661   
14662   /*
14663   ** Mutex to control access to the memory allocation subsystem.
14664   */
14665   sqlite3_mutex *mutex;
14666
14667   /*
14668   ** Head and tail of a linked list of all outstanding allocations
14669   */
14670   struct MemBlockHdr *pFirst;
14671   struct MemBlockHdr *pLast;
14672   
14673   /*
14674   ** The number of levels of backtrace to save in new allocations.
14675   */
14676   int nBacktrace;
14677   void (*xBacktrace)(int, int, void **);
14678
14679   /*
14680   ** Title text to insert in front of each block
14681   */
14682   int nTitle;        /* Bytes of zTitle to save.  Includes '\0' and padding */
14683   char zTitle[100];  /* The title text */
14684
14685   /* 
14686   ** sqlite3MallocDisallow() increments the following counter.
14687   ** sqlite3MallocAllow() decrements it.
14688   */
14689   int disallow; /* Do not allow memory allocation */
14690
14691   /*
14692   ** Gather statistics on the sizes of memory allocations.
14693   ** nAlloc[i] is the number of allocation attempts of i*8
14694   ** bytes.  i==NCSIZE is the number of allocation attempts for
14695   ** sizes more than NCSIZE*8 bytes.
14696   */
14697   int nAlloc[NCSIZE];      /* Total number of allocations */
14698   int nCurrent[NCSIZE];    /* Current number of allocations */
14699   int mxCurrent[NCSIZE];   /* Highwater mark for nCurrent */
14700
14701 } mem;
14702
14703
14704 /*
14705 ** Adjust memory usage statistics
14706 */
14707 static void adjustStats(int iSize, int increment){
14708   int i = ROUND8(iSize)/8;
14709   if( i>NCSIZE-1 ){
14710     i = NCSIZE - 1;
14711   }
14712   if( increment>0 ){
14713     mem.nAlloc[i]++;
14714     mem.nCurrent[i]++;
14715     if( mem.nCurrent[i]>mem.mxCurrent[i] ){
14716       mem.mxCurrent[i] = mem.nCurrent[i];
14717     }
14718   }else{
14719     mem.nCurrent[i]--;
14720     assert( mem.nCurrent[i]>=0 );
14721   }
14722 }
14723
14724 /*
14725 ** Given an allocation, find the MemBlockHdr for that allocation.
14726 **
14727 ** This routine checks the guards at either end of the allocation and
14728 ** if they are incorrect it asserts.
14729 */
14730 static struct MemBlockHdr *sqlite3MemsysGetHeader(void *pAllocation){
14731   struct MemBlockHdr *p;
14732   int *pInt;
14733   u8 *pU8;
14734   int nReserve;
14735
14736   p = (struct MemBlockHdr*)pAllocation;
14737   p--;
14738   assert( p->iForeGuard==(int)FOREGUARD );
14739   nReserve = ROUND8(p->iSize);
14740   pInt = (int*)pAllocation;
14741   pU8 = (u8*)pAllocation;
14742   assert( pInt[nReserve/sizeof(int)]==(int)REARGUARD );
14743   /* This checks any of the "extra" bytes allocated due
14744   ** to rounding up to an 8 byte boundary to ensure 
14745   ** they haven't been overwritten.
14746   */
14747   while( nReserve-- > p->iSize ) assert( pU8[nReserve]==0x65 );
14748   return p;
14749 }
14750
14751 /*
14752 ** Return the number of bytes currently allocated at address p.
14753 */
14754 static int sqlite3MemSize(void *p){
14755   struct MemBlockHdr *pHdr;
14756   if( !p ){
14757     return 0;
14758   }
14759   pHdr = sqlite3MemsysGetHeader(p);
14760   return pHdr->iSize;
14761 }
14762
14763 /*
14764 ** Initialize the memory allocation subsystem.
14765 */
14766 static int sqlite3MemInit(void *NotUsed){
14767   UNUSED_PARAMETER(NotUsed);
14768   assert( (sizeof(struct MemBlockHdr)&7) == 0 );
14769   if( !sqlite3GlobalConfig.bMemstat ){
14770     /* If memory status is enabled, then the malloc.c wrapper will already
14771     ** hold the STATIC_MEM mutex when the routines here are invoked. */
14772     mem.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
14773   }
14774   return SQLITE_OK;
14775 }
14776
14777 /*
14778 ** Deinitialize the memory allocation subsystem.
14779 */
14780 static void sqlite3MemShutdown(void *NotUsed){
14781   UNUSED_PARAMETER(NotUsed);
14782   mem.mutex = 0;
14783 }
14784
14785 /*
14786 ** Round up a request size to the next valid allocation size.
14787 */
14788 static int sqlite3MemRoundup(int n){
14789   return ROUND8(n);
14790 }
14791
14792 /*
14793 ** Fill a buffer with pseudo-random bytes.  This is used to preset
14794 ** the content of a new memory allocation to unpredictable values and
14795 ** to clear the content of a freed allocation to unpredictable values.
14796 */
14797 static void randomFill(char *pBuf, int nByte){
14798   unsigned int x, y, r;
14799   x = SQLITE_PTR_TO_INT(pBuf);
14800   y = nByte | 1;
14801   while( nByte >= 4 ){
14802     x = (x>>1) ^ (-(x&1) & 0xd0000001);
14803     y = y*1103515245 + 12345;
14804     r = x ^ y;
14805     *(int*)pBuf = r;
14806     pBuf += 4;
14807     nByte -= 4;
14808   }
14809   while( nByte-- > 0 ){
14810     x = (x>>1) ^ (-(x&1) & 0xd0000001);
14811     y = y*1103515245 + 12345;
14812     r = x ^ y;
14813     *(pBuf++) = r & 0xff;
14814   }
14815 }
14816
14817 /*
14818 ** Allocate nByte bytes of memory.
14819 */
14820 static void *sqlite3MemMalloc(int nByte){
14821   struct MemBlockHdr *pHdr;
14822   void **pBt;
14823   char *z;
14824   int *pInt;
14825   void *p = 0;
14826   int totalSize;
14827   int nReserve;
14828   sqlite3_mutex_enter(mem.mutex);
14829   assert( mem.disallow==0 );
14830   nReserve = ROUND8(nByte);
14831   totalSize = nReserve + sizeof(*pHdr) + sizeof(int) +
14832                mem.nBacktrace*sizeof(void*) + mem.nTitle;
14833   p = malloc(totalSize);
14834   if( p ){
14835     z = p;
14836     pBt = (void**)&z[mem.nTitle];
14837     pHdr = (struct MemBlockHdr*)&pBt[mem.nBacktrace];
14838     pHdr->pNext = 0;
14839     pHdr->pPrev = mem.pLast;
14840     if( mem.pLast ){
14841       mem.pLast->pNext = pHdr;
14842     }else{
14843       mem.pFirst = pHdr;
14844     }
14845     mem.pLast = pHdr;
14846     pHdr->iForeGuard = FOREGUARD;
14847     pHdr->eType = MEMTYPE_HEAP;
14848     pHdr->nBacktraceSlots = mem.nBacktrace;
14849     pHdr->nTitle = mem.nTitle;
14850     if( mem.nBacktrace ){
14851       void *aAddr[40];
14852       pHdr->nBacktrace = backtrace(aAddr, mem.nBacktrace+1)-1;
14853       memcpy(pBt, &aAddr[1], pHdr->nBacktrace*sizeof(void*));
14854       assert(pBt[0]);
14855       if( mem.xBacktrace ){
14856         mem.xBacktrace(nByte, pHdr->nBacktrace-1, &aAddr[1]);
14857       }
14858     }else{
14859       pHdr->nBacktrace = 0;
14860     }
14861     if( mem.nTitle ){
14862       memcpy(z, mem.zTitle, mem.nTitle);
14863     }
14864     pHdr->iSize = nByte;
14865     adjustStats(nByte, +1);
14866     pInt = (int*)&pHdr[1];
14867     pInt[nReserve/sizeof(int)] = REARGUARD;
14868     randomFill((char*)pInt, nByte);
14869     memset(((char*)pInt)+nByte, 0x65, nReserve-nByte);
14870     p = (void*)pInt;
14871   }
14872   sqlite3_mutex_leave(mem.mutex);
14873   return p; 
14874 }
14875
14876 /*
14877 ** Free memory.
14878 */
14879 static void sqlite3MemFree(void *pPrior){
14880   struct MemBlockHdr *pHdr;
14881   void **pBt;
14882   char *z;
14883   assert( sqlite3GlobalConfig.bMemstat || sqlite3GlobalConfig.bCoreMutex==0 
14884        || mem.mutex!=0 );
14885   pHdr = sqlite3MemsysGetHeader(pPrior);
14886   pBt = (void**)pHdr;
14887   pBt -= pHdr->nBacktraceSlots;
14888   sqlite3_mutex_enter(mem.mutex);
14889   if( pHdr->pPrev ){
14890     assert( pHdr->pPrev->pNext==pHdr );
14891     pHdr->pPrev->pNext = pHdr->pNext;
14892   }else{
14893     assert( mem.pFirst==pHdr );
14894     mem.pFirst = pHdr->pNext;
14895   }
14896   if( pHdr->pNext ){
14897     assert( pHdr->pNext->pPrev==pHdr );
14898     pHdr->pNext->pPrev = pHdr->pPrev;
14899   }else{
14900     assert( mem.pLast==pHdr );
14901     mem.pLast = pHdr->pPrev;
14902   }
14903   z = (char*)pBt;
14904   z -= pHdr->nTitle;
14905   adjustStats(pHdr->iSize, -1);
14906   randomFill(z, sizeof(void*)*pHdr->nBacktraceSlots + sizeof(*pHdr) +
14907                 pHdr->iSize + sizeof(int) + pHdr->nTitle);
14908   free(z);
14909   sqlite3_mutex_leave(mem.mutex);  
14910 }
14911
14912 /*
14913 ** Change the size of an existing memory allocation.
14914 **
14915 ** For this debugging implementation, we *always* make a copy of the
14916 ** allocation into a new place in memory.  In this way, if the 
14917 ** higher level code is using pointer to the old allocation, it is 
14918 ** much more likely to break and we are much more liking to find
14919 ** the error.
14920 */
14921 static void *sqlite3MemRealloc(void *pPrior, int nByte){
14922   struct MemBlockHdr *pOldHdr;
14923   void *pNew;
14924   assert( mem.disallow==0 );
14925   assert( (nByte & 7)==0 );     /* EV: R-46199-30249 */
14926   pOldHdr = sqlite3MemsysGetHeader(pPrior);
14927   pNew = sqlite3MemMalloc(nByte);
14928   if( pNew ){
14929     memcpy(pNew, pPrior, nByte<pOldHdr->iSize ? nByte : pOldHdr->iSize);
14930     if( nByte>pOldHdr->iSize ){
14931       randomFill(&((char*)pNew)[pOldHdr->iSize], nByte - pOldHdr->iSize);
14932     }
14933     sqlite3MemFree(pPrior);
14934   }
14935   return pNew;
14936 }
14937
14938 /*
14939 ** Populate the low-level memory allocation function pointers in
14940 ** sqlite3GlobalConfig.m with pointers to the routines in this file.
14941 */
14942 SQLITE_PRIVATE void sqlite3MemSetDefault(void){
14943   static const sqlite3_mem_methods defaultMethods = {
14944      sqlite3MemMalloc,
14945      sqlite3MemFree,
14946      sqlite3MemRealloc,
14947      sqlite3MemSize,
14948      sqlite3MemRoundup,
14949      sqlite3MemInit,
14950      sqlite3MemShutdown,
14951      0
14952   };
14953   sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
14954 }
14955
14956 /*
14957 ** Set the "type" of an allocation.
14958 */
14959 SQLITE_PRIVATE void sqlite3MemdebugSetType(void *p, u8 eType){
14960   if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){
14961     struct MemBlockHdr *pHdr;
14962     pHdr = sqlite3MemsysGetHeader(p);
14963     assert( pHdr->iForeGuard==FOREGUARD );
14964     pHdr->eType = eType;
14965   }
14966 }
14967
14968 /*
14969 ** Return TRUE if the mask of type in eType matches the type of the
14970 ** allocation p.  Also return true if p==NULL.
14971 **
14972 ** This routine is designed for use within an assert() statement, to
14973 ** verify the type of an allocation.  For example:
14974 **
14975 **     assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
14976 */
14977 SQLITE_PRIVATE int sqlite3MemdebugHasType(void *p, u8 eType){
14978   int rc = 1;
14979   if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){
14980     struct MemBlockHdr *pHdr;
14981     pHdr = sqlite3MemsysGetHeader(p);
14982     assert( pHdr->iForeGuard==FOREGUARD );         /* Allocation is valid */
14983     if( (pHdr->eType&eType)==0 ){
14984       rc = 0;
14985     }
14986   }
14987   return rc;
14988 }
14989
14990 /*
14991 ** Return TRUE if the mask of type in eType matches no bits of the type of the
14992 ** allocation p.  Also return true if p==NULL.
14993 **
14994 ** This routine is designed for use within an assert() statement, to
14995 ** verify the type of an allocation.  For example:
14996 **
14997 **     assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
14998 */
14999 SQLITE_PRIVATE int sqlite3MemdebugNoType(void *p, u8 eType){
15000   int rc = 1;
15001   if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){
15002     struct MemBlockHdr *pHdr;
15003     pHdr = sqlite3MemsysGetHeader(p);
15004     assert( pHdr->iForeGuard==FOREGUARD );         /* Allocation is valid */
15005     if( (pHdr->eType&eType)!=0 ){
15006       rc = 0;
15007     }
15008   }
15009   return rc;
15010 }
15011
15012 /*
15013 ** Set the number of backtrace levels kept for each allocation.
15014 ** A value of zero turns off backtracing.  The number is always rounded
15015 ** up to a multiple of 2.
15016 */
15017 SQLITE_PRIVATE void sqlite3MemdebugBacktrace(int depth){
15018   if( depth<0 ){ depth = 0; }
15019   if( depth>20 ){ depth = 20; }
15020   depth = (depth+1)&0xfe;
15021   mem.nBacktrace = depth;
15022 }
15023
15024 SQLITE_PRIVATE void sqlite3MemdebugBacktraceCallback(void (*xBacktrace)(int, int, void **)){
15025   mem.xBacktrace = xBacktrace;
15026 }
15027
15028 /*
15029 ** Set the title string for subsequent allocations.
15030 */
15031 SQLITE_PRIVATE void sqlite3MemdebugSettitle(const char *zTitle){
15032   unsigned int n = sqlite3Strlen30(zTitle) + 1;
15033   sqlite3_mutex_enter(mem.mutex);
15034   if( n>=sizeof(mem.zTitle) ) n = sizeof(mem.zTitle)-1;
15035   memcpy(mem.zTitle, zTitle, n);
15036   mem.zTitle[n] = 0;
15037   mem.nTitle = ROUND8(n);
15038   sqlite3_mutex_leave(mem.mutex);
15039 }
15040
15041 SQLITE_PRIVATE void sqlite3MemdebugSync(){
15042   struct MemBlockHdr *pHdr;
15043   for(pHdr=mem.pFirst; pHdr; pHdr=pHdr->pNext){
15044     void **pBt = (void**)pHdr;
15045     pBt -= pHdr->nBacktraceSlots;
15046     mem.xBacktrace(pHdr->iSize, pHdr->nBacktrace-1, &pBt[1]);
15047   }
15048 }
15049
15050 /*
15051 ** Open the file indicated and write a log of all unfreed memory 
15052 ** allocations into that log.
15053 */
15054 SQLITE_PRIVATE void sqlite3MemdebugDump(const char *zFilename){
15055   FILE *out;
15056   struct MemBlockHdr *pHdr;
15057   void **pBt;
15058   int i;
15059   out = fopen(zFilename, "w");
15060   if( out==0 ){
15061     fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
15062                     zFilename);
15063     return;
15064   }
15065   for(pHdr=mem.pFirst; pHdr; pHdr=pHdr->pNext){
15066     char *z = (char*)pHdr;
15067     z -= pHdr->nBacktraceSlots*sizeof(void*) + pHdr->nTitle;
15068     fprintf(out, "**** %lld bytes at %p from %s ****\n", 
15069             pHdr->iSize, &pHdr[1], pHdr->nTitle ? z : "???");
15070     if( pHdr->nBacktrace ){
15071       fflush(out);
15072       pBt = (void**)pHdr;
15073       pBt -= pHdr->nBacktraceSlots;
15074       backtrace_symbols_fd(pBt, pHdr->nBacktrace, fileno(out));
15075       fprintf(out, "\n");
15076     }
15077   }
15078   fprintf(out, "COUNTS:\n");
15079   for(i=0; i<NCSIZE-1; i++){
15080     if( mem.nAlloc[i] ){
15081       fprintf(out, "   %5d: %10d %10d %10d\n", 
15082             i*8, mem.nAlloc[i], mem.nCurrent[i], mem.mxCurrent[i]);
15083     }
15084   }
15085   if( mem.nAlloc[NCSIZE-1] ){
15086     fprintf(out, "   %5d: %10d %10d %10d\n",
15087              NCSIZE*8-8, mem.nAlloc[NCSIZE-1],
15088              mem.nCurrent[NCSIZE-1], mem.mxCurrent[NCSIZE-1]);
15089   }
15090   fclose(out);
15091 }
15092
15093 /*
15094 ** Return the number of times sqlite3MemMalloc() has been called.
15095 */
15096 SQLITE_PRIVATE int sqlite3MemdebugMallocCount(){
15097   int i;
15098   int nTotal = 0;
15099   for(i=0; i<NCSIZE; i++){
15100     nTotal += mem.nAlloc[i];
15101   }
15102   return nTotal;
15103 }
15104
15105
15106 #endif /* SQLITE_MEMDEBUG */
15107
15108 /************** End of mem2.c ************************************************/
15109 /************** Begin file mem3.c ********************************************/
15110 /*
15111 ** 2007 October 14
15112 **
15113 ** The author disclaims copyright to this source code.  In place of
15114 ** a legal notice, here is a blessing:
15115 **
15116 **    May you do good and not evil.
15117 **    May you find forgiveness for yourself and forgive others.
15118 **    May you share freely, never taking more than you give.
15119 **
15120 *************************************************************************
15121 ** This file contains the C functions that implement a memory
15122 ** allocation subsystem for use by SQLite. 
15123 **
15124 ** This version of the memory allocation subsystem omits all
15125 ** use of malloc(). The SQLite user supplies a block of memory
15126 ** before calling sqlite3_initialize() from which allocations
15127 ** are made and returned by the xMalloc() and xRealloc() 
15128 ** implementations. Once sqlite3_initialize() has been called,
15129 ** the amount of memory available to SQLite is fixed and cannot
15130 ** be changed.
15131 **
15132 ** This version of the memory allocation subsystem is included
15133 ** in the build only if SQLITE_ENABLE_MEMSYS3 is defined.
15134 */
15135
15136 /*
15137 ** This version of the memory allocator is only built into the library
15138 ** SQLITE_ENABLE_MEMSYS3 is defined. Defining this symbol does not
15139 ** mean that the library will use a memory-pool by default, just that
15140 ** it is available. The mempool allocator is activated by calling
15141 ** sqlite3_config().
15142 */
15143 #ifdef SQLITE_ENABLE_MEMSYS3
15144
15145 /*
15146 ** Maximum size (in Mem3Blocks) of a "small" chunk.
15147 */
15148 #define MX_SMALL 10
15149
15150
15151 /*
15152 ** Number of freelist hash slots
15153 */
15154 #define N_HASH  61
15155
15156 /*
15157 ** A memory allocation (also called a "chunk") consists of two or 
15158 ** more blocks where each block is 8 bytes.  The first 8 bytes are 
15159 ** a header that is not returned to the user.
15160 **
15161 ** A chunk is two or more blocks that is either checked out or
15162 ** free.  The first block has format u.hdr.  u.hdr.size4x is 4 times the
15163 ** size of the allocation in blocks if the allocation is free.
15164 ** The u.hdr.size4x&1 bit is true if the chunk is checked out and
15165 ** false if the chunk is on the freelist.  The u.hdr.size4x&2 bit
15166 ** is true if the previous chunk is checked out and false if the
15167 ** previous chunk is free.  The u.hdr.prevSize field is the size of
15168 ** the previous chunk in blocks if the previous chunk is on the
15169 ** freelist. If the previous chunk is checked out, then
15170 ** u.hdr.prevSize can be part of the data for that chunk and should
15171 ** not be read or written.
15172 **
15173 ** We often identify a chunk by its index in mem3.aPool[].  When
15174 ** this is done, the chunk index refers to the second block of
15175 ** the chunk.  In this way, the first chunk has an index of 1.
15176 ** A chunk index of 0 means "no such chunk" and is the equivalent
15177 ** of a NULL pointer.
15178 **
15179 ** The second block of free chunks is of the form u.list.  The
15180 ** two fields form a double-linked list of chunks of related sizes.
15181 ** Pointers to the head of the list are stored in mem3.aiSmall[] 
15182 ** for smaller chunks and mem3.aiHash[] for larger chunks.
15183 **
15184 ** The second block of a chunk is user data if the chunk is checked 
15185 ** out.  If a chunk is checked out, the user data may extend into
15186 ** the u.hdr.prevSize value of the following chunk.
15187 */
15188 typedef struct Mem3Block Mem3Block;
15189 struct Mem3Block {
15190   union {
15191     struct {
15192       u32 prevSize;   /* Size of previous chunk in Mem3Block elements */
15193       u32 size4x;     /* 4x the size of current chunk in Mem3Block elements */
15194     } hdr;
15195     struct {
15196       u32 next;       /* Index in mem3.aPool[] of next free chunk */
15197       u32 prev;       /* Index in mem3.aPool[] of previous free chunk */
15198     } list;
15199   } u;
15200 };
15201
15202 /*
15203 ** All of the static variables used by this module are collected
15204 ** into a single structure named "mem3".  This is to keep the
15205 ** static variables organized and to reduce namespace pollution
15206 ** when this module is combined with other in the amalgamation.
15207 */
15208 static SQLITE_WSD struct Mem3Global {
15209   /*
15210   ** Memory available for allocation. nPool is the size of the array
15211   ** (in Mem3Blocks) pointed to by aPool less 2.
15212   */
15213   u32 nPool;
15214   Mem3Block *aPool;
15215
15216   /*
15217   ** True if we are evaluating an out-of-memory callback.
15218   */
15219   int alarmBusy;
15220   
15221   /*
15222   ** Mutex to control access to the memory allocation subsystem.
15223   */
15224   sqlite3_mutex *mutex;
15225   
15226   /*
15227   ** The minimum amount of free space that we have seen.
15228   */
15229   u32 mnMaster;
15230
15231   /*
15232   ** iMaster is the index of the master chunk.  Most new allocations
15233   ** occur off of this chunk.  szMaster is the size (in Mem3Blocks)
15234   ** of the current master.  iMaster is 0 if there is not master chunk.
15235   ** The master chunk is not in either the aiHash[] or aiSmall[].
15236   */
15237   u32 iMaster;
15238   u32 szMaster;
15239
15240   /*
15241   ** Array of lists of free blocks according to the block size 
15242   ** for smaller chunks, or a hash on the block size for larger
15243   ** chunks.
15244   */
15245   u32 aiSmall[MX_SMALL-1];   /* For sizes 2 through MX_SMALL, inclusive */
15246   u32 aiHash[N_HASH];        /* For sizes MX_SMALL+1 and larger */
15247 } mem3 = { 97535575 };
15248
15249 #define mem3 GLOBAL(struct Mem3Global, mem3)
15250
15251 /*
15252 ** Unlink the chunk at mem3.aPool[i] from list it is currently
15253 ** on.  *pRoot is the list that i is a member of.
15254 */
15255 static void memsys3UnlinkFromList(u32 i, u32 *pRoot){
15256   u32 next = mem3.aPool[i].u.list.next;
15257   u32 prev = mem3.aPool[i].u.list.prev;
15258   assert( sqlite3_mutex_held(mem3.mutex) );
15259   if( prev==0 ){
15260     *pRoot = next;
15261   }else{
15262     mem3.aPool[prev].u.list.next = next;
15263   }
15264   if( next ){
15265     mem3.aPool[next].u.list.prev = prev;
15266   }
15267   mem3.aPool[i].u.list.next = 0;
15268   mem3.aPool[i].u.list.prev = 0;
15269 }
15270
15271 /*
15272 ** Unlink the chunk at index i from 
15273 ** whatever list is currently a member of.
15274 */
15275 static void memsys3Unlink(u32 i){
15276   u32 size, hash;
15277   assert( sqlite3_mutex_held(mem3.mutex) );
15278   assert( (mem3.aPool[i-1].u.hdr.size4x & 1)==0 );
15279   assert( i>=1 );
15280   size = mem3.aPool[i-1].u.hdr.size4x/4;
15281   assert( size==mem3.aPool[i+size-1].u.hdr.prevSize );
15282   assert( size>=2 );
15283   if( size <= MX_SMALL ){
15284     memsys3UnlinkFromList(i, &mem3.aiSmall[size-2]);
15285   }else{
15286     hash = size % N_HASH;
15287     memsys3UnlinkFromList(i, &mem3.aiHash[hash]);
15288   }
15289 }
15290
15291 /*
15292 ** Link the chunk at mem3.aPool[i] so that is on the list rooted
15293 ** at *pRoot.
15294 */
15295 static void memsys3LinkIntoList(u32 i, u32 *pRoot){
15296   assert( sqlite3_mutex_held(mem3.mutex) );
15297   mem3.aPool[i].u.list.next = *pRoot;
15298   mem3.aPool[i].u.list.prev = 0;
15299   if( *pRoot ){
15300     mem3.aPool[*pRoot].u.list.prev = i;
15301   }
15302   *pRoot = i;
15303 }
15304
15305 /*
15306 ** Link the chunk at index i into either the appropriate
15307 ** small chunk list, or into the large chunk hash table.
15308 */
15309 static void memsys3Link(u32 i){
15310   u32 size, hash;
15311   assert( sqlite3_mutex_held(mem3.mutex) );
15312   assert( i>=1 );
15313   assert( (mem3.aPool[i-1].u.hdr.size4x & 1)==0 );
15314   size = mem3.aPool[i-1].u.hdr.size4x/4;
15315   assert( size==mem3.aPool[i+size-1].u.hdr.prevSize );
15316   assert( size>=2 );
15317   if( size <= MX_SMALL ){
15318     memsys3LinkIntoList(i, &mem3.aiSmall[size-2]);
15319   }else{
15320     hash = size % N_HASH;
15321     memsys3LinkIntoList(i, &mem3.aiHash[hash]);
15322   }
15323 }
15324
15325 /*
15326 ** If the STATIC_MEM mutex is not already held, obtain it now. The mutex
15327 ** will already be held (obtained by code in malloc.c) if
15328 ** sqlite3GlobalConfig.bMemStat is true.
15329 */
15330 static void memsys3Enter(void){
15331   if( sqlite3GlobalConfig.bMemstat==0 && mem3.mutex==0 ){
15332     mem3.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
15333   }
15334   sqlite3_mutex_enter(mem3.mutex);
15335 }
15336 static void memsys3Leave(void){
15337   sqlite3_mutex_leave(mem3.mutex);
15338 }
15339
15340 /*
15341 ** Called when we are unable to satisfy an allocation of nBytes.
15342 */
15343 static void memsys3OutOfMemory(int nByte){
15344   if( !mem3.alarmBusy ){
15345     mem3.alarmBusy = 1;
15346     assert( sqlite3_mutex_held(mem3.mutex) );
15347     sqlite3_mutex_leave(mem3.mutex);
15348     sqlite3_release_memory(nByte);
15349     sqlite3_mutex_enter(mem3.mutex);
15350     mem3.alarmBusy = 0;
15351   }
15352 }
15353
15354
15355 /*
15356 ** Chunk i is a free chunk that has been unlinked.  Adjust its 
15357 ** size parameters for check-out and return a pointer to the 
15358 ** user portion of the chunk.
15359 */
15360 static void *memsys3Checkout(u32 i, u32 nBlock){
15361   u32 x;
15362   assert( sqlite3_mutex_held(mem3.mutex) );
15363   assert( i>=1 );
15364   assert( mem3.aPool[i-1].u.hdr.size4x/4==nBlock );
15365   assert( mem3.aPool[i+nBlock-1].u.hdr.prevSize==nBlock );
15366   x = mem3.aPool[i-1].u.hdr.size4x;
15367   mem3.aPool[i-1].u.hdr.size4x = nBlock*4 | 1 | (x&2);
15368   mem3.aPool[i+nBlock-1].u.hdr.prevSize = nBlock;
15369   mem3.aPool[i+nBlock-1].u.hdr.size4x |= 2;
15370   return &mem3.aPool[i];
15371 }
15372
15373 /*
15374 ** Carve a piece off of the end of the mem3.iMaster free chunk.
15375 ** Return a pointer to the new allocation.  Or, if the master chunk
15376 ** is not large enough, return 0.
15377 */
15378 static void *memsys3FromMaster(u32 nBlock){
15379   assert( sqlite3_mutex_held(mem3.mutex) );
15380   assert( mem3.szMaster>=nBlock );
15381   if( nBlock>=mem3.szMaster-1 ){
15382     /* Use the entire master */
15383     void *p = memsys3Checkout(mem3.iMaster, mem3.szMaster);
15384     mem3.iMaster = 0;
15385     mem3.szMaster = 0;
15386     mem3.mnMaster = 0;
15387     return p;
15388   }else{
15389     /* Split the master block.  Return the tail. */
15390     u32 newi, x;
15391     newi = mem3.iMaster + mem3.szMaster - nBlock;
15392     assert( newi > mem3.iMaster+1 );
15393     mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.prevSize = nBlock;
15394     mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.size4x |= 2;
15395     mem3.aPool[newi-1].u.hdr.size4x = nBlock*4 + 1;
15396     mem3.szMaster -= nBlock;
15397     mem3.aPool[newi-1].u.hdr.prevSize = mem3.szMaster;
15398     x = mem3.aPool[mem3.iMaster-1].u.hdr.size4x & 2;
15399     mem3.aPool[mem3.iMaster-1].u.hdr.size4x = mem3.szMaster*4 | x;
15400     if( mem3.szMaster < mem3.mnMaster ){
15401       mem3.mnMaster = mem3.szMaster;
15402     }
15403     return (void*)&mem3.aPool[newi];
15404   }
15405 }
15406
15407 /*
15408 ** *pRoot is the head of a list of free chunks of the same size
15409 ** or same size hash.  In other words, *pRoot is an entry in either
15410 ** mem3.aiSmall[] or mem3.aiHash[].  
15411 **
15412 ** This routine examines all entries on the given list and tries
15413 ** to coalesce each entries with adjacent free chunks.  
15414 **
15415 ** If it sees a chunk that is larger than mem3.iMaster, it replaces 
15416 ** the current mem3.iMaster with the new larger chunk.  In order for
15417 ** this mem3.iMaster replacement to work, the master chunk must be
15418 ** linked into the hash tables.  That is not the normal state of
15419 ** affairs, of course.  The calling routine must link the master
15420 ** chunk before invoking this routine, then must unlink the (possibly
15421 ** changed) master chunk once this routine has finished.
15422 */
15423 static void memsys3Merge(u32 *pRoot){
15424   u32 iNext, prev, size, i, x;
15425
15426   assert( sqlite3_mutex_held(mem3.mutex) );
15427   for(i=*pRoot; i>0; i=iNext){
15428     iNext = mem3.aPool[i].u.list.next;
15429     size = mem3.aPool[i-1].u.hdr.size4x;
15430     assert( (size&1)==0 );
15431     if( (size&2)==0 ){
15432       memsys3UnlinkFromList(i, pRoot);
15433       assert( i > mem3.aPool[i-1].u.hdr.prevSize );
15434       prev = i - mem3.aPool[i-1].u.hdr.prevSize;
15435       if( prev==iNext ){
15436         iNext = mem3.aPool[prev].u.list.next;
15437       }
15438       memsys3Unlink(prev);
15439       size = i + size/4 - prev;
15440       x = mem3.aPool[prev-1].u.hdr.size4x & 2;
15441       mem3.aPool[prev-1].u.hdr.size4x = size*4 | x;
15442       mem3.aPool[prev+size-1].u.hdr.prevSize = size;
15443       memsys3Link(prev);
15444       i = prev;
15445     }else{
15446       size /= 4;
15447     }
15448     if( size>mem3.szMaster ){
15449       mem3.iMaster = i;
15450       mem3.szMaster = size;
15451     }
15452   }
15453 }
15454
15455 /*
15456 ** Return a block of memory of at least nBytes in size.
15457 ** Return NULL if unable.
15458 **
15459 ** This function assumes that the necessary mutexes, if any, are
15460 ** already held by the caller. Hence "Unsafe".
15461 */
15462 static void *memsys3MallocUnsafe(int nByte){
15463   u32 i;
15464   u32 nBlock;
15465   u32 toFree;
15466
15467   assert( sqlite3_mutex_held(mem3.mutex) );
15468   assert( sizeof(Mem3Block)==8 );
15469   if( nByte<=12 ){
15470     nBlock = 2;
15471   }else{
15472     nBlock = (nByte + 11)/8;
15473   }
15474   assert( nBlock>=2 );
15475
15476   /* STEP 1:
15477   ** Look for an entry of the correct size in either the small
15478   ** chunk table or in the large chunk hash table.  This is
15479   ** successful most of the time (about 9 times out of 10).
15480   */
15481   if( nBlock <= MX_SMALL ){
15482     i = mem3.aiSmall[nBlock-2];
15483     if( i>0 ){
15484       memsys3UnlinkFromList(i, &mem3.aiSmall[nBlock-2]);
15485       return memsys3Checkout(i, nBlock);
15486     }
15487   }else{
15488     int hash = nBlock % N_HASH;
15489     for(i=mem3.aiHash[hash]; i>0; i=mem3.aPool[i].u.list.next){
15490       if( mem3.aPool[i-1].u.hdr.size4x/4==nBlock ){
15491         memsys3UnlinkFromList(i, &mem3.aiHash[hash]);
15492         return memsys3Checkout(i, nBlock);
15493       }
15494     }
15495   }
15496
15497   /* STEP 2:
15498   ** Try to satisfy the allocation by carving a piece off of the end
15499   ** of the master chunk.  This step usually works if step 1 fails.
15500   */
15501   if( mem3.szMaster>=nBlock ){
15502     return memsys3FromMaster(nBlock);
15503   }
15504
15505
15506   /* STEP 3:  
15507   ** Loop through the entire memory pool.  Coalesce adjacent free
15508   ** chunks.  Recompute the master chunk as the largest free chunk.
15509   ** Then try again to satisfy the allocation by carving a piece off
15510   ** of the end of the master chunk.  This step happens very
15511   ** rarely (we hope!)
15512   */
15513   for(toFree=nBlock*16; toFree<(mem3.nPool*16); toFree *= 2){
15514     memsys3OutOfMemory(toFree);
15515     if( mem3.iMaster ){
15516       memsys3Link(mem3.iMaster);
15517       mem3.iMaster = 0;
15518       mem3.szMaster = 0;
15519     }
15520     for(i=0; i<N_HASH; i++){
15521       memsys3Merge(&mem3.aiHash[i]);
15522     }
15523     for(i=0; i<MX_SMALL-1; i++){
15524       memsys3Merge(&mem3.aiSmall[i]);
15525     }
15526     if( mem3.szMaster ){
15527       memsys3Unlink(mem3.iMaster);
15528       if( mem3.szMaster>=nBlock ){
15529         return memsys3FromMaster(nBlock);
15530       }
15531     }
15532   }
15533
15534   /* If none of the above worked, then we fail. */
15535   return 0;
15536 }
15537
15538 /*
15539 ** Free an outstanding memory allocation.
15540 **
15541 ** This function assumes that the necessary mutexes, if any, are
15542 ** already held by the caller. Hence "Unsafe".
15543 */
15544 void memsys3FreeUnsafe(void *pOld){
15545   Mem3Block *p = (Mem3Block*)pOld;
15546   int i;
15547   u32 size, x;
15548   assert( sqlite3_mutex_held(mem3.mutex) );
15549   assert( p>mem3.aPool && p<&mem3.aPool[mem3.nPool] );
15550   i = p - mem3.aPool;
15551   assert( (mem3.aPool[i-1].u.hdr.size4x&1)==1 );
15552   size = mem3.aPool[i-1].u.hdr.size4x/4;
15553   assert( i+size<=mem3.nPool+1 );
15554   mem3.aPool[i-1].u.hdr.size4x &= ~1;
15555   mem3.aPool[i+size-1].u.hdr.prevSize = size;
15556   mem3.aPool[i+size-1].u.hdr.size4x &= ~2;
15557   memsys3Link(i);
15558
15559   /* Try to expand the master using the newly freed chunk */
15560   if( mem3.iMaster ){
15561     while( (mem3.aPool[mem3.iMaster-1].u.hdr.size4x&2)==0 ){
15562       size = mem3.aPool[mem3.iMaster-1].u.hdr.prevSize;
15563       mem3.iMaster -= size;
15564       mem3.szMaster += size;
15565       memsys3Unlink(mem3.iMaster);
15566       x = mem3.aPool[mem3.iMaster-1].u.hdr.size4x & 2;
15567       mem3.aPool[mem3.iMaster-1].u.hdr.size4x = mem3.szMaster*4 | x;
15568       mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.prevSize = mem3.szMaster;
15569     }
15570     x = mem3.aPool[mem3.iMaster-1].u.hdr.size4x & 2;
15571     while( (mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.size4x&1)==0 ){
15572       memsys3Unlink(mem3.iMaster+mem3.szMaster);
15573       mem3.szMaster += mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.size4x/4;
15574       mem3.aPool[mem3.iMaster-1].u.hdr.size4x = mem3.szMaster*4 | x;
15575       mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.prevSize = mem3.szMaster;
15576     }
15577   }
15578 }
15579
15580 /*
15581 ** Return the size of an outstanding allocation, in bytes.  The
15582 ** size returned omits the 8-byte header overhead.  This only
15583 ** works for chunks that are currently checked out.
15584 */
15585 static int memsys3Size(void *p){
15586   Mem3Block *pBlock;
15587   if( p==0 ) return 0;
15588   pBlock = (Mem3Block*)p;
15589   assert( (pBlock[-1].u.hdr.size4x&1)!=0 );
15590   return (pBlock[-1].u.hdr.size4x&~3)*2 - 4;
15591 }
15592
15593 /*
15594 ** Round up a request size to the next valid allocation size.
15595 */
15596 static int memsys3Roundup(int n){
15597   if( n<=12 ){
15598     return 12;
15599   }else{
15600     return ((n+11)&~7) - 4;
15601   }
15602 }
15603
15604 /*
15605 ** Allocate nBytes of memory.
15606 */
15607 static void *memsys3Malloc(int nBytes){
15608   sqlite3_int64 *p;
15609   assert( nBytes>0 );          /* malloc.c filters out 0 byte requests */
15610   memsys3Enter();
15611   p = memsys3MallocUnsafe(nBytes);
15612   memsys3Leave();
15613   return (void*)p; 
15614 }
15615
15616 /*
15617 ** Free memory.
15618 */
15619 void memsys3Free(void *pPrior){
15620   assert( pPrior );
15621   memsys3Enter();
15622   memsys3FreeUnsafe(pPrior);
15623   memsys3Leave();
15624 }
15625
15626 /*
15627 ** Change the size of an existing memory allocation
15628 */
15629 void *memsys3Realloc(void *pPrior, int nBytes){
15630   int nOld;
15631   void *p;
15632   if( pPrior==0 ){
15633     return sqlite3_malloc(nBytes);
15634   }
15635   if( nBytes<=0 ){
15636     sqlite3_free(pPrior);
15637     return 0;
15638   }
15639   nOld = memsys3Size(pPrior);
15640   if( nBytes<=nOld && nBytes>=nOld-128 ){
15641     return pPrior;
15642   }
15643   memsys3Enter();
15644   p = memsys3MallocUnsafe(nBytes);
15645   if( p ){
15646     if( nOld<nBytes ){
15647       memcpy(p, pPrior, nOld);
15648     }else{
15649       memcpy(p, pPrior, nBytes);
15650     }
15651     memsys3FreeUnsafe(pPrior);
15652   }
15653   memsys3Leave();
15654   return p;
15655 }
15656
15657 /*
15658 ** Initialize this module.
15659 */
15660 static int memsys3Init(void *NotUsed){
15661   UNUSED_PARAMETER(NotUsed);
15662   if( !sqlite3GlobalConfig.pHeap ){
15663     return SQLITE_ERROR;
15664   }
15665
15666   /* Store a pointer to the memory block in global structure mem3. */
15667   assert( sizeof(Mem3Block)==8 );
15668   mem3.aPool = (Mem3Block *)sqlite3GlobalConfig.pHeap;
15669   mem3.nPool = (sqlite3GlobalConfig.nHeap / sizeof(Mem3Block)) - 2;
15670
15671   /* Initialize the master block. */
15672   mem3.szMaster = mem3.nPool;
15673   mem3.mnMaster = mem3.szMaster;
15674   mem3.iMaster = 1;
15675   mem3.aPool[0].u.hdr.size4x = (mem3.szMaster<<2) + 2;
15676   mem3.aPool[mem3.nPool].u.hdr.prevSize = mem3.nPool;
15677   mem3.aPool[mem3.nPool].u.hdr.size4x = 1;
15678
15679   return SQLITE_OK;
15680 }
15681
15682 /*
15683 ** Deinitialize this module.
15684 */
15685 static void memsys3Shutdown(void *NotUsed){
15686   UNUSED_PARAMETER(NotUsed);
15687   mem3.mutex = 0;
15688   return;
15689 }
15690
15691
15692
15693 /*
15694 ** Open the file indicated and write a log of all unfreed memory 
15695 ** allocations into that log.
15696 */
15697 SQLITE_PRIVATE void sqlite3Memsys3Dump(const char *zFilename){
15698 #ifdef SQLITE_DEBUG
15699   FILE *out;
15700   u32 i, j;
15701   u32 size;
15702   if( zFilename==0 || zFilename[0]==0 ){
15703     out = stdout;
15704   }else{
15705     out = fopen(zFilename, "w");
15706     if( out==0 ){
15707       fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
15708                       zFilename);
15709       return;
15710     }
15711   }
15712   memsys3Enter();
15713   fprintf(out, "CHUNKS:\n");
15714   for(i=1; i<=mem3.nPool; i+=size/4){
15715     size = mem3.aPool[i-1].u.hdr.size4x;
15716     if( size/4<=1 ){
15717       fprintf(out, "%p size error\n", &mem3.aPool[i]);
15718       assert( 0 );
15719       break;
15720     }
15721     if( (size&1)==0 && mem3.aPool[i+size/4-1].u.hdr.prevSize!=size/4 ){
15722       fprintf(out, "%p tail size does not match\n", &mem3.aPool[i]);
15723       assert( 0 );
15724       break;
15725     }
15726     if( ((mem3.aPool[i+size/4-1].u.hdr.size4x&2)>>1)!=(size&1) ){
15727       fprintf(out, "%p tail checkout bit is incorrect\n", &mem3.aPool[i]);
15728       assert( 0 );
15729       break;
15730     }
15731     if( size&1 ){
15732       fprintf(out, "%p %6d bytes checked out\n", &mem3.aPool[i], (size/4)*8-8);
15733     }else{
15734       fprintf(out, "%p %6d bytes free%s\n", &mem3.aPool[i], (size/4)*8-8,
15735                   i==mem3.iMaster ? " **master**" : "");
15736     }
15737   }
15738   for(i=0; i<MX_SMALL-1; i++){
15739     if( mem3.aiSmall[i]==0 ) continue;
15740     fprintf(out, "small(%2d):", i);
15741     for(j = mem3.aiSmall[i]; j>0; j=mem3.aPool[j].u.list.next){
15742       fprintf(out, " %p(%d)", &mem3.aPool[j],
15743               (mem3.aPool[j-1].u.hdr.size4x/4)*8-8);
15744     }
15745     fprintf(out, "\n"); 
15746   }
15747   for(i=0; i<N_HASH; i++){
15748     if( mem3.aiHash[i]==0 ) continue;
15749     fprintf(out, "hash(%2d):", i);
15750     for(j = mem3.aiHash[i]; j>0; j=mem3.aPool[j].u.list.next){
15751       fprintf(out, " %p(%d)", &mem3.aPool[j],
15752               (mem3.aPool[j-1].u.hdr.size4x/4)*8-8);
15753     }
15754     fprintf(out, "\n"); 
15755   }
15756   fprintf(out, "master=%d\n", mem3.iMaster);
15757   fprintf(out, "nowUsed=%d\n", mem3.nPool*8 - mem3.szMaster*8);
15758   fprintf(out, "mxUsed=%d\n", mem3.nPool*8 - mem3.mnMaster*8);
15759   sqlite3_mutex_leave(mem3.mutex);
15760   if( out==stdout ){
15761     fflush(stdout);
15762   }else{
15763     fclose(out);
15764   }
15765 #else
15766   UNUSED_PARAMETER(zFilename);
15767 #endif
15768 }
15769
15770 /*
15771 ** This routine is the only routine in this file with external 
15772 ** linkage.
15773 **
15774 ** Populate the low-level memory allocation function pointers in
15775 ** sqlite3GlobalConfig.m with pointers to the routines in this file. The
15776 ** arguments specify the block of memory to manage.
15777 **
15778 ** This routine is only called by sqlite3_config(), and therefore
15779 ** is not required to be threadsafe (it is not).
15780 */
15781 SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void){
15782   static const sqlite3_mem_methods mempoolMethods = {
15783      memsys3Malloc,
15784      memsys3Free,
15785      memsys3Realloc,
15786      memsys3Size,
15787      memsys3Roundup,
15788      memsys3Init,
15789      memsys3Shutdown,
15790      0
15791   };
15792   return &mempoolMethods;
15793 }
15794
15795 #endif /* SQLITE_ENABLE_MEMSYS3 */
15796
15797 /************** End of mem3.c ************************************************/
15798 /************** Begin file mem5.c ********************************************/
15799 /*
15800 ** 2007 October 14
15801 **
15802 ** The author disclaims copyright to this source code.  In place of
15803 ** a legal notice, here is a blessing:
15804 **
15805 **    May you do good and not evil.
15806 **    May you find forgiveness for yourself and forgive others.
15807 **    May you share freely, never taking more than you give.
15808 **
15809 *************************************************************************
15810 ** This file contains the C functions that implement a memory
15811 ** allocation subsystem for use by SQLite. 
15812 **
15813 ** This version of the memory allocation subsystem omits all
15814 ** use of malloc(). The application gives SQLite a block of memory
15815 ** before calling sqlite3_initialize() from which allocations
15816 ** are made and returned by the xMalloc() and xRealloc() 
15817 ** implementations. Once sqlite3_initialize() has been called,
15818 ** the amount of memory available to SQLite is fixed and cannot
15819 ** be changed.
15820 **
15821 ** This version of the memory allocation subsystem is included
15822 ** in the build only if SQLITE_ENABLE_MEMSYS5 is defined.
15823 **
15824 ** This memory allocator uses the following algorithm:
15825 **
15826 **   1.  All memory allocations sizes are rounded up to a power of 2.
15827 **
15828 **   2.  If two adjacent free blocks are the halves of a larger block,
15829 **       then the two blocks are coalesed into the single larger block.
15830 **
15831 **   3.  New memory is allocated from the first available free block.
15832 **
15833 ** This algorithm is described in: J. M. Robson. "Bounds for Some Functions
15834 ** Concerning Dynamic Storage Allocation". Journal of the Association for
15835 ** Computing Machinery, Volume 21, Number 8, July 1974, pages 491-499.
15836 ** 
15837 ** Let n be the size of the largest allocation divided by the minimum
15838 ** allocation size (after rounding all sizes up to a power of 2.)  Let M
15839 ** be the maximum amount of memory ever outstanding at one time.  Let
15840 ** N be the total amount of memory available for allocation.  Robson
15841 ** proved that this memory allocator will never breakdown due to 
15842 ** fragmentation as long as the following constraint holds:
15843 **
15844 **      N >=  M*(1 + log2(n)/2) - n + 1
15845 **
15846 ** The sqlite3_status() logic tracks the maximum values of n and M so
15847 ** that an application can, at any time, verify this constraint.
15848 */
15849
15850 /*
15851 ** This version of the memory allocator is used only when 
15852 ** SQLITE_ENABLE_MEMSYS5 is defined.
15853 */
15854 #ifdef SQLITE_ENABLE_MEMSYS5
15855
15856 /*
15857 ** A minimum allocation is an instance of the following structure.
15858 ** Larger allocations are an array of these structures where the
15859 ** size of the array is a power of 2.
15860 **
15861 ** The size of this object must be a power of two.  That fact is
15862 ** verified in memsys5Init().
15863 */
15864 typedef struct Mem5Link Mem5Link;
15865 struct Mem5Link {
15866   int next;       /* Index of next free chunk */
15867   int prev;       /* Index of previous free chunk */
15868 };
15869
15870 /*
15871 ** Maximum size of any allocation is ((1<<LOGMAX)*mem5.szAtom). Since
15872 ** mem5.szAtom is always at least 8 and 32-bit integers are used,
15873 ** it is not actually possible to reach this limit.
15874 */
15875 #define LOGMAX 30
15876
15877 /*
15878 ** Masks used for mem5.aCtrl[] elements.
15879 */
15880 #define CTRL_LOGSIZE  0x1f    /* Log2 Size of this block */
15881 #define CTRL_FREE     0x20    /* True if not checked out */
15882
15883 /*
15884 ** All of the static variables used by this module are collected
15885 ** into a single structure named "mem5".  This is to keep the
15886 ** static variables organized and to reduce namespace pollution
15887 ** when this module is combined with other in the amalgamation.
15888 */
15889 static SQLITE_WSD struct Mem5Global {
15890   /*
15891   ** Memory available for allocation
15892   */
15893   int szAtom;      /* Smallest possible allocation in bytes */
15894   int nBlock;      /* Number of szAtom sized blocks in zPool */
15895   u8 *zPool;       /* Memory available to be allocated */
15896   
15897   /*
15898   ** Mutex to control access to the memory allocation subsystem.
15899   */
15900   sqlite3_mutex *mutex;
15901
15902   /*
15903   ** Performance statistics
15904   */
15905   u64 nAlloc;         /* Total number of calls to malloc */
15906   u64 totalAlloc;     /* Total of all malloc calls - includes internal frag */
15907   u64 totalExcess;    /* Total internal fragmentation */
15908   u32 currentOut;     /* Current checkout, including internal fragmentation */
15909   u32 currentCount;   /* Current number of distinct checkouts */
15910   u32 maxOut;         /* Maximum instantaneous currentOut */
15911   u32 maxCount;       /* Maximum instantaneous currentCount */
15912   u32 maxRequest;     /* Largest allocation (exclusive of internal frag) */
15913   
15914   /*
15915   ** Lists of free blocks.  aiFreelist[0] is a list of free blocks of
15916   ** size mem5.szAtom.  aiFreelist[1] holds blocks of size szAtom*2.
15917   ** and so forth.
15918   */
15919   int aiFreelist[LOGMAX+1];
15920
15921   /*
15922   ** Space for tracking which blocks are checked out and the size
15923   ** of each block.  One byte per block.
15924   */
15925   u8 *aCtrl;
15926
15927 } mem5;
15928
15929 /*
15930 ** Access the static variable through a macro for SQLITE_OMIT_WSD
15931 */
15932 #define mem5 GLOBAL(struct Mem5Global, mem5)
15933
15934 /*
15935 ** Assuming mem5.zPool is divided up into an array of Mem5Link
15936 ** structures, return a pointer to the idx-th such lik.
15937 */
15938 #define MEM5LINK(idx) ((Mem5Link *)(&mem5.zPool[(idx)*mem5.szAtom]))
15939
15940 /*
15941 ** Unlink the chunk at mem5.aPool[i] from list it is currently
15942 ** on.  It should be found on mem5.aiFreelist[iLogsize].
15943 */
15944 static void memsys5Unlink(int i, int iLogsize){
15945   int next, prev;
15946   assert( i>=0 && i<mem5.nBlock );
15947   assert( iLogsize>=0 && iLogsize<=LOGMAX );
15948   assert( (mem5.aCtrl[i] & CTRL_LOGSIZE)==iLogsize );
15949
15950   next = MEM5LINK(i)->next;
15951   prev = MEM5LINK(i)->prev;
15952   if( prev<0 ){
15953     mem5.aiFreelist[iLogsize] = next;
15954   }else{
15955     MEM5LINK(prev)->next = next;
15956   }
15957   if( next>=0 ){
15958     MEM5LINK(next)->prev = prev;
15959   }
15960 }
15961
15962 /*
15963 ** Link the chunk at mem5.aPool[i] so that is on the iLogsize
15964 ** free list.
15965 */
15966 static void memsys5Link(int i, int iLogsize){
15967   int x;
15968   assert( sqlite3_mutex_held(mem5.mutex) );
15969   assert( i>=0 && i<mem5.nBlock );
15970   assert( iLogsize>=0 && iLogsize<=LOGMAX );
15971   assert( (mem5.aCtrl[i] & CTRL_LOGSIZE)==iLogsize );
15972
15973   x = MEM5LINK(i)->next = mem5.aiFreelist[iLogsize];
15974   MEM5LINK(i)->prev = -1;
15975   if( x>=0 ){
15976     assert( x<mem5.nBlock );
15977     MEM5LINK(x)->prev = i;
15978   }
15979   mem5.aiFreelist[iLogsize] = i;
15980 }
15981
15982 /*
15983 ** If the STATIC_MEM mutex is not already held, obtain it now. The mutex
15984 ** will already be held (obtained by code in malloc.c) if
15985 ** sqlite3GlobalConfig.bMemStat is true.
15986 */
15987 static void memsys5Enter(void){
15988   sqlite3_mutex_enter(mem5.mutex);
15989 }
15990 static void memsys5Leave(void){
15991   sqlite3_mutex_leave(mem5.mutex);
15992 }
15993
15994 /*
15995 ** Return the size of an outstanding allocation, in bytes.  The
15996 ** size returned omits the 8-byte header overhead.  This only
15997 ** works for chunks that are currently checked out.
15998 */
15999 static int memsys5Size(void *p){
16000   int iSize = 0;
16001   if( p ){
16002     int i = ((u8 *)p-mem5.zPool)/mem5.szAtom;
16003     assert( i>=0 && i<mem5.nBlock );
16004     iSize = mem5.szAtom * (1 << (mem5.aCtrl[i]&CTRL_LOGSIZE));
16005   }
16006   return iSize;
16007 }
16008
16009 /*
16010 ** Find the first entry on the freelist iLogsize.  Unlink that
16011 ** entry and return its index. 
16012 */
16013 static int memsys5UnlinkFirst(int iLogsize){
16014   int i;
16015   int iFirst;
16016
16017   assert( iLogsize>=0 && iLogsize<=LOGMAX );
16018   i = iFirst = mem5.aiFreelist[iLogsize];
16019   assert( iFirst>=0 );
16020   while( i>0 ){
16021     if( i<iFirst ) iFirst = i;
16022     i = MEM5LINK(i)->next;
16023   }
16024   memsys5Unlink(iFirst, iLogsize);
16025   return iFirst;
16026 }
16027
16028 /*
16029 ** Return a block of memory of at least nBytes in size.
16030 ** Return NULL if unable.  Return NULL if nBytes==0.
16031 **
16032 ** The caller guarantees that nByte positive.
16033 **
16034 ** The caller has obtained a mutex prior to invoking this
16035 ** routine so there is never any chance that two or more
16036 ** threads can be in this routine at the same time.
16037 */
16038 static void *memsys5MallocUnsafe(int nByte){
16039   int i;           /* Index of a mem5.aPool[] slot */
16040   int iBin;        /* Index into mem5.aiFreelist[] */
16041   int iFullSz;     /* Size of allocation rounded up to power of 2 */
16042   int iLogsize;    /* Log2 of iFullSz/POW2_MIN */
16043
16044   /* nByte must be a positive */
16045   assert( nByte>0 );
16046
16047   /* Keep track of the maximum allocation request.  Even unfulfilled
16048   ** requests are counted */
16049   if( (u32)nByte>mem5.maxRequest ){
16050     mem5.maxRequest = nByte;
16051   }
16052
16053   /* Abort if the requested allocation size is larger than the largest
16054   ** power of two that we can represent using 32-bit signed integers.
16055   */
16056   if( nByte > 0x40000000 ){
16057     return 0;
16058   }
16059
16060   /* Round nByte up to the next valid power of two */
16061   for(iFullSz=mem5.szAtom, iLogsize=0; iFullSz<nByte; iFullSz *= 2, iLogsize++){}
16062
16063   /* Make sure mem5.aiFreelist[iLogsize] contains at least one free
16064   ** block.  If not, then split a block of the next larger power of
16065   ** two in order to create a new free block of size iLogsize.
16066   */
16067   for(iBin=iLogsize; mem5.aiFreelist[iBin]<0 && iBin<=LOGMAX; iBin++){}
16068   if( iBin>LOGMAX ){
16069     testcase( sqlite3GlobalConfig.xLog!=0 );
16070     sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes", nByte);
16071     return 0;
16072   }
16073   i = memsys5UnlinkFirst(iBin);
16074   while( iBin>iLogsize ){
16075     int newSize;
16076
16077     iBin--;
16078     newSize = 1 << iBin;
16079     mem5.aCtrl[i+newSize] = CTRL_FREE | iBin;
16080     memsys5Link(i+newSize, iBin);
16081   }
16082   mem5.aCtrl[i] = iLogsize;
16083
16084   /* Update allocator performance statistics. */
16085   mem5.nAlloc++;
16086   mem5.totalAlloc += iFullSz;
16087   mem5.totalExcess += iFullSz - nByte;
16088   mem5.currentCount++;
16089   mem5.currentOut += iFullSz;
16090   if( mem5.maxCount<mem5.currentCount ) mem5.maxCount = mem5.currentCount;
16091   if( mem5.maxOut<mem5.currentOut ) mem5.maxOut = mem5.currentOut;
16092
16093   /* Return a pointer to the allocated memory. */
16094   return (void*)&mem5.zPool[i*mem5.szAtom];
16095 }
16096
16097 /*
16098 ** Free an outstanding memory allocation.
16099 */
16100 static void memsys5FreeUnsafe(void *pOld){
16101   u32 size, iLogsize;
16102   int iBlock;
16103
16104   /* Set iBlock to the index of the block pointed to by pOld in 
16105   ** the array of mem5.szAtom byte blocks pointed to by mem5.zPool.
16106   */
16107   iBlock = ((u8 *)pOld-mem5.zPool)/mem5.szAtom;
16108
16109   /* Check that the pointer pOld points to a valid, non-free block. */
16110   assert( iBlock>=0 && iBlock<mem5.nBlock );
16111   assert( ((u8 *)pOld-mem5.zPool)%mem5.szAtom==0 );
16112   assert( (mem5.aCtrl[iBlock] & CTRL_FREE)==0 );
16113
16114   iLogsize = mem5.aCtrl[iBlock] & CTRL_LOGSIZE;
16115   size = 1<<iLogsize;
16116   assert( iBlock+size-1<(u32)mem5.nBlock );
16117
16118   mem5.aCtrl[iBlock] |= CTRL_FREE;
16119   mem5.aCtrl[iBlock+size-1] |= CTRL_FREE;
16120   assert( mem5.currentCount>0 );
16121   assert( mem5.currentOut>=(size*mem5.szAtom) );
16122   mem5.currentCount--;
16123   mem5.currentOut -= size*mem5.szAtom;
16124   assert( mem5.currentOut>0 || mem5.currentCount==0 );
16125   assert( mem5.currentCount>0 || mem5.currentOut==0 );
16126
16127   mem5.aCtrl[iBlock] = CTRL_FREE | iLogsize;
16128   while( ALWAYS(iLogsize<LOGMAX) ){
16129     int iBuddy;
16130     if( (iBlock>>iLogsize) & 1 ){
16131       iBuddy = iBlock - size;
16132     }else{
16133       iBuddy = iBlock + size;
16134     }
16135     assert( iBuddy>=0 );
16136     if( (iBuddy+(1<<iLogsize))>mem5.nBlock ) break;
16137     if( mem5.aCtrl[iBuddy]!=(CTRL_FREE | iLogsize) ) break;
16138     memsys5Unlink(iBuddy, iLogsize);
16139     iLogsize++;
16140     if( iBuddy<iBlock ){
16141       mem5.aCtrl[iBuddy] = CTRL_FREE | iLogsize;
16142       mem5.aCtrl[iBlock] = 0;
16143       iBlock = iBuddy;
16144     }else{
16145       mem5.aCtrl[iBlock] = CTRL_FREE | iLogsize;
16146       mem5.aCtrl[iBuddy] = 0;
16147     }
16148     size *= 2;
16149   }
16150   memsys5Link(iBlock, iLogsize);
16151 }
16152
16153 /*
16154 ** Allocate nBytes of memory
16155 */
16156 static void *memsys5Malloc(int nBytes){
16157   sqlite3_int64 *p = 0;
16158   if( nBytes>0 ){
16159     memsys5Enter();
16160     p = memsys5MallocUnsafe(nBytes);
16161     memsys5Leave();
16162   }
16163   return (void*)p; 
16164 }
16165
16166 /*
16167 ** Free memory.
16168 **
16169 ** The outer layer memory allocator prevents this routine from
16170 ** being called with pPrior==0.
16171 */
16172 static void memsys5Free(void *pPrior){
16173   assert( pPrior!=0 );
16174   memsys5Enter();
16175   memsys5FreeUnsafe(pPrior);
16176   memsys5Leave();  
16177 }
16178
16179 /*
16180 ** Change the size of an existing memory allocation.
16181 **
16182 ** The outer layer memory allocator prevents this routine from
16183 ** being called with pPrior==0.  
16184 **
16185 ** nBytes is always a value obtained from a prior call to
16186 ** memsys5Round().  Hence nBytes is always a non-negative power
16187 ** of two.  If nBytes==0 that means that an oversize allocation
16188 ** (an allocation larger than 0x40000000) was requested and this
16189 ** routine should return 0 without freeing pPrior.
16190 */
16191 static void *memsys5Realloc(void *pPrior, int nBytes){
16192   int nOld;
16193   void *p;
16194   assert( pPrior!=0 );
16195   assert( (nBytes&(nBytes-1))==0 );  /* EV: R-46199-30249 */
16196   assert( nBytes>=0 );
16197   if( nBytes==0 ){
16198     return 0;
16199   }
16200   nOld = memsys5Size(pPrior);
16201   if( nBytes<=nOld ){
16202     return pPrior;
16203   }
16204   memsys5Enter();
16205   p = memsys5MallocUnsafe(nBytes);
16206   if( p ){
16207     memcpy(p, pPrior, nOld);
16208     memsys5FreeUnsafe(pPrior);
16209   }
16210   memsys5Leave();
16211   return p;
16212 }
16213
16214 /*
16215 ** Round up a request size to the next valid allocation size.  If
16216 ** the allocation is too large to be handled by this allocation system,
16217 ** return 0.
16218 **
16219 ** All allocations must be a power of two and must be expressed by a
16220 ** 32-bit signed integer.  Hence the largest allocation is 0x40000000
16221 ** or 1073741824 bytes.
16222 */
16223 static int memsys5Roundup(int n){
16224   int iFullSz;
16225   if( n > 0x40000000 ) return 0;
16226   for(iFullSz=mem5.szAtom; iFullSz<n; iFullSz *= 2);
16227   return iFullSz;
16228 }
16229
16230 /*
16231 ** Return the ceiling of the logarithm base 2 of iValue.
16232 **
16233 ** Examples:   memsys5Log(1) -> 0
16234 **             memsys5Log(2) -> 1
16235 **             memsys5Log(4) -> 2
16236 **             memsys5Log(5) -> 3
16237 **             memsys5Log(8) -> 3
16238 **             memsys5Log(9) -> 4
16239 */
16240 static int memsys5Log(int iValue){
16241   int iLog;
16242   for(iLog=0; (iLog<(int)((sizeof(int)*8)-1)) && (1<<iLog)<iValue; iLog++);
16243   return iLog;
16244 }
16245
16246 /*
16247 ** Initialize the memory allocator.
16248 **
16249 ** This routine is not threadsafe.  The caller must be holding a mutex
16250 ** to prevent multiple threads from entering at the same time.
16251 */
16252 static int memsys5Init(void *NotUsed){
16253   int ii;            /* Loop counter */
16254   int nByte;         /* Number of bytes of memory available to this allocator */
16255   u8 *zByte;         /* Memory usable by this allocator */
16256   int nMinLog;       /* Log base 2 of minimum allocation size in bytes */
16257   int iOffset;       /* An offset into mem5.aCtrl[] */
16258
16259   UNUSED_PARAMETER(NotUsed);
16260
16261   /* For the purposes of this routine, disable the mutex */
16262   mem5.mutex = 0;
16263
16264   /* The size of a Mem5Link object must be a power of two.  Verify that
16265   ** this is case.
16266   */
16267   assert( (sizeof(Mem5Link)&(sizeof(Mem5Link)-1))==0 );
16268
16269   nByte = sqlite3GlobalConfig.nHeap;
16270   zByte = (u8*)sqlite3GlobalConfig.pHeap;
16271   assert( zByte!=0 );  /* sqlite3_config() does not allow otherwise */
16272
16273   /* boundaries on sqlite3GlobalConfig.mnReq are enforced in sqlite3_config() */
16274   nMinLog = memsys5Log(sqlite3GlobalConfig.mnReq);
16275   mem5.szAtom = (1<<nMinLog);
16276   while( (int)sizeof(Mem5Link)>mem5.szAtom ){
16277     mem5.szAtom = mem5.szAtom << 1;
16278   }
16279
16280   mem5.nBlock = (nByte / (mem5.szAtom+sizeof(u8)));
16281   mem5.zPool = zByte;
16282   mem5.aCtrl = (u8 *)&mem5.zPool[mem5.nBlock*mem5.szAtom];
16283
16284   for(ii=0; ii<=LOGMAX; ii++){
16285     mem5.aiFreelist[ii] = -1;
16286   }
16287
16288   iOffset = 0;
16289   for(ii=LOGMAX; ii>=0; ii--){
16290     int nAlloc = (1<<ii);
16291     if( (iOffset+nAlloc)<=mem5.nBlock ){
16292       mem5.aCtrl[iOffset] = ii | CTRL_FREE;
16293       memsys5Link(iOffset, ii);
16294       iOffset += nAlloc;
16295     }
16296     assert((iOffset+nAlloc)>mem5.nBlock);
16297   }
16298
16299   /* If a mutex is required for normal operation, allocate one */
16300   if( sqlite3GlobalConfig.bMemstat==0 ){
16301     mem5.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
16302   }
16303
16304   return SQLITE_OK;
16305 }
16306
16307 /*
16308 ** Deinitialize this module.
16309 */
16310 static void memsys5Shutdown(void *NotUsed){
16311   UNUSED_PARAMETER(NotUsed);
16312   mem5.mutex = 0;
16313   return;
16314 }
16315
16316 #ifdef SQLITE_TEST
16317 /*
16318 ** Open the file indicated and write a log of all unfreed memory 
16319 ** allocations into that log.
16320 */
16321 SQLITE_PRIVATE void sqlite3Memsys5Dump(const char *zFilename){
16322   FILE *out;
16323   int i, j, n;
16324   int nMinLog;
16325
16326   if( zFilename==0 || zFilename[0]==0 ){
16327     out = stdout;
16328   }else{
16329     out = fopen(zFilename, "w");
16330     if( out==0 ){
16331       fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
16332                       zFilename);
16333       return;
16334     }
16335   }
16336   memsys5Enter();
16337   nMinLog = memsys5Log(mem5.szAtom);
16338   for(i=0; i<=LOGMAX && i+nMinLog<32; i++){
16339     for(n=0, j=mem5.aiFreelist[i]; j>=0; j = MEM5LINK(j)->next, n++){}
16340     fprintf(out, "freelist items of size %d: %d\n", mem5.szAtom << i, n);
16341   }
16342   fprintf(out, "mem5.nAlloc       = %llu\n", mem5.nAlloc);
16343   fprintf(out, "mem5.totalAlloc   = %llu\n", mem5.totalAlloc);
16344   fprintf(out, "mem5.totalExcess  = %llu\n", mem5.totalExcess);
16345   fprintf(out, "mem5.currentOut   = %u\n", mem5.currentOut);
16346   fprintf(out, "mem5.currentCount = %u\n", mem5.currentCount);
16347   fprintf(out, "mem5.maxOut       = %u\n", mem5.maxOut);
16348   fprintf(out, "mem5.maxCount     = %u\n", mem5.maxCount);
16349   fprintf(out, "mem5.maxRequest   = %u\n", mem5.maxRequest);
16350   memsys5Leave();
16351   if( out==stdout ){
16352     fflush(stdout);
16353   }else{
16354     fclose(out);
16355   }
16356 }
16357 #endif
16358
16359 /*
16360 ** This routine is the only routine in this file with external 
16361 ** linkage. It returns a pointer to a static sqlite3_mem_methods
16362 ** struct populated with the memsys5 methods.
16363 */
16364 SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void){
16365   static const sqlite3_mem_methods memsys5Methods = {
16366      memsys5Malloc,
16367      memsys5Free,
16368      memsys5Realloc,
16369      memsys5Size,
16370      memsys5Roundup,
16371      memsys5Init,
16372      memsys5Shutdown,
16373      0
16374   };
16375   return &memsys5Methods;
16376 }
16377
16378 #endif /* SQLITE_ENABLE_MEMSYS5 */
16379
16380 /************** End of mem5.c ************************************************/
16381 /************** Begin file mutex.c *******************************************/
16382 /*
16383 ** 2007 August 14
16384 **
16385 ** The author disclaims copyright to this source code.  In place of
16386 ** a legal notice, here is a blessing:
16387 **
16388 **    May you do good and not evil.
16389 **    May you find forgiveness for yourself and forgive others.
16390 **    May you share freely, never taking more than you give.
16391 **
16392 *************************************************************************
16393 ** This file contains the C functions that implement mutexes.
16394 **
16395 ** This file contains code that is common across all mutex implementations.
16396 */
16397
16398 #if defined(SQLITE_DEBUG) && !defined(SQLITE_MUTEX_OMIT)
16399 /*
16400 ** For debugging purposes, record when the mutex subsystem is initialized
16401 ** and uninitialized so that we can assert() if there is an attempt to
16402 ** allocate a mutex while the system is uninitialized.
16403 */
16404 static SQLITE_WSD int mutexIsInit = 0;
16405 #endif /* SQLITE_DEBUG */
16406
16407
16408 #ifndef SQLITE_MUTEX_OMIT
16409 /*
16410 ** Initialize the mutex system.
16411 */
16412 SQLITE_PRIVATE int sqlite3MutexInit(void){ 
16413   int rc = SQLITE_OK;
16414   if( !sqlite3GlobalConfig.mutex.xMutexAlloc ){
16415     /* If the xMutexAlloc method has not been set, then the user did not
16416     ** install a mutex implementation via sqlite3_config() prior to 
16417     ** sqlite3_initialize() being called. This block copies pointers to
16418     ** the default implementation into the sqlite3GlobalConfig structure.
16419     */
16420     sqlite3_mutex_methods const *pFrom;
16421     sqlite3_mutex_methods *pTo = &sqlite3GlobalConfig.mutex;
16422
16423     if( sqlite3GlobalConfig.bCoreMutex ){
16424       pFrom = sqlite3DefaultMutex();
16425     }else{
16426       pFrom = sqlite3NoopMutex();
16427     }
16428     memcpy(pTo, pFrom, offsetof(sqlite3_mutex_methods, xMutexAlloc));
16429     memcpy(&pTo->xMutexFree, &pFrom->xMutexFree,
16430            sizeof(*pTo) - offsetof(sqlite3_mutex_methods, xMutexFree));
16431     pTo->xMutexAlloc = pFrom->xMutexAlloc;
16432   }
16433   rc = sqlite3GlobalConfig.mutex.xMutexInit();
16434
16435 #ifdef SQLITE_DEBUG
16436   GLOBAL(int, mutexIsInit) = 1;
16437 #endif
16438
16439   return rc;
16440 }
16441
16442 /*
16443 ** Shutdown the mutex system. This call frees resources allocated by
16444 ** sqlite3MutexInit().
16445 */
16446 SQLITE_PRIVATE int sqlite3MutexEnd(void){
16447   int rc = SQLITE_OK;
16448   if( sqlite3GlobalConfig.mutex.xMutexEnd ){
16449     rc = sqlite3GlobalConfig.mutex.xMutexEnd();
16450   }
16451
16452 #ifdef SQLITE_DEBUG
16453   GLOBAL(int, mutexIsInit) = 0;
16454 #endif
16455
16456   return rc;
16457 }
16458
16459 /*
16460 ** Retrieve a pointer to a static mutex or allocate a new dynamic one.
16461 */
16462 SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int id){
16463 #ifndef SQLITE_OMIT_AUTOINIT
16464   if( sqlite3_initialize() ) return 0;
16465 #endif
16466   return sqlite3GlobalConfig.mutex.xMutexAlloc(id);
16467 }
16468
16469 SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int id){
16470   if( !sqlite3GlobalConfig.bCoreMutex ){
16471     return 0;
16472   }
16473   assert( GLOBAL(int, mutexIsInit) );
16474   return sqlite3GlobalConfig.mutex.xMutexAlloc(id);
16475 }
16476
16477 /*
16478 ** Free a dynamic mutex.
16479 */
16480 SQLITE_API void sqlite3_mutex_free(sqlite3_mutex *p){
16481   if( p ){
16482     sqlite3GlobalConfig.mutex.xMutexFree(p);
16483   }
16484 }
16485
16486 /*
16487 ** Obtain the mutex p. If some other thread already has the mutex, block
16488 ** until it can be obtained.
16489 */
16490 SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex *p){
16491   if( p ){
16492     sqlite3GlobalConfig.mutex.xMutexEnter(p);
16493   }
16494 }
16495
16496 /*
16497 ** Obtain the mutex p. If successful, return SQLITE_OK. Otherwise, if another
16498 ** thread holds the mutex and it cannot be obtained, return SQLITE_BUSY.
16499 */
16500 SQLITE_API int sqlite3_mutex_try(sqlite3_mutex *p){
16501   int rc = SQLITE_OK;
16502   if( p ){
16503     return sqlite3GlobalConfig.mutex.xMutexTry(p);
16504   }
16505   return rc;
16506 }
16507
16508 /*
16509 ** The sqlite3_mutex_leave() routine exits a mutex that was previously
16510 ** entered by the same thread.  The behavior is undefined if the mutex 
16511 ** is not currently entered. If a NULL pointer is passed as an argument
16512 ** this function is a no-op.
16513 */
16514 SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex *p){
16515   if( p ){
16516     sqlite3GlobalConfig.mutex.xMutexLeave(p);
16517   }
16518 }
16519
16520 #ifndef NDEBUG
16521 /*
16522 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
16523 ** intended for use inside assert() statements.
16524 */
16525 SQLITE_API int sqlite3_mutex_held(sqlite3_mutex *p){
16526   return p==0 || sqlite3GlobalConfig.mutex.xMutexHeld(p);
16527 }
16528 SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex *p){
16529   return p==0 || sqlite3GlobalConfig.mutex.xMutexNotheld(p);
16530 }
16531 #endif
16532
16533 #endif /* SQLITE_MUTEX_OMIT */
16534
16535 /************** End of mutex.c ***********************************************/
16536 /************** Begin file mutex_noop.c **************************************/
16537 /*
16538 ** 2008 October 07
16539 **
16540 ** The author disclaims copyright to this source code.  In place of
16541 ** a legal notice, here is a blessing:
16542 **
16543 **    May you do good and not evil.
16544 **    May you find forgiveness for yourself and forgive others.
16545 **    May you share freely, never taking more than you give.
16546 **
16547 *************************************************************************
16548 ** This file contains the C functions that implement mutexes.
16549 **
16550 ** This implementation in this file does not provide any mutual
16551 ** exclusion and is thus suitable for use only in applications
16552 ** that use SQLite in a single thread.  The routines defined
16553 ** here are place-holders.  Applications can substitute working
16554 ** mutex routines at start-time using the
16555 **
16556 **     sqlite3_config(SQLITE_CONFIG_MUTEX,...)
16557 **
16558 ** interface.
16559 **
16560 ** If compiled with SQLITE_DEBUG, then additional logic is inserted
16561 ** that does error checking on mutexes to make sure they are being
16562 ** called correctly.
16563 */
16564
16565 #ifndef SQLITE_MUTEX_OMIT
16566
16567 #ifndef SQLITE_DEBUG
16568 /*
16569 ** Stub routines for all mutex methods.
16570 **
16571 ** This routines provide no mutual exclusion or error checking.
16572 */
16573 static int noopMutexInit(void){ return SQLITE_OK; }
16574 static int noopMutexEnd(void){ return SQLITE_OK; }
16575 static sqlite3_mutex *noopMutexAlloc(int id){ 
16576   UNUSED_PARAMETER(id);
16577   return (sqlite3_mutex*)8; 
16578 }
16579 static void noopMutexFree(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
16580 static void noopMutexEnter(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
16581 static int noopMutexTry(sqlite3_mutex *p){
16582   UNUSED_PARAMETER(p);
16583   return SQLITE_OK;
16584 }
16585 static void noopMutexLeave(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
16586
16587 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){
16588   static const sqlite3_mutex_methods sMutex = {
16589     noopMutexInit,
16590     noopMutexEnd,
16591     noopMutexAlloc,
16592     noopMutexFree,
16593     noopMutexEnter,
16594     noopMutexTry,
16595     noopMutexLeave,
16596
16597     0,
16598     0,
16599   };
16600
16601   return &sMutex;
16602 }
16603 #endif /* !SQLITE_DEBUG */
16604
16605 #ifdef SQLITE_DEBUG
16606 /*
16607 ** In this implementation, error checking is provided for testing
16608 ** and debugging purposes.  The mutexes still do not provide any
16609 ** mutual exclusion.
16610 */
16611
16612 /*
16613 ** The mutex object
16614 */
16615 typedef struct sqlite3_debug_mutex {
16616   int id;     /* The mutex type */
16617   int cnt;    /* Number of entries without a matching leave */
16618 } sqlite3_debug_mutex;
16619
16620 /*
16621 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
16622 ** intended for use inside assert() statements.
16623 */
16624 static int debugMutexHeld(sqlite3_mutex *pX){
16625   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
16626   return p==0 || p->cnt>0;
16627 }
16628 static int debugMutexNotheld(sqlite3_mutex *pX){
16629   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
16630   return p==0 || p->cnt==0;
16631 }
16632
16633 /*
16634 ** Initialize and deinitialize the mutex subsystem.
16635 */
16636 static int debugMutexInit(void){ return SQLITE_OK; }
16637 static int debugMutexEnd(void){ return SQLITE_OK; }
16638
16639 /*
16640 ** The sqlite3_mutex_alloc() routine allocates a new
16641 ** mutex and returns a pointer to it.  If it returns NULL
16642 ** that means that a mutex could not be allocated. 
16643 */
16644 static sqlite3_mutex *debugMutexAlloc(int id){
16645   static sqlite3_debug_mutex aStatic[6];
16646   sqlite3_debug_mutex *pNew = 0;
16647   switch( id ){
16648     case SQLITE_MUTEX_FAST:
16649     case SQLITE_MUTEX_RECURSIVE: {
16650       pNew = sqlite3Malloc(sizeof(*pNew));
16651       if( pNew ){
16652         pNew->id = id;
16653         pNew->cnt = 0;
16654       }
16655       break;
16656     }
16657     default: {
16658       assert( id-2 >= 0 );
16659       assert( id-2 < (int)(sizeof(aStatic)/sizeof(aStatic[0])) );
16660       pNew = &aStatic[id-2];
16661       pNew->id = id;
16662       break;
16663     }
16664   }
16665   return (sqlite3_mutex*)pNew;
16666 }
16667
16668 /*
16669 ** This routine deallocates a previously allocated mutex.
16670 */
16671 static void debugMutexFree(sqlite3_mutex *pX){
16672   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
16673   assert( p->cnt==0 );
16674   assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
16675   sqlite3_free(p);
16676 }
16677
16678 /*
16679 ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
16680 ** to enter a mutex.  If another thread is already within the mutex,
16681 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
16682 ** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK
16683 ** upon successful entry.  Mutexes created using SQLITE_MUTEX_RECURSIVE can
16684 ** be entered multiple times by the same thread.  In such cases the,
16685 ** mutex must be exited an equal number of times before another thread
16686 ** can enter.  If the same thread tries to enter any other kind of mutex
16687 ** more than once, the behavior is undefined.
16688 */
16689 static void debugMutexEnter(sqlite3_mutex *pX){
16690   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
16691   assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) );
16692   p->cnt++;
16693 }
16694 static int debugMutexTry(sqlite3_mutex *pX){
16695   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
16696   assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) );
16697   p->cnt++;
16698   return SQLITE_OK;
16699 }
16700
16701 /*
16702 ** The sqlite3_mutex_leave() routine exits a mutex that was
16703 ** previously entered by the same thread.  The behavior
16704 ** is undefined if the mutex is not currently entered or
16705 ** is not currently allocated.  SQLite will never do either.
16706 */
16707 static void debugMutexLeave(sqlite3_mutex *pX){
16708   sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
16709   assert( debugMutexHeld(pX) );
16710   p->cnt--;
16711   assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) );
16712 }
16713
16714 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){
16715   static const sqlite3_mutex_methods sMutex = {
16716     debugMutexInit,
16717     debugMutexEnd,
16718     debugMutexAlloc,
16719     debugMutexFree,
16720     debugMutexEnter,
16721     debugMutexTry,
16722     debugMutexLeave,
16723
16724     debugMutexHeld,
16725     debugMutexNotheld
16726   };
16727
16728   return &sMutex;
16729 }
16730 #endif /* SQLITE_DEBUG */
16731
16732 /*
16733 ** If compiled with SQLITE_MUTEX_NOOP, then the no-op mutex implementation
16734 ** is used regardless of the run-time threadsafety setting.
16735 */
16736 #ifdef SQLITE_MUTEX_NOOP
16737 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
16738   return sqlite3NoopMutex();
16739 }
16740 #endif /* SQLITE_MUTEX_NOOP */
16741 #endif /* SQLITE_MUTEX_OMIT */
16742
16743 /************** End of mutex_noop.c ******************************************/
16744 /************** Begin file mutex_os2.c ***************************************/
16745 /*
16746 ** 2007 August 28
16747 **
16748 ** The author disclaims copyright to this source code.  In place of
16749 ** a legal notice, here is a blessing:
16750 **
16751 **    May you do good and not evil.
16752 **    May you find forgiveness for yourself and forgive others.
16753 **    May you share freely, never taking more than you give.
16754 **
16755 *************************************************************************
16756 ** This file contains the C functions that implement mutexes for OS/2
16757 */
16758
16759 /*
16760 ** The code in this file is only used if SQLITE_MUTEX_OS2 is defined.
16761 ** See the mutex.h file for details.
16762 */
16763 #ifdef SQLITE_MUTEX_OS2
16764
16765 /********************** OS/2 Mutex Implementation **********************
16766 **
16767 ** This implementation of mutexes is built using the OS/2 API.
16768 */
16769
16770 /*
16771 ** The mutex object
16772 ** Each recursive mutex is an instance of the following structure.
16773 */
16774 struct sqlite3_mutex {
16775   HMTX mutex;       /* Mutex controlling the lock */
16776   int  id;          /* Mutex type */
16777 #ifdef SQLITE_DEBUG
16778  int   trace;       /* True to trace changes */
16779 #endif
16780 };
16781
16782 #ifdef SQLITE_DEBUG
16783 #define SQLITE3_MUTEX_INITIALIZER { 0, 0, 0 }
16784 #else
16785 #define SQLITE3_MUTEX_INITIALIZER { 0, 0 }
16786 #endif
16787
16788 /*
16789 ** Initialize and deinitialize the mutex subsystem.
16790 */
16791 static int os2MutexInit(void){ return SQLITE_OK; }
16792 static int os2MutexEnd(void){ return SQLITE_OK; }
16793
16794 /*
16795 ** The sqlite3_mutex_alloc() routine allocates a new
16796 ** mutex and returns a pointer to it.  If it returns NULL
16797 ** that means that a mutex could not be allocated. 
16798 ** SQLite will unwind its stack and return an error.  The argument
16799 ** to sqlite3_mutex_alloc() is one of these integer constants:
16800 **
16801 ** <ul>
16802 ** <li>  SQLITE_MUTEX_FAST
16803 ** <li>  SQLITE_MUTEX_RECURSIVE
16804 ** <li>  SQLITE_MUTEX_STATIC_MASTER
16805 ** <li>  SQLITE_MUTEX_STATIC_MEM
16806 ** <li>  SQLITE_MUTEX_STATIC_MEM2
16807 ** <li>  SQLITE_MUTEX_STATIC_PRNG
16808 ** <li>  SQLITE_MUTEX_STATIC_LRU
16809 ** <li>  SQLITE_MUTEX_STATIC_LRU2
16810 ** </ul>
16811 **
16812 ** The first two constants cause sqlite3_mutex_alloc() to create
16813 ** a new mutex.  The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
16814 ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
16815 ** The mutex implementation does not need to make a distinction
16816 ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
16817 ** not want to.  But SQLite will only request a recursive mutex in
16818 ** cases where it really needs one.  If a faster non-recursive mutex
16819 ** implementation is available on the host platform, the mutex subsystem
16820 ** might return such a mutex in response to SQLITE_MUTEX_FAST.
16821 **
16822 ** The other allowed parameters to sqlite3_mutex_alloc() each return
16823 ** a pointer to a static preexisting mutex.  Six static mutexes are
16824 ** used by the current version of SQLite.  Future versions of SQLite
16825 ** may add additional static mutexes.  Static mutexes are for internal
16826 ** use by SQLite only.  Applications that use SQLite mutexes should
16827 ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
16828 ** SQLITE_MUTEX_RECURSIVE.
16829 **
16830 ** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
16831 ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
16832 ** returns a different mutex on every call.  But for the static
16833 ** mutex types, the same mutex is returned on every call that has
16834 ** the same type number.
16835 */
16836 static sqlite3_mutex *os2MutexAlloc(int iType){
16837   sqlite3_mutex *p = NULL;
16838   switch( iType ){
16839     case SQLITE_MUTEX_FAST:
16840     case SQLITE_MUTEX_RECURSIVE: {
16841       p = sqlite3MallocZero( sizeof(*p) );
16842       if( p ){
16843         p->id = iType;
16844         if( DosCreateMutexSem( 0, &p->mutex, 0, FALSE ) != NO_ERROR ){
16845           sqlite3_free( p );
16846           p = NULL;
16847         }
16848       }
16849       break;
16850     }
16851     default: {
16852       static volatile int isInit = 0;
16853       static sqlite3_mutex staticMutexes[6] = {
16854         SQLITE3_MUTEX_INITIALIZER,
16855         SQLITE3_MUTEX_INITIALIZER,
16856         SQLITE3_MUTEX_INITIALIZER,
16857         SQLITE3_MUTEX_INITIALIZER,
16858         SQLITE3_MUTEX_INITIALIZER,
16859         SQLITE3_MUTEX_INITIALIZER,
16860       };
16861       if ( !isInit ){
16862         APIRET rc;
16863         PTIB ptib;
16864         PPIB ppib;
16865         HMTX mutex;
16866         char name[32];
16867         DosGetInfoBlocks( &ptib, &ppib );
16868         sqlite3_snprintf( sizeof(name), name, "\\SEM32\\SQLITE%04x",
16869                           ppib->pib_ulpid );
16870         while( !isInit ){
16871           mutex = 0;
16872           rc = DosCreateMutexSem( name, &mutex, 0, FALSE);
16873           if( rc == NO_ERROR ){
16874             unsigned int i;
16875             if( !isInit ){
16876               for( i = 0; i < sizeof(staticMutexes)/sizeof(staticMutexes[0]); i++ ){
16877                 DosCreateMutexSem( 0, &staticMutexes[i].mutex, 0, FALSE );
16878               }
16879               isInit = 1;
16880             }
16881             DosCloseMutexSem( mutex );
16882           }else if( rc == ERROR_DUPLICATE_NAME ){
16883             DosSleep( 1 );
16884           }else{
16885             return p;
16886           }
16887         }
16888       }
16889       assert( iType-2 >= 0 );
16890       assert( iType-2 < sizeof(staticMutexes)/sizeof(staticMutexes[0]) );
16891       p = &staticMutexes[iType-2];
16892       p->id = iType;
16893       break;
16894     }
16895   }
16896   return p;
16897 }
16898
16899
16900 /*
16901 ** This routine deallocates a previously allocated mutex.
16902 ** SQLite is careful to deallocate every mutex that it allocates.
16903 */
16904 static void os2MutexFree(sqlite3_mutex *p){
16905 #ifdef SQLITE_DEBUG
16906   TID tid;
16907   PID pid;
16908   ULONG ulCount;
16909   DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
16910   assert( ulCount==0 );
16911   assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
16912 #endif
16913   DosCloseMutexSem( p->mutex );
16914   sqlite3_free( p );
16915 }
16916
16917 #ifdef SQLITE_DEBUG
16918 /*
16919 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
16920 ** intended for use inside assert() statements.
16921 */
16922 static int os2MutexHeld(sqlite3_mutex *p){
16923   TID tid;
16924   PID pid;
16925   ULONG ulCount;
16926   PTIB ptib;
16927   DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
16928   if( ulCount==0 || ( ulCount>1 && p->id!=SQLITE_MUTEX_RECURSIVE ) )
16929     return 0;
16930   DosGetInfoBlocks(&ptib, NULL);
16931   return tid==ptib->tib_ptib2->tib2_ultid;
16932 }
16933 static int os2MutexNotheld(sqlite3_mutex *p){
16934   TID tid;
16935   PID pid;
16936   ULONG ulCount;
16937   PTIB ptib;
16938   DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
16939   if( ulCount==0 )
16940     return 1;
16941   DosGetInfoBlocks(&ptib, NULL);
16942   return tid!=ptib->tib_ptib2->tib2_ultid;
16943 }
16944 static void os2MutexTrace(sqlite3_mutex *p, char *pAction){
16945   TID   tid;
16946   PID   pid;
16947   ULONG ulCount;
16948   DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
16949   printf("%s mutex %p (%d) with nRef=%ld\n", pAction, (void*)p, p->trace, ulCount);
16950 }
16951 #endif
16952
16953 /*
16954 ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
16955 ** to enter a mutex.  If another thread is already within the mutex,
16956 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
16957 ** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK
16958 ** upon successful entry.  Mutexes created using SQLITE_MUTEX_RECURSIVE can
16959 ** be entered multiple times by the same thread.  In such cases the,
16960 ** mutex must be exited an equal number of times before another thread
16961 ** can enter.  If the same thread tries to enter any other kind of mutex
16962 ** more than once, the behavior is undefined.
16963 */
16964 static void os2MutexEnter(sqlite3_mutex *p){
16965   assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) );
16966   DosRequestMutexSem(p->mutex, SEM_INDEFINITE_WAIT);
16967 #ifdef SQLITE_DEBUG
16968   if( p->trace ) os2MutexTrace(p, "enter");
16969 #endif
16970 }
16971 static int os2MutexTry(sqlite3_mutex *p){
16972   int rc = SQLITE_BUSY;
16973   assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) );
16974   if( DosRequestMutexSem(p->mutex, SEM_IMMEDIATE_RETURN) == NO_ERROR ) {
16975     rc = SQLITE_OK;
16976 #ifdef SQLITE_DEBUG
16977     if( p->trace ) os2MutexTrace(p, "try");
16978 #endif
16979   }
16980   return rc;
16981 }
16982
16983 /*
16984 ** The sqlite3_mutex_leave() routine exits a mutex that was
16985 ** previously entered by the same thread.  The behavior
16986 ** is undefined if the mutex is not currently entered or
16987 ** is not currently allocated.  SQLite will never do either.
16988 */
16989 static void os2MutexLeave(sqlite3_mutex *p){
16990   assert( os2MutexHeld(p) );
16991   DosReleaseMutexSem(p->mutex);
16992 #ifdef SQLITE_DEBUG
16993   if( p->trace ) os2MutexTrace(p, "leave");
16994 #endif
16995 }
16996
16997 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
16998   static const sqlite3_mutex_methods sMutex = {
16999     os2MutexInit,
17000     os2MutexEnd,
17001     os2MutexAlloc,
17002     os2MutexFree,
17003     os2MutexEnter,
17004     os2MutexTry,
17005     os2MutexLeave,
17006 #ifdef SQLITE_DEBUG
17007     os2MutexHeld,
17008     os2MutexNotheld
17009 #else
17010     0,
17011     0
17012 #endif
17013   };
17014
17015   return &sMutex;
17016 }
17017 #endif /* SQLITE_MUTEX_OS2 */
17018
17019 /************** End of mutex_os2.c *******************************************/
17020 /************** Begin file mutex_unix.c **************************************/
17021 /*
17022 ** 2007 August 28
17023 **
17024 ** The author disclaims copyright to this source code.  In place of
17025 ** a legal notice, here is a blessing:
17026 **
17027 **    May you do good and not evil.
17028 **    May you find forgiveness for yourself and forgive others.
17029 **    May you share freely, never taking more than you give.
17030 **
17031 *************************************************************************
17032 ** This file contains the C functions that implement mutexes for pthreads
17033 */
17034
17035 /*
17036 ** The code in this file is only used if we are compiling threadsafe
17037 ** under unix with pthreads.
17038 **
17039 ** Note that this implementation requires a version of pthreads that
17040 ** supports recursive mutexes.
17041 */
17042 #ifdef SQLITE_MUTEX_PTHREADS
17043
17044 #include <pthread.h>
17045
17046 /*
17047 ** The sqlite3_mutex.id, sqlite3_mutex.nRef, and sqlite3_mutex.owner fields
17048 ** are necessary under two condidtions:  (1) Debug builds and (2) using
17049 ** home-grown mutexes.  Encapsulate these conditions into a single #define.
17050 */
17051 #if defined(SQLITE_DEBUG) || defined(SQLITE_HOMEGROWN_RECURSIVE_MUTEX)
17052 # define SQLITE_MUTEX_NREF 1
17053 #else
17054 # define SQLITE_MUTEX_NREF 0
17055 #endif
17056
17057 /*
17058 ** Each recursive mutex is an instance of the following structure.
17059 */
17060 struct sqlite3_mutex {
17061   pthread_mutex_t mutex;     /* Mutex controlling the lock */
17062 #if SQLITE_MUTEX_NREF
17063   int id;                    /* Mutex type */
17064   volatile int nRef;         /* Number of entrances */
17065   volatile pthread_t owner;  /* Thread that is within this mutex */
17066   int trace;                 /* True to trace changes */
17067 #endif
17068 };
17069 #if SQLITE_MUTEX_NREF
17070 #define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, 0, 0, (pthread_t)0, 0 }
17071 #else
17072 #define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER }
17073 #endif
17074
17075 /*
17076 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
17077 ** intended for use only inside assert() statements.  On some platforms,
17078 ** there might be race conditions that can cause these routines to
17079 ** deliver incorrect results.  In particular, if pthread_equal() is
17080 ** not an atomic operation, then these routines might delivery
17081 ** incorrect results.  On most platforms, pthread_equal() is a 
17082 ** comparison of two integers and is therefore atomic.  But we are
17083 ** told that HPUX is not such a platform.  If so, then these routines
17084 ** will not always work correctly on HPUX.
17085 **
17086 ** On those platforms where pthread_equal() is not atomic, SQLite
17087 ** should be compiled without -DSQLITE_DEBUG and with -DNDEBUG to
17088 ** make sure no assert() statements are evaluated and hence these
17089 ** routines are never called.
17090 */
17091 #if !defined(NDEBUG) || defined(SQLITE_DEBUG)
17092 static int pthreadMutexHeld(sqlite3_mutex *p){
17093   return (p->nRef!=0 && pthread_equal(p->owner, pthread_self()));
17094 }
17095 static int pthreadMutexNotheld(sqlite3_mutex *p){
17096   return p->nRef==0 || pthread_equal(p->owner, pthread_self())==0;
17097 }
17098 #endif
17099
17100 /*
17101 ** Initialize and deinitialize the mutex subsystem.
17102 */
17103 static int pthreadMutexInit(void){ return SQLITE_OK; }
17104 static int pthreadMutexEnd(void){ return SQLITE_OK; }
17105
17106 /*
17107 ** The sqlite3_mutex_alloc() routine allocates a new
17108 ** mutex and returns a pointer to it.  If it returns NULL
17109 ** that means that a mutex could not be allocated.  SQLite
17110 ** will unwind its stack and return an error.  The argument
17111 ** to sqlite3_mutex_alloc() is one of these integer constants:
17112 **
17113 ** <ul>
17114 ** <li>  SQLITE_MUTEX_FAST
17115 ** <li>  SQLITE_MUTEX_RECURSIVE
17116 ** <li>  SQLITE_MUTEX_STATIC_MASTER
17117 ** <li>  SQLITE_MUTEX_STATIC_MEM
17118 ** <li>  SQLITE_MUTEX_STATIC_MEM2
17119 ** <li>  SQLITE_MUTEX_STATIC_PRNG
17120 ** <li>  SQLITE_MUTEX_STATIC_LRU
17121 ** <li>  SQLITE_MUTEX_STATIC_PMEM
17122 ** </ul>
17123 **
17124 ** The first two constants cause sqlite3_mutex_alloc() to create
17125 ** a new mutex.  The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
17126 ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
17127 ** The mutex implementation does not need to make a distinction
17128 ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
17129 ** not want to.  But SQLite will only request a recursive mutex in
17130 ** cases where it really needs one.  If a faster non-recursive mutex
17131 ** implementation is available on the host platform, the mutex subsystem
17132 ** might return such a mutex in response to SQLITE_MUTEX_FAST.
17133 **
17134 ** The other allowed parameters to sqlite3_mutex_alloc() each return
17135 ** a pointer to a static preexisting mutex.  Six static mutexes are
17136 ** used by the current version of SQLite.  Future versions of SQLite
17137 ** may add additional static mutexes.  Static mutexes are for internal
17138 ** use by SQLite only.  Applications that use SQLite mutexes should
17139 ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
17140 ** SQLITE_MUTEX_RECURSIVE.
17141 **
17142 ** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
17143 ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
17144 ** returns a different mutex on every call.  But for the static 
17145 ** mutex types, the same mutex is returned on every call that has
17146 ** the same type number.
17147 */
17148 static sqlite3_mutex *pthreadMutexAlloc(int iType){
17149   static sqlite3_mutex staticMutexes[] = {
17150     SQLITE3_MUTEX_INITIALIZER,
17151     SQLITE3_MUTEX_INITIALIZER,
17152     SQLITE3_MUTEX_INITIALIZER,
17153     SQLITE3_MUTEX_INITIALIZER,
17154     SQLITE3_MUTEX_INITIALIZER,
17155     SQLITE3_MUTEX_INITIALIZER
17156   };
17157   sqlite3_mutex *p;
17158   switch( iType ){
17159     case SQLITE_MUTEX_RECURSIVE: {
17160       p = sqlite3MallocZero( sizeof(*p) );
17161       if( p ){
17162 #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
17163         /* If recursive mutexes are not available, we will have to
17164         ** build our own.  See below. */
17165         pthread_mutex_init(&p->mutex, 0);
17166 #else
17167         /* Use a recursive mutex if it is available */
17168         pthread_mutexattr_t recursiveAttr;
17169         pthread_mutexattr_init(&recursiveAttr);
17170         pthread_mutexattr_settype(&recursiveAttr, PTHREAD_MUTEX_RECURSIVE);
17171         pthread_mutex_init(&p->mutex, &recursiveAttr);
17172         pthread_mutexattr_destroy(&recursiveAttr);
17173 #endif
17174 #if SQLITE_MUTEX_NREF
17175         p->id = iType;
17176 #endif
17177       }
17178       break;
17179     }
17180     case SQLITE_MUTEX_FAST: {
17181       p = sqlite3MallocZero( sizeof(*p) );
17182       if( p ){
17183 #if SQLITE_MUTEX_NREF
17184         p->id = iType;
17185 #endif
17186         pthread_mutex_init(&p->mutex, 0);
17187       }
17188       break;
17189     }
17190     default: {
17191       assert( iType-2 >= 0 );
17192       assert( iType-2 < ArraySize(staticMutexes) );
17193       p = &staticMutexes[iType-2];
17194 #if SQLITE_MUTEX_NREF
17195       p->id = iType;
17196 #endif
17197       break;
17198     }
17199   }
17200   return p;
17201 }
17202
17203
17204 /*
17205 ** This routine deallocates a previously
17206 ** allocated mutex.  SQLite is careful to deallocate every
17207 ** mutex that it allocates.
17208 */
17209 static void pthreadMutexFree(sqlite3_mutex *p){
17210   assert( p->nRef==0 );
17211   assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
17212   pthread_mutex_destroy(&p->mutex);
17213   sqlite3_free(p);
17214 }
17215
17216 /*
17217 ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
17218 ** to enter a mutex.  If another thread is already within the mutex,
17219 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
17220 ** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK
17221 ** upon successful entry.  Mutexes created using SQLITE_MUTEX_RECURSIVE can
17222 ** be entered multiple times by the same thread.  In such cases the,
17223 ** mutex must be exited an equal number of times before another thread
17224 ** can enter.  If the same thread tries to enter any other kind of mutex
17225 ** more than once, the behavior is undefined.
17226 */
17227 static void pthreadMutexEnter(sqlite3_mutex *p){
17228   assert( p->id==SQLITE_MUTEX_RECURSIVE || pthreadMutexNotheld(p) );
17229
17230 #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
17231   /* If recursive mutexes are not available, then we have to grow
17232   ** our own.  This implementation assumes that pthread_equal()
17233   ** is atomic - that it cannot be deceived into thinking self
17234   ** and p->owner are equal if p->owner changes between two values
17235   ** that are not equal to self while the comparison is taking place.
17236   ** This implementation also assumes a coherent cache - that 
17237   ** separate processes cannot read different values from the same
17238   ** address at the same time.  If either of these two conditions
17239   ** are not met, then the mutexes will fail and problems will result.
17240   */
17241   {
17242     pthread_t self = pthread_self();
17243     if( p->nRef>0 && pthread_equal(p->owner, self) ){
17244       p->nRef++;
17245     }else{
17246       pthread_mutex_lock(&p->mutex);
17247       assert( p->nRef==0 );
17248       p->owner = self;
17249       p->nRef = 1;
17250     }
17251   }
17252 #else
17253   /* Use the built-in recursive mutexes if they are available.
17254   */
17255   pthread_mutex_lock(&p->mutex);
17256 #if SQLITE_MUTEX_NREF
17257   assert( p->nRef>0 || p->owner==0 );
17258   p->owner = pthread_self();
17259   p->nRef++;
17260 #endif
17261 #endif
17262
17263 #ifdef SQLITE_DEBUG
17264   if( p->trace ){
17265     printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
17266   }
17267 #endif
17268 }
17269 static int pthreadMutexTry(sqlite3_mutex *p){
17270   int rc;
17271   assert( p->id==SQLITE_MUTEX_RECURSIVE || pthreadMutexNotheld(p) );
17272
17273 #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
17274   /* If recursive mutexes are not available, then we have to grow
17275   ** our own.  This implementation assumes that pthread_equal()
17276   ** is atomic - that it cannot be deceived into thinking self
17277   ** and p->owner are equal if p->owner changes between two values
17278   ** that are not equal to self while the comparison is taking place.
17279   ** This implementation also assumes a coherent cache - that 
17280   ** separate processes cannot read different values from the same
17281   ** address at the same time.  If either of these two conditions
17282   ** are not met, then the mutexes will fail and problems will result.
17283   */
17284   {
17285     pthread_t self = pthread_self();
17286     if( p->nRef>0 && pthread_equal(p->owner, self) ){
17287       p->nRef++;
17288       rc = SQLITE_OK;
17289     }else if( pthread_mutex_trylock(&p->mutex)==0 ){
17290       assert( p->nRef==0 );
17291       p->owner = self;
17292       p->nRef = 1;
17293       rc = SQLITE_OK;
17294     }else{
17295       rc = SQLITE_BUSY;
17296     }
17297   }
17298 #else
17299   /* Use the built-in recursive mutexes if they are available.
17300   */
17301   if( pthread_mutex_trylock(&p->mutex)==0 ){
17302 #if SQLITE_MUTEX_NREF
17303     p->owner = pthread_self();
17304     p->nRef++;
17305 #endif
17306     rc = SQLITE_OK;
17307   }else{
17308     rc = SQLITE_BUSY;
17309   }
17310 #endif
17311
17312 #ifdef SQLITE_DEBUG
17313   if( rc==SQLITE_OK && p->trace ){
17314     printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
17315   }
17316 #endif
17317   return rc;
17318 }
17319
17320 /*
17321 ** The sqlite3_mutex_leave() routine exits a mutex that was
17322 ** previously entered by the same thread.  The behavior
17323 ** is undefined if the mutex is not currently entered or
17324 ** is not currently allocated.  SQLite will never do either.
17325 */
17326 static void pthreadMutexLeave(sqlite3_mutex *p){
17327   assert( pthreadMutexHeld(p) );
17328 #if SQLITE_MUTEX_NREF
17329   p->nRef--;
17330   if( p->nRef==0 ) p->owner = 0;
17331 #endif
17332   assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE );
17333
17334 #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
17335   if( p->nRef==0 ){
17336     pthread_mutex_unlock(&p->mutex);
17337   }
17338 #else
17339   pthread_mutex_unlock(&p->mutex);
17340 #endif
17341
17342 #ifdef SQLITE_DEBUG
17343   if( p->trace ){
17344     printf("leave mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
17345   }
17346 #endif
17347 }
17348
17349 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
17350   static const sqlite3_mutex_methods sMutex = {
17351     pthreadMutexInit,
17352     pthreadMutexEnd,
17353     pthreadMutexAlloc,
17354     pthreadMutexFree,
17355     pthreadMutexEnter,
17356     pthreadMutexTry,
17357     pthreadMutexLeave,
17358 #ifdef SQLITE_DEBUG
17359     pthreadMutexHeld,
17360     pthreadMutexNotheld
17361 #else
17362     0,
17363     0
17364 #endif
17365   };
17366
17367   return &sMutex;
17368 }
17369
17370 #endif /* SQLITE_MUTEX_PTHREAD */
17371
17372 /************** End of mutex_unix.c ******************************************/
17373 /************** Begin file mutex_w32.c ***************************************/
17374 /*
17375 ** 2007 August 14
17376 **
17377 ** The author disclaims copyright to this source code.  In place of
17378 ** a legal notice, here is a blessing:
17379 **
17380 **    May you do good and not evil.
17381 **    May you find forgiveness for yourself and forgive others.
17382 **    May you share freely, never taking more than you give.
17383 **
17384 *************************************************************************
17385 ** This file contains the C functions that implement mutexes for win32
17386 */
17387
17388 /*
17389 ** The code in this file is only used if we are compiling multithreaded
17390 ** on a win32 system.
17391 */
17392 #ifdef SQLITE_MUTEX_W32
17393
17394 /*
17395 ** Each recursive mutex is an instance of the following structure.
17396 */
17397 struct sqlite3_mutex {
17398   CRITICAL_SECTION mutex;    /* Mutex controlling the lock */
17399   int id;                    /* Mutex type */
17400 #ifdef SQLITE_DEBUG
17401   volatile int nRef;         /* Number of enterances */
17402   volatile DWORD owner;      /* Thread holding this mutex */
17403   int trace;                 /* True to trace changes */
17404 #endif
17405 };
17406 #define SQLITE_W32_MUTEX_INITIALIZER { 0 }
17407 #ifdef SQLITE_DEBUG
17408 #define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0, 0L, (DWORD)0, 0 }
17409 #else
17410 #define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0 }
17411 #endif
17412
17413 /*
17414 ** Return true (non-zero) if we are running under WinNT, Win2K, WinXP,
17415 ** or WinCE.  Return false (zero) for Win95, Win98, or WinME.
17416 **
17417 ** Here is an interesting observation:  Win95, Win98, and WinME lack
17418 ** the LockFileEx() API.  But we can still statically link against that
17419 ** API as long as we don't call it win running Win95/98/ME.  A call to
17420 ** this routine is used to determine if the host is Win95/98/ME or
17421 ** WinNT/2K/XP so that we will know whether or not we can safely call
17422 ** the LockFileEx() API.
17423 **
17424 ** mutexIsNT() is only used for the TryEnterCriticalSection() API call,
17425 ** which is only available if your application was compiled with 
17426 ** _WIN32_WINNT defined to a value >= 0x0400.  Currently, the only
17427 ** call to TryEnterCriticalSection() is #ifdef'ed out, so #ifdef 
17428 ** this out as well.
17429 */
17430 #if 0
17431 #if SQLITE_OS_WINCE
17432 # define mutexIsNT()  (1)
17433 #else
17434   static int mutexIsNT(void){
17435     static int osType = 0;
17436     if( osType==0 ){
17437       OSVERSIONINFO sInfo;
17438       sInfo.dwOSVersionInfoSize = sizeof(sInfo);
17439       GetVersionEx(&sInfo);
17440       osType = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1;
17441     }
17442     return osType==2;
17443   }
17444 #endif /* SQLITE_OS_WINCE */
17445 #endif
17446
17447 #ifdef SQLITE_DEBUG
17448 /*
17449 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
17450 ** intended for use only inside assert() statements.
17451 */
17452 static int winMutexHeld(sqlite3_mutex *p){
17453   return p->nRef!=0 && p->owner==GetCurrentThreadId();
17454 }
17455 static int winMutexNotheld2(sqlite3_mutex *p, DWORD tid){
17456   return p->nRef==0 || p->owner!=tid;
17457 }
17458 static int winMutexNotheld(sqlite3_mutex *p){
17459   DWORD tid = GetCurrentThreadId(); 
17460   return winMutexNotheld2(p, tid);
17461 }
17462 #endif
17463
17464
17465 /*
17466 ** Initialize and deinitialize the mutex subsystem.
17467 */
17468 static sqlite3_mutex winMutex_staticMutexes[6] = {
17469   SQLITE3_MUTEX_INITIALIZER,
17470   SQLITE3_MUTEX_INITIALIZER,
17471   SQLITE3_MUTEX_INITIALIZER,
17472   SQLITE3_MUTEX_INITIALIZER,
17473   SQLITE3_MUTEX_INITIALIZER,
17474   SQLITE3_MUTEX_INITIALIZER
17475 };
17476 static int winMutex_isInit = 0;
17477 /* As winMutexInit() and winMutexEnd() are called as part
17478 ** of the sqlite3_initialize and sqlite3_shutdown()
17479 ** processing, the "interlocked" magic is probably not
17480 ** strictly necessary.
17481 */
17482 static long winMutex_lock = 0;
17483
17484 static int winMutexInit(void){ 
17485   /* The first to increment to 1 does actual initialization */
17486   if( InterlockedCompareExchange(&winMutex_lock, 1, 0)==0 ){
17487     int i;
17488     for(i=0; i<ArraySize(winMutex_staticMutexes); i++){
17489       InitializeCriticalSection(&winMutex_staticMutexes[i].mutex);
17490     }
17491     winMutex_isInit = 1;
17492   }else{
17493     /* Someone else is in the process of initing the static mutexes */
17494     while( !winMutex_isInit ){
17495       Sleep(1);
17496     }
17497   }
17498   return SQLITE_OK; 
17499 }
17500
17501 static int winMutexEnd(void){ 
17502   /* The first to decrement to 0 does actual shutdown 
17503   ** (which should be the last to shutdown.) */
17504   if( InterlockedCompareExchange(&winMutex_lock, 0, 1)==1 ){
17505     if( winMutex_isInit==1 ){
17506       int i;
17507       for(i=0; i<ArraySize(winMutex_staticMutexes); i++){
17508         DeleteCriticalSection(&winMutex_staticMutexes[i].mutex);
17509       }
17510       winMutex_isInit = 0;
17511     }
17512   }
17513   return SQLITE_OK; 
17514 }
17515
17516 /*
17517 ** The sqlite3_mutex_alloc() routine allocates a new
17518 ** mutex and returns a pointer to it.  If it returns NULL
17519 ** that means that a mutex could not be allocated.  SQLite
17520 ** will unwind its stack and return an error.  The argument
17521 ** to sqlite3_mutex_alloc() is one of these integer constants:
17522 **
17523 ** <ul>
17524 ** <li>  SQLITE_MUTEX_FAST
17525 ** <li>  SQLITE_MUTEX_RECURSIVE
17526 ** <li>  SQLITE_MUTEX_STATIC_MASTER
17527 ** <li>  SQLITE_MUTEX_STATIC_MEM
17528 ** <li>  SQLITE_MUTEX_STATIC_MEM2
17529 ** <li>  SQLITE_MUTEX_STATIC_PRNG
17530 ** <li>  SQLITE_MUTEX_STATIC_LRU
17531 ** <li>  SQLITE_MUTEX_STATIC_PMEM
17532 ** </ul>
17533 **
17534 ** The first two constants cause sqlite3_mutex_alloc() to create
17535 ** a new mutex.  The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
17536 ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
17537 ** The mutex implementation does not need to make a distinction
17538 ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
17539 ** not want to.  But SQLite will only request a recursive mutex in
17540 ** cases where it really needs one.  If a faster non-recursive mutex
17541 ** implementation is available on the host platform, the mutex subsystem
17542 ** might return such a mutex in response to SQLITE_MUTEX_FAST.
17543 **
17544 ** The other allowed parameters to sqlite3_mutex_alloc() each return
17545 ** a pointer to a static preexisting mutex.  Six static mutexes are
17546 ** used by the current version of SQLite.  Future versions of SQLite
17547 ** may add additional static mutexes.  Static mutexes are for internal
17548 ** use by SQLite only.  Applications that use SQLite mutexes should
17549 ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
17550 ** SQLITE_MUTEX_RECURSIVE.
17551 **
17552 ** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
17553 ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
17554 ** returns a different mutex on every call.  But for the static 
17555 ** mutex types, the same mutex is returned on every call that has
17556 ** the same type number.
17557 */
17558 static sqlite3_mutex *winMutexAlloc(int iType){
17559   sqlite3_mutex *p;
17560
17561   switch( iType ){
17562     case SQLITE_MUTEX_FAST:
17563     case SQLITE_MUTEX_RECURSIVE: {
17564       p = sqlite3MallocZero( sizeof(*p) );
17565       if( p ){  
17566 #ifdef SQLITE_DEBUG
17567         p->id = iType;
17568 #endif
17569         InitializeCriticalSection(&p->mutex);
17570       }
17571       break;
17572     }
17573     default: {
17574       assert( winMutex_isInit==1 );
17575       assert( iType-2 >= 0 );
17576       assert( iType-2 < ArraySize(winMutex_staticMutexes) );
17577       p = &winMutex_staticMutexes[iType-2];
17578 #ifdef SQLITE_DEBUG
17579       p->id = iType;
17580 #endif
17581       break;
17582     }
17583   }
17584   return p;
17585 }
17586
17587
17588 /*
17589 ** This routine deallocates a previously
17590 ** allocated mutex.  SQLite is careful to deallocate every
17591 ** mutex that it allocates.
17592 */
17593 static void winMutexFree(sqlite3_mutex *p){
17594   assert( p );
17595   assert( p->nRef==0 && p->owner==0 );
17596   assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
17597   DeleteCriticalSection(&p->mutex);
17598   sqlite3_free(p);
17599 }
17600
17601 /*
17602 ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
17603 ** to enter a mutex.  If another thread is already within the mutex,
17604 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
17605 ** SQLITE_BUSY.  The sqlite3_mutex_try() interface returns SQLITE_OK
17606 ** upon successful entry.  Mutexes created using SQLITE_MUTEX_RECURSIVE can
17607 ** be entered multiple times by the same thread.  In such cases the,
17608 ** mutex must be exited an equal number of times before another thread
17609 ** can enter.  If the same thread tries to enter any other kind of mutex
17610 ** more than once, the behavior is undefined.
17611 */
17612 static void winMutexEnter(sqlite3_mutex *p){
17613 #ifdef SQLITE_DEBUG
17614   DWORD tid = GetCurrentThreadId(); 
17615   assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) );
17616 #endif
17617   EnterCriticalSection(&p->mutex);
17618 #ifdef SQLITE_DEBUG
17619   assert( p->nRef>0 || p->owner==0 );
17620   p->owner = tid; 
17621   p->nRef++;
17622   if( p->trace ){
17623     printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
17624   }
17625 #endif
17626 }
17627 static int winMutexTry(sqlite3_mutex *p){
17628 #ifndef NDEBUG
17629   DWORD tid = GetCurrentThreadId(); 
17630 #endif
17631   int rc = SQLITE_BUSY;
17632   assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) );
17633   /*
17634   ** The sqlite3_mutex_try() routine is very rarely used, and when it
17635   ** is used it is merely an optimization.  So it is OK for it to always
17636   ** fail.  
17637   **
17638   ** The TryEnterCriticalSection() interface is only available on WinNT.
17639   ** And some windows compilers complain if you try to use it without
17640   ** first doing some #defines that prevent SQLite from building on Win98.
17641   ** For that reason, we will omit this optimization for now.  See
17642   ** ticket #2685.
17643   */
17644 #if 0
17645   if( mutexIsNT() && TryEnterCriticalSection(&p->mutex) ){
17646     p->owner = tid;
17647     p->nRef++;
17648     rc = SQLITE_OK;
17649   }
17650 #else
17651   UNUSED_PARAMETER(p);
17652 #endif
17653 #ifdef SQLITE_DEBUG
17654   if( rc==SQLITE_OK && p->trace ){
17655     printf("try mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
17656   }
17657 #endif
17658   return rc;
17659 }
17660
17661 /*
17662 ** The sqlite3_mutex_leave() routine exits a mutex that was
17663 ** previously entered by the same thread.  The behavior
17664 ** is undefined if the mutex is not currently entered or
17665 ** is not currently allocated.  SQLite will never do either.
17666 */
17667 static void winMutexLeave(sqlite3_mutex *p){
17668 #ifndef NDEBUG
17669   DWORD tid = GetCurrentThreadId();
17670   assert( p->nRef>0 );
17671   assert( p->owner==tid );
17672   p->nRef--;
17673   if( p->nRef==0 ) p->owner = 0;
17674   assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE );
17675 #endif
17676   LeaveCriticalSection(&p->mutex);
17677 #ifdef SQLITE_DEBUG
17678   if( p->trace ){
17679     printf("leave mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
17680   }
17681 #endif
17682 }
17683
17684 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
17685   static const sqlite3_mutex_methods sMutex = {
17686     winMutexInit,
17687     winMutexEnd,
17688     winMutexAlloc,
17689     winMutexFree,
17690     winMutexEnter,
17691     winMutexTry,
17692     winMutexLeave,
17693 #ifdef SQLITE_DEBUG
17694     winMutexHeld,
17695     winMutexNotheld
17696 #else
17697     0,
17698     0
17699 #endif
17700   };
17701
17702   return &sMutex;
17703 }
17704 #endif /* SQLITE_MUTEX_W32 */
17705
17706 /************** End of mutex_w32.c *******************************************/
17707 /************** Begin file malloc.c ******************************************/
17708 /*
17709 ** 2001 September 15
17710 **
17711 ** The author disclaims copyright to this source code.  In place of
17712 ** a legal notice, here is a blessing:
17713 **
17714 **    May you do good and not evil.
17715 **    May you find forgiveness for yourself and forgive others.
17716 **    May you share freely, never taking more than you give.
17717 **
17718 *************************************************************************
17719 **
17720 ** Memory allocation functions used throughout sqlite.
17721 */
17722
17723 /*
17724 ** Attempt to release up to n bytes of non-essential memory currently
17725 ** held by SQLite. An example of non-essential memory is memory used to
17726 ** cache database pages that are not currently in use.
17727 */
17728 SQLITE_API int sqlite3_release_memory(int n){
17729 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
17730   return sqlite3PcacheReleaseMemory(n);
17731 #else
17732   /* IMPLEMENTATION-OF: R-34391-24921 The sqlite3_release_memory() routine
17733   ** is a no-op returning zero if SQLite is not compiled with
17734   ** SQLITE_ENABLE_MEMORY_MANAGEMENT. */
17735   UNUSED_PARAMETER(n);
17736   return 0;
17737 #endif
17738 }
17739
17740 /*
17741 ** An instance of the following object records the location of
17742 ** each unused scratch buffer.
17743 */
17744 typedef struct ScratchFreeslot {
17745   struct ScratchFreeslot *pNext;   /* Next unused scratch buffer */
17746 } ScratchFreeslot;
17747
17748 /*
17749 ** State information local to the memory allocation subsystem.
17750 */
17751 static SQLITE_WSD struct Mem0Global {
17752   sqlite3_mutex *mutex;         /* Mutex to serialize access */
17753
17754   /*
17755   ** The alarm callback and its arguments.  The mem0.mutex lock will
17756   ** be held while the callback is running.  Recursive calls into
17757   ** the memory subsystem are allowed, but no new callbacks will be
17758   ** issued.
17759   */
17760   sqlite3_int64 alarmThreshold;
17761   void (*alarmCallback)(void*, sqlite3_int64,int);
17762   void *alarmArg;
17763
17764   /*
17765   ** Pointers to the end of sqlite3GlobalConfig.pScratch memory
17766   ** (so that a range test can be used to determine if an allocation
17767   ** being freed came from pScratch) and a pointer to the list of
17768   ** unused scratch allocations.
17769   */
17770   void *pScratchEnd;
17771   ScratchFreeslot *pScratchFree;
17772   u32 nScratchFree;
17773
17774   /*
17775   ** True if heap is nearly "full" where "full" is defined by the
17776   ** sqlite3_soft_heap_limit() setting.
17777   */
17778   int nearlyFull;
17779 } mem0 = { 0, 0, 0, 0, 0, 0, 0, 0 };
17780
17781 #define mem0 GLOBAL(struct Mem0Global, mem0)
17782
17783 /*
17784 ** This routine runs when the memory allocator sees that the
17785 ** total memory allocation is about to exceed the soft heap
17786 ** limit.
17787 */
17788 static void softHeapLimitEnforcer(
17789   void *NotUsed, 
17790   sqlite3_int64 NotUsed2,
17791   int allocSize
17792 ){
17793   UNUSED_PARAMETER2(NotUsed, NotUsed2);
17794   sqlite3_release_memory(allocSize);
17795 }
17796
17797 /*
17798 ** Change the alarm callback
17799 */
17800 static int sqlite3MemoryAlarm(
17801   void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
17802   void *pArg,
17803   sqlite3_int64 iThreshold
17804 ){
17805   int nUsed;
17806   sqlite3_mutex_enter(mem0.mutex);
17807   mem0.alarmCallback = xCallback;
17808   mem0.alarmArg = pArg;
17809   mem0.alarmThreshold = iThreshold;
17810   nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
17811   mem0.nearlyFull = (iThreshold>0 && iThreshold<=nUsed);
17812   sqlite3_mutex_leave(mem0.mutex);
17813   return SQLITE_OK;
17814 }
17815
17816 #ifndef SQLITE_OMIT_DEPRECATED
17817 /*
17818 ** Deprecated external interface.  Internal/core SQLite code
17819 ** should call sqlite3MemoryAlarm.
17820 */
17821 SQLITE_API int sqlite3_memory_alarm(
17822   void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
17823   void *pArg,
17824   sqlite3_int64 iThreshold
17825 ){
17826   return sqlite3MemoryAlarm(xCallback, pArg, iThreshold);
17827 }
17828 #endif
17829
17830 /*
17831 ** Set the soft heap-size limit for the library. Passing a zero or 
17832 ** negative value indicates no limit.
17833 */
17834 SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 n){
17835   sqlite3_int64 priorLimit;
17836   sqlite3_int64 excess;
17837 #ifndef SQLITE_OMIT_AUTOINIT
17838   sqlite3_initialize();
17839 #endif
17840   sqlite3_mutex_enter(mem0.mutex);
17841   priorLimit = mem0.alarmThreshold;
17842   sqlite3_mutex_leave(mem0.mutex);
17843   if( n<0 ) return priorLimit;
17844   if( n>0 ){
17845     sqlite3MemoryAlarm(softHeapLimitEnforcer, 0, n);
17846   }else{
17847     sqlite3MemoryAlarm(0, 0, 0);
17848   }
17849   excess = sqlite3_memory_used() - n;
17850   if( excess>0 ) sqlite3_release_memory((int)(excess & 0x7fffffff));
17851   return priorLimit;
17852 }
17853 SQLITE_API void sqlite3_soft_heap_limit(int n){
17854   if( n<0 ) n = 0;
17855   sqlite3_soft_heap_limit64(n);
17856 }
17857
17858 /*
17859 ** Initialize the memory allocation subsystem.
17860 */
17861 SQLITE_PRIVATE int sqlite3MallocInit(void){
17862   if( sqlite3GlobalConfig.m.xMalloc==0 ){
17863     sqlite3MemSetDefault();
17864   }
17865   memset(&mem0, 0, sizeof(mem0));
17866   if( sqlite3GlobalConfig.bCoreMutex ){
17867     mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
17868   }
17869   if( sqlite3GlobalConfig.pScratch && sqlite3GlobalConfig.szScratch>=100
17870       && sqlite3GlobalConfig.nScratch>0 ){
17871     int i, n, sz;
17872     ScratchFreeslot *pSlot;
17873     sz = ROUNDDOWN8(sqlite3GlobalConfig.szScratch);
17874     sqlite3GlobalConfig.szScratch = sz;
17875     pSlot = (ScratchFreeslot*)sqlite3GlobalConfig.pScratch;
17876     n = sqlite3GlobalConfig.nScratch;
17877     mem0.pScratchFree = pSlot;
17878     mem0.nScratchFree = n;
17879     for(i=0; i<n-1; i++){
17880       pSlot->pNext = (ScratchFreeslot*)(sz+(char*)pSlot);
17881       pSlot = pSlot->pNext;
17882     }
17883     pSlot->pNext = 0;
17884     mem0.pScratchEnd = (void*)&pSlot[1];
17885   }else{
17886     mem0.pScratchEnd = 0;
17887     sqlite3GlobalConfig.pScratch = 0;
17888     sqlite3GlobalConfig.szScratch = 0;
17889     sqlite3GlobalConfig.nScratch = 0;
17890   }
17891   if( sqlite3GlobalConfig.pPage==0 || sqlite3GlobalConfig.szPage<512
17892       || sqlite3GlobalConfig.nPage<1 ){
17893     sqlite3GlobalConfig.pPage = 0;
17894     sqlite3GlobalConfig.szPage = 0;
17895     sqlite3GlobalConfig.nPage = 0;
17896   }
17897   return sqlite3GlobalConfig.m.xInit(sqlite3GlobalConfig.m.pAppData);
17898 }
17899
17900 /*
17901 ** Return true if the heap is currently under memory pressure - in other
17902 ** words if the amount of heap used is close to the limit set by
17903 ** sqlite3_soft_heap_limit().
17904 */
17905 SQLITE_PRIVATE int sqlite3HeapNearlyFull(void){
17906   return mem0.nearlyFull;
17907 }
17908
17909 /*
17910 ** Deinitialize the memory allocation subsystem.
17911 */
17912 SQLITE_PRIVATE void sqlite3MallocEnd(void){
17913   if( sqlite3GlobalConfig.m.xShutdown ){
17914     sqlite3GlobalConfig.m.xShutdown(sqlite3GlobalConfig.m.pAppData);
17915   }
17916   memset(&mem0, 0, sizeof(mem0));
17917 }
17918
17919 /*
17920 ** Return the amount of memory currently checked out.
17921 */
17922 SQLITE_API sqlite3_int64 sqlite3_memory_used(void){
17923   int n, mx;
17924   sqlite3_int64 res;
17925   sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, 0);
17926   res = (sqlite3_int64)n;  /* Work around bug in Borland C. Ticket #3216 */
17927   return res;
17928 }
17929
17930 /*
17931 ** Return the maximum amount of memory that has ever been
17932 ** checked out since either the beginning of this process
17933 ** or since the most recent reset.
17934 */
17935 SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag){
17936   int n, mx;
17937   sqlite3_int64 res;
17938   sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, resetFlag);
17939   res = (sqlite3_int64)mx;  /* Work around bug in Borland C. Ticket #3216 */
17940   return res;
17941 }
17942
17943 /*
17944 ** Trigger the alarm 
17945 */
17946 static void sqlite3MallocAlarm(int nByte){
17947   void (*xCallback)(void*,sqlite3_int64,int);
17948   sqlite3_int64 nowUsed;
17949   void *pArg;
17950   if( mem0.alarmCallback==0 ) return;
17951   xCallback = mem0.alarmCallback;
17952   nowUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
17953   pArg = mem0.alarmArg;
17954   mem0.alarmCallback = 0;
17955   sqlite3_mutex_leave(mem0.mutex);
17956   xCallback(pArg, nowUsed, nByte);
17957   sqlite3_mutex_enter(mem0.mutex);
17958   mem0.alarmCallback = xCallback;
17959   mem0.alarmArg = pArg;
17960 }
17961
17962 /*
17963 ** Do a memory allocation with statistics and alarms.  Assume the
17964 ** lock is already held.
17965 */
17966 static int mallocWithAlarm(int n, void **pp){
17967   int nFull;
17968   void *p;
17969   assert( sqlite3_mutex_held(mem0.mutex) );
17970   nFull = sqlite3GlobalConfig.m.xRoundup(n);
17971   sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, n);
17972   if( mem0.alarmCallback!=0 ){
17973     int nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
17974     if( nUsed+nFull >= mem0.alarmThreshold ){
17975       mem0.nearlyFull = 1;
17976       sqlite3MallocAlarm(nFull);
17977     }else{
17978       mem0.nearlyFull = 0;
17979     }
17980   }
17981   p = sqlite3GlobalConfig.m.xMalloc(nFull);
17982 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
17983   if( p==0 && mem0.alarmCallback ){
17984     sqlite3MallocAlarm(nFull);
17985     p = sqlite3GlobalConfig.m.xMalloc(nFull);
17986   }
17987 #endif
17988   if( p ){
17989     nFull = sqlite3MallocSize(p);
17990     sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nFull);
17991     sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, 1);
17992   }
17993   *pp = p;
17994   return nFull;
17995 }
17996
17997 /*
17998 ** Allocate memory.  This routine is like sqlite3_malloc() except that it
17999 ** assumes the memory subsystem has already been initialized.
18000 */
18001 SQLITE_PRIVATE void *sqlite3Malloc(int n){
18002   void *p;
18003   if( n<=0               /* IMP: R-65312-04917 */ 
18004    || n>=0x7fffff00
18005   ){
18006     /* A memory allocation of a number of bytes which is near the maximum
18007     ** signed integer value might cause an integer overflow inside of the
18008     ** xMalloc().  Hence we limit the maximum size to 0x7fffff00, giving
18009     ** 255 bytes of overhead.  SQLite itself will never use anything near
18010     ** this amount.  The only way to reach the limit is with sqlite3_malloc() */
18011     p = 0;
18012   }else if( sqlite3GlobalConfig.bMemstat ){
18013     sqlite3_mutex_enter(mem0.mutex);
18014     mallocWithAlarm(n, &p);
18015     sqlite3_mutex_leave(mem0.mutex);
18016   }else{
18017     p = sqlite3GlobalConfig.m.xMalloc(n);
18018   }
18019   assert( EIGHT_BYTE_ALIGNMENT(p) );  /* IMP: R-04675-44850 */
18020   return p;
18021 }
18022
18023 /*
18024 ** This version of the memory allocation is for use by the application.
18025 ** First make sure the memory subsystem is initialized, then do the
18026 ** allocation.
18027 */
18028 SQLITE_API void *sqlite3_malloc(int n){
18029 #ifndef SQLITE_OMIT_AUTOINIT
18030   if( sqlite3_initialize() ) return 0;
18031 #endif
18032   return sqlite3Malloc(n);
18033 }
18034
18035 /*
18036 ** Each thread may only have a single outstanding allocation from
18037 ** xScratchMalloc().  We verify this constraint in the single-threaded
18038 ** case by setting scratchAllocOut to 1 when an allocation
18039 ** is outstanding clearing it when the allocation is freed.
18040 */
18041 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
18042 static int scratchAllocOut = 0;
18043 #endif
18044
18045
18046 /*
18047 ** Allocate memory that is to be used and released right away.
18048 ** This routine is similar to alloca() in that it is not intended
18049 ** for situations where the memory might be held long-term.  This
18050 ** routine is intended to get memory to old large transient data
18051 ** structures that would not normally fit on the stack of an
18052 ** embedded processor.
18053 */
18054 SQLITE_PRIVATE void *sqlite3ScratchMalloc(int n){
18055   void *p;
18056   assert( n>0 );
18057
18058   sqlite3_mutex_enter(mem0.mutex);
18059   if( mem0.nScratchFree && sqlite3GlobalConfig.szScratch>=n ){
18060     p = mem0.pScratchFree;
18061     mem0.pScratchFree = mem0.pScratchFree->pNext;
18062     mem0.nScratchFree--;
18063     sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1);
18064     sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
18065     sqlite3_mutex_leave(mem0.mutex);
18066   }else{
18067     if( sqlite3GlobalConfig.bMemstat ){
18068       sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
18069       n = mallocWithAlarm(n, &p);
18070       if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n);
18071       sqlite3_mutex_leave(mem0.mutex);
18072     }else{
18073       sqlite3_mutex_leave(mem0.mutex);
18074       p = sqlite3GlobalConfig.m.xMalloc(n);
18075     }
18076     sqlite3MemdebugSetType(p, MEMTYPE_SCRATCH);
18077   }
18078   assert( sqlite3_mutex_notheld(mem0.mutex) );
18079
18080
18081 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
18082   /* Verify that no more than two scratch allocations per thread
18083   ** are outstanding at one time.  (This is only checked in the
18084   ** single-threaded case since checking in the multi-threaded case
18085   ** would be much more complicated.) */
18086   assert( scratchAllocOut<=1 );
18087   if( p ) scratchAllocOut++;
18088 #endif
18089
18090   return p;
18091 }
18092 SQLITE_PRIVATE void sqlite3ScratchFree(void *p){
18093   if( p ){
18094
18095 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
18096     /* Verify that no more than two scratch allocation per thread
18097     ** is outstanding at one time.  (This is only checked in the
18098     ** single-threaded case since checking in the multi-threaded case
18099     ** would be much more complicated.) */
18100     assert( scratchAllocOut>=1 && scratchAllocOut<=2 );
18101     scratchAllocOut--;
18102 #endif
18103
18104     if( p>=sqlite3GlobalConfig.pScratch && p<mem0.pScratchEnd ){
18105       /* Release memory from the SQLITE_CONFIG_SCRATCH allocation */
18106       ScratchFreeslot *pSlot;
18107       pSlot = (ScratchFreeslot*)p;
18108       sqlite3_mutex_enter(mem0.mutex);
18109       pSlot->pNext = mem0.pScratchFree;
18110       mem0.pScratchFree = pSlot;
18111       mem0.nScratchFree++;
18112       assert( mem0.nScratchFree <= (u32)sqlite3GlobalConfig.nScratch );
18113       sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, -1);
18114       sqlite3_mutex_leave(mem0.mutex);
18115     }else{
18116       /* Release memory back to the heap */
18117       assert( sqlite3MemdebugHasType(p, MEMTYPE_SCRATCH) );
18118       assert( sqlite3MemdebugNoType(p, ~MEMTYPE_SCRATCH) );
18119       sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
18120       if( sqlite3GlobalConfig.bMemstat ){
18121         int iSize = sqlite3MallocSize(p);
18122         sqlite3_mutex_enter(mem0.mutex);
18123         sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, -iSize);
18124         sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -iSize);
18125         sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, -1);
18126         sqlite3GlobalConfig.m.xFree(p);
18127         sqlite3_mutex_leave(mem0.mutex);
18128       }else{
18129         sqlite3GlobalConfig.m.xFree(p);
18130       }
18131     }
18132   }
18133 }
18134
18135 /*
18136 ** TRUE if p is a lookaside memory allocation from db
18137 */
18138 #ifndef SQLITE_OMIT_LOOKASIDE
18139 static int isLookaside(sqlite3 *db, void *p){
18140   return p && p>=db->lookaside.pStart && p<db->lookaside.pEnd;
18141 }
18142 #else
18143 #define isLookaside(A,B) 0
18144 #endif
18145
18146 /*
18147 ** Return the size of a memory allocation previously obtained from
18148 ** sqlite3Malloc() or sqlite3_malloc().
18149 */
18150 SQLITE_PRIVATE int sqlite3MallocSize(void *p){
18151   assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
18152   assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
18153   return sqlite3GlobalConfig.m.xSize(p);
18154 }
18155 SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, void *p){
18156   assert( db==0 || sqlite3_mutex_held(db->mutex) );
18157   if( db && isLookaside(db, p) ){
18158     return db->lookaside.sz;
18159   }else{
18160     assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
18161     assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
18162     assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
18163     return sqlite3GlobalConfig.m.xSize(p);
18164   }
18165 }
18166
18167 /*
18168 ** Free memory previously obtained from sqlite3Malloc().
18169 */
18170 SQLITE_API void sqlite3_free(void *p){
18171   if( p==0 ) return;  /* IMP: R-49053-54554 */
18172   assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
18173   assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
18174   if( sqlite3GlobalConfig.bMemstat ){
18175     sqlite3_mutex_enter(mem0.mutex);
18176     sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -sqlite3MallocSize(p));
18177     sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, -1);
18178     sqlite3GlobalConfig.m.xFree(p);
18179     sqlite3_mutex_leave(mem0.mutex);
18180   }else{
18181     sqlite3GlobalConfig.m.xFree(p);
18182   }
18183 }
18184
18185 /*
18186 ** Free memory that might be associated with a particular database
18187 ** connection.
18188 */
18189 SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){
18190   assert( db==0 || sqlite3_mutex_held(db->mutex) );
18191   if( db ){
18192     if( db->pnBytesFreed ){
18193       *db->pnBytesFreed += sqlite3DbMallocSize(db, p);
18194       return;
18195     }
18196     if( isLookaside(db, p) ){
18197       LookasideSlot *pBuf = (LookasideSlot*)p;
18198       pBuf->pNext = db->lookaside.pFree;
18199       db->lookaside.pFree = pBuf;
18200       db->lookaside.nOut--;
18201       return;
18202     }
18203   }
18204   assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
18205   assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
18206   assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
18207   sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
18208   sqlite3_free(p);
18209 }
18210
18211 /*
18212 ** Change the size of an existing memory allocation
18213 */
18214 SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, int nBytes){
18215   int nOld, nNew;
18216   void *pNew;
18217   if( pOld==0 ){
18218     return sqlite3Malloc(nBytes); /* IMP: R-28354-25769 */
18219   }
18220   if( nBytes<=0 ){
18221     sqlite3_free(pOld); /* IMP: R-31593-10574 */
18222     return 0;
18223   }
18224   if( nBytes>=0x7fffff00 ){
18225     /* The 0x7ffff00 limit term is explained in comments on sqlite3Malloc() */
18226     return 0;
18227   }
18228   nOld = sqlite3MallocSize(pOld);
18229   /* IMPLEMENTATION-OF: R-46199-30249 SQLite guarantees that the second
18230   ** argument to xRealloc is always a value returned by a prior call to
18231   ** xRoundup. */
18232   nNew = sqlite3GlobalConfig.m.xRoundup(nBytes);
18233   if( nOld==nNew ){
18234     pNew = pOld;
18235   }else if( sqlite3GlobalConfig.bMemstat ){
18236     sqlite3_mutex_enter(mem0.mutex);
18237     sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, nBytes);
18238     if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED)+nNew-nOld >= 
18239           mem0.alarmThreshold ){
18240       sqlite3MallocAlarm(nNew-nOld);
18241     }
18242     assert( sqlite3MemdebugHasType(pOld, MEMTYPE_HEAP) );
18243     assert( sqlite3MemdebugNoType(pOld, ~MEMTYPE_HEAP) );
18244     pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
18245     if( pNew==0 && mem0.alarmCallback ){
18246       sqlite3MallocAlarm(nBytes);
18247       pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
18248     }
18249     if( pNew ){
18250       nNew = sqlite3MallocSize(pNew);
18251       sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nNew-nOld);
18252     }
18253     sqlite3_mutex_leave(mem0.mutex);
18254   }else{
18255     pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
18256   }
18257   assert( EIGHT_BYTE_ALIGNMENT(pNew) ); /* IMP: R-04675-44850 */
18258   return pNew;
18259 }
18260
18261 /*
18262 ** The public interface to sqlite3Realloc.  Make sure that the memory
18263 ** subsystem is initialized prior to invoking sqliteRealloc.
18264 */
18265 SQLITE_API void *sqlite3_realloc(void *pOld, int n){
18266 #ifndef SQLITE_OMIT_AUTOINIT
18267   if( sqlite3_initialize() ) return 0;
18268 #endif
18269   return sqlite3Realloc(pOld, n);
18270 }
18271
18272
18273 /*
18274 ** Allocate and zero memory.
18275 */ 
18276 SQLITE_PRIVATE void *sqlite3MallocZero(int n){
18277   void *p = sqlite3Malloc(n);
18278   if( p ){
18279     memset(p, 0, n);
18280   }
18281   return p;
18282 }
18283
18284 /*
18285 ** Allocate and zero memory.  If the allocation fails, make
18286 ** the mallocFailed flag in the connection pointer.
18287 */
18288 SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3 *db, int n){
18289   void *p = sqlite3DbMallocRaw(db, n);
18290   if( p ){
18291     memset(p, 0, n);
18292   }
18293   return p;
18294 }
18295
18296 /*
18297 ** Allocate and zero memory.  If the allocation fails, make
18298 ** the mallocFailed flag in the connection pointer.
18299 **
18300 ** If db!=0 and db->mallocFailed is true (indicating a prior malloc
18301 ** failure on the same database connection) then always return 0.
18302 ** Hence for a particular database connection, once malloc starts
18303 ** failing, it fails consistently until mallocFailed is reset.
18304 ** This is an important assumption.  There are many places in the
18305 ** code that do things like this:
18306 **
18307 **         int *a = (int*)sqlite3DbMallocRaw(db, 100);
18308 **         int *b = (int*)sqlite3DbMallocRaw(db, 200);
18309 **         if( b ) a[10] = 9;
18310 **
18311 ** In other words, if a subsequent malloc (ex: "b") worked, it is assumed
18312 ** that all prior mallocs (ex: "a") worked too.
18313 */
18314 SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, int n){
18315   void *p;
18316   assert( db==0 || sqlite3_mutex_held(db->mutex) );
18317   assert( db==0 || db->pnBytesFreed==0 );
18318 #ifndef SQLITE_OMIT_LOOKASIDE
18319   if( db ){
18320     LookasideSlot *pBuf;
18321     if( db->mallocFailed ){
18322       return 0;
18323     }
18324     if( db->lookaside.bEnabled ){
18325       if( n>db->lookaside.sz ){
18326         db->lookaside.anStat[1]++;
18327       }else if( (pBuf = db->lookaside.pFree)==0 ){
18328         db->lookaside.anStat[2]++;
18329       }else{
18330         db->lookaside.pFree = pBuf->pNext;
18331         db->lookaside.nOut++;
18332         db->lookaside.anStat[0]++;
18333         if( db->lookaside.nOut>db->lookaside.mxOut ){
18334           db->lookaside.mxOut = db->lookaside.nOut;
18335         }
18336         return (void*)pBuf;
18337       }
18338     }
18339   }
18340 #else
18341   if( db && db->mallocFailed ){
18342     return 0;
18343   }
18344 #endif
18345   p = sqlite3Malloc(n);
18346   if( !p && db ){
18347     db->mallocFailed = 1;
18348   }
18349   sqlite3MemdebugSetType(p, MEMTYPE_DB |
18350          ((db && db->lookaside.bEnabled) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
18351   return p;
18352 }
18353
18354 /*
18355 ** Resize the block of memory pointed to by p to n bytes. If the
18356 ** resize fails, set the mallocFailed flag in the connection object.
18357 */
18358 SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
18359   void *pNew = 0;
18360   assert( db!=0 );
18361   assert( sqlite3_mutex_held(db->mutex) );
18362   if( db->mallocFailed==0 ){
18363     if( p==0 ){
18364       return sqlite3DbMallocRaw(db, n);
18365     }
18366     if( isLookaside(db, p) ){
18367       if( n<=db->lookaside.sz ){
18368         return p;
18369       }
18370       pNew = sqlite3DbMallocRaw(db, n);
18371       if( pNew ){
18372         memcpy(pNew, p, db->lookaside.sz);
18373         sqlite3DbFree(db, p);
18374       }
18375     }else{
18376       assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
18377       assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
18378       sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
18379       pNew = sqlite3_realloc(p, n);
18380       if( !pNew ){
18381         sqlite3MemdebugSetType(p, MEMTYPE_DB|MEMTYPE_HEAP);
18382         db->mallocFailed = 1;
18383       }
18384       sqlite3MemdebugSetType(pNew, MEMTYPE_DB | 
18385             (db->lookaside.bEnabled ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
18386     }
18387   }
18388   return pNew;
18389 }
18390
18391 /*
18392 ** Attempt to reallocate p.  If the reallocation fails, then free p
18393 ** and set the mallocFailed flag in the database connection.
18394 */
18395 SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, int n){
18396   void *pNew;
18397   pNew = sqlite3DbRealloc(db, p, n);
18398   if( !pNew ){
18399     sqlite3DbFree(db, p);
18400   }
18401   return pNew;
18402 }
18403
18404 /*
18405 ** Make a copy of a string in memory obtained from sqliteMalloc(). These 
18406 ** functions call sqlite3MallocRaw() directly instead of sqliteMalloc(). This
18407 ** is because when memory debugging is turned on, these two functions are 
18408 ** called via macros that record the current file and line number in the
18409 ** ThreadData structure.
18410 */
18411 SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3 *db, const char *z){
18412   char *zNew;
18413   size_t n;
18414   if( z==0 ){
18415     return 0;
18416   }
18417   n = sqlite3Strlen30(z) + 1;
18418   assert( (n&0x7fffffff)==n );
18419   zNew = sqlite3DbMallocRaw(db, (int)n);
18420   if( zNew ){
18421     memcpy(zNew, z, n);
18422   }
18423   return zNew;
18424 }
18425 SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, int n){
18426   char *zNew;
18427   if( z==0 ){
18428     return 0;
18429   }
18430   assert( (n&0x7fffffff)==n );
18431   zNew = sqlite3DbMallocRaw(db, n+1);
18432   if( zNew ){
18433     memcpy(zNew, z, n);
18434     zNew[n] = 0;
18435   }
18436   return zNew;
18437 }
18438
18439 /*
18440 ** Create a string from the zFromat argument and the va_list that follows.
18441 ** Store the string in memory obtained from sqliteMalloc() and make *pz
18442 ** point to that string.
18443 */
18444 SQLITE_PRIVATE void sqlite3SetString(char **pz, sqlite3 *db, const char *zFormat, ...){
18445   va_list ap;
18446   char *z;
18447
18448   va_start(ap, zFormat);
18449   z = sqlite3VMPrintf(db, zFormat, ap);
18450   va_end(ap);
18451   sqlite3DbFree(db, *pz);
18452   *pz = z;
18453 }
18454
18455
18456 /*
18457 ** This function must be called before exiting any API function (i.e. 
18458 ** returning control to the user) that has called sqlite3_malloc or
18459 ** sqlite3_realloc.
18460 **
18461 ** The returned value is normally a copy of the second argument to this
18462 ** function. However, if a malloc() failure has occurred since the previous
18463 ** invocation SQLITE_NOMEM is returned instead. 
18464 **
18465 ** If the first argument, db, is not NULL and a malloc() error has occurred,
18466 ** then the connection error-code (the value returned by sqlite3_errcode())
18467 ** is set to SQLITE_NOMEM.
18468 */
18469 SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){
18470   /* If the db handle is not NULL, then we must hold the connection handle
18471   ** mutex here. Otherwise the read (and possible write) of db->mallocFailed 
18472   ** is unsafe, as is the call to sqlite3Error().
18473   */
18474   assert( !db || sqlite3_mutex_held(db->mutex) );
18475   if( db && (db->mallocFailed || rc==SQLITE_IOERR_NOMEM) ){
18476     sqlite3Error(db, SQLITE_NOMEM, 0);
18477     db->mallocFailed = 0;
18478     rc = SQLITE_NOMEM;
18479   }
18480   return rc & (db ? db->errMask : 0xff);
18481 }
18482
18483 /************** End of malloc.c **********************************************/
18484 /************** Begin file printf.c ******************************************/
18485 /*
18486 ** The "printf" code that follows dates from the 1980's.  It is in
18487 ** the public domain.  The original comments are included here for
18488 ** completeness.  They are very out-of-date but might be useful as
18489 ** an historical reference.  Most of the "enhancements" have been backed
18490 ** out so that the functionality is now the same as standard printf().
18491 **
18492 **************************************************************************
18493 **
18494 ** The following modules is an enhanced replacement for the "printf" subroutines
18495 ** found in the standard C library.  The following enhancements are
18496 ** supported:
18497 **
18498 **      +  Additional functions.  The standard set of "printf" functions
18499 **         includes printf, fprintf, sprintf, vprintf, vfprintf, and
18500 **         vsprintf.  This module adds the following:
18501 **
18502 **           *  snprintf -- Works like sprintf, but has an extra argument
18503 **                          which is the size of the buffer written to.
18504 **
18505 **           *  mprintf --  Similar to sprintf.  Writes output to memory
18506 **                          obtained from malloc.
18507 **
18508 **           *  xprintf --  Calls a function to dispose of output.
18509 **
18510 **           *  nprintf --  No output, but returns the number of characters
18511 **                          that would have been output by printf.
18512 **
18513 **           *  A v- version (ex: vsnprintf) of every function is also
18514 **              supplied.
18515 **
18516 **      +  A few extensions to the formatting notation are supported:
18517 **
18518 **           *  The "=" flag (similar to "-") causes the output to be
18519 **              be centered in the appropriately sized field.
18520 **
18521 **           *  The %b field outputs an integer in binary notation.
18522 **
18523 **           *  The %c field now accepts a precision.  The character output
18524 **              is repeated by the number of times the precision specifies.
18525 **
18526 **           *  The %' field works like %c, but takes as its character the
18527 **              next character of the format string, instead of the next
18528 **              argument.  For example,  printf("%.78'-")  prints 78 minus
18529 **              signs, the same as  printf("%.78c",'-').
18530 **
18531 **      +  When compiled using GCC on a SPARC, this version of printf is
18532 **         faster than the library printf for SUN OS 4.1.
18533 **
18534 **      +  All functions are fully reentrant.
18535 **
18536 */
18537
18538 /*
18539 ** Conversion types fall into various categories as defined by the
18540 ** following enumeration.
18541 */
18542 #define etRADIX       1 /* Integer types.  %d, %x, %o, and so forth */
18543 #define etFLOAT       2 /* Floating point.  %f */
18544 #define etEXP         3 /* Exponentional notation. %e and %E */
18545 #define etGENERIC     4 /* Floating or exponential, depending on exponent. %g */
18546 #define etSIZE        5 /* Return number of characters processed so far. %n */
18547 #define etSTRING      6 /* Strings. %s */
18548 #define etDYNSTRING   7 /* Dynamically allocated strings. %z */
18549 #define etPERCENT     8 /* Percent symbol. %% */
18550 #define etCHARX       9 /* Characters. %c */
18551 /* The rest are extensions, not normally found in printf() */
18552 #define etSQLESCAPE  10 /* Strings with '\'' doubled.  %q */
18553 #define etSQLESCAPE2 11 /* Strings with '\'' doubled and enclosed in '',
18554                           NULL pointers replaced by SQL NULL.  %Q */
18555 #define etTOKEN      12 /* a pointer to a Token structure */
18556 #define etSRCLIST    13 /* a pointer to a SrcList */
18557 #define etPOINTER    14 /* The %p conversion */
18558 #define etSQLESCAPE3 15 /* %w -> Strings with '\"' doubled */
18559 #define etORDINAL    16 /* %r -> 1st, 2nd, 3rd, 4th, etc.  English only */
18560
18561 #define etINVALID     0 /* Any unrecognized conversion type */
18562
18563
18564 /*
18565 ** An "etByte" is an 8-bit unsigned value.
18566 */
18567 typedef unsigned char etByte;
18568
18569 /*
18570 ** Each builtin conversion character (ex: the 'd' in "%d") is described
18571 ** by an instance of the following structure
18572 */
18573 typedef struct et_info {   /* Information about each format field */
18574   char fmttype;            /* The format field code letter */
18575   etByte base;             /* The base for radix conversion */
18576   etByte flags;            /* One or more of FLAG_ constants below */
18577   etByte type;             /* Conversion paradigm */
18578   etByte charset;          /* Offset into aDigits[] of the digits string */
18579   etByte prefix;           /* Offset into aPrefix[] of the prefix string */
18580 } et_info;
18581
18582 /*
18583 ** Allowed values for et_info.flags
18584 */
18585 #define FLAG_SIGNED  1     /* True if the value to convert is signed */
18586 #define FLAG_INTERN  2     /* True if for internal use only */
18587 #define FLAG_STRING  4     /* Allow infinity precision */
18588
18589
18590 /*
18591 ** The following table is searched linearly, so it is good to put the
18592 ** most frequently used conversion types first.
18593 */
18594 static const char aDigits[] = "0123456789ABCDEF0123456789abcdef";
18595 static const char aPrefix[] = "-x0\000X0";
18596 static const et_info fmtinfo[] = {
18597   {  'd', 10, 1, etRADIX,      0,  0 },
18598   {  's',  0, 4, etSTRING,     0,  0 },
18599   {  'g',  0, 1, etGENERIC,    30, 0 },
18600   {  'z',  0, 4, etDYNSTRING,  0,  0 },
18601   {  'q',  0, 4, etSQLESCAPE,  0,  0 },
18602   {  'Q',  0, 4, etSQLESCAPE2, 0,  0 },
18603   {  'w',  0, 4, etSQLESCAPE3, 0,  0 },
18604   {  'c',  0, 0, etCHARX,      0,  0 },
18605   {  'o',  8, 0, etRADIX,      0,  2 },
18606   {  'u', 10, 0, etRADIX,      0,  0 },
18607   {  'x', 16, 0, etRADIX,      16, 1 },
18608   {  'X', 16, 0, etRADIX,      0,  4 },
18609 #ifndef SQLITE_OMIT_FLOATING_POINT
18610   {  'f',  0, 1, etFLOAT,      0,  0 },
18611   {  'e',  0, 1, etEXP,        30, 0 },
18612   {  'E',  0, 1, etEXP,        14, 0 },
18613   {  'G',  0, 1, etGENERIC,    14, 0 },
18614 #endif
18615   {  'i', 10, 1, etRADIX,      0,  0 },
18616   {  'n',  0, 0, etSIZE,       0,  0 },
18617   {  '%',  0, 0, etPERCENT,    0,  0 },
18618   {  'p', 16, 0, etPOINTER,    0,  1 },
18619
18620 /* All the rest have the FLAG_INTERN bit set and are thus for internal
18621 ** use only */
18622   {  'T',  0, 2, etTOKEN,      0,  0 },
18623   {  'S',  0, 2, etSRCLIST,    0,  0 },
18624   {  'r', 10, 3, etORDINAL,    0,  0 },
18625 };
18626
18627 /*
18628 ** If SQLITE_OMIT_FLOATING_POINT is defined, then none of the floating point
18629 ** conversions will work.
18630 */
18631 #ifndef SQLITE_OMIT_FLOATING_POINT
18632 /*
18633 ** "*val" is a double such that 0.1 <= *val < 10.0
18634 ** Return the ascii code for the leading digit of *val, then
18635 ** multiply "*val" by 10.0 to renormalize.
18636 **
18637 ** Example:
18638 **     input:     *val = 3.14159
18639 **     output:    *val = 1.4159    function return = '3'
18640 **
18641 ** The counter *cnt is incremented each time.  After counter exceeds
18642 ** 16 (the number of significant digits in a 64-bit float) '0' is
18643 ** always returned.
18644 */
18645 static char et_getdigit(LONGDOUBLE_TYPE *val, int *cnt){
18646   int digit;
18647   LONGDOUBLE_TYPE d;
18648   if( (*cnt)++ >= 16 ) return '0';
18649   digit = (int)*val;
18650   d = digit;
18651   digit += '0';
18652   *val = (*val - d)*10.0;
18653   return (char)digit;
18654 }
18655 #endif /* SQLITE_OMIT_FLOATING_POINT */
18656
18657 /*
18658 ** Append N space characters to the given string buffer.
18659 */
18660 static void appendSpace(StrAccum *pAccum, int N){
18661   static const char zSpaces[] = "                             ";
18662   while( N>=(int)sizeof(zSpaces)-1 ){
18663     sqlite3StrAccumAppend(pAccum, zSpaces, sizeof(zSpaces)-1);
18664     N -= sizeof(zSpaces)-1;
18665   }
18666   if( N>0 ){
18667     sqlite3StrAccumAppend(pAccum, zSpaces, N);
18668   }
18669 }
18670
18671 /*
18672 ** On machines with a small stack size, you can redefine the
18673 ** SQLITE_PRINT_BUF_SIZE to be less than 350.
18674 */
18675 #ifndef SQLITE_PRINT_BUF_SIZE
18676 # if defined(SQLITE_SMALL_STACK)
18677 #   define SQLITE_PRINT_BUF_SIZE 50
18678 # else
18679 #   define SQLITE_PRINT_BUF_SIZE 350
18680 # endif
18681 #endif
18682 #define etBUFSIZE SQLITE_PRINT_BUF_SIZE  /* Size of the output buffer */
18683
18684 /*
18685 ** The root program.  All variations call this core.
18686 **
18687 ** INPUTS:
18688 **   func   This is a pointer to a function taking three arguments
18689 **            1. A pointer to anything.  Same as the "arg" parameter.
18690 **            2. A pointer to the list of characters to be output
18691 **               (Note, this list is NOT null terminated.)
18692 **            3. An integer number of characters to be output.
18693 **               (Note: This number might be zero.)
18694 **
18695 **   arg    This is the pointer to anything which will be passed as the
18696 **          first argument to "func".  Use it for whatever you like.
18697 **
18698 **   fmt    This is the format string, as in the usual print.
18699 **
18700 **   ap     This is a pointer to a list of arguments.  Same as in
18701 **          vfprint.
18702 **
18703 ** OUTPUTS:
18704 **          The return value is the total number of characters sent to
18705 **          the function "func".  Returns -1 on a error.
18706 **
18707 ** Note that the order in which automatic variables are declared below
18708 ** seems to make a big difference in determining how fast this beast
18709 ** will run.
18710 */
18711 SQLITE_PRIVATE void sqlite3VXPrintf(
18712   StrAccum *pAccum,                  /* Accumulate results here */
18713   int useExtended,                   /* Allow extended %-conversions */
18714   const char *fmt,                   /* Format string */
18715   va_list ap                         /* arguments */
18716 ){
18717   int c;                     /* Next character in the format string */
18718   char *bufpt;               /* Pointer to the conversion buffer */
18719   int precision;             /* Precision of the current field */
18720   int length;                /* Length of the field */
18721   int idx;                   /* A general purpose loop counter */
18722   int width;                 /* Width of the current field */
18723   etByte flag_leftjustify;   /* True if "-" flag is present */
18724   etByte flag_plussign;      /* True if "+" flag is present */
18725   etByte flag_blanksign;     /* True if " " flag is present */
18726   etByte flag_alternateform; /* True if "#" flag is present */
18727   etByte flag_altform2;      /* True if "!" flag is present */
18728   etByte flag_zeropad;       /* True if field width constant starts with zero */
18729   etByte flag_long;          /* True if "l" flag is present */
18730   etByte flag_longlong;      /* True if the "ll" flag is present */
18731   etByte done;               /* Loop termination flag */
18732   sqlite_uint64 longvalue;   /* Value for integer types */
18733   LONGDOUBLE_TYPE realvalue; /* Value for real types */
18734   const et_info *infop;      /* Pointer to the appropriate info structure */
18735   char buf[etBUFSIZE];       /* Conversion buffer */
18736   char prefix;               /* Prefix character.  "+" or "-" or " " or '\0'. */
18737   etByte xtype = 0;          /* Conversion paradigm */
18738   char *zExtra;              /* Extra memory used for etTCLESCAPE conversions */
18739 #ifndef SQLITE_OMIT_FLOATING_POINT
18740   int  exp, e2;              /* exponent of real numbers */
18741   double rounder;            /* Used for rounding floating point values */
18742   etByte flag_dp;            /* True if decimal point should be shown */
18743   etByte flag_rtz;           /* True if trailing zeros should be removed */
18744   etByte flag_exp;           /* True to force display of the exponent */
18745   int nsd;                   /* Number of significant digits returned */
18746 #endif
18747
18748   length = 0;
18749   bufpt = 0;
18750   for(; (c=(*fmt))!=0; ++fmt){
18751     if( c!='%' ){
18752       int amt;
18753       bufpt = (char *)fmt;
18754       amt = 1;
18755       while( (c=(*++fmt))!='%' && c!=0 ) amt++;
18756       sqlite3StrAccumAppend(pAccum, bufpt, amt);
18757       if( c==0 ) break;
18758     }
18759     if( (c=(*++fmt))==0 ){
18760       sqlite3StrAccumAppend(pAccum, "%", 1);
18761       break;
18762     }
18763     /* Find out what flags are present */
18764     flag_leftjustify = flag_plussign = flag_blanksign = 
18765      flag_alternateform = flag_altform2 = flag_zeropad = 0;
18766     done = 0;
18767     do{
18768       switch( c ){
18769         case '-':   flag_leftjustify = 1;     break;
18770         case '+':   flag_plussign = 1;        break;
18771         case ' ':   flag_blanksign = 1;       break;
18772         case '#':   flag_alternateform = 1;   break;
18773         case '!':   flag_altform2 = 1;        break;
18774         case '0':   flag_zeropad = 1;         break;
18775         default:    done = 1;                 break;
18776       }
18777     }while( !done && (c=(*++fmt))!=0 );
18778     /* Get the field width */
18779     width = 0;
18780     if( c=='*' ){
18781       width = va_arg(ap,int);
18782       if( width<0 ){
18783         flag_leftjustify = 1;
18784         width = -width;
18785       }
18786       c = *++fmt;
18787     }else{
18788       while( c>='0' && c<='9' ){
18789         width = width*10 + c - '0';
18790         c = *++fmt;
18791       }
18792     }
18793     if( width > etBUFSIZE-10 ){
18794       width = etBUFSIZE-10;
18795     }
18796     /* Get the precision */
18797     if( c=='.' ){
18798       precision = 0;
18799       c = *++fmt;
18800       if( c=='*' ){
18801         precision = va_arg(ap,int);
18802         if( precision<0 ) precision = -precision;
18803         c = *++fmt;
18804       }else{
18805         while( c>='0' && c<='9' ){
18806           precision = precision*10 + c - '0';
18807           c = *++fmt;
18808         }
18809       }
18810     }else{
18811       precision = -1;
18812     }
18813     /* Get the conversion type modifier */
18814     if( c=='l' ){
18815       flag_long = 1;
18816       c = *++fmt;
18817       if( c=='l' ){
18818         flag_longlong = 1;
18819         c = *++fmt;
18820       }else{
18821         flag_longlong = 0;
18822       }
18823     }else{
18824       flag_long = flag_longlong = 0;
18825     }
18826     /* Fetch the info entry for the field */
18827     infop = &fmtinfo[0];
18828     xtype = etINVALID;
18829     for(idx=0; idx<ArraySize(fmtinfo); idx++){
18830       if( c==fmtinfo[idx].fmttype ){
18831         infop = &fmtinfo[idx];
18832         if( useExtended || (infop->flags & FLAG_INTERN)==0 ){
18833           xtype = infop->type;
18834         }else{
18835           return;
18836         }
18837         break;
18838       }
18839     }
18840     zExtra = 0;
18841
18842
18843     /* Limit the precision to prevent overflowing buf[] during conversion */
18844     if( precision>etBUFSIZE-40 && (infop->flags & FLAG_STRING)==0 ){
18845       precision = etBUFSIZE-40;
18846     }
18847
18848     /*
18849     ** At this point, variables are initialized as follows:
18850     **
18851     **   flag_alternateform          TRUE if a '#' is present.
18852     **   flag_altform2               TRUE if a '!' is present.
18853     **   flag_plussign               TRUE if a '+' is present.
18854     **   flag_leftjustify            TRUE if a '-' is present or if the
18855     **                               field width was negative.
18856     **   flag_zeropad                TRUE if the width began with 0.
18857     **   flag_long                   TRUE if the letter 'l' (ell) prefixed
18858     **                               the conversion character.
18859     **   flag_longlong               TRUE if the letter 'll' (ell ell) prefixed
18860     **                               the conversion character.
18861     **   flag_blanksign              TRUE if a ' ' is present.
18862     **   width                       The specified field width.  This is
18863     **                               always non-negative.  Zero is the default.
18864     **   precision                   The specified precision.  The default
18865     **                               is -1.
18866     **   xtype                       The class of the conversion.
18867     **   infop                       Pointer to the appropriate info struct.
18868     */
18869     switch( xtype ){
18870       case etPOINTER:
18871         flag_longlong = sizeof(char*)==sizeof(i64);
18872         flag_long = sizeof(char*)==sizeof(long int);
18873         /* Fall through into the next case */
18874       case etORDINAL:
18875       case etRADIX:
18876         if( infop->flags & FLAG_SIGNED ){
18877           i64 v;
18878           if( flag_longlong ){
18879             v = va_arg(ap,i64);
18880           }else if( flag_long ){
18881             v = va_arg(ap,long int);
18882           }else{
18883             v = va_arg(ap,int);
18884           }
18885           if( v<0 ){
18886             if( v==SMALLEST_INT64 ){
18887               longvalue = ((u64)1)<<63;
18888             }else{
18889               longvalue = -v;
18890             }
18891             prefix = '-';
18892           }else{
18893             longvalue = v;
18894             if( flag_plussign )        prefix = '+';
18895             else if( flag_blanksign )  prefix = ' ';
18896             else                       prefix = 0;
18897           }
18898         }else{
18899           if( flag_longlong ){
18900             longvalue = va_arg(ap,u64);
18901           }else if( flag_long ){
18902             longvalue = va_arg(ap,unsigned long int);
18903           }else{
18904             longvalue = va_arg(ap,unsigned int);
18905           }
18906           prefix = 0;
18907         }
18908         if( longvalue==0 ) flag_alternateform = 0;
18909         if( flag_zeropad && precision<width-(prefix!=0) ){
18910           precision = width-(prefix!=0);
18911         }
18912         bufpt = &buf[etBUFSIZE-1];
18913         if( xtype==etORDINAL ){
18914           static const char zOrd[] = "thstndrd";
18915           int x = (int)(longvalue % 10);
18916           if( x>=4 || (longvalue/10)%10==1 ){
18917             x = 0;
18918           }
18919           buf[etBUFSIZE-3] = zOrd[x*2];
18920           buf[etBUFSIZE-2] = zOrd[x*2+1];
18921           bufpt -= 2;
18922         }
18923         {
18924           register const char *cset;      /* Use registers for speed */
18925           register int base;
18926           cset = &aDigits[infop->charset];
18927           base = infop->base;
18928           do{                                           /* Convert to ascii */
18929             *(--bufpt) = cset[longvalue%base];
18930             longvalue = longvalue/base;
18931           }while( longvalue>0 );
18932         }
18933         length = (int)(&buf[etBUFSIZE-1]-bufpt);
18934         for(idx=precision-length; idx>0; idx--){
18935           *(--bufpt) = '0';                             /* Zero pad */
18936         }
18937         if( prefix ) *(--bufpt) = prefix;               /* Add sign */
18938         if( flag_alternateform && infop->prefix ){      /* Add "0" or "0x" */
18939           const char *pre;
18940           char x;
18941           pre = &aPrefix[infop->prefix];
18942           for(; (x=(*pre))!=0; pre++) *(--bufpt) = x;
18943         }
18944         length = (int)(&buf[etBUFSIZE-1]-bufpt);
18945         break;
18946       case etFLOAT:
18947       case etEXP:
18948       case etGENERIC:
18949         realvalue = va_arg(ap,double);
18950 #ifdef SQLITE_OMIT_FLOATING_POINT
18951         length = 0;
18952 #else
18953         if( precision<0 ) precision = 6;         /* Set default precision */
18954         if( precision>etBUFSIZE/2-10 ) precision = etBUFSIZE/2-10;
18955         if( realvalue<0.0 ){
18956           realvalue = -realvalue;
18957           prefix = '-';
18958         }else{
18959           if( flag_plussign )          prefix = '+';
18960           else if( flag_blanksign )    prefix = ' ';
18961           else                         prefix = 0;
18962         }
18963         if( xtype==etGENERIC && precision>0 ) precision--;
18964 #if 0
18965         /* Rounding works like BSD when the constant 0.4999 is used.  Wierd! */
18966         for(idx=precision, rounder=0.4999; idx>0; idx--, rounder*=0.1);
18967 #else
18968         /* It makes more sense to use 0.5 */
18969         for(idx=precision, rounder=0.5; idx>0; idx--, rounder*=0.1){}
18970 #endif
18971         if( xtype==etFLOAT ) realvalue += rounder;
18972         /* Normalize realvalue to within 10.0 > realvalue >= 1.0 */
18973         exp = 0;
18974         if( sqlite3IsNaN((double)realvalue) ){
18975           bufpt = "NaN";
18976           length = 3;
18977           break;
18978         }
18979         if( realvalue>0.0 ){
18980           while( realvalue>=1e32 && exp<=350 ){ realvalue *= 1e-32; exp+=32; }
18981           while( realvalue>=1e8 && exp<=350 ){ realvalue *= 1e-8; exp+=8; }
18982           while( realvalue>=10.0 && exp<=350 ){ realvalue *= 0.1; exp++; }
18983           while( realvalue<1e-8 ){ realvalue *= 1e8; exp-=8; }
18984           while( realvalue<1.0 ){ realvalue *= 10.0; exp--; }
18985           if( exp>350 ){
18986             if( prefix=='-' ){
18987               bufpt = "-Inf";
18988             }else if( prefix=='+' ){
18989               bufpt = "+Inf";
18990             }else{
18991               bufpt = "Inf";
18992             }
18993             length = sqlite3Strlen30(bufpt);
18994             break;
18995           }
18996         }
18997         bufpt = buf;
18998         /*
18999         ** If the field type is etGENERIC, then convert to either etEXP
19000         ** or etFLOAT, as appropriate.
19001         */
19002         flag_exp = xtype==etEXP;
19003         if( xtype!=etFLOAT ){
19004           realvalue += rounder;
19005           if( realvalue>=10.0 ){ realvalue *= 0.1; exp++; }
19006         }
19007         if( xtype==etGENERIC ){
19008           flag_rtz = !flag_alternateform;
19009           if( exp<-4 || exp>precision ){
19010             xtype = etEXP;
19011           }else{
19012             precision = precision - exp;
19013             xtype = etFLOAT;
19014           }
19015         }else{
19016           flag_rtz = 0;
19017         }
19018         if( xtype==etEXP ){
19019           e2 = 0;
19020         }else{
19021           e2 = exp;
19022         }
19023         nsd = 0;
19024         flag_dp = (precision>0 ?1:0) | flag_alternateform | flag_altform2;
19025         /* The sign in front of the number */
19026         if( prefix ){
19027           *(bufpt++) = prefix;
19028         }
19029         /* Digits prior to the decimal point */
19030         if( e2<0 ){
19031           *(bufpt++) = '0';
19032         }else{
19033           for(; e2>=0; e2--){
19034             *(bufpt++) = et_getdigit(&realvalue,&nsd);
19035           }
19036         }
19037         /* The decimal point */
19038         if( flag_dp ){
19039           *(bufpt++) = '.';
19040         }
19041         /* "0" digits after the decimal point but before the first
19042         ** significant digit of the number */
19043         for(e2++; e2<0; precision--, e2++){
19044           assert( precision>0 );
19045           *(bufpt++) = '0';
19046         }
19047         /* Significant digits after the decimal point */
19048         while( (precision--)>0 ){
19049           *(bufpt++) = et_getdigit(&realvalue,&nsd);
19050         }
19051         /* Remove trailing zeros and the "." if no digits follow the "." */
19052         if( flag_rtz && flag_dp ){
19053           while( bufpt[-1]=='0' ) *(--bufpt) = 0;
19054           assert( bufpt>buf );
19055           if( bufpt[-1]=='.' ){
19056             if( flag_altform2 ){
19057               *(bufpt++) = '0';
19058             }else{
19059               *(--bufpt) = 0;
19060             }
19061           }
19062         }
19063         /* Add the "eNNN" suffix */
19064         if( flag_exp || xtype==etEXP ){
19065           *(bufpt++) = aDigits[infop->charset];
19066           if( exp<0 ){
19067             *(bufpt++) = '-'; exp = -exp;
19068           }else{
19069             *(bufpt++) = '+';
19070           }
19071           if( exp>=100 ){
19072             *(bufpt++) = (char)((exp/100)+'0');        /* 100's digit */
19073             exp %= 100;
19074           }
19075           *(bufpt++) = (char)(exp/10+'0');             /* 10's digit */
19076           *(bufpt++) = (char)(exp%10+'0');             /* 1's digit */
19077         }
19078         *bufpt = 0;
19079
19080         /* The converted number is in buf[] and zero terminated. Output it.
19081         ** Note that the number is in the usual order, not reversed as with
19082         ** integer conversions. */
19083         length = (int)(bufpt-buf);
19084         bufpt = buf;
19085
19086         /* Special case:  Add leading zeros if the flag_zeropad flag is
19087         ** set and we are not left justified */
19088         if( flag_zeropad && !flag_leftjustify && length < width){
19089           int i;
19090           int nPad = width - length;
19091           for(i=width; i>=nPad; i--){
19092             bufpt[i] = bufpt[i-nPad];
19093           }
19094           i = prefix!=0;
19095           while( nPad-- ) bufpt[i++] = '0';
19096           length = width;
19097         }
19098 #endif /* !defined(SQLITE_OMIT_FLOATING_POINT) */
19099         break;
19100       case etSIZE:
19101         *(va_arg(ap,int*)) = pAccum->nChar;
19102         length = width = 0;
19103         break;
19104       case etPERCENT:
19105         buf[0] = '%';
19106         bufpt = buf;
19107         length = 1;
19108         break;
19109       case etCHARX:
19110         c = va_arg(ap,int);
19111         buf[0] = (char)c;
19112         if( precision>=0 ){
19113           for(idx=1; idx<precision; idx++) buf[idx] = (char)c;
19114           length = precision;
19115         }else{
19116           length =1;
19117         }
19118         bufpt = buf;
19119         break;
19120       case etSTRING:
19121       case etDYNSTRING:
19122         bufpt = va_arg(ap,char*);
19123         if( bufpt==0 ){
19124           bufpt = "";
19125         }else if( xtype==etDYNSTRING ){
19126           zExtra = bufpt;
19127         }
19128         if( precision>=0 ){
19129           for(length=0; length<precision && bufpt[length]; length++){}
19130         }else{
19131           length = sqlite3Strlen30(bufpt);
19132         }
19133         break;
19134       case etSQLESCAPE:
19135       case etSQLESCAPE2:
19136       case etSQLESCAPE3: {
19137         int i, j, k, n, isnull;
19138         int needQuote;
19139         char ch;
19140         char q = ((xtype==etSQLESCAPE3)?'"':'\'');   /* Quote character */
19141         char *escarg = va_arg(ap,char*);
19142         isnull = escarg==0;
19143         if( isnull ) escarg = (xtype==etSQLESCAPE2 ? "NULL" : "(NULL)");
19144         k = precision;
19145         for(i=n=0; k!=0 && (ch=escarg[i])!=0; i++, k--){
19146           if( ch==q )  n++;
19147         }
19148         needQuote = !isnull && xtype==etSQLESCAPE2;
19149         n += i + 1 + needQuote*2;
19150         if( n>etBUFSIZE ){
19151           bufpt = zExtra = sqlite3Malloc( n );
19152           if( bufpt==0 ){
19153             pAccum->mallocFailed = 1;
19154             return;
19155           }
19156         }else{
19157           bufpt = buf;
19158         }
19159         j = 0;
19160         if( needQuote ) bufpt[j++] = q;
19161         k = i;
19162         for(i=0; i<k; i++){
19163           bufpt[j++] = ch = escarg[i];
19164           if( ch==q ) bufpt[j++] = ch;
19165         }
19166         if( needQuote ) bufpt[j++] = q;
19167         bufpt[j] = 0;
19168         length = j;
19169         /* The precision in %q and %Q means how many input characters to
19170         ** consume, not the length of the output...
19171         ** if( precision>=0 && precision<length ) length = precision; */
19172         break;
19173       }
19174       case etTOKEN: {
19175         Token *pToken = va_arg(ap, Token*);
19176         if( pToken ){
19177           sqlite3StrAccumAppend(pAccum, (const char*)pToken->z, pToken->n);
19178         }
19179         length = width = 0;
19180         break;
19181       }
19182       case etSRCLIST: {
19183         SrcList *pSrc = va_arg(ap, SrcList*);
19184         int k = va_arg(ap, int);
19185         struct SrcList_item *pItem = &pSrc->a[k];
19186         assert( k>=0 && k<pSrc->nSrc );
19187         if( pItem->zDatabase ){
19188           sqlite3StrAccumAppend(pAccum, pItem->zDatabase, -1);
19189           sqlite3StrAccumAppend(pAccum, ".", 1);
19190         }
19191         sqlite3StrAccumAppend(pAccum, pItem->zName, -1);
19192         length = width = 0;
19193         break;
19194       }
19195       default: {
19196         assert( xtype==etINVALID );
19197         return;
19198       }
19199     }/* End switch over the format type */
19200     /*
19201     ** The text of the conversion is pointed to by "bufpt" and is
19202     ** "length" characters long.  The field width is "width".  Do
19203     ** the output.
19204     */
19205     if( !flag_leftjustify ){
19206       register int nspace;
19207       nspace = width-length;
19208       if( nspace>0 ){
19209         appendSpace(pAccum, nspace);
19210       }
19211     }
19212     if( length>0 ){
19213       sqlite3StrAccumAppend(pAccum, bufpt, length);
19214     }
19215     if( flag_leftjustify ){
19216       register int nspace;
19217       nspace = width-length;
19218       if( nspace>0 ){
19219         appendSpace(pAccum, nspace);
19220       }
19221     }
19222     if( zExtra ){
19223       sqlite3_free(zExtra);
19224     }
19225   }/* End for loop over the format string */
19226 } /* End of function */
19227
19228 /*
19229 ** Append N bytes of text from z to the StrAccum object.
19230 */
19231 SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){
19232   assert( z!=0 || N==0 );
19233   if( p->tooBig | p->mallocFailed ){
19234     testcase(p->tooBig);
19235     testcase(p->mallocFailed);
19236     return;
19237   }
19238   if( N<0 ){
19239     N = sqlite3Strlen30(z);
19240   }
19241   if( N==0 || NEVER(z==0) ){
19242     return;
19243   }
19244   if( p->nChar+N >= p->nAlloc ){
19245     char *zNew;
19246     if( !p->useMalloc ){
19247       p->tooBig = 1;
19248       N = p->nAlloc - p->nChar - 1;
19249       if( N<=0 ){
19250         return;
19251       }
19252     }else{
19253       char *zOld = (p->zText==p->zBase ? 0 : p->zText);
19254       i64 szNew = p->nChar;
19255       szNew += N + 1;
19256       if( szNew > p->mxAlloc ){
19257         sqlite3StrAccumReset(p);
19258         p->tooBig = 1;
19259         return;
19260       }else{
19261         p->nAlloc = (int)szNew;
19262       }
19263       if( p->useMalloc==1 ){
19264         zNew = sqlite3DbRealloc(p->db, zOld, p->nAlloc);
19265       }else{
19266         zNew = sqlite3_realloc(zOld, p->nAlloc);
19267       }
19268       if( zNew ){
19269         if( zOld==0 ) memcpy(zNew, p->zText, p->nChar);
19270         p->zText = zNew;
19271       }else{
19272         p->mallocFailed = 1;
19273         sqlite3StrAccumReset(p);
19274         return;
19275       }
19276     }
19277   }
19278   memcpy(&p->zText[p->nChar], z, N);
19279   p->nChar += N;
19280 }
19281
19282 /*
19283 ** Finish off a string by making sure it is zero-terminated.
19284 ** Return a pointer to the resulting string.  Return a NULL
19285 ** pointer if any kind of error was encountered.
19286 */
19287 SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){
19288   if( p->zText ){
19289     p->zText[p->nChar] = 0;
19290     if( p->useMalloc && p->zText==p->zBase ){
19291       if( p->useMalloc==1 ){
19292         p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 );
19293       }else{
19294         p->zText = sqlite3_malloc(p->nChar+1);
19295       }
19296       if( p->zText ){
19297         memcpy(p->zText, p->zBase, p->nChar+1);
19298       }else{
19299         p->mallocFailed = 1;
19300       }
19301     }
19302   }
19303   return p->zText;
19304 }
19305
19306 /*
19307 ** Reset an StrAccum string.  Reclaim all malloced memory.
19308 */
19309 SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum *p){
19310   if( p->zText!=p->zBase ){
19311     if( p->useMalloc==1 ){
19312       sqlite3DbFree(p->db, p->zText);
19313     }else{
19314       sqlite3_free(p->zText);
19315     }
19316   }
19317   p->zText = 0;
19318 }
19319
19320 /*
19321 ** Initialize a string accumulator
19322 */
19323 SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum *p, char *zBase, int n, int mx){
19324   p->zText = p->zBase = zBase;
19325   p->db = 0;
19326   p->nChar = 0;
19327   p->nAlloc = n;
19328   p->mxAlloc = mx;
19329   p->useMalloc = 1;
19330   p->tooBig = 0;
19331   p->mallocFailed = 0;
19332 }
19333
19334 /*
19335 ** Print into memory obtained from sqliteMalloc().  Use the internal
19336 ** %-conversion extensions.
19337 */
19338 SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3 *db, const char *zFormat, va_list ap){
19339   char *z;
19340   char zBase[SQLITE_PRINT_BUF_SIZE];
19341   StrAccum acc;
19342   assert( db!=0 );
19343   sqlite3StrAccumInit(&acc, zBase, sizeof(zBase),
19344                       db->aLimit[SQLITE_LIMIT_LENGTH]);
19345   acc.db = db;
19346   sqlite3VXPrintf(&acc, 1, zFormat, ap);
19347   z = sqlite3StrAccumFinish(&acc);
19348   if( acc.mallocFailed ){
19349     db->mallocFailed = 1;
19350   }
19351   return z;
19352 }
19353
19354 /*
19355 ** Print into memory obtained from sqliteMalloc().  Use the internal
19356 ** %-conversion extensions.
19357 */
19358 SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3 *db, const char *zFormat, ...){
19359   va_list ap;
19360   char *z;
19361   va_start(ap, zFormat);
19362   z = sqlite3VMPrintf(db, zFormat, ap);
19363   va_end(ap);
19364   return z;
19365 }
19366
19367 /*
19368 ** Like sqlite3MPrintf(), but call sqlite3DbFree() on zStr after formatting
19369 ** the string and before returnning.  This routine is intended to be used
19370 ** to modify an existing string.  For example:
19371 **
19372 **       x = sqlite3MPrintf(db, x, "prefix %s suffix", x);
19373 **
19374 */
19375 SQLITE_PRIVATE char *sqlite3MAppendf(sqlite3 *db, char *zStr, const char *zFormat, ...){
19376   va_list ap;
19377   char *z;
19378   va_start(ap, zFormat);
19379   z = sqlite3VMPrintf(db, zFormat, ap);
19380   va_end(ap);
19381   sqlite3DbFree(db, zStr);
19382   return z;
19383 }
19384
19385 /*
19386 ** Print into memory obtained from sqlite3_malloc().  Omit the internal
19387 ** %-conversion extensions.
19388 */
19389 SQLITE_API char *sqlite3_vmprintf(const char *zFormat, va_list ap){
19390   char *z;
19391   char zBase[SQLITE_PRINT_BUF_SIZE];
19392   StrAccum acc;
19393 #ifndef SQLITE_OMIT_AUTOINIT
19394   if( sqlite3_initialize() ) return 0;
19395 #endif
19396   sqlite3StrAccumInit(&acc, zBase, sizeof(zBase), SQLITE_MAX_LENGTH);
19397   acc.useMalloc = 2;
19398   sqlite3VXPrintf(&acc, 0, zFormat, ap);
19399   z = sqlite3StrAccumFinish(&acc);
19400   return z;
19401 }
19402
19403 /*
19404 ** Print into memory obtained from sqlite3_malloc()().  Omit the internal
19405 ** %-conversion extensions.
19406 */
19407 SQLITE_API char *sqlite3_mprintf(const char *zFormat, ...){
19408   va_list ap;
19409   char *z;
19410 #ifndef SQLITE_OMIT_AUTOINIT
19411   if( sqlite3_initialize() ) return 0;
19412 #endif
19413   va_start(ap, zFormat);
19414   z = sqlite3_vmprintf(zFormat, ap);
19415   va_end(ap);
19416   return z;
19417 }
19418
19419 /*
19420 ** sqlite3_snprintf() works like snprintf() except that it ignores the
19421 ** current locale settings.  This is important for SQLite because we
19422 ** are not able to use a "," as the decimal point in place of "." as
19423 ** specified by some locales.
19424 **
19425 ** Oops:  The first two arguments of sqlite3_snprintf() are backwards
19426 ** from the snprintf() standard.  Unfortunately, it is too late to change
19427 ** this without breaking compatibility, so we just have to live with the
19428 ** mistake.
19429 **
19430 ** sqlite3_vsnprintf() is the varargs version.
19431 */
19432 SQLITE_API char *sqlite3_vsnprintf(int n, char *zBuf, const char *zFormat, va_list ap){
19433   StrAccum acc;
19434   if( n<=0 ) return zBuf;
19435   sqlite3StrAccumInit(&acc, zBuf, n, 0);
19436   acc.useMalloc = 0;
19437   sqlite3VXPrintf(&acc, 0, zFormat, ap);
19438   return sqlite3StrAccumFinish(&acc);
19439 }
19440 SQLITE_API char *sqlite3_snprintf(int n, char *zBuf, const char *zFormat, ...){
19441   char *z;
19442   va_list ap;
19443   va_start(ap,zFormat);
19444   z = sqlite3_vsnprintf(n, zBuf, zFormat, ap);
19445   va_end(ap);
19446   return z;
19447 }
19448
19449 /*
19450 ** This is the routine that actually formats the sqlite3_log() message.
19451 ** We house it in a separate routine from sqlite3_log() to avoid using
19452 ** stack space on small-stack systems when logging is disabled.
19453 **
19454 ** sqlite3_log() must render into a static buffer.  It cannot dynamically
19455 ** allocate memory because it might be called while the memory allocator
19456 ** mutex is held.
19457 */
19458 static void renderLogMsg(int iErrCode, const char *zFormat, va_list ap){
19459   StrAccum acc;                          /* String accumulator */
19460   char zMsg[SQLITE_PRINT_BUF_SIZE*3];    /* Complete log message */
19461
19462   sqlite3StrAccumInit(&acc, zMsg, sizeof(zMsg), 0);
19463   acc.useMalloc = 0;
19464   sqlite3VXPrintf(&acc, 0, zFormat, ap);
19465   sqlite3GlobalConfig.xLog(sqlite3GlobalConfig.pLogArg, iErrCode,
19466                            sqlite3StrAccumFinish(&acc));
19467 }
19468
19469 /*
19470 ** Format and write a message to the log if logging is enabled.
19471 */
19472 SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...){
19473   va_list ap;                             /* Vararg list */
19474   if( sqlite3GlobalConfig.xLog ){
19475     va_start(ap, zFormat);
19476     renderLogMsg(iErrCode, zFormat, ap);
19477     va_end(ap);
19478   }
19479 }
19480
19481 #if defined(SQLITE_DEBUG)
19482 /*
19483 ** A version of printf() that understands %lld.  Used for debugging.
19484 ** The printf() built into some versions of windows does not understand %lld
19485 ** and segfaults if you give it a long long int.
19486 */
19487 SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){
19488   va_list ap;
19489   StrAccum acc;
19490   char zBuf[500];
19491   sqlite3StrAccumInit(&acc, zBuf, sizeof(zBuf), 0);
19492   acc.useMalloc = 0;
19493   va_start(ap,zFormat);
19494   sqlite3VXPrintf(&acc, 0, zFormat, ap);
19495   va_end(ap);
19496   sqlite3StrAccumFinish(&acc);
19497   fprintf(stdout,"%s", zBuf);
19498   fflush(stdout);
19499 }
19500 #endif
19501
19502 #ifndef SQLITE_OMIT_TRACE
19503 /*
19504 ** variable-argument wrapper around sqlite3VXPrintf().
19505 */
19506 SQLITE_PRIVATE void sqlite3XPrintf(StrAccum *p, const char *zFormat, ...){
19507   va_list ap;
19508   va_start(ap,zFormat);
19509   sqlite3VXPrintf(p, 1, zFormat, ap);
19510   va_end(ap);
19511 }
19512 #endif
19513
19514 /************** End of printf.c **********************************************/
19515 /************** Begin file random.c ******************************************/
19516 /*
19517 ** 2001 September 15
19518 **
19519 ** The author disclaims copyright to this source code.  In place of
19520 ** a legal notice, here is a blessing:
19521 **
19522 **    May you do good and not evil.
19523 **    May you find forgiveness for yourself and forgive others.
19524 **    May you share freely, never taking more than you give.
19525 **
19526 *************************************************************************
19527 ** This file contains code to implement a pseudo-random number
19528 ** generator (PRNG) for SQLite.
19529 **
19530 ** Random numbers are used by some of the database backends in order
19531 ** to generate random integer keys for tables or random filenames.
19532 */
19533
19534
19535 /* All threads share a single random number generator.
19536 ** This structure is the current state of the generator.
19537 */
19538 static SQLITE_WSD struct sqlite3PrngType {
19539   unsigned char isInit;          /* True if initialized */
19540   unsigned char i, j;            /* State variables */
19541   unsigned char s[256];          /* State variables */
19542 } sqlite3Prng;
19543
19544 /*
19545 ** Get a single 8-bit random value from the RC4 PRNG.  The Mutex
19546 ** must be held while executing this routine.
19547 **
19548 ** Why not just use a library random generator like lrand48() for this?
19549 ** Because the OP_NewRowid opcode in the VDBE depends on having a very
19550 ** good source of random numbers.  The lrand48() library function may
19551 ** well be good enough.  But maybe not.  Or maybe lrand48() has some
19552 ** subtle problems on some systems that could cause problems.  It is hard
19553 ** to know.  To minimize the risk of problems due to bad lrand48()
19554 ** implementations, SQLite uses this random number generator based
19555 ** on RC4, which we know works very well.
19556 **
19557 ** (Later):  Actually, OP_NewRowid does not depend on a good source of
19558 ** randomness any more.  But we will leave this code in all the same.
19559 */
19560 static u8 randomByte(void){
19561   unsigned char t;
19562
19563
19564   /* The "wsdPrng" macro will resolve to the pseudo-random number generator
19565   ** state vector.  If writable static data is unsupported on the target,
19566   ** we have to locate the state vector at run-time.  In the more common
19567   ** case where writable static data is supported, wsdPrng can refer directly
19568   ** to the "sqlite3Prng" state vector declared above.
19569   */
19570 #ifdef SQLITE_OMIT_WSD
19571   struct sqlite3PrngType *p = &GLOBAL(struct sqlite3PrngType, sqlite3Prng);
19572 # define wsdPrng p[0]
19573 #else
19574 # define wsdPrng sqlite3Prng
19575 #endif
19576
19577
19578   /* Initialize the state of the random number generator once,
19579   ** the first time this routine is called.  The seed value does
19580   ** not need to contain a lot of randomness since we are not
19581   ** trying to do secure encryption or anything like that...
19582   **
19583   ** Nothing in this file or anywhere else in SQLite does any kind of
19584   ** encryption.  The RC4 algorithm is being used as a PRNG (pseudo-random
19585   ** number generator) not as an encryption device.
19586   */
19587   if( !wsdPrng.isInit ){
19588     int i;
19589     char k[256];
19590     wsdPrng.j = 0;
19591     wsdPrng.i = 0;
19592     sqlite3OsRandomness(sqlite3_vfs_find(0), 256, k);
19593     for(i=0; i<256; i++){
19594       wsdPrng.s[i] = (u8)i;
19595     }
19596     for(i=0; i<256; i++){
19597       wsdPrng.j += wsdPrng.s[i] + k[i];
19598       t = wsdPrng.s[wsdPrng.j];
19599       wsdPrng.s[wsdPrng.j] = wsdPrng.s[i];
19600       wsdPrng.s[i] = t;
19601     }
19602     wsdPrng.isInit = 1;
19603   }
19604
19605   /* Generate and return single random byte
19606   */
19607   wsdPrng.i++;
19608   t = wsdPrng.s[wsdPrng.i];
19609   wsdPrng.j += t;
19610   wsdPrng.s[wsdPrng.i] = wsdPrng.s[wsdPrng.j];
19611   wsdPrng.s[wsdPrng.j] = t;
19612   t += wsdPrng.s[wsdPrng.i];
19613   return wsdPrng.s[t];
19614 }
19615
19616 /*
19617 ** Return N random bytes.
19618 */
19619 SQLITE_API void sqlite3_randomness(int N, void *pBuf){
19620   unsigned char *zBuf = pBuf;
19621 #if SQLITE_THREADSAFE
19622   sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG);
19623 #endif
19624   sqlite3_mutex_enter(mutex);
19625   while( N-- ){
19626     *(zBuf++) = randomByte();
19627   }
19628   sqlite3_mutex_leave(mutex);
19629 }
19630
19631 #ifndef SQLITE_OMIT_BUILTIN_TEST
19632 /*
19633 ** For testing purposes, we sometimes want to preserve the state of
19634 ** PRNG and restore the PRNG to its saved state at a later time, or
19635 ** to reset the PRNG to its initial state.  These routines accomplish
19636 ** those tasks.
19637 **
19638 ** The sqlite3_test_control() interface calls these routines to
19639 ** control the PRNG.
19640 */
19641 static SQLITE_WSD struct sqlite3PrngType sqlite3SavedPrng;
19642 SQLITE_PRIVATE void sqlite3PrngSaveState(void){
19643   memcpy(
19644     &GLOBAL(struct sqlite3PrngType, sqlite3SavedPrng),
19645     &GLOBAL(struct sqlite3PrngType, sqlite3Prng),
19646     sizeof(sqlite3Prng)
19647   );
19648 }
19649 SQLITE_PRIVATE void sqlite3PrngRestoreState(void){
19650   memcpy(
19651     &GLOBAL(struct sqlite3PrngType, sqlite3Prng),
19652     &GLOBAL(struct sqlite3PrngType, sqlite3SavedPrng),
19653     sizeof(sqlite3Prng)
19654   );
19655 }
19656 SQLITE_PRIVATE void sqlite3PrngResetState(void){
19657   GLOBAL(struct sqlite3PrngType, sqlite3Prng).isInit = 0;
19658 }
19659 #endif /* SQLITE_OMIT_BUILTIN_TEST */
19660
19661 /************** End of random.c **********************************************/
19662 /************** Begin file utf.c *********************************************/
19663 /*
19664 ** 2004 April 13
19665 **
19666 ** The author disclaims copyright to this source code.  In place of
19667 ** a legal notice, here is a blessing:
19668 **
19669 **    May you do good and not evil.
19670 **    May you find forgiveness for yourself and forgive others.
19671 **    May you share freely, never taking more than you give.
19672 **
19673 *************************************************************************
19674 ** This file contains routines used to translate between UTF-8, 
19675 ** UTF-16, UTF-16BE, and UTF-16LE.
19676 **
19677 ** Notes on UTF-8:
19678 **
19679 **   Byte-0    Byte-1    Byte-2    Byte-3    Value
19680 **  0xxxxxxx                                 00000000 00000000 0xxxxxxx
19681 **  110yyyyy  10xxxxxx                       00000000 00000yyy yyxxxxxx
19682 **  1110zzzz  10yyyyyy  10xxxxxx             00000000 zzzzyyyy yyxxxxxx
19683 **  11110uuu  10uuzzzz  10yyyyyy  10xxxxxx   000uuuuu zzzzyyyy yyxxxxxx
19684 **
19685 **
19686 ** Notes on UTF-16:  (with wwww+1==uuuuu)
19687 **
19688 **      Word-0               Word-1          Value
19689 **  110110ww wwzzzzyy   110111yy yyxxxxxx    000uuuuu zzzzyyyy yyxxxxxx
19690 **  zzzzyyyy yyxxxxxx                        00000000 zzzzyyyy yyxxxxxx
19691 **
19692 **
19693 ** BOM or Byte Order Mark:
19694 **     0xff 0xfe   little-endian utf-16 follows
19695 **     0xfe 0xff   big-endian utf-16 follows
19696 **
19697 */
19698
19699 #ifndef SQLITE_AMALGAMATION
19700 /*
19701 ** The following constant value is used by the SQLITE_BIGENDIAN and
19702 ** SQLITE_LITTLEENDIAN macros.
19703 */
19704 SQLITE_PRIVATE const int sqlite3one = 1;
19705 #endif /* SQLITE_AMALGAMATION */
19706
19707 /*
19708 ** This lookup table is used to help decode the first byte of
19709 ** a multi-byte UTF8 character.
19710 */
19711 static const unsigned char sqlite3Utf8Trans1[] = {
19712   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
19713   0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
19714   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
19715   0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
19716   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
19717   0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
19718   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
19719   0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00,
19720 };
19721
19722
19723 #define WRITE_UTF8(zOut, c) {                          \
19724   if( c<0x00080 ){                                     \
19725     *zOut++ = (u8)(c&0xFF);                            \
19726   }                                                    \
19727   else if( c<0x00800 ){                                \
19728     *zOut++ = 0xC0 + (u8)((c>>6)&0x1F);                \
19729     *zOut++ = 0x80 + (u8)(c & 0x3F);                   \
19730   }                                                    \
19731   else if( c<0x10000 ){                                \
19732     *zOut++ = 0xE0 + (u8)((c>>12)&0x0F);               \
19733     *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);              \
19734     *zOut++ = 0x80 + (u8)(c & 0x3F);                   \
19735   }else{                                               \
19736     *zOut++ = 0xF0 + (u8)((c>>18) & 0x07);             \
19737     *zOut++ = 0x80 + (u8)((c>>12) & 0x3F);             \
19738     *zOut++ = 0x80 + (u8)((c>>6) & 0x3F);              \
19739     *zOut++ = 0x80 + (u8)(c & 0x3F);                   \
19740   }                                                    \
19741 }
19742
19743 #define WRITE_UTF16LE(zOut, c) {                                    \
19744   if( c<=0xFFFF ){                                                  \
19745     *zOut++ = (u8)(c&0x00FF);                                       \
19746     *zOut++ = (u8)((c>>8)&0x00FF);                                  \
19747   }else{                                                            \
19748     *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0));  \
19749     *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03));              \
19750     *zOut++ = (u8)(c&0x00FF);                                       \
19751     *zOut++ = (u8)(0x00DC + ((c>>8)&0x03));                         \
19752   }                                                                 \
19753 }
19754
19755 #define WRITE_UTF16BE(zOut, c) {                                    \
19756   if( c<=0xFFFF ){                                                  \
19757     *zOut++ = (u8)((c>>8)&0x00FF);                                  \
19758     *zOut++ = (u8)(c&0x00FF);                                       \
19759   }else{                                                            \
19760     *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03));              \
19761     *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0));  \
19762     *zOut++ = (u8)(0x00DC + ((c>>8)&0x03));                         \
19763     *zOut++ = (u8)(c&0x00FF);                                       \
19764   }                                                                 \
19765 }
19766
19767 #define READ_UTF16LE(zIn, TERM, c){                                   \
19768   c = (*zIn++);                                                       \
19769   c += ((*zIn++)<<8);                                                 \
19770   if( c>=0xD800 && c<0xE000 && TERM ){                                \
19771     int c2 = (*zIn++);                                                \
19772     c2 += ((*zIn++)<<8);                                              \
19773     c = (c2&0x03FF) + ((c&0x003F)<<10) + (((c&0x03C0)+0x0040)<<10);   \
19774   }                                                                   \
19775 }
19776
19777 #define READ_UTF16BE(zIn, TERM, c){                                   \
19778   c = ((*zIn++)<<8);                                                  \
19779   c += (*zIn++);                                                      \
19780   if( c>=0xD800 && c<0xE000 && TERM ){                                \
19781     int c2 = ((*zIn++)<<8);                                           \
19782     c2 += (*zIn++);                                                   \
19783     c = (c2&0x03FF) + ((c&0x003F)<<10) + (((c&0x03C0)+0x0040)<<10);   \
19784   }                                                                   \
19785 }
19786
19787 /*
19788 ** Translate a single UTF-8 character.  Return the unicode value.
19789 **
19790 ** During translation, assume that the byte that zTerm points
19791 ** is a 0x00.
19792 **
19793 ** Write a pointer to the next unread byte back into *pzNext.
19794 **
19795 ** Notes On Invalid UTF-8:
19796 **
19797 **  *  This routine never allows a 7-bit character (0x00 through 0x7f) to
19798 **     be encoded as a multi-byte character.  Any multi-byte character that
19799 **     attempts to encode a value between 0x00 and 0x7f is rendered as 0xfffd.
19800 **
19801 **  *  This routine never allows a UTF16 surrogate value to be encoded.
19802 **     If a multi-byte character attempts to encode a value between
19803 **     0xd800 and 0xe000 then it is rendered as 0xfffd.
19804 **
19805 **  *  Bytes in the range of 0x80 through 0xbf which occur as the first
19806 **     byte of a character are interpreted as single-byte characters
19807 **     and rendered as themselves even though they are technically
19808 **     invalid characters.
19809 **
19810 **  *  This routine accepts an infinite number of different UTF8 encodings
19811 **     for unicode values 0x80 and greater.  It do not change over-length
19812 **     encodings to 0xfffd as some systems recommend.
19813 */
19814 #define READ_UTF8(zIn, zTerm, c)                           \
19815   c = *(zIn++);                                            \
19816   if( c>=0xc0 ){                                           \
19817     c = sqlite3Utf8Trans1[c-0xc0];                         \
19818     while( zIn!=zTerm && (*zIn & 0xc0)==0x80 ){            \
19819       c = (c<<6) + (0x3f & *(zIn++));                      \
19820     }                                                      \
19821     if( c<0x80                                             \
19822         || (c&0xFFFFF800)==0xD800                          \
19823         || (c&0xFFFFFFFE)==0xFFFE ){  c = 0xFFFD; }        \
19824   }
19825 SQLITE_PRIVATE int sqlite3Utf8Read(
19826   const unsigned char *zIn,       /* First byte of UTF-8 character */
19827   const unsigned char **pzNext    /* Write first byte past UTF-8 char here */
19828 ){
19829   unsigned int c;
19830
19831   /* Same as READ_UTF8() above but without the zTerm parameter.
19832   ** For this routine, we assume the UTF8 string is always zero-terminated.
19833   */
19834   c = *(zIn++);
19835   if( c>=0xc0 ){
19836     c = sqlite3Utf8Trans1[c-0xc0];
19837     while( (*zIn & 0xc0)==0x80 ){
19838       c = (c<<6) + (0x3f & *(zIn++));
19839     }
19840     if( c<0x80
19841         || (c&0xFFFFF800)==0xD800
19842         || (c&0xFFFFFFFE)==0xFFFE ){  c = 0xFFFD; }
19843   }
19844   *pzNext = zIn;
19845   return c;
19846 }
19847
19848
19849
19850
19851 /*
19852 ** If the TRANSLATE_TRACE macro is defined, the value of each Mem is
19853 ** printed on stderr on the way into and out of sqlite3VdbeMemTranslate().
19854 */ 
19855 /* #define TRANSLATE_TRACE 1 */
19856
19857 #ifndef SQLITE_OMIT_UTF16
19858 /*
19859 ** This routine transforms the internal text encoding used by pMem to
19860 ** desiredEnc. It is an error if the string is already of the desired
19861 ** encoding, or if *pMem does not contain a string value.
19862 */
19863 SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem *pMem, u8 desiredEnc){
19864   int len;                    /* Maximum length of output string in bytes */
19865   unsigned char *zOut;                  /* Output buffer */
19866   unsigned char *zIn;                   /* Input iterator */
19867   unsigned char *zTerm;                 /* End of input */
19868   unsigned char *z;                     /* Output iterator */
19869   unsigned int c;
19870
19871   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
19872   assert( pMem->flags&MEM_Str );
19873   assert( pMem->enc!=desiredEnc );
19874   assert( pMem->enc!=0 );
19875   assert( pMem->n>=0 );
19876
19877 #if defined(TRANSLATE_TRACE) && defined(SQLITE_DEBUG)
19878   {
19879     char zBuf[100];
19880     sqlite3VdbeMemPrettyPrint(pMem, zBuf);
19881     fprintf(stderr, "INPUT:  %s\n", zBuf);
19882   }
19883 #endif
19884
19885   /* If the translation is between UTF-16 little and big endian, then 
19886   ** all that is required is to swap the byte order. This case is handled
19887   ** differently from the others.
19888   */
19889   if( pMem->enc!=SQLITE_UTF8 && desiredEnc!=SQLITE_UTF8 ){
19890     u8 temp;
19891     int rc;
19892     rc = sqlite3VdbeMemMakeWriteable(pMem);
19893     if( rc!=SQLITE_OK ){
19894       assert( rc==SQLITE_NOMEM );
19895       return SQLITE_NOMEM;
19896     }
19897     zIn = (u8*)pMem->z;
19898     zTerm = &zIn[pMem->n&~1];
19899     while( zIn<zTerm ){
19900       temp = *zIn;
19901       *zIn = *(zIn+1);
19902       zIn++;
19903       *zIn++ = temp;
19904     }
19905     pMem->enc = desiredEnc;
19906     goto translate_out;
19907   }
19908
19909   /* Set len to the maximum number of bytes required in the output buffer. */
19910   if( desiredEnc==SQLITE_UTF8 ){
19911     /* When converting from UTF-16, the maximum growth results from
19912     ** translating a 2-byte character to a 4-byte UTF-8 character.
19913     ** A single byte is required for the output string
19914     ** nul-terminator.
19915     */
19916     pMem->n &= ~1;
19917     len = pMem->n * 2 + 1;
19918   }else{
19919     /* When converting from UTF-8 to UTF-16 the maximum growth is caused
19920     ** when a 1-byte UTF-8 character is translated into a 2-byte UTF-16
19921     ** character. Two bytes are required in the output buffer for the
19922     ** nul-terminator.
19923     */
19924     len = pMem->n * 2 + 2;
19925   }
19926
19927   /* Set zIn to point at the start of the input buffer and zTerm to point 1
19928   ** byte past the end.
19929   **
19930   ** Variable zOut is set to point at the output buffer, space obtained
19931   ** from sqlite3_malloc().
19932   */
19933   zIn = (u8*)pMem->z;
19934   zTerm = &zIn[pMem->n];
19935   zOut = sqlite3DbMallocRaw(pMem->db, len);
19936   if( !zOut ){
19937     return SQLITE_NOMEM;
19938   }
19939   z = zOut;
19940
19941   if( pMem->enc==SQLITE_UTF8 ){
19942     if( desiredEnc==SQLITE_UTF16LE ){
19943       /* UTF-8 -> UTF-16 Little-endian */
19944       while( zIn<zTerm ){
19945         /* c = sqlite3Utf8Read(zIn, zTerm, (const u8**)&zIn); */
19946         READ_UTF8(zIn, zTerm, c);
19947         WRITE_UTF16LE(z, c);
19948       }
19949     }else{
19950       assert( desiredEnc==SQLITE_UTF16BE );
19951       /* UTF-8 -> UTF-16 Big-endian */
19952       while( zIn<zTerm ){
19953         /* c = sqlite3Utf8Read(zIn, zTerm, (const u8**)&zIn); */
19954         READ_UTF8(zIn, zTerm, c);
19955         WRITE_UTF16BE(z, c);
19956       }
19957     }
19958     pMem->n = (int)(z - zOut);
19959     *z++ = 0;
19960   }else{
19961     assert( desiredEnc==SQLITE_UTF8 );
19962     if( pMem->enc==SQLITE_UTF16LE ){
19963       /* UTF-16 Little-endian -> UTF-8 */
19964       while( zIn<zTerm ){
19965         READ_UTF16LE(zIn, zIn<zTerm, c); 
19966         WRITE_UTF8(z, c);
19967       }
19968     }else{
19969       /* UTF-16 Big-endian -> UTF-8 */
19970       while( zIn<zTerm ){
19971         READ_UTF16BE(zIn, zIn<zTerm, c); 
19972         WRITE_UTF8(z, c);
19973       }
19974     }
19975     pMem->n = (int)(z - zOut);
19976   }
19977   *z = 0;
19978   assert( (pMem->n+(desiredEnc==SQLITE_UTF8?1:2))<=len );
19979
19980   sqlite3VdbeMemRelease(pMem);
19981   pMem->flags &= ~(MEM_Static|MEM_Dyn|MEM_Ephem);
19982   pMem->enc = desiredEnc;
19983   pMem->flags |= (MEM_Term|MEM_Dyn);
19984   pMem->z = (char*)zOut;
19985   pMem->zMalloc = pMem->z;
19986
19987 translate_out:
19988 #if defined(TRANSLATE_TRACE) && defined(SQLITE_DEBUG)
19989   {
19990     char zBuf[100];
19991     sqlite3VdbeMemPrettyPrint(pMem, zBuf);
19992     fprintf(stderr, "OUTPUT: %s\n", zBuf);
19993   }
19994 #endif
19995   return SQLITE_OK;
19996 }
19997
19998 /*
19999 ** This routine checks for a byte-order mark at the beginning of the 
20000 ** UTF-16 string stored in *pMem. If one is present, it is removed and
20001 ** the encoding of the Mem adjusted. This routine does not do any
20002 ** byte-swapping, it just sets Mem.enc appropriately.
20003 **
20004 ** The allocation (static, dynamic etc.) and encoding of the Mem may be
20005 ** changed by this function.
20006 */
20007 SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem){
20008   int rc = SQLITE_OK;
20009   u8 bom = 0;
20010
20011   assert( pMem->n>=0 );
20012   if( pMem->n>1 ){
20013     u8 b1 = *(u8 *)pMem->z;
20014     u8 b2 = *(((u8 *)pMem->z) + 1);
20015     if( b1==0xFE && b2==0xFF ){
20016       bom = SQLITE_UTF16BE;
20017     }
20018     if( b1==0xFF && b2==0xFE ){
20019       bom = SQLITE_UTF16LE;
20020     }
20021   }
20022   
20023   if( bom ){
20024     rc = sqlite3VdbeMemMakeWriteable(pMem);
20025     if( rc==SQLITE_OK ){
20026       pMem->n -= 2;
20027       memmove(pMem->z, &pMem->z[2], pMem->n);
20028       pMem->z[pMem->n] = '\0';
20029       pMem->z[pMem->n+1] = '\0';
20030       pMem->flags |= MEM_Term;
20031       pMem->enc = bom;
20032     }
20033   }
20034   return rc;
20035 }
20036 #endif /* SQLITE_OMIT_UTF16 */
20037
20038 /*
20039 ** pZ is a UTF-8 encoded unicode string. If nByte is less than zero,
20040 ** return the number of unicode characters in pZ up to (but not including)
20041 ** the first 0x00 byte. If nByte is not less than zero, return the
20042 ** number of unicode characters in the first nByte of pZ (or up to 
20043 ** the first 0x00, whichever comes first).
20044 */
20045 SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *zIn, int nByte){
20046   int r = 0;
20047   const u8 *z = (const u8*)zIn;
20048   const u8 *zTerm;
20049   if( nByte>=0 ){
20050     zTerm = &z[nByte];
20051   }else{
20052     zTerm = (const u8*)(-1);
20053   }
20054   assert( z<=zTerm );
20055   while( *z!=0 && z<zTerm ){
20056     SQLITE_SKIP_UTF8(z);
20057     r++;
20058   }
20059   return r;
20060 }
20061
20062 /* This test function is not currently used by the automated test-suite. 
20063 ** Hence it is only available in debug builds.
20064 */
20065 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
20066 /*
20067 ** Translate UTF-8 to UTF-8.
20068 **
20069 ** This has the effect of making sure that the string is well-formed
20070 ** UTF-8.  Miscoded characters are removed.
20071 **
20072 ** The translation is done in-place and aborted if the output
20073 ** overruns the input.
20074 */
20075 SQLITE_PRIVATE int sqlite3Utf8To8(unsigned char *zIn){
20076   unsigned char *zOut = zIn;
20077   unsigned char *zStart = zIn;
20078   u32 c;
20079
20080   while( zIn[0] && zOut<=zIn ){
20081     c = sqlite3Utf8Read(zIn, (const u8**)&zIn);
20082     if( c!=0xfffd ){
20083       WRITE_UTF8(zOut, c);
20084     }
20085   }
20086   *zOut = 0;
20087   return (int)(zOut - zStart);
20088 }
20089 #endif
20090
20091 #ifndef SQLITE_OMIT_UTF16
20092 /*
20093 ** Convert a UTF-16 string in the native encoding into a UTF-8 string.
20094 ** Memory to hold the UTF-8 string is obtained from sqlite3_malloc and must
20095 ** be freed by the calling function.
20096 **
20097 ** NULL is returned if there is an allocation error.
20098 */
20099 SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *db, const void *z, int nByte, u8 enc){
20100   Mem m;
20101   memset(&m, 0, sizeof(m));
20102   m.db = db;
20103   sqlite3VdbeMemSetStr(&m, z, nByte, enc, SQLITE_STATIC);
20104   sqlite3VdbeChangeEncoding(&m, SQLITE_UTF8);
20105   if( db->mallocFailed ){
20106     sqlite3VdbeMemRelease(&m);
20107     m.z = 0;
20108   }
20109   assert( (m.flags & MEM_Term)!=0 || db->mallocFailed );
20110   assert( (m.flags & MEM_Str)!=0 || db->mallocFailed );
20111   assert( (m.flags & MEM_Dyn)!=0 || db->mallocFailed );
20112   assert( m.z || db->mallocFailed );
20113   return m.z;
20114 }
20115
20116 /*
20117 ** Convert a UTF-8 string to the UTF-16 encoding specified by parameter
20118 ** enc. A pointer to the new string is returned, and the value of *pnOut
20119 ** is set to the length of the returned string in bytes. The call should
20120 ** arrange to call sqlite3DbFree() on the returned pointer when it is
20121 ** no longer required.
20122 ** 
20123 ** If a malloc failure occurs, NULL is returned and the db.mallocFailed
20124 ** flag set.
20125 */
20126 #ifdef SQLITE_ENABLE_STAT2
20127 SQLITE_PRIVATE char *sqlite3Utf8to16(sqlite3 *db, u8 enc, char *z, int n, int *pnOut){
20128   Mem m;
20129   memset(&m, 0, sizeof(m));
20130   m.db = db;
20131   sqlite3VdbeMemSetStr(&m, z, n, SQLITE_UTF8, SQLITE_STATIC);
20132   if( sqlite3VdbeMemTranslate(&m, enc) ){
20133     assert( db->mallocFailed );
20134     return 0;
20135   }
20136   assert( m.z==m.zMalloc );
20137   *pnOut = m.n;
20138   return m.z;
20139 }
20140 #endif
20141
20142 /*
20143 ** zIn is a UTF-16 encoded unicode string at least nChar characters long.
20144 ** Return the number of bytes in the first nChar unicode characters
20145 ** in pZ.  nChar must be non-negative.
20146 */
20147 SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *zIn, int nChar){
20148   int c;
20149   unsigned char const *z = zIn;
20150   int n = 0;
20151   
20152   if( SQLITE_UTF16NATIVE==SQLITE_UTF16BE ){
20153     while( n<nChar ){
20154       READ_UTF16BE(z, 1, c);
20155       n++;
20156     }
20157   }else{
20158     while( n<nChar ){
20159       READ_UTF16LE(z, 1, c);
20160       n++;
20161     }
20162   }
20163   return (int)(z-(unsigned char const *)zIn);
20164 }
20165
20166 #if defined(SQLITE_TEST)
20167 /*
20168 ** This routine is called from the TCL test function "translate_selftest".
20169 ** It checks that the primitives for serializing and deserializing
20170 ** characters in each encoding are inverses of each other.
20171 */
20172 SQLITE_PRIVATE void sqlite3UtfSelfTest(void){
20173   unsigned int i, t;
20174   unsigned char zBuf[20];
20175   unsigned char *z;
20176   int n;
20177   unsigned int c;
20178
20179   for(i=0; i<0x00110000; i++){
20180     z = zBuf;
20181     WRITE_UTF8(z, i);
20182     n = (int)(z-zBuf);
20183     assert( n>0 && n<=4 );
20184     z[0] = 0;
20185     z = zBuf;
20186     c = sqlite3Utf8Read(z, (const u8**)&z);
20187     t = i;
20188     if( i>=0xD800 && i<=0xDFFF ) t = 0xFFFD;
20189     if( (i&0xFFFFFFFE)==0xFFFE ) t = 0xFFFD;
20190     assert( c==t );
20191     assert( (z-zBuf)==n );
20192   }
20193   for(i=0; i<0x00110000; i++){
20194     if( i>=0xD800 && i<0xE000 ) continue;
20195     z = zBuf;
20196     WRITE_UTF16LE(z, i);
20197     n = (int)(z-zBuf);
20198     assert( n>0 && n<=4 );
20199     z[0] = 0;
20200     z = zBuf;
20201     READ_UTF16LE(z, 1, c);
20202     assert( c==i );
20203     assert( (z-zBuf)==n );
20204   }
20205   for(i=0; i<0x00110000; i++){
20206     if( i>=0xD800 && i<0xE000 ) continue;
20207     z = zBuf;
20208     WRITE_UTF16BE(z, i);
20209     n = (int)(z-zBuf);
20210     assert( n>0 && n<=4 );
20211     z[0] = 0;
20212     z = zBuf;
20213     READ_UTF16BE(z, 1, c);
20214     assert( c==i );
20215     assert( (z-zBuf)==n );
20216   }
20217 }
20218 #endif /* SQLITE_TEST */
20219 #endif /* SQLITE_OMIT_UTF16 */
20220
20221 /************** End of utf.c *************************************************/
20222 /************** Begin file util.c ********************************************/
20223 /*
20224 ** 2001 September 15
20225 **
20226 ** The author disclaims copyright to this source code.  In place of
20227 ** a legal notice, here is a blessing:
20228 **
20229 **    May you do good and not evil.
20230 **    May you find forgiveness for yourself and forgive others.
20231 **    May you share freely, never taking more than you give.
20232 **
20233 *************************************************************************
20234 ** Utility functions used throughout sqlite.
20235 **
20236 ** This file contains functions for allocating memory, comparing
20237 ** strings, and stuff like that.
20238 **
20239 */
20240 #ifdef SQLITE_HAVE_ISNAN
20241 # include <math.h>
20242 #endif
20243
20244 /*
20245 ** Routine needed to support the testcase() macro.
20246 */
20247 #ifdef SQLITE_COVERAGE_TEST
20248 SQLITE_PRIVATE void sqlite3Coverage(int x){
20249   static unsigned dummy = 0;
20250   dummy += (unsigned)x;
20251 }
20252 #endif
20253
20254 #ifndef SQLITE_OMIT_FLOATING_POINT
20255 /*
20256 ** Return true if the floating point value is Not a Number (NaN).
20257 **
20258 ** Use the math library isnan() function if compiled with SQLITE_HAVE_ISNAN.
20259 ** Otherwise, we have our own implementation that works on most systems.
20260 */
20261 SQLITE_PRIVATE int sqlite3IsNaN(double x){
20262   int rc;   /* The value return */
20263 #if !defined(SQLITE_HAVE_ISNAN)
20264   /*
20265   ** Systems that support the isnan() library function should probably
20266   ** make use of it by compiling with -DSQLITE_HAVE_ISNAN.  But we have
20267   ** found that many systems do not have a working isnan() function so
20268   ** this implementation is provided as an alternative.
20269   **
20270   ** This NaN test sometimes fails if compiled on GCC with -ffast-math.
20271   ** On the other hand, the use of -ffast-math comes with the following
20272   ** warning:
20273   **
20274   **      This option [-ffast-math] should never be turned on by any
20275   **      -O option since it can result in incorrect output for programs
20276   **      which depend on an exact implementation of IEEE or ISO 
20277   **      rules/specifications for math functions.
20278   **
20279   ** Under MSVC, this NaN test may fail if compiled with a floating-
20280   ** point precision mode other than /fp:precise.  From the MSDN 
20281   ** documentation:
20282   **
20283   **      The compiler [with /fp:precise] will properly handle comparisons 
20284   **      involving NaN. For example, x != x evaluates to true if x is NaN 
20285   **      ...
20286   */
20287 #ifdef __FAST_MATH__
20288 # error SQLite will not work correctly with the -ffast-math option of GCC.
20289 #endif
20290   volatile double y = x;
20291   volatile double z = y;
20292   rc = (y!=z);
20293 #else  /* if defined(SQLITE_HAVE_ISNAN) */
20294   rc = isnan(x);
20295 #endif /* SQLITE_HAVE_ISNAN */
20296   testcase( rc );
20297   return rc;
20298 }
20299 #endif /* SQLITE_OMIT_FLOATING_POINT */
20300
20301 /*
20302 ** Compute a string length that is limited to what can be stored in
20303 ** lower 30 bits of a 32-bit signed integer.
20304 **
20305 ** The value returned will never be negative.  Nor will it ever be greater
20306 ** than the actual length of the string.  For very long strings (greater
20307 ** than 1GiB) the value returned might be less than the true string length.
20308 */
20309 SQLITE_PRIVATE int sqlite3Strlen30(const char *z){
20310   const char *z2 = z;
20311   if( z==0 ) return 0;
20312   while( *z2 ){ z2++; }
20313   return 0x3fffffff & (int)(z2 - z);
20314 }
20315
20316 /*
20317 ** Set the most recent error code and error string for the sqlite
20318 ** handle "db". The error code is set to "err_code".
20319 **
20320 ** If it is not NULL, string zFormat specifies the format of the
20321 ** error string in the style of the printf functions: The following
20322 ** format characters are allowed:
20323 **
20324 **      %s      Insert a string
20325 **      %z      A string that should be freed after use
20326 **      %d      Insert an integer
20327 **      %T      Insert a token
20328 **      %S      Insert the first element of a SrcList
20329 **
20330 ** zFormat and any string tokens that follow it are assumed to be
20331 ** encoded in UTF-8.
20332 **
20333 ** To clear the most recent error for sqlite handle "db", sqlite3Error
20334 ** should be called with err_code set to SQLITE_OK and zFormat set
20335 ** to NULL.
20336 */
20337 SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat, ...){
20338   if( db && (db->pErr || (db->pErr = sqlite3ValueNew(db))!=0) ){
20339     db->errCode = err_code;
20340     if( zFormat ){
20341       char *z;
20342       va_list ap;
20343       va_start(ap, zFormat);
20344       z = sqlite3VMPrintf(db, zFormat, ap);
20345       va_end(ap);
20346       sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, SQLITE_DYNAMIC);
20347     }else{
20348       sqlite3ValueSetStr(db->pErr, 0, 0, SQLITE_UTF8, SQLITE_STATIC);
20349     }
20350   }
20351 }
20352
20353 /*
20354 ** Add an error message to pParse->zErrMsg and increment pParse->nErr.
20355 ** The following formatting characters are allowed:
20356 **
20357 **      %s      Insert a string
20358 **      %z      A string that should be freed after use
20359 **      %d      Insert an integer
20360 **      %T      Insert a token
20361 **      %S      Insert the first element of a SrcList
20362 **
20363 ** This function should be used to report any error that occurs whilst
20364 ** compiling an SQL statement (i.e. within sqlite3_prepare()). The
20365 ** last thing the sqlite3_prepare() function does is copy the error
20366 ** stored by this function into the database handle using sqlite3Error().
20367 ** Function sqlite3Error() should be used during statement execution
20368 ** (sqlite3_step() etc.).
20369 */
20370 SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
20371   char *zMsg;
20372   va_list ap;
20373   sqlite3 *db = pParse->db;
20374   va_start(ap, zFormat);
20375   zMsg = sqlite3VMPrintf(db, zFormat, ap);
20376   va_end(ap);
20377   if( db->suppressErr ){
20378     sqlite3DbFree(db, zMsg);
20379   }else{
20380     pParse->nErr++;
20381     sqlite3DbFree(db, pParse->zErrMsg);
20382     pParse->zErrMsg = zMsg;
20383     pParse->rc = SQLITE_ERROR;
20384   }
20385 }
20386
20387 /*
20388 ** Convert an SQL-style quoted string into a normal string by removing
20389 ** the quote characters.  The conversion is done in-place.  If the
20390 ** input does not begin with a quote character, then this routine
20391 ** is a no-op.
20392 **
20393 ** The input string must be zero-terminated.  A new zero-terminator
20394 ** is added to the dequoted string.
20395 **
20396 ** The return value is -1 if no dequoting occurs or the length of the
20397 ** dequoted string, exclusive of the zero terminator, if dequoting does
20398 ** occur.
20399 **
20400 ** 2002-Feb-14: This routine is extended to remove MS-Access style
20401 ** brackets from around identifers.  For example:  "[a-b-c]" becomes
20402 ** "a-b-c".
20403 */
20404 SQLITE_PRIVATE int sqlite3Dequote(char *z){
20405   char quote;
20406   int i, j;
20407   if( z==0 ) return -1;
20408   quote = z[0];
20409   switch( quote ){
20410     case '\'':  break;
20411     case '"':   break;
20412     case '`':   break;                /* For MySQL compatibility */
20413     case '[':   quote = ']';  break;  /* For MS SqlServer compatibility */
20414     default:    return -1;
20415   }
20416   for(i=1, j=0; ALWAYS(z[i]); i++){
20417     if( z[i]==quote ){
20418       if( z[i+1]==quote ){
20419         z[j++] = quote;
20420         i++;
20421       }else{
20422         break;
20423       }
20424     }else{
20425       z[j++] = z[i];
20426     }
20427   }
20428   z[j] = 0;
20429   return j;
20430 }
20431
20432 /* Convenient short-hand */
20433 #define UpperToLower sqlite3UpperToLower
20434
20435 /*
20436 ** Some systems have stricmp().  Others have strcasecmp().  Because
20437 ** there is no consistency, we will define our own.
20438 **
20439 ** IMPLEMENTATION-OF: R-20522-24639 The sqlite3_strnicmp() API allows
20440 ** applications and extensions to compare the contents of two buffers
20441 ** containing UTF-8 strings in a case-independent fashion, using the same
20442 ** definition of case independence that SQLite uses internally when
20443 ** comparing identifiers.
20444 */
20445 SQLITE_PRIVATE int sqlite3StrICmp(const char *zLeft, const char *zRight){
20446   register unsigned char *a, *b;
20447   a = (unsigned char *)zLeft;
20448   b = (unsigned char *)zRight;
20449   while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
20450   return UpperToLower[*a] - UpperToLower[*b];
20451 }
20452 SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){
20453   register unsigned char *a, *b;
20454   a = (unsigned char *)zLeft;
20455   b = (unsigned char *)zRight;
20456   while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
20457   return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
20458 }
20459
20460 /*
20461 ** The string z[] is an text representation of a real number.
20462 ** Convert this string to a double and write it into *pResult.
20463 **
20464 ** The string z[] is length bytes in length (bytes, not characters) and
20465 ** uses the encoding enc.  The string is not necessarily zero-terminated.
20466 **
20467 ** Return TRUE if the result is a valid real number (or integer) and FALSE
20468 ** if the string is empty or contains extraneous text.  Valid numbers
20469 ** are in one of these formats:
20470 **
20471 **    [+-]digits[E[+-]digits]
20472 **    [+-]digits.[digits][E[+-]digits]
20473 **    [+-].digits[E[+-]digits]
20474 **
20475 ** Leading and trailing whitespace is ignored for the purpose of determining
20476 ** validity.
20477 **
20478 ** If some prefix of the input string is a valid number, this routine
20479 ** returns FALSE but it still converts the prefix and writes the result
20480 ** into *pResult.
20481 */
20482 SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 enc){
20483 #ifndef SQLITE_OMIT_FLOATING_POINT
20484   int incr = (enc==SQLITE_UTF8?1:2);
20485   const char *zEnd = z + length;
20486   /* sign * significand * (10 ^ (esign * exponent)) */
20487   int sign = 1;    /* sign of significand */
20488   i64 s = 0;       /* significand */
20489   int d = 0;       /* adjust exponent for shifting decimal point */
20490   int esign = 1;   /* sign of exponent */
20491   int e = 0;       /* exponent */
20492   int eValid = 1;  /* True exponent is either not used or is well-formed */
20493   double result;
20494   int nDigits = 0;
20495
20496   *pResult = 0.0;   /* Default return value, in case of an error */
20497
20498   if( enc==SQLITE_UTF16BE ) z++;
20499
20500   /* skip leading spaces */
20501   while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
20502   if( z>=zEnd ) return 0;
20503
20504   /* get sign of significand */
20505   if( *z=='-' ){
20506     sign = -1;
20507     z+=incr;
20508   }else if( *z=='+' ){
20509     z+=incr;
20510   }
20511
20512   /* skip leading zeroes */
20513   while( z<zEnd && z[0]=='0' ) z+=incr, nDigits++;
20514
20515   /* copy max significant digits to significand */
20516   while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
20517     s = s*10 + (*z - '0');
20518     z+=incr, nDigits++;
20519   }
20520
20521   /* skip non-significant significand digits
20522   ** (increase exponent by d to shift decimal left) */
20523   while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++, d++;
20524   if( z>=zEnd ) goto do_atof_calc;
20525
20526   /* if decimal point is present */
20527   if( *z=='.' ){
20528     z+=incr;
20529     /* copy digits from after decimal to significand
20530     ** (decrease exponent by d to shift decimal right) */
20531     while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
20532       s = s*10 + (*z - '0');
20533       z+=incr, nDigits++, d--;
20534     }
20535     /* skip non-significant digits */
20536     while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++;
20537   }
20538   if( z>=zEnd ) goto do_atof_calc;
20539
20540   /* if exponent is present */
20541   if( *z=='e' || *z=='E' ){
20542     z+=incr;
20543     eValid = 0;
20544     if( z>=zEnd ) goto do_atof_calc;
20545     /* get sign of exponent */
20546     if( *z=='-' ){
20547       esign = -1;
20548       z+=incr;
20549     }else if( *z=='+' ){
20550       z+=incr;
20551     }
20552     /* copy digits to exponent */
20553     while( z<zEnd && sqlite3Isdigit(*z) ){
20554       e = e*10 + (*z - '0');
20555       z+=incr;
20556       eValid = 1;
20557     }
20558   }
20559
20560   /* skip trailing spaces */
20561   if( nDigits && eValid ){
20562     while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
20563   }
20564
20565 do_atof_calc:
20566   /* adjust exponent by d, and update sign */
20567   e = (e*esign) + d;
20568   if( e<0 ) {
20569     esign = -1;
20570     e *= -1;
20571   } else {
20572     esign = 1;
20573   }
20574
20575   /* if 0 significand */
20576   if( !s ) {
20577     /* In the IEEE 754 standard, zero is signed.
20578     ** Add the sign if we've seen at least one digit */
20579     result = (sign<0 && nDigits) ? -(double)0 : (double)0;
20580   } else {
20581     /* attempt to reduce exponent */
20582     if( esign>0 ){
20583       while( s<(LARGEST_INT64/10) && e>0 ) e--,s*=10;
20584     }else{
20585       while( !(s%10) && e>0 ) e--,s/=10;
20586     }
20587
20588     /* adjust the sign of significand */
20589     s = sign<0 ? -s : s;
20590
20591     /* if exponent, scale significand as appropriate
20592     ** and store in result. */
20593     if( e ){
20594       double scale = 1.0;
20595       /* attempt to handle extremely small/large numbers better */
20596       if( e>307 && e<342 ){
20597         while( e%308 ) { scale *= 1.0e+1; e -= 1; }
20598         if( esign<0 ){
20599           result = s / scale;
20600           result /= 1.0e+308;
20601         }else{
20602           result = s * scale;
20603           result *= 1.0e+308;
20604         }
20605       }else{
20606         /* 1.0e+22 is the largest power of 10 than can be 
20607         ** represented exactly. */
20608         while( e%22 ) { scale *= 1.0e+1; e -= 1; }
20609         while( e>0 ) { scale *= 1.0e+22; e -= 22; }
20610         if( esign<0 ){
20611           result = s / scale;
20612         }else{
20613           result = s * scale;
20614         }
20615       }
20616     } else {
20617       result = (double)s;
20618     }
20619   }
20620
20621   /* store the result */
20622   *pResult = result;
20623
20624   /* return true if number and no extra non-whitespace chracters after */
20625   return z>=zEnd && nDigits>0 && eValid;
20626 #else
20627   return !sqlite3Atoi64(z, pResult, length, enc);
20628 #endif /* SQLITE_OMIT_FLOATING_POINT */
20629 }
20630
20631 /*
20632 ** Compare the 19-character string zNum against the text representation
20633 ** value 2^63:  9223372036854775808.  Return negative, zero, or positive
20634 ** if zNum is less than, equal to, or greater than the string.
20635 ** Note that zNum must contain exactly 19 characters.
20636 **
20637 ** Unlike memcmp() this routine is guaranteed to return the difference
20638 ** in the values of the last digit if the only difference is in the
20639 ** last digit.  So, for example,
20640 **
20641 **      compare2pow63("9223372036854775800", 1)
20642 **
20643 ** will return -8.
20644 */
20645 static int compare2pow63(const char *zNum, int incr){
20646   int c = 0;
20647   int i;
20648                     /* 012345678901234567 */
20649   const char *pow63 = "922337203685477580";
20650   for(i=0; c==0 && i<18; i++){
20651     c = (zNum[i*incr]-pow63[i])*10;
20652   }
20653   if( c==0 ){
20654     c = zNum[18*incr] - '8';
20655     testcase( c==(-1) );
20656     testcase( c==0 );
20657     testcase( c==(+1) );
20658   }
20659   return c;
20660 }
20661
20662
20663 /*
20664 ** Convert zNum to a 64-bit signed integer.
20665 **
20666 ** If the zNum value is representable as a 64-bit twos-complement 
20667 ** integer, then write that value into *pNum and return 0.
20668 **
20669 ** If zNum is exactly 9223372036854665808, return 2.  This special
20670 ** case is broken out because while 9223372036854665808 cannot be a 
20671 ** signed 64-bit integer, its negative -9223372036854665808 can be.
20672 **
20673 ** If zNum is too big for a 64-bit integer and is not
20674 ** 9223372036854665808 then return 1.
20675 **
20676 ** length is the number of bytes in the string (bytes, not characters).
20677 ** The string is not necessarily zero-terminated.  The encoding is
20678 ** given by enc.
20679 */
20680 SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc){
20681   int incr = (enc==SQLITE_UTF8?1:2);
20682   u64 u = 0;
20683   int neg = 0; /* assume positive */
20684   int i;
20685   int c = 0;
20686   const char *zStart;
20687   const char *zEnd = zNum + length;
20688   if( enc==SQLITE_UTF16BE ) zNum++;
20689   while( zNum<zEnd && sqlite3Isspace(*zNum) ) zNum+=incr;
20690   if( zNum<zEnd ){
20691     if( *zNum=='-' ){
20692       neg = 1;
20693       zNum+=incr;
20694     }else if( *zNum=='+' ){
20695       zNum+=incr;
20696     }
20697   }
20698   zStart = zNum;
20699   while( zNum<zEnd && zNum[0]=='0' ){ zNum+=incr; } /* Skip leading zeros. */
20700   for(i=0; &zNum[i]<zEnd && (c=zNum[i])>='0' && c<='9'; i+=incr){
20701     u = u*10 + c - '0';
20702   }
20703   if( u>LARGEST_INT64 ){
20704     *pNum = SMALLEST_INT64;
20705   }else if( neg ){
20706     *pNum = -(i64)u;
20707   }else{
20708     *pNum = (i64)u;
20709   }
20710   testcase( i==18 );
20711   testcase( i==19 );
20712   testcase( i==20 );
20713   if( (c!=0 && &zNum[i]<zEnd) || (i==0 && zStart==zNum) || i>19*incr ){
20714     /* zNum is empty or contains non-numeric text or is longer
20715     ** than 19 digits (thus guaranteeing that it is too large) */
20716     return 1;
20717   }else if( i<19*incr ){
20718     /* Less than 19 digits, so we know that it fits in 64 bits */
20719     assert( u<=LARGEST_INT64 );
20720     return 0;
20721   }else{
20722     /* zNum is a 19-digit numbers.  Compare it against 9223372036854775808. */
20723     c = compare2pow63(zNum, incr);
20724     if( c<0 ){
20725       /* zNum is less than 9223372036854775808 so it fits */
20726       assert( u<=LARGEST_INT64 );
20727       return 0;
20728     }else if( c>0 ){
20729       /* zNum is greater than 9223372036854775808 so it overflows */
20730       return 1;
20731     }else{
20732       /* zNum is exactly 9223372036854775808.  Fits if negative.  The
20733       ** special case 2 overflow if positive */
20734       assert( u-1==LARGEST_INT64 );
20735       assert( (*pNum)==SMALLEST_INT64 );
20736       return neg ? 0 : 2;
20737     }
20738   }
20739 }
20740
20741 /*
20742 ** If zNum represents an integer that will fit in 32-bits, then set
20743 ** *pValue to that integer and return true.  Otherwise return false.
20744 **
20745 ** Any non-numeric characters that following zNum are ignored.
20746 ** This is different from sqlite3Atoi64() which requires the
20747 ** input number to be zero-terminated.
20748 */
20749 SQLITE_PRIVATE int sqlite3GetInt32(const char *zNum, int *pValue){
20750   sqlite_int64 v = 0;
20751   int i, c;
20752   int neg = 0;
20753   if( zNum[0]=='-' ){
20754     neg = 1;
20755     zNum++;
20756   }else if( zNum[0]=='+' ){
20757     zNum++;
20758   }
20759   while( zNum[0]=='0' ) zNum++;
20760   for(i=0; i<11 && (c = zNum[i] - '0')>=0 && c<=9; i++){
20761     v = v*10 + c;
20762   }
20763
20764   /* The longest decimal representation of a 32 bit integer is 10 digits:
20765   **
20766   **             1234567890
20767   **     2^31 -> 2147483648
20768   */
20769   testcase( i==10 );
20770   if( i>10 ){
20771     return 0;
20772   }
20773   testcase( v-neg==2147483647 );
20774   if( v-neg>2147483647 ){
20775     return 0;
20776   }
20777   if( neg ){
20778     v = -v;
20779   }
20780   *pValue = (int)v;
20781   return 1;
20782 }
20783
20784 /*
20785 ** Return a 32-bit integer value extracted from a string.  If the
20786 ** string is not an integer, just return 0.
20787 */
20788 SQLITE_PRIVATE int sqlite3Atoi(const char *z){
20789   int x = 0;
20790   if( z ) sqlite3GetInt32(z, &x);
20791   return x;
20792 }
20793
20794 /*
20795 ** The variable-length integer encoding is as follows:
20796 **
20797 ** KEY:
20798 **         A = 0xxxxxxx    7 bits of data and one flag bit
20799 **         B = 1xxxxxxx    7 bits of data and one flag bit
20800 **         C = xxxxxxxx    8 bits of data
20801 **
20802 **  7 bits - A
20803 ** 14 bits - BA
20804 ** 21 bits - BBA
20805 ** 28 bits - BBBA
20806 ** 35 bits - BBBBA
20807 ** 42 bits - BBBBBA
20808 ** 49 bits - BBBBBBA
20809 ** 56 bits - BBBBBBBA
20810 ** 64 bits - BBBBBBBBC
20811 */
20812
20813 /*
20814 ** Write a 64-bit variable-length integer to memory starting at p[0].
20815 ** The length of data write will be between 1 and 9 bytes.  The number
20816 ** of bytes written is returned.
20817 **
20818 ** A variable-length integer consists of the lower 7 bits of each byte
20819 ** for all bytes that have the 8th bit set and one byte with the 8th
20820 ** bit clear.  Except, if we get to the 9th byte, it stores the full
20821 ** 8 bits and is the last byte.
20822 */
20823 SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){
20824   int i, j, n;
20825   u8 buf[10];
20826   if( v & (((u64)0xff000000)<<32) ){
20827     p[8] = (u8)v;
20828     v >>= 8;
20829     for(i=7; i>=0; i--){
20830       p[i] = (u8)((v & 0x7f) | 0x80);
20831       v >>= 7;
20832     }
20833     return 9;
20834   }    
20835   n = 0;
20836   do{
20837     buf[n++] = (u8)((v & 0x7f) | 0x80);
20838     v >>= 7;
20839   }while( v!=0 );
20840   buf[0] &= 0x7f;
20841   assert( n<=9 );
20842   for(i=0, j=n-1; j>=0; j--, i++){
20843     p[i] = buf[j];
20844   }
20845   return n;
20846 }
20847
20848 /*
20849 ** This routine is a faster version of sqlite3PutVarint() that only
20850 ** works for 32-bit positive integers and which is optimized for
20851 ** the common case of small integers.  A MACRO version, putVarint32,
20852 ** is provided which inlines the single-byte case.  All code should use
20853 ** the MACRO version as this function assumes the single-byte case has
20854 ** already been handled.
20855 */
20856 SQLITE_PRIVATE int sqlite3PutVarint32(unsigned char *p, u32 v){
20857 #ifndef putVarint32
20858   if( (v & ~0x7f)==0 ){
20859     p[0] = v;
20860     return 1;
20861   }
20862 #endif
20863   if( (v & ~0x3fff)==0 ){
20864     p[0] = (u8)((v>>7) | 0x80);
20865     p[1] = (u8)(v & 0x7f);
20866     return 2;
20867   }
20868   return sqlite3PutVarint(p, v);
20869 }
20870
20871 /*
20872 ** Bitmasks used by sqlite3GetVarint().  These precomputed constants
20873 ** are defined here rather than simply putting the constant expressions
20874 ** inline in order to work around bugs in the RVT compiler.
20875 **
20876 ** SLOT_2_0     A mask for  (0x7f<<14) | 0x7f
20877 **
20878 ** SLOT_4_2_0   A mask for  (0x7f<<28) | SLOT_2_0
20879 */
20880 #define SLOT_2_0     0x001fc07f
20881 #define SLOT_4_2_0   0xf01fc07f
20882
20883
20884 /*
20885 ** Read a 64-bit variable-length integer from memory starting at p[0].
20886 ** Return the number of bytes read.  The value is stored in *v.
20887 */
20888 SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
20889   u32 a,b,s;
20890
20891   a = *p;
20892   /* a: p0 (unmasked) */
20893   if (!(a&0x80))
20894   {
20895     *v = a;
20896     return 1;
20897   }
20898
20899   p++;
20900   b = *p;
20901   /* b: p1 (unmasked) */
20902   if (!(b&0x80))
20903   {
20904     a &= 0x7f;
20905     a = a<<7;
20906     a |= b;
20907     *v = a;
20908     return 2;
20909   }
20910
20911   /* Verify that constants are precomputed correctly */
20912   assert( SLOT_2_0 == ((0x7f<<14) | (0x7f)) );
20913   assert( SLOT_4_2_0 == ((0xfU<<28) | (0x7f<<14) | (0x7f)) );
20914
20915   p++;
20916   a = a<<14;
20917   a |= *p;
20918   /* a: p0<<14 | p2 (unmasked) */
20919   if (!(a&0x80))
20920   {
20921     a &= SLOT_2_0;
20922     b &= 0x7f;
20923     b = b<<7;
20924     a |= b;
20925     *v = a;
20926     return 3;
20927   }
20928
20929   /* CSE1 from below */
20930   a &= SLOT_2_0;
20931   p++;
20932   b = b<<14;
20933   b |= *p;
20934   /* b: p1<<14 | p3 (unmasked) */
20935   if (!(b&0x80))
20936   {
20937     b &= SLOT_2_0;
20938     /* moved CSE1 up */
20939     /* a &= (0x7f<<14)|(0x7f); */
20940     a = a<<7;
20941     a |= b;
20942     *v = a;
20943     return 4;
20944   }
20945
20946   /* a: p0<<14 | p2 (masked) */
20947   /* b: p1<<14 | p3 (unmasked) */
20948   /* 1:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
20949   /* moved CSE1 up */
20950   /* a &= (0x7f<<14)|(0x7f); */
20951   b &= SLOT_2_0;
20952   s = a;
20953   /* s: p0<<14 | p2 (masked) */
20954
20955   p++;
20956   a = a<<14;
20957   a |= *p;
20958   /* a: p0<<28 | p2<<14 | p4 (unmasked) */
20959   if (!(a&0x80))
20960   {
20961     /* we can skip these cause they were (effectively) done above in calc'ing s */
20962     /* a &= (0x7f<<28)|(0x7f<<14)|(0x7f); */
20963     /* b &= (0x7f<<14)|(0x7f); */
20964     b = b<<7;
20965     a |= b;
20966     s = s>>18;
20967     *v = ((u64)s)<<32 | a;
20968     return 5;
20969   }
20970
20971   /* 2:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
20972   s = s<<7;
20973   s |= b;
20974   /* s: p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
20975
20976   p++;
20977   b = b<<14;
20978   b |= *p;
20979   /* b: p1<<28 | p3<<14 | p5 (unmasked) */
20980   if (!(b&0x80))
20981   {
20982     /* we can skip this cause it was (effectively) done above in calc'ing s */
20983     /* b &= (0x7f<<28)|(0x7f<<14)|(0x7f); */
20984     a &= SLOT_2_0;
20985     a = a<<7;
20986     a |= b;
20987     s = s>>18;
20988     *v = ((u64)s)<<32 | a;
20989     return 6;
20990   }
20991
20992   p++;
20993   a = a<<14;
20994   a |= *p;
20995   /* a: p2<<28 | p4<<14 | p6 (unmasked) */
20996   if (!(a&0x80))
20997   {
20998     a &= SLOT_4_2_0;
20999     b &= SLOT_2_0;
21000     b = b<<7;
21001     a |= b;
21002     s = s>>11;
21003     *v = ((u64)s)<<32 | a;
21004     return 7;
21005   }
21006
21007   /* CSE2 from below */
21008   a &= SLOT_2_0;
21009   p++;
21010   b = b<<14;
21011   b |= *p;
21012   /* b: p3<<28 | p5<<14 | p7 (unmasked) */
21013   if (!(b&0x80))
21014   {
21015     b &= SLOT_4_2_0;
21016     /* moved CSE2 up */
21017     /* a &= (0x7f<<14)|(0x7f); */
21018     a = a<<7;
21019     a |= b;
21020     s = s>>4;
21021     *v = ((u64)s)<<32 | a;
21022     return 8;
21023   }
21024
21025   p++;
21026   a = a<<15;
21027   a |= *p;
21028   /* a: p4<<29 | p6<<15 | p8 (unmasked) */
21029
21030   /* moved CSE2 up */
21031   /* a &= (0x7f<<29)|(0x7f<<15)|(0xff); */
21032   b &= SLOT_2_0;
21033   b = b<<8;
21034   a |= b;
21035
21036   s = s<<4;
21037   b = p[-4];
21038   b &= 0x7f;
21039   b = b>>3;
21040   s |= b;
21041
21042   *v = ((u64)s)<<32 | a;
21043
21044   return 9;
21045 }
21046
21047 /*
21048 ** Read a 32-bit variable-length integer from memory starting at p[0].
21049 ** Return the number of bytes read.  The value is stored in *v.
21050 **
21051 ** If the varint stored in p[0] is larger than can fit in a 32-bit unsigned
21052 ** integer, then set *v to 0xffffffff.
21053 **
21054 ** A MACRO version, getVarint32, is provided which inlines the 
21055 ** single-byte case.  All code should use the MACRO version as 
21056 ** this function assumes the single-byte case has already been handled.
21057 */
21058 SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *p, u32 *v){
21059   u32 a,b;
21060
21061   /* The 1-byte case.  Overwhelmingly the most common.  Handled inline
21062   ** by the getVarin32() macro */
21063   a = *p;
21064   /* a: p0 (unmasked) */
21065 #ifndef getVarint32
21066   if (!(a&0x80))
21067   {
21068     /* Values between 0 and 127 */
21069     *v = a;
21070     return 1;
21071   }
21072 #endif
21073
21074   /* The 2-byte case */
21075   p++;
21076   b = *p;
21077   /* b: p1 (unmasked) */
21078   if (!(b&0x80))
21079   {
21080     /* Values between 128 and 16383 */
21081     a &= 0x7f;
21082     a = a<<7;
21083     *v = a | b;
21084     return 2;
21085   }
21086
21087   /* The 3-byte case */
21088   p++;
21089   a = a<<14;
21090   a |= *p;
21091   /* a: p0<<14 | p2 (unmasked) */
21092   if (!(a&0x80))
21093   {
21094     /* Values between 16384 and 2097151 */
21095     a &= (0x7f<<14)|(0x7f);
21096     b &= 0x7f;
21097     b = b<<7;
21098     *v = a | b;
21099     return 3;
21100   }
21101
21102   /* A 32-bit varint is used to store size information in btrees.
21103   ** Objects are rarely larger than 2MiB limit of a 3-byte varint.
21104   ** A 3-byte varint is sufficient, for example, to record the size
21105   ** of a 1048569-byte BLOB or string.
21106   **
21107   ** We only unroll the first 1-, 2-, and 3- byte cases.  The very
21108   ** rare larger cases can be handled by the slower 64-bit varint
21109   ** routine.
21110   */
21111 #if 1
21112   {
21113     u64 v64;
21114     u8 n;
21115
21116     p -= 2;
21117     n = sqlite3GetVarint(p, &v64);
21118     assert( n>3 && n<=9 );
21119     if( (v64 & SQLITE_MAX_U32)!=v64 ){
21120       *v = 0xffffffff;
21121     }else{
21122       *v = (u32)v64;
21123     }
21124     return n;
21125   }
21126
21127 #else
21128   /* For following code (kept for historical record only) shows an
21129   ** unrolling for the 3- and 4-byte varint cases.  This code is
21130   ** slightly faster, but it is also larger and much harder to test.
21131   */
21132   p++;
21133   b = b<<14;
21134   b |= *p;
21135   /* b: p1<<14 | p3 (unmasked) */
21136   if (!(b&0x80))
21137   {
21138     /* Values between 2097152 and 268435455 */
21139     b &= (0x7f<<14)|(0x7f);
21140     a &= (0x7f<<14)|(0x7f);
21141     a = a<<7;
21142     *v = a | b;
21143     return 4;
21144   }
21145
21146   p++;
21147   a = a<<14;
21148   a |= *p;
21149   /* a: p0<<28 | p2<<14 | p4 (unmasked) */
21150   if (!(a&0x80))
21151   {
21152     /* Values  between 268435456 and 34359738367 */
21153     a &= SLOT_4_2_0;
21154     b &= SLOT_4_2_0;
21155     b = b<<7;
21156     *v = a | b;
21157     return 5;
21158   }
21159
21160   /* We can only reach this point when reading a corrupt database
21161   ** file.  In that case we are not in any hurry.  Use the (relatively
21162   ** slow) general-purpose sqlite3GetVarint() routine to extract the
21163   ** value. */
21164   {
21165     u64 v64;
21166     u8 n;
21167
21168     p -= 4;
21169     n = sqlite3GetVarint(p, &v64);
21170     assert( n>5 && n<=9 );
21171     *v = (u32)v64;
21172     return n;
21173   }
21174 #endif
21175 }
21176
21177 /*
21178 ** Return the number of bytes that will be needed to store the given
21179 ** 64-bit integer.
21180 */
21181 SQLITE_PRIVATE int sqlite3VarintLen(u64 v){
21182   int i = 0;
21183   do{
21184     i++;
21185     v >>= 7;
21186   }while( v!=0 && ALWAYS(i<9) );
21187   return i;
21188 }
21189
21190
21191 /*
21192 ** Read or write a four-byte big-endian integer value.
21193 */
21194 SQLITE_PRIVATE u32 sqlite3Get4byte(const u8 *p){
21195   return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
21196 }
21197 SQLITE_PRIVATE void sqlite3Put4byte(unsigned char *p, u32 v){
21198   p[0] = (u8)(v>>24);
21199   p[1] = (u8)(v>>16);
21200   p[2] = (u8)(v>>8);
21201   p[3] = (u8)v;
21202 }
21203
21204
21205
21206 #if !defined(SQLITE_OMIT_BLOB_LITERAL) || defined(SQLITE_HAS_CODEC)
21207 /*
21208 ** Translate a single byte of Hex into an integer.
21209 ** This routine only works if h really is a valid hexadecimal
21210 ** character:  0..9a..fA..F
21211 */
21212 static u8 hexToInt(int h){
21213   assert( (h>='0' && h<='9') ||  (h>='a' && h<='f') ||  (h>='A' && h<='F') );
21214 #ifdef SQLITE_ASCII
21215   h += 9*(1&(h>>6));
21216 #endif
21217 #ifdef SQLITE_EBCDIC
21218   h += 9*(1&~(h>>4));
21219 #endif
21220   return (u8)(h & 0xf);
21221 }
21222 #endif /* !SQLITE_OMIT_BLOB_LITERAL || SQLITE_HAS_CODEC */
21223
21224 #if !defined(SQLITE_OMIT_BLOB_LITERAL) || defined(SQLITE_HAS_CODEC)
21225 /*
21226 ** Convert a BLOB literal of the form "x'hhhhhh'" into its binary
21227 ** value.  Return a pointer to its binary value.  Space to hold the
21228 ** binary value has been obtained from malloc and must be freed by
21229 ** the calling routine.
21230 */
21231 SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3 *db, const char *z, int n){
21232   char *zBlob;
21233   int i;
21234
21235   zBlob = (char *)sqlite3DbMallocRaw(db, n/2 + 1);
21236   n--;
21237   if( zBlob ){
21238     for(i=0; i<n; i+=2){
21239       zBlob[i/2] = (hexToInt(z[i])<<4) | hexToInt(z[i+1]);
21240     }
21241     zBlob[i/2] = 0;
21242   }
21243   return zBlob;
21244 }
21245 #endif /* !SQLITE_OMIT_BLOB_LITERAL || SQLITE_HAS_CODEC */
21246
21247 /*
21248 ** Log an error that is an API call on a connection pointer that should
21249 ** not have been used.  The "type" of connection pointer is given as the
21250 ** argument.  The zType is a word like "NULL" or "closed" or "invalid".
21251 */
21252 static void logBadConnection(const char *zType){
21253   sqlite3_log(SQLITE_MISUSE, 
21254      "API call with %s database connection pointer",
21255      zType
21256   );
21257 }
21258
21259 /*
21260 ** Check to make sure we have a valid db pointer.  This test is not
21261 ** foolproof but it does provide some measure of protection against
21262 ** misuse of the interface such as passing in db pointers that are
21263 ** NULL or which have been previously closed.  If this routine returns
21264 ** 1 it means that the db pointer is valid and 0 if it should not be
21265 ** dereferenced for any reason.  The calling function should invoke
21266 ** SQLITE_MISUSE immediately.
21267 **
21268 ** sqlite3SafetyCheckOk() requires that the db pointer be valid for
21269 ** use.  sqlite3SafetyCheckSickOrOk() allows a db pointer that failed to
21270 ** open properly and is not fit for general use but which can be
21271 ** used as an argument to sqlite3_errmsg() or sqlite3_close().
21272 */
21273 SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3 *db){
21274   u32 magic;
21275   if( db==0 ){
21276     logBadConnection("NULL");
21277     return 0;
21278   }
21279   magic = db->magic;
21280   if( magic!=SQLITE_MAGIC_OPEN ){
21281     if( sqlite3SafetyCheckSickOrOk(db) ){
21282       testcase( sqlite3GlobalConfig.xLog!=0 );
21283       logBadConnection("unopened");
21284     }
21285     return 0;
21286   }else{
21287     return 1;
21288   }
21289 }
21290 SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
21291   u32 magic;
21292   magic = db->magic;
21293   if( magic!=SQLITE_MAGIC_SICK &&
21294       magic!=SQLITE_MAGIC_OPEN &&
21295       magic!=SQLITE_MAGIC_BUSY ){
21296     testcase( sqlite3GlobalConfig.xLog!=0 );
21297     logBadConnection("invalid");
21298     return 0;
21299   }else{
21300     return 1;
21301   }
21302 }
21303
21304 /*
21305 ** Attempt to add, substract, or multiply the 64-bit signed value iB against
21306 ** the other 64-bit signed integer at *pA and store the result in *pA.
21307 ** Return 0 on success.  Or if the operation would have resulted in an
21308 ** overflow, leave *pA unchanged and return 1.
21309 */
21310 SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){
21311   i64 iA = *pA;
21312   testcase( iA==0 ); testcase( iA==1 );
21313   testcase( iB==-1 ); testcase( iB==0 );
21314   if( iB>=0 ){
21315     testcase( iA>0 && LARGEST_INT64 - iA == iB );
21316     testcase( iA>0 && LARGEST_INT64 - iA == iB - 1 );
21317     if( iA>0 && LARGEST_INT64 - iA < iB ) return 1;
21318     *pA += iB;
21319   }else{
21320     testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 1 );
21321     testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 2 );
21322     if( iA<0 && -(iA + LARGEST_INT64) > iB + 1 ) return 1;
21323     *pA += iB;
21324   }
21325   return 0; 
21326 }
21327 SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){
21328   testcase( iB==SMALLEST_INT64+1 );
21329   if( iB==SMALLEST_INT64 ){
21330     testcase( (*pA)==(-1) ); testcase( (*pA)==0 );
21331     if( (*pA)>=0 ) return 1;
21332     *pA -= iB;
21333     return 0;
21334   }else{
21335     return sqlite3AddInt64(pA, -iB);
21336   }
21337 }
21338 #define TWOPOWER32 (((i64)1)<<32)
21339 #define TWOPOWER31 (((i64)1)<<31)
21340 SQLITE_PRIVATE int sqlite3MulInt64(i64 *pA, i64 iB){
21341   i64 iA = *pA;
21342   i64 iA1, iA0, iB1, iB0, r;
21343
21344   iA1 = iA/TWOPOWER32;
21345   iA0 = iA % TWOPOWER32;
21346   iB1 = iB/TWOPOWER32;
21347   iB0 = iB % TWOPOWER32;
21348   if( iA1*iB1 != 0 ) return 1;
21349   assert( iA1*iB0==0 || iA0*iB1==0 );
21350   r = iA1*iB0 + iA0*iB1;
21351   testcase( r==(-TWOPOWER31)-1 );
21352   testcase( r==(-TWOPOWER31) );
21353   testcase( r==TWOPOWER31 );
21354   testcase( r==TWOPOWER31-1 );
21355   if( r<(-TWOPOWER31) || r>=TWOPOWER31 ) return 1;
21356   r *= TWOPOWER32;
21357   if( sqlite3AddInt64(&r, iA0*iB0) ) return 1;
21358   *pA = r;
21359   return 0;
21360 }
21361
21362 /*
21363 ** Compute the absolute value of a 32-bit signed integer, of possible.  Or 
21364 ** if the integer has a value of -2147483648, return +2147483647
21365 */
21366 SQLITE_PRIVATE int sqlite3AbsInt32(int x){
21367   if( x>=0 ) return x;
21368   if( x==(int)0x80000000 ) return 0x7fffffff;
21369   return -x;
21370 }
21371
21372 /************** End of util.c ************************************************/
21373 /************** Begin file hash.c ********************************************/
21374 /*
21375 ** 2001 September 22
21376 **
21377 ** The author disclaims copyright to this source code.  In place of
21378 ** a legal notice, here is a blessing:
21379 **
21380 **    May you do good and not evil.
21381 **    May you find forgiveness for yourself and forgive others.
21382 **    May you share freely, never taking more than you give.
21383 **
21384 *************************************************************************
21385 ** This is the implementation of generic hash-tables
21386 ** used in SQLite.
21387 */
21388
21389 /* Turn bulk memory into a hash table object by initializing the
21390 ** fields of the Hash structure.
21391 **
21392 ** "pNew" is a pointer to the hash table that is to be initialized.
21393 */
21394 SQLITE_PRIVATE void sqlite3HashInit(Hash *pNew){
21395   assert( pNew!=0 );
21396   pNew->first = 0;
21397   pNew->count = 0;
21398   pNew->htsize = 0;
21399   pNew->ht = 0;
21400 }
21401
21402 /* Remove all entries from a hash table.  Reclaim all memory.
21403 ** Call this routine to delete a hash table or to reset a hash table
21404 ** to the empty state.
21405 */
21406 SQLITE_PRIVATE void sqlite3HashClear(Hash *pH){
21407   HashElem *elem;         /* For looping over all elements of the table */
21408
21409   assert( pH!=0 );
21410   elem = pH->first;
21411   pH->first = 0;
21412   sqlite3_free(pH->ht);
21413   pH->ht = 0;
21414   pH->htsize = 0;
21415   while( elem ){
21416     HashElem *next_elem = elem->next;
21417     sqlite3_free(elem);
21418     elem = next_elem;
21419   }
21420   pH->count = 0;
21421 }
21422
21423 /*
21424 ** The hashing function.
21425 */
21426 static unsigned int strHash(const char *z, int nKey){
21427   int h = 0;
21428   assert( nKey>=0 );
21429   while( nKey > 0  ){
21430     h = (h<<3) ^ h ^ sqlite3UpperToLower[(unsigned char)*z++];
21431     nKey--;
21432   }
21433   return h;
21434 }
21435
21436
21437 /* Link pNew element into the hash table pH.  If pEntry!=0 then also
21438 ** insert pNew into the pEntry hash bucket.
21439 */
21440 static void insertElement(
21441   Hash *pH,              /* The complete hash table */
21442   struct _ht *pEntry,    /* The entry into which pNew is inserted */
21443   HashElem *pNew         /* The element to be inserted */
21444 ){
21445   HashElem *pHead;       /* First element already in pEntry */
21446   if( pEntry ){
21447     pHead = pEntry->count ? pEntry->chain : 0;
21448     pEntry->count++;
21449     pEntry->chain = pNew;
21450   }else{
21451     pHead = 0;
21452   }
21453   if( pHead ){
21454     pNew->next = pHead;
21455     pNew->prev = pHead->prev;
21456     if( pHead->prev ){ pHead->prev->next = pNew; }
21457     else             { pH->first = pNew; }
21458     pHead->prev = pNew;
21459   }else{
21460     pNew->next = pH->first;
21461     if( pH->first ){ pH->first->prev = pNew; }
21462     pNew->prev = 0;
21463     pH->first = pNew;
21464   }
21465 }
21466
21467
21468 /* Resize the hash table so that it cantains "new_size" buckets.
21469 **
21470 ** The hash table might fail to resize if sqlite3_malloc() fails or
21471 ** if the new size is the same as the prior size.
21472 ** Return TRUE if the resize occurs and false if not.
21473 */
21474 static int rehash(Hash *pH, unsigned int new_size){
21475   struct _ht *new_ht;            /* The new hash table */
21476   HashElem *elem, *next_elem;    /* For looping over existing elements */
21477
21478 #if SQLITE_MALLOC_SOFT_LIMIT>0
21479   if( new_size*sizeof(struct _ht)>SQLITE_MALLOC_SOFT_LIMIT ){
21480     new_size = SQLITE_MALLOC_SOFT_LIMIT/sizeof(struct _ht);
21481   }
21482   if( new_size==pH->htsize ) return 0;
21483 #endif
21484
21485   /* The inability to allocates space for a larger hash table is
21486   ** a performance hit but it is not a fatal error.  So mark the
21487   ** allocation as a benign.
21488   */
21489   sqlite3BeginBenignMalloc();
21490   new_ht = (struct _ht *)sqlite3Malloc( new_size*sizeof(struct _ht) );
21491   sqlite3EndBenignMalloc();
21492
21493   if( new_ht==0 ) return 0;
21494   sqlite3_free(pH->ht);
21495   pH->ht = new_ht;
21496   pH->htsize = new_size = sqlite3MallocSize(new_ht)/sizeof(struct _ht);
21497   memset(new_ht, 0, new_size*sizeof(struct _ht));
21498   for(elem=pH->first, pH->first=0; elem; elem = next_elem){
21499     unsigned int h = strHash(elem->pKey, elem->nKey) % new_size;
21500     next_elem = elem->next;
21501     insertElement(pH, &new_ht[h], elem);
21502   }
21503   return 1;
21504 }
21505
21506 /* This function (for internal use only) locates an element in an
21507 ** hash table that matches the given key.  The hash for this key has
21508 ** already been computed and is passed as the 4th parameter.
21509 */
21510 static HashElem *findElementGivenHash(
21511   const Hash *pH,     /* The pH to be searched */
21512   const char *pKey,   /* The key we are searching for */
21513   int nKey,           /* Bytes in key (not counting zero terminator) */
21514   unsigned int h      /* The hash for this key. */
21515 ){
21516   HashElem *elem;                /* Used to loop thru the element list */
21517   int count;                     /* Number of elements left to test */
21518
21519   if( pH->ht ){
21520     struct _ht *pEntry = &pH->ht[h];
21521     elem = pEntry->chain;
21522     count = pEntry->count;
21523   }else{
21524     elem = pH->first;
21525     count = pH->count;
21526   }
21527   while( count-- && ALWAYS(elem) ){
21528     if( elem->nKey==nKey && sqlite3StrNICmp(elem->pKey,pKey,nKey)==0 ){ 
21529       return elem;
21530     }
21531     elem = elem->next;
21532   }
21533   return 0;
21534 }
21535
21536 /* Remove a single entry from the hash table given a pointer to that
21537 ** element and a hash on the element's key.
21538 */
21539 static void removeElementGivenHash(
21540   Hash *pH,         /* The pH containing "elem" */
21541   HashElem* elem,   /* The element to be removed from the pH */
21542   unsigned int h    /* Hash value for the element */
21543 ){
21544   struct _ht *pEntry;
21545   if( elem->prev ){
21546     elem->prev->next = elem->next; 
21547   }else{
21548     pH->first = elem->next;
21549   }
21550   if( elem->next ){
21551     elem->next->prev = elem->prev;
21552   }
21553   if( pH->ht ){
21554     pEntry = &pH->ht[h];
21555     if( pEntry->chain==elem ){
21556       pEntry->chain = elem->next;
21557     }
21558     pEntry->count--;
21559     assert( pEntry->count>=0 );
21560   }
21561   sqlite3_free( elem );
21562   pH->count--;
21563   if( pH->count<=0 ){
21564     assert( pH->first==0 );
21565     assert( pH->count==0 );
21566     sqlite3HashClear(pH);
21567   }
21568 }
21569
21570 /* Attempt to locate an element of the hash table pH with a key
21571 ** that matches pKey,nKey.  Return the data for this element if it is
21572 ** found, or NULL if there is no match.
21573 */
21574 SQLITE_PRIVATE void *sqlite3HashFind(const Hash *pH, const char *pKey, int nKey){
21575   HashElem *elem;    /* The element that matches key */
21576   unsigned int h;    /* A hash on key */
21577
21578   assert( pH!=0 );
21579   assert( pKey!=0 );
21580   assert( nKey>=0 );
21581   if( pH->ht ){
21582     h = strHash(pKey, nKey) % pH->htsize;
21583   }else{
21584     h = 0;
21585   }
21586   elem = findElementGivenHash(pH, pKey, nKey, h);
21587   return elem ? elem->data : 0;
21588 }
21589
21590 /* Insert an element into the hash table pH.  The key is pKey,nKey
21591 ** and the data is "data".
21592 **
21593 ** If no element exists with a matching key, then a new
21594 ** element is created and NULL is returned.
21595 **
21596 ** If another element already exists with the same key, then the
21597 ** new data replaces the old data and the old data is returned.
21598 ** The key is not copied in this instance.  If a malloc fails, then
21599 ** the new data is returned and the hash table is unchanged.
21600 **
21601 ** If the "data" parameter to this function is NULL, then the
21602 ** element corresponding to "key" is removed from the hash table.
21603 */
21604 SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, int nKey, void *data){
21605   unsigned int h;       /* the hash of the key modulo hash table size */
21606   HashElem *elem;       /* Used to loop thru the element list */
21607   HashElem *new_elem;   /* New element added to the pH */
21608
21609   assert( pH!=0 );
21610   assert( pKey!=0 );
21611   assert( nKey>=0 );
21612   if( pH->htsize ){
21613     h = strHash(pKey, nKey) % pH->htsize;
21614   }else{
21615     h = 0;
21616   }
21617   elem = findElementGivenHash(pH,pKey,nKey,h);
21618   if( elem ){
21619     void *old_data = elem->data;
21620     if( data==0 ){
21621       removeElementGivenHash(pH,elem,h);
21622     }else{
21623       elem->data = data;
21624       elem->pKey = pKey;
21625       assert(nKey==elem->nKey);
21626     }
21627     return old_data;
21628   }
21629   if( data==0 ) return 0;
21630   new_elem = (HashElem*)sqlite3Malloc( sizeof(HashElem) );
21631   if( new_elem==0 ) return data;
21632   new_elem->pKey = pKey;
21633   new_elem->nKey = nKey;
21634   new_elem->data = data;
21635   pH->count++;
21636   if( pH->count>=10 && pH->count > 2*pH->htsize ){
21637     if( rehash(pH, pH->count*2) ){
21638       assert( pH->htsize>0 );
21639       h = strHash(pKey, nKey) % pH->htsize;
21640     }
21641   }
21642   if( pH->ht ){
21643     insertElement(pH, &pH->ht[h], new_elem);
21644   }else{
21645     insertElement(pH, 0, new_elem);
21646   }
21647   return 0;
21648 }
21649
21650 /************** End of hash.c ************************************************/
21651 /************** Begin file opcodes.c *****************************************/
21652 /* Automatically generated.  Do not edit */
21653 /* See the mkopcodec.awk script for details. */
21654 #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
21655 SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
21656  static const char *const azName[] = { "?",
21657      /*   1 */ "Goto",
21658      /*   2 */ "Gosub",
21659      /*   3 */ "Return",
21660      /*   4 */ "Yield",
21661      /*   5 */ "HaltIfNull",
21662      /*   6 */ "Halt",
21663      /*   7 */ "Integer",
21664      /*   8 */ "Int64",
21665      /*   9 */ "String",
21666      /*  10 */ "Null",
21667      /*  11 */ "Blob",
21668      /*  12 */ "Variable",
21669      /*  13 */ "Move",
21670      /*  14 */ "Copy",
21671      /*  15 */ "SCopy",
21672      /*  16 */ "ResultRow",
21673      /*  17 */ "CollSeq",
21674      /*  18 */ "Function",
21675      /*  19 */ "Not",
21676      /*  20 */ "AddImm",
21677      /*  21 */ "MustBeInt",
21678      /*  22 */ "RealAffinity",
21679      /*  23 */ "Permutation",
21680      /*  24 */ "Compare",
21681      /*  25 */ "Jump",
21682      /*  26 */ "If",
21683      /*  27 */ "IfNot",
21684      /*  28 */ "Column",
21685      /*  29 */ "Affinity",
21686      /*  30 */ "MakeRecord",
21687      /*  31 */ "Count",
21688      /*  32 */ "Savepoint",
21689      /*  33 */ "AutoCommit",
21690      /*  34 */ "Transaction",
21691      /*  35 */ "ReadCookie",
21692      /*  36 */ "SetCookie",
21693      /*  37 */ "VerifyCookie",
21694      /*  38 */ "OpenRead",
21695      /*  39 */ "OpenWrite",
21696      /*  40 */ "OpenAutoindex",
21697      /*  41 */ "OpenEphemeral",
21698      /*  42 */ "OpenPseudo",
21699      /*  43 */ "Close",
21700      /*  44 */ "SeekLt",
21701      /*  45 */ "SeekLe",
21702      /*  46 */ "SeekGe",
21703      /*  47 */ "SeekGt",
21704      /*  48 */ "Seek",
21705      /*  49 */ "NotFound",
21706      /*  50 */ "Found",
21707      /*  51 */ "IsUnique",
21708      /*  52 */ "NotExists",
21709      /*  53 */ "Sequence",
21710      /*  54 */ "NewRowid",
21711      /*  55 */ "Insert",
21712      /*  56 */ "InsertInt",
21713      /*  57 */ "Delete",
21714      /*  58 */ "ResetCount",
21715      /*  59 */ "RowKey",
21716      /*  60 */ "RowData",
21717      /*  61 */ "Rowid",
21718      /*  62 */ "NullRow",
21719      /*  63 */ "Last",
21720      /*  64 */ "Sort",
21721      /*  65 */ "Rewind",
21722      /*  66 */ "Prev",
21723      /*  67 */ "Next",
21724      /*  68 */ "Or",
21725      /*  69 */ "And",
21726      /*  70 */ "IdxInsert",
21727      /*  71 */ "IdxDelete",
21728      /*  72 */ "IdxRowid",
21729      /*  73 */ "IsNull",
21730      /*  74 */ "NotNull",
21731      /*  75 */ "Ne",
21732      /*  76 */ "Eq",
21733      /*  77 */ "Gt",
21734      /*  78 */ "Le",
21735      /*  79 */ "Lt",
21736      /*  80 */ "Ge",
21737      /*  81 */ "IdxLT",
21738      /*  82 */ "BitAnd",
21739      /*  83 */ "BitOr",
21740      /*  84 */ "ShiftLeft",
21741      /*  85 */ "ShiftRight",
21742      /*  86 */ "Add",
21743      /*  87 */ "Subtract",
21744      /*  88 */ "Multiply",
21745      /*  89 */ "Divide",
21746      /*  90 */ "Remainder",
21747      /*  91 */ "Concat",
21748      /*  92 */ "IdxGE",
21749      /*  93 */ "BitNot",
21750      /*  94 */ "String8",
21751      /*  95 */ "Destroy",
21752      /*  96 */ "Clear",
21753      /*  97 */ "CreateIndex",
21754      /*  98 */ "CreateTable",
21755      /*  99 */ "ParseSchema",
21756      /* 100 */ "LoadAnalysis",
21757      /* 101 */ "DropTable",
21758      /* 102 */ "DropIndex",
21759      /* 103 */ "DropTrigger",
21760      /* 104 */ "IntegrityCk",
21761      /* 105 */ "RowSetAdd",
21762      /* 106 */ "RowSetRead",
21763      /* 107 */ "RowSetTest",
21764      /* 108 */ "Program",
21765      /* 109 */ "Param",
21766      /* 110 */ "FkCounter",
21767      /* 111 */ "FkIfZero",
21768      /* 112 */ "MemMax",
21769      /* 113 */ "IfPos",
21770      /* 114 */ "IfNeg",
21771      /* 115 */ "IfZero",
21772      /* 116 */ "AggStep",
21773      /* 117 */ "AggFinal",
21774      /* 118 */ "Checkpoint",
21775      /* 119 */ "JournalMode",
21776      /* 120 */ "Vacuum",
21777      /* 121 */ "IncrVacuum",
21778      /* 122 */ "Expire",
21779      /* 123 */ "TableLock",
21780      /* 124 */ "VBegin",
21781      /* 125 */ "VCreate",
21782      /* 126 */ "VDestroy",
21783      /* 127 */ "VOpen",
21784      /* 128 */ "VFilter",
21785      /* 129 */ "VColumn",
21786      /* 130 */ "Real",
21787      /* 131 */ "VNext",
21788      /* 132 */ "VRename",
21789      /* 133 */ "VUpdate",
21790      /* 134 */ "Pagecount",
21791      /* 135 */ "MaxPgcnt",
21792      /* 136 */ "Trace",
21793      /* 137 */ "Noop",
21794      /* 138 */ "Explain",
21795      /* 139 */ "NotUsed_139",
21796      /* 140 */ "NotUsed_140",
21797      /* 141 */ "ToText",
21798      /* 142 */ "ToBlob",
21799      /* 143 */ "ToNumeric",
21800      /* 144 */ "ToInt",
21801      /* 145 */ "ToReal",
21802   };
21803   return azName[i];
21804 }
21805 #endif
21806
21807 /************** End of opcodes.c *********************************************/
21808 /************** Begin file os_os2.c ******************************************/
21809 /*
21810 ** 2006 Feb 14
21811 **
21812 ** The author disclaims copyright to this source code.  In place of
21813 ** a legal notice, here is a blessing:
21814 **
21815 **    May you do good and not evil.
21816 **    May you find forgiveness for yourself and forgive others.
21817 **    May you share freely, never taking more than you give.
21818 **
21819 ******************************************************************************
21820 **
21821 ** This file contains code that is specific to OS/2.
21822 */
21823
21824
21825 #if SQLITE_OS_OS2
21826
21827 /*
21828 ** A Note About Memory Allocation:
21829 **
21830 ** This driver uses malloc()/free() directly rather than going through
21831 ** the SQLite-wrappers sqlite3_malloc()/sqlite3_free().  Those wrappers
21832 ** are designed for use on embedded systems where memory is scarce and
21833 ** malloc failures happen frequently.  OS/2 does not typically run on
21834 ** embedded systems, and when it does the developers normally have bigger
21835 ** problems to worry about than running out of memory.  So there is not
21836 ** a compelling need to use the wrappers.
21837 **
21838 ** But there is a good reason to not use the wrappers.  If we use the
21839 ** wrappers then we will get simulated malloc() failures within this
21840 ** driver.  And that causes all kinds of problems for our tests.  We
21841 ** could enhance SQLite to deal with simulated malloc failures within
21842 ** the OS driver, but the code to deal with those failure would not
21843 ** be exercised on Linux (which does not need to malloc() in the driver)
21844 ** and so we would have difficulty writing coverage tests for that
21845 ** code.  Better to leave the code out, we think.
21846 **
21847 ** The point of this discussion is as follows:  When creating a new
21848 ** OS layer for an embedded system, if you use this file as an example,
21849 ** avoid the use of malloc()/free().  Those routines work ok on OS/2
21850 ** desktops but not so well in embedded systems.
21851 */
21852
21853 /*
21854 ** Macros used to determine whether or not to use threads.
21855 */
21856 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE
21857 # define SQLITE_OS2_THREADS 1
21858 #endif
21859
21860 /*
21861 ** Include code that is common to all os_*.c files
21862 */
21863 /************** Include os_common.h in the middle of os_os2.c ****************/
21864 /************** Begin file os_common.h ***************************************/
21865 /*
21866 ** 2004 May 22
21867 **
21868 ** The author disclaims copyright to this source code.  In place of
21869 ** a legal notice, here is a blessing:
21870 **
21871 **    May you do good and not evil.
21872 **    May you find forgiveness for yourself and forgive others.
21873 **    May you share freely, never taking more than you give.
21874 **
21875 ******************************************************************************
21876 **
21877 ** This file contains macros and a little bit of code that is common to
21878 ** all of the platform-specific files (os_*.c) and is #included into those
21879 ** files.
21880 **
21881 ** This file should be #included by the os_*.c files only.  It is not a
21882 ** general purpose header file.
21883 */
21884 #ifndef _OS_COMMON_H_
21885 #define _OS_COMMON_H_
21886
21887 /*
21888 ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
21889 ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
21890 ** switch.  The following code should catch this problem at compile-time.
21891 */
21892 #ifdef MEMORY_DEBUG
21893 # error "The MEMORY_DEBUG macro is obsolete.  Use SQLITE_DEBUG instead."
21894 #endif
21895
21896 #ifdef SQLITE_DEBUG
21897 SQLITE_PRIVATE int sqlite3OSTrace = 0;
21898 #define OSTRACE(X)          if( sqlite3OSTrace ) sqlite3DebugPrintf X
21899 #else
21900 #define OSTRACE(X)
21901 #endif
21902
21903 /*
21904 ** Macros for performance tracing.  Normally turned off.  Only works
21905 ** on i486 hardware.
21906 */
21907 #ifdef SQLITE_PERFORMANCE_TRACE
21908
21909 /* 
21910 ** hwtime.h contains inline assembler code for implementing 
21911 ** high-performance timing routines.
21912 */
21913 /************** Include hwtime.h in the middle of os_common.h ****************/
21914 /************** Begin file hwtime.h ******************************************/
21915 /*
21916 ** 2008 May 27
21917 **
21918 ** The author disclaims copyright to this source code.  In place of
21919 ** a legal notice, here is a blessing:
21920 **
21921 **    May you do good and not evil.
21922 **    May you find forgiveness for yourself and forgive others.
21923 **    May you share freely, never taking more than you give.
21924 **
21925 ******************************************************************************
21926 **
21927 ** This file contains inline asm code for retrieving "high-performance"
21928 ** counters for x86 class CPUs.
21929 */
21930 #ifndef _HWTIME_H_
21931 #define _HWTIME_H_
21932
21933 /*
21934 ** The following routine only works on pentium-class (or newer) processors.
21935 ** It uses the RDTSC opcode to read the cycle count value out of the
21936 ** processor and returns that value.  This can be used for high-res
21937 ** profiling.
21938 */
21939 #if (defined(__GNUC__) || defined(_MSC_VER)) && \
21940       (defined(i386) || defined(__i386__) || defined(_M_IX86))
21941
21942   #if defined(__GNUC__)
21943
21944   __inline__ sqlite_uint64 sqlite3Hwtime(void){
21945      unsigned int lo, hi;
21946      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
21947      return (sqlite_uint64)hi << 32 | lo;
21948   }
21949
21950   #elif defined(_MSC_VER)
21951
21952   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
21953      __asm {
21954         rdtsc
21955         ret       ; return value at EDX:EAX
21956      }
21957   }
21958
21959   #endif
21960
21961 #elif (defined(__GNUC__) && defined(__x86_64__))
21962
21963   __inline__ sqlite_uint64 sqlite3Hwtime(void){
21964       unsigned long val;
21965       __asm__ __volatile__ ("rdtsc" : "=A" (val));
21966       return val;
21967   }
21968  
21969 #elif (defined(__GNUC__) && defined(__ppc__))
21970
21971   __inline__ sqlite_uint64 sqlite3Hwtime(void){
21972       unsigned long long retval;
21973       unsigned long junk;
21974       __asm__ __volatile__ ("\n\
21975           1:      mftbu   %1\n\
21976                   mftb    %L0\n\
21977                   mftbu   %0\n\
21978                   cmpw    %0,%1\n\
21979                   bne     1b"
21980                   : "=r" (retval), "=r" (junk));
21981       return retval;
21982   }
21983
21984 #else
21985
21986   #error Need implementation of sqlite3Hwtime() for your platform.
21987
21988   /*
21989   ** To compile without implementing sqlite3Hwtime() for your platform,
21990   ** you can remove the above #error and use the following
21991   ** stub function.  You will lose timing support for many
21992   ** of the debugging and testing utilities, but it should at
21993   ** least compile and run.
21994   */
21995 SQLITE_PRIVATE   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
21996
21997 #endif
21998
21999 #endif /* !defined(_HWTIME_H_) */
22000
22001 /************** End of hwtime.h **********************************************/
22002 /************** Continuing where we left off in os_common.h ******************/
22003
22004 static sqlite_uint64 g_start;
22005 static sqlite_uint64 g_elapsed;
22006 #define TIMER_START       g_start=sqlite3Hwtime()
22007 #define TIMER_END         g_elapsed=sqlite3Hwtime()-g_start
22008 #define TIMER_ELAPSED     g_elapsed
22009 #else
22010 #define TIMER_START
22011 #define TIMER_END
22012 #define TIMER_ELAPSED     ((sqlite_uint64)0)
22013 #endif
22014
22015 /*
22016 ** If we compile with the SQLITE_TEST macro set, then the following block
22017 ** of code will give us the ability to simulate a disk I/O error.  This
22018 ** is used for testing the I/O recovery logic.
22019 */
22020 #ifdef SQLITE_TEST
22021 SQLITE_API int sqlite3_io_error_hit = 0;            /* Total number of I/O Errors */
22022 SQLITE_API int sqlite3_io_error_hardhit = 0;        /* Number of non-benign errors */
22023 SQLITE_API int sqlite3_io_error_pending = 0;        /* Count down to first I/O error */
22024 SQLITE_API int sqlite3_io_error_persist = 0;        /* True if I/O errors persist */
22025 SQLITE_API int sqlite3_io_error_benign = 0;         /* True if errors are benign */
22026 SQLITE_API int sqlite3_diskfull_pending = 0;
22027 SQLITE_API int sqlite3_diskfull = 0;
22028 #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
22029 #define SimulateIOError(CODE)  \
22030   if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
22031        || sqlite3_io_error_pending-- == 1 )  \
22032               { local_ioerr(); CODE; }
22033 static void local_ioerr(){
22034   IOTRACE(("IOERR\n"));
22035   sqlite3_io_error_hit++;
22036   if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
22037 }
22038 #define SimulateDiskfullError(CODE) \
22039    if( sqlite3_diskfull_pending ){ \
22040      if( sqlite3_diskfull_pending == 1 ){ \
22041        local_ioerr(); \
22042        sqlite3_diskfull = 1; \
22043        sqlite3_io_error_hit = 1; \
22044        CODE; \
22045      }else{ \
22046        sqlite3_diskfull_pending--; \
22047      } \
22048    }
22049 #else
22050 #define SimulateIOErrorBenign(X)
22051 #define SimulateIOError(A)
22052 #define SimulateDiskfullError(A)
22053 #endif
22054
22055 /*
22056 ** When testing, keep a count of the number of open files.
22057 */
22058 #ifdef SQLITE_TEST
22059 SQLITE_API int sqlite3_open_file_count = 0;
22060 #define OpenCounter(X)  sqlite3_open_file_count+=(X)
22061 #else
22062 #define OpenCounter(X)
22063 #endif
22064
22065 #endif /* !defined(_OS_COMMON_H_) */
22066
22067 /************** End of os_common.h *******************************************/
22068 /************** Continuing where we left off in os_os2.c *********************/
22069
22070 /* Forward references */
22071 typedef struct os2File os2File;         /* The file structure */
22072 typedef struct os2ShmNode os2ShmNode;   /* A shared descritive memory node */
22073 typedef struct os2ShmLink os2ShmLink;   /* A connection to shared-memory */
22074
22075 /*
22076 ** The os2File structure is subclass of sqlite3_file specific for the OS/2
22077 ** protability layer.
22078 */
22079 struct os2File {
22080   const sqlite3_io_methods *pMethod;  /* Always the first entry */
22081   HFILE h;                  /* Handle for accessing the file */
22082   int flags;                /* Flags provided to os2Open() */
22083   int locktype;             /* Type of lock currently held on this file */
22084   int szChunk;              /* Chunk size configured by FCNTL_CHUNK_SIZE */
22085   char *zFullPathCp;        /* Full path name of this file */
22086   os2ShmLink *pShmLink;     /* Instance of shared memory on this file */
22087 };
22088
22089 #define LOCK_TIMEOUT 10L /* the default locking timeout */
22090
22091 /*
22092 ** Missing from some versions of the OS/2 toolkit -
22093 ** used to allocate from high memory if possible
22094 */
22095 #ifndef OBJ_ANY
22096 # define OBJ_ANY 0x00000400
22097 #endif
22098
22099 /*****************************************************************************
22100 ** The next group of routines implement the I/O methods specified
22101 ** by the sqlite3_io_methods object.
22102 ******************************************************************************/
22103
22104 /*
22105 ** Close a file.
22106 */
22107 static int os2Close( sqlite3_file *id ){
22108   APIRET rc;
22109   os2File *pFile = (os2File*)id;
22110
22111   assert( id!=0 );
22112   OSTRACE(( "CLOSE %d (%s)\n", pFile->h, pFile->zFullPathCp ));
22113
22114   rc = DosClose( pFile->h );
22115
22116   if( pFile->flags & SQLITE_OPEN_DELETEONCLOSE )
22117     DosForceDelete( (PSZ)pFile->zFullPathCp );
22118
22119   free( pFile->zFullPathCp );
22120   pFile->zFullPathCp = NULL;
22121   pFile->locktype = NO_LOCK;
22122   pFile->h = (HFILE)-1;
22123   pFile->flags = 0;
22124
22125   OpenCounter( -1 );
22126   return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR;
22127 }
22128
22129 /*
22130 ** Read data from a file into a buffer.  Return SQLITE_OK if all
22131 ** bytes were read successfully and SQLITE_IOERR if anything goes
22132 ** wrong.
22133 */
22134 static int os2Read(
22135   sqlite3_file *id,               /* File to read from */
22136   void *pBuf,                     /* Write content into this buffer */
22137   int amt,                        /* Number of bytes to read */
22138   sqlite3_int64 offset            /* Begin reading at this offset */
22139 ){
22140   ULONG fileLocation = 0L;
22141   ULONG got;
22142   os2File *pFile = (os2File*)id;
22143   assert( id!=0 );
22144   SimulateIOError( return SQLITE_IOERR_READ );
22145   OSTRACE(( "READ %d lock=%d\n", pFile->h, pFile->locktype ));
22146   if( DosSetFilePtr(pFile->h, offset, FILE_BEGIN, &fileLocation) != NO_ERROR ){
22147     return SQLITE_IOERR;
22148   }
22149   if( DosRead( pFile->h, pBuf, amt, &got ) != NO_ERROR ){
22150     return SQLITE_IOERR_READ;
22151   }
22152   if( got == (ULONG)amt )
22153     return SQLITE_OK;
22154   else {
22155     /* Unread portions of the input buffer must be zero-filled */
22156     memset(&((char*)pBuf)[got], 0, amt-got);
22157     return SQLITE_IOERR_SHORT_READ;
22158   }
22159 }
22160
22161 /*
22162 ** Write data from a buffer into a file.  Return SQLITE_OK on success
22163 ** or some other error code on failure.
22164 */
22165 static int os2Write(
22166   sqlite3_file *id,               /* File to write into */
22167   const void *pBuf,               /* The bytes to be written */
22168   int amt,                        /* Number of bytes to write */
22169   sqlite3_int64 offset            /* Offset into the file to begin writing at */
22170 ){
22171   ULONG fileLocation = 0L;
22172   APIRET rc = NO_ERROR;
22173   ULONG wrote;
22174   os2File *pFile = (os2File*)id;
22175   assert( id!=0 );
22176   SimulateIOError( return SQLITE_IOERR_WRITE );
22177   SimulateDiskfullError( return SQLITE_FULL );
22178   OSTRACE(( "WRITE %d lock=%d\n", pFile->h, pFile->locktype ));
22179   if( DosSetFilePtr(pFile->h, offset, FILE_BEGIN, &fileLocation) != NO_ERROR ){
22180     return SQLITE_IOERR;
22181   }
22182   assert( amt>0 );
22183   while( amt > 0 &&
22184          ( rc = DosWrite( pFile->h, (PVOID)pBuf, amt, &wrote ) ) == NO_ERROR &&
22185          wrote > 0
22186   ){
22187     amt -= wrote;
22188     pBuf = &((char*)pBuf)[wrote];
22189   }
22190
22191   return ( rc != NO_ERROR || amt > (int)wrote ) ? SQLITE_FULL : SQLITE_OK;
22192 }
22193
22194 /*
22195 ** Truncate an open file to a specified size
22196 */
22197 static int os2Truncate( sqlite3_file *id, i64 nByte ){
22198   APIRET rc;
22199   os2File *pFile = (os2File*)id;
22200   assert( id!=0 );
22201   OSTRACE(( "TRUNCATE %d %lld\n", pFile->h, nByte ));
22202   SimulateIOError( return SQLITE_IOERR_TRUNCATE );
22203
22204   /* If the user has configured a chunk-size for this file, truncate the
22205   ** file so that it consists of an integer number of chunks (i.e. the
22206   ** actual file size after the operation may be larger than the requested
22207   ** size).
22208   */
22209   if( pFile->szChunk ){
22210     nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
22211   }
22212   
22213   rc = DosSetFileSize( pFile->h, nByte );
22214   return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR_TRUNCATE;
22215 }
22216
22217 #ifdef SQLITE_TEST
22218 /*
22219 ** Count the number of fullsyncs and normal syncs.  This is used to test
22220 ** that syncs and fullsyncs are occuring at the right times.
22221 */
22222 SQLITE_API int sqlite3_sync_count = 0;
22223 SQLITE_API int sqlite3_fullsync_count = 0;
22224 #endif
22225
22226 /*
22227 ** Make sure all writes to a particular file are committed to disk.
22228 */
22229 static int os2Sync( sqlite3_file *id, int flags ){
22230   os2File *pFile = (os2File*)id;
22231   OSTRACE(( "SYNC %d lock=%d\n", pFile->h, pFile->locktype ));
22232 #ifdef SQLITE_TEST
22233   if( flags & SQLITE_SYNC_FULL){
22234     sqlite3_fullsync_count++;
22235   }
22236   sqlite3_sync_count++;
22237 #endif
22238   /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
22239   ** no-op
22240   */
22241 #ifdef SQLITE_NO_SYNC
22242   UNUSED_PARAMETER(pFile);
22243   return SQLITE_OK;
22244 #else
22245   return DosResetBuffer( pFile->h ) == NO_ERROR ? SQLITE_OK : SQLITE_IOERR;
22246 #endif
22247 }
22248
22249 /*
22250 ** Determine the current size of a file in bytes
22251 */
22252 static int os2FileSize( sqlite3_file *id, sqlite3_int64 *pSize ){
22253   APIRET rc = NO_ERROR;
22254   FILESTATUS3 fsts3FileInfo;
22255   memset(&fsts3FileInfo, 0, sizeof(fsts3FileInfo));
22256   assert( id!=0 );
22257   SimulateIOError( return SQLITE_IOERR_FSTAT );
22258   rc = DosQueryFileInfo( ((os2File*)id)->h, FIL_STANDARD, &fsts3FileInfo, sizeof(FILESTATUS3) );
22259   if( rc == NO_ERROR ){
22260     *pSize = fsts3FileInfo.cbFile;
22261     return SQLITE_OK;
22262   }else{
22263     return SQLITE_IOERR_FSTAT;
22264   }
22265 }
22266
22267 /*
22268 ** Acquire a reader lock.
22269 */
22270 static int getReadLock( os2File *pFile ){
22271   FILELOCK  LockArea,
22272             UnlockArea;
22273   APIRET res;
22274   memset(&LockArea, 0, sizeof(LockArea));
22275   memset(&UnlockArea, 0, sizeof(UnlockArea));
22276   LockArea.lOffset = SHARED_FIRST;
22277   LockArea.lRange = SHARED_SIZE;
22278   UnlockArea.lOffset = 0L;
22279   UnlockArea.lRange = 0L;
22280   res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 1L );
22281   OSTRACE(( "GETREADLOCK %d res=%d\n", pFile->h, res ));
22282   return res;
22283 }
22284
22285 /*
22286 ** Undo a readlock
22287 */
22288 static int unlockReadLock( os2File *id ){
22289   FILELOCK  LockArea,
22290             UnlockArea;
22291   APIRET res;
22292   memset(&LockArea, 0, sizeof(LockArea));
22293   memset(&UnlockArea, 0, sizeof(UnlockArea));
22294   LockArea.lOffset = 0L;
22295   LockArea.lRange = 0L;
22296   UnlockArea.lOffset = SHARED_FIRST;
22297   UnlockArea.lRange = SHARED_SIZE;
22298   res = DosSetFileLocks( id->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 1L );
22299   OSTRACE(( "UNLOCK-READLOCK file handle=%d res=%d?\n", id->h, res ));
22300   return res;
22301 }
22302
22303 /*
22304 ** Lock the file with the lock specified by parameter locktype - one
22305 ** of the following:
22306 **
22307 **     (1) SHARED_LOCK
22308 **     (2) RESERVED_LOCK
22309 **     (3) PENDING_LOCK
22310 **     (4) EXCLUSIVE_LOCK
22311 **
22312 ** Sometimes when requesting one lock state, additional lock states
22313 ** are inserted in between.  The locking might fail on one of the later
22314 ** transitions leaving the lock state different from what it started but
22315 ** still short of its goal.  The following chart shows the allowed
22316 ** transitions and the inserted intermediate states:
22317 **
22318 **    UNLOCKED -> SHARED
22319 **    SHARED -> RESERVED
22320 **    SHARED -> (PENDING) -> EXCLUSIVE
22321 **    RESERVED -> (PENDING) -> EXCLUSIVE
22322 **    PENDING -> EXCLUSIVE
22323 **
22324 ** This routine will only increase a lock.  The os2Unlock() routine
22325 ** erases all locks at once and returns us immediately to locking level 0.
22326 ** It is not possible to lower the locking level one step at a time.  You
22327 ** must go straight to locking level 0.
22328 */
22329 static int os2Lock( sqlite3_file *id, int locktype ){
22330   int rc = SQLITE_OK;       /* Return code from subroutines */
22331   APIRET res = NO_ERROR;    /* Result of an OS/2 lock call */
22332   int newLocktype;       /* Set pFile->locktype to this value before exiting */
22333   int gotPendingLock = 0;/* True if we acquired a PENDING lock this time */
22334   FILELOCK  LockArea,
22335             UnlockArea;
22336   os2File *pFile = (os2File*)id;
22337   memset(&LockArea, 0, sizeof(LockArea));
22338   memset(&UnlockArea, 0, sizeof(UnlockArea));
22339   assert( pFile!=0 );
22340   OSTRACE(( "LOCK %d %d was %d\n", pFile->h, locktype, pFile->locktype ));
22341
22342   /* If there is already a lock of this type or more restrictive on the
22343   ** os2File, do nothing. Don't use the end_lock: exit path, as
22344   ** sqlite3_mutex_enter() hasn't been called yet.
22345   */
22346   if( pFile->locktype>=locktype ){
22347     OSTRACE(( "LOCK %d %d ok (already held)\n", pFile->h, locktype ));
22348     return SQLITE_OK;
22349   }
22350
22351   /* Make sure the locking sequence is correct
22352   */
22353   assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK );
22354   assert( locktype!=PENDING_LOCK );
22355   assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK );
22356
22357   /* Lock the PENDING_LOCK byte if we need to acquire a PENDING lock or
22358   ** a SHARED lock.  If we are acquiring a SHARED lock, the acquisition of
22359   ** the PENDING_LOCK byte is temporary.
22360   */
22361   newLocktype = pFile->locktype;
22362   if( pFile->locktype==NO_LOCK
22363       || (locktype==EXCLUSIVE_LOCK && pFile->locktype==RESERVED_LOCK)
22364   ){
22365     LockArea.lOffset = PENDING_BYTE;
22366     LockArea.lRange = 1L;
22367     UnlockArea.lOffset = 0L;
22368     UnlockArea.lRange = 0L;
22369
22370     /* wait longer than LOCK_TIMEOUT here not to have to try multiple times */
22371     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, 100L, 0L );
22372     if( res == NO_ERROR ){
22373       gotPendingLock = 1;
22374       OSTRACE(( "LOCK %d pending lock boolean set.  res=%d\n", pFile->h, res ));
22375     }
22376   }
22377
22378   /* Acquire a shared lock
22379   */
22380   if( locktype==SHARED_LOCK && res == NO_ERROR ){
22381     assert( pFile->locktype==NO_LOCK );
22382     res = getReadLock(pFile);
22383     if( res == NO_ERROR ){
22384       newLocktype = SHARED_LOCK;
22385     }
22386     OSTRACE(( "LOCK %d acquire shared lock. res=%d\n", pFile->h, res ));
22387   }
22388
22389   /* Acquire a RESERVED lock
22390   */
22391   if( locktype==RESERVED_LOCK && res == NO_ERROR ){
22392     assert( pFile->locktype==SHARED_LOCK );
22393     LockArea.lOffset = RESERVED_BYTE;
22394     LockArea.lRange = 1L;
22395     UnlockArea.lOffset = 0L;
22396     UnlockArea.lRange = 0L;
22397     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
22398     if( res == NO_ERROR ){
22399       newLocktype = RESERVED_LOCK;
22400     }
22401     OSTRACE(( "LOCK %d acquire reserved lock. res=%d\n", pFile->h, res ));
22402   }
22403
22404   /* Acquire a PENDING lock
22405   */
22406   if( locktype==EXCLUSIVE_LOCK && res == NO_ERROR ){
22407     newLocktype = PENDING_LOCK;
22408     gotPendingLock = 0;
22409     OSTRACE(( "LOCK %d acquire pending lock. pending lock boolean unset.\n",
22410                pFile->h ));
22411   }
22412
22413   /* Acquire an EXCLUSIVE lock
22414   */
22415   if( locktype==EXCLUSIVE_LOCK && res == NO_ERROR ){
22416     assert( pFile->locktype>=SHARED_LOCK );
22417     res = unlockReadLock(pFile);
22418     OSTRACE(( "unreadlock = %d\n", res ));
22419     LockArea.lOffset = SHARED_FIRST;
22420     LockArea.lRange = SHARED_SIZE;
22421     UnlockArea.lOffset = 0L;
22422     UnlockArea.lRange = 0L;
22423     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
22424     if( res == NO_ERROR ){
22425       newLocktype = EXCLUSIVE_LOCK;
22426     }else{
22427       OSTRACE(( "OS/2 error-code = %d\n", res ));
22428       getReadLock(pFile);
22429     }
22430     OSTRACE(( "LOCK %d acquire exclusive lock.  res=%d\n", pFile->h, res ));
22431   }
22432
22433   /* If we are holding a PENDING lock that ought to be released, then
22434   ** release it now.
22435   */
22436   if( gotPendingLock && locktype==SHARED_LOCK ){
22437     int r;
22438     LockArea.lOffset = 0L;
22439     LockArea.lRange = 0L;
22440     UnlockArea.lOffset = PENDING_BYTE;
22441     UnlockArea.lRange = 1L;
22442     r = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
22443     OSTRACE(( "LOCK %d unlocking pending/is shared. r=%d\n", pFile->h, r ));
22444   }
22445
22446   /* Update the state of the lock has held in the file descriptor then
22447   ** return the appropriate result code.
22448   */
22449   if( res == NO_ERROR ){
22450     rc = SQLITE_OK;
22451   }else{
22452     OSTRACE(( "LOCK FAILED %d trying for %d but got %d\n", pFile->h,
22453               locktype, newLocktype ));
22454     rc = SQLITE_BUSY;
22455   }
22456   pFile->locktype = newLocktype;
22457   OSTRACE(( "LOCK %d now %d\n", pFile->h, pFile->locktype ));
22458   return rc;
22459 }
22460
22461 /*
22462 ** This routine checks if there is a RESERVED lock held on the specified
22463 ** file by this or any other process. If such a lock is held, return
22464 ** non-zero, otherwise zero.
22465 */
22466 static int os2CheckReservedLock( sqlite3_file *id, int *pOut ){
22467   int r = 0;
22468   os2File *pFile = (os2File*)id;
22469   assert( pFile!=0 );
22470   if( pFile->locktype>=RESERVED_LOCK ){
22471     r = 1;
22472     OSTRACE(( "TEST WR-LOCK %d %d (local)\n", pFile->h, r ));
22473   }else{
22474     FILELOCK  LockArea,
22475               UnlockArea;
22476     APIRET rc = NO_ERROR;
22477     memset(&LockArea, 0, sizeof(LockArea));
22478     memset(&UnlockArea, 0, sizeof(UnlockArea));
22479     LockArea.lOffset = RESERVED_BYTE;
22480     LockArea.lRange = 1L;
22481     UnlockArea.lOffset = 0L;
22482     UnlockArea.lRange = 0L;
22483     rc = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
22484     OSTRACE(( "TEST WR-LOCK %d lock reserved byte rc=%d\n", pFile->h, rc ));
22485     if( rc == NO_ERROR ){
22486       APIRET rcu = NO_ERROR; /* return code for unlocking */
22487       LockArea.lOffset = 0L;
22488       LockArea.lRange = 0L;
22489       UnlockArea.lOffset = RESERVED_BYTE;
22490       UnlockArea.lRange = 1L;
22491       rcu = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
22492       OSTRACE(( "TEST WR-LOCK %d unlock reserved byte r=%d\n", pFile->h, rcu ));
22493     }
22494     r = !(rc == NO_ERROR);
22495     OSTRACE(( "TEST WR-LOCK %d %d (remote)\n", pFile->h, r ));
22496   }
22497   *pOut = r;
22498   return SQLITE_OK;
22499 }
22500
22501 /*
22502 ** Lower the locking level on file descriptor id to locktype.  locktype
22503 ** must be either NO_LOCK or SHARED_LOCK.
22504 **
22505 ** If the locking level of the file descriptor is already at or below
22506 ** the requested locking level, this routine is a no-op.
22507 **
22508 ** It is not possible for this routine to fail if the second argument
22509 ** is NO_LOCK.  If the second argument is SHARED_LOCK then this routine
22510 ** might return SQLITE_IOERR;
22511 */
22512 static int os2Unlock( sqlite3_file *id, int locktype ){
22513   int type;
22514   os2File *pFile = (os2File*)id;
22515   APIRET rc = SQLITE_OK;
22516   APIRET res = NO_ERROR;
22517   FILELOCK  LockArea,
22518             UnlockArea;
22519   memset(&LockArea, 0, sizeof(LockArea));
22520   memset(&UnlockArea, 0, sizeof(UnlockArea));
22521   assert( pFile!=0 );
22522   assert( locktype<=SHARED_LOCK );
22523   OSTRACE(( "UNLOCK %d to %d was %d\n", pFile->h, locktype, pFile->locktype ));
22524   type = pFile->locktype;
22525   if( type>=EXCLUSIVE_LOCK ){
22526     LockArea.lOffset = 0L;
22527     LockArea.lRange = 0L;
22528     UnlockArea.lOffset = SHARED_FIRST;
22529     UnlockArea.lRange = SHARED_SIZE;
22530     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
22531     OSTRACE(( "UNLOCK %d exclusive lock res=%d\n", pFile->h, res ));
22532     if( locktype==SHARED_LOCK && getReadLock(pFile) != NO_ERROR ){
22533       /* This should never happen.  We should always be able to
22534       ** reacquire the read lock */
22535       OSTRACE(( "UNLOCK %d to %d getReadLock() failed\n", pFile->h, locktype ));
22536       rc = SQLITE_IOERR_UNLOCK;
22537     }
22538   }
22539   if( type>=RESERVED_LOCK ){
22540     LockArea.lOffset = 0L;
22541     LockArea.lRange = 0L;
22542     UnlockArea.lOffset = RESERVED_BYTE;
22543     UnlockArea.lRange = 1L;
22544     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
22545     OSTRACE(( "UNLOCK %d reserved res=%d\n", pFile->h, res ));
22546   }
22547   if( locktype==NO_LOCK && type>=SHARED_LOCK ){
22548     res = unlockReadLock(pFile);
22549     OSTRACE(( "UNLOCK %d is %d want %d res=%d\n",
22550               pFile->h, type, locktype, res ));
22551   }
22552   if( type>=PENDING_LOCK ){
22553     LockArea.lOffset = 0L;
22554     LockArea.lRange = 0L;
22555     UnlockArea.lOffset = PENDING_BYTE;
22556     UnlockArea.lRange = 1L;
22557     res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
22558     OSTRACE(( "UNLOCK %d pending res=%d\n", pFile->h, res ));
22559   }
22560   pFile->locktype = locktype;
22561   OSTRACE(( "UNLOCK %d now %d\n", pFile->h, pFile->locktype ));
22562   return rc;
22563 }
22564
22565 /*
22566 ** Control and query of the open file handle.
22567 */
22568 static int os2FileControl(sqlite3_file *id, int op, void *pArg){
22569   switch( op ){
22570     case SQLITE_FCNTL_LOCKSTATE: {
22571       *(int*)pArg = ((os2File*)id)->locktype;
22572       OSTRACE(( "FCNTL_LOCKSTATE %d lock=%d\n",
22573                 ((os2File*)id)->h, ((os2File*)id)->locktype ));
22574       return SQLITE_OK;
22575     }
22576     case SQLITE_FCNTL_CHUNK_SIZE: {
22577       ((os2File*)id)->szChunk = *(int*)pArg;
22578       return SQLITE_OK;
22579     }
22580     case SQLITE_FCNTL_SIZE_HINT: {
22581       sqlite3_int64 sz = *(sqlite3_int64*)pArg;
22582       SimulateIOErrorBenign(1);
22583       os2Truncate(id, sz);
22584       SimulateIOErrorBenign(0);
22585       return SQLITE_OK;
22586     }
22587     case SQLITE_FCNTL_SYNC_OMITTED: {
22588       return SQLITE_OK;
22589     }
22590   }
22591   return SQLITE_NOTFOUND;
22592 }
22593
22594 /*
22595 ** Return the sector size in bytes of the underlying block device for
22596 ** the specified file. This is almost always 512 bytes, but may be
22597 ** larger for some devices.
22598 **
22599 ** SQLite code assumes this function cannot fail. It also assumes that
22600 ** if two files are created in the same file-system directory (i.e.
22601 ** a database and its journal file) that the sector size will be the
22602 ** same for both.
22603 */
22604 static int os2SectorSize(sqlite3_file *id){
22605   UNUSED_PARAMETER(id);
22606   return SQLITE_DEFAULT_SECTOR_SIZE;
22607 }
22608
22609 /*
22610 ** Return a vector of device characteristics.
22611 */
22612 static int os2DeviceCharacteristics(sqlite3_file *id){
22613   UNUSED_PARAMETER(id);
22614   return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN;
22615 }
22616
22617
22618 /*
22619 ** Character set conversion objects used by conversion routines.
22620 */
22621 static UconvObject ucUtf8 = NULL; /* convert between UTF-8 and UCS-2 */
22622 static UconvObject uclCp = NULL;  /* convert between local codepage and UCS-2 */
22623
22624 /*
22625 ** Helper function to initialize the conversion objects from and to UTF-8.
22626 */
22627 static void initUconvObjects( void ){
22628   if( UniCreateUconvObject( UTF_8, &ucUtf8 ) != ULS_SUCCESS )
22629     ucUtf8 = NULL;
22630   if ( UniCreateUconvObject( (UniChar *)L"@path=yes", &uclCp ) != ULS_SUCCESS )
22631     uclCp = NULL;
22632 }
22633
22634 /*
22635 ** Helper function to free the conversion objects from and to UTF-8.
22636 */
22637 static void freeUconvObjects( void ){
22638   if ( ucUtf8 )
22639     UniFreeUconvObject( ucUtf8 );
22640   if ( uclCp )
22641     UniFreeUconvObject( uclCp );
22642   ucUtf8 = NULL;
22643   uclCp = NULL;
22644 }
22645
22646 /*
22647 ** Helper function to convert UTF-8 filenames to local OS/2 codepage.
22648 ** The two-step process: first convert the incoming UTF-8 string
22649 ** into UCS-2 and then from UCS-2 to the current codepage.
22650 ** The returned char pointer has to be freed.
22651 */
22652 static char *convertUtf8PathToCp( const char *in ){
22653   UniChar tempPath[CCHMAXPATH];
22654   char *out = (char *)calloc( CCHMAXPATH, 1 );
22655
22656   if( !out )
22657     return NULL;
22658
22659   if( !ucUtf8 || !uclCp )
22660     initUconvObjects();
22661
22662   /* determine string for the conversion of UTF-8 which is CP1208 */
22663   if( UniStrToUcs( ucUtf8, tempPath, (char *)in, CCHMAXPATH ) != ULS_SUCCESS )
22664     return out; /* if conversion fails, return the empty string */
22665
22666   /* conversion for current codepage which can be used for paths */
22667   UniStrFromUcs( uclCp, out, tempPath, CCHMAXPATH );
22668
22669   return out;
22670 }
22671
22672 /*
22673 ** Helper function to convert filenames from local codepage to UTF-8.
22674 ** The two-step process: first convert the incoming codepage-specific
22675 ** string into UCS-2 and then from UCS-2 to the codepage of UTF-8.
22676 ** The returned char pointer has to be freed.
22677 **
22678 ** This function is non-static to be able to use this in shell.c and
22679 ** similar applications that take command line arguments.
22680 */
22681 char *convertCpPathToUtf8( const char *in ){
22682   UniChar tempPath[CCHMAXPATH];
22683   char *out = (char *)calloc( CCHMAXPATH, 1 );
22684
22685   if( !out )
22686     return NULL;
22687
22688   if( !ucUtf8 || !uclCp )
22689     initUconvObjects();
22690
22691   /* conversion for current codepage which can be used for paths */
22692   if( UniStrToUcs( uclCp, tempPath, (char *)in, CCHMAXPATH ) != ULS_SUCCESS )
22693     return out; /* if conversion fails, return the empty string */
22694
22695   /* determine string for the conversion of UTF-8 which is CP1208 */
22696   UniStrFromUcs( ucUtf8, out, tempPath, CCHMAXPATH );
22697
22698   return out;
22699 }
22700
22701
22702 #ifndef SQLITE_OMIT_WAL
22703
22704 /*
22705 ** Use main database file for interprocess locking. If un-defined
22706 ** a separate file is created for this purpose. The file will be
22707 ** used only to set file locks. There will be no data written to it.
22708 */
22709 #define SQLITE_OS2_NO_WAL_LOCK_FILE     
22710
22711 #if 0
22712 static void _ERR_TRACE( const char *fmt, ... ) {
22713   va_list  ap;
22714   va_start(ap, fmt);
22715   vfprintf(stderr, fmt, ap);
22716   fflush(stderr);
22717 }
22718 #define ERR_TRACE(rc, msg)        \
22719         if( (rc) != SQLITE_OK ) _ERR_TRACE msg;
22720 #else
22721 #define ERR_TRACE(rc, msg)
22722 #endif
22723
22724 /*
22725 ** Helper functions to obtain and relinquish the global mutex. The
22726 ** global mutex is used to protect os2ShmNodeList.
22727 **
22728 ** Function os2ShmMutexHeld() is used to assert() that the global mutex 
22729 ** is held when required. This function is only used as part of assert() 
22730 ** statements. e.g.
22731 **
22732 **   os2ShmEnterMutex()
22733 **     assert( os2ShmMutexHeld() );
22734 **   os2ShmLeaveMutex()
22735 */
22736 static void os2ShmEnterMutex(void){
22737   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
22738 }
22739 static void os2ShmLeaveMutex(void){
22740   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
22741 }
22742 #ifdef SQLITE_DEBUG
22743 static int os2ShmMutexHeld(void) {
22744   return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
22745 }
22746 int GetCurrentProcessId(void) {
22747   PPIB pib;
22748   DosGetInfoBlocks(NULL, &pib);
22749   return (int)pib->pib_ulpid;
22750 }
22751 #endif
22752
22753 /*
22754 ** Object used to represent a the shared memory area for a single log file.
22755 ** When multiple threads all reference the same log-summary, each thread has
22756 ** its own os2File object, but they all point to a single instance of this 
22757 ** object.  In other words, each log-summary is opened only once per process.
22758 **
22759 ** os2ShmMutexHeld() must be true when creating or destroying
22760 ** this object or while reading or writing the following fields:
22761 **
22762 **      nRef
22763 **      pNext 
22764 **
22765 ** The following fields are read-only after the object is created:
22766 ** 
22767 **      szRegion
22768 **      hLockFile
22769 **      shmBaseName
22770 **
22771 ** Either os2ShmNode.mutex must be held or os2ShmNode.nRef==0 and
22772 ** os2ShmMutexHeld() is true when reading or writing any other field
22773 ** in this structure.
22774 **
22775 */
22776 struct os2ShmNode {
22777   sqlite3_mutex *mutex;      /* Mutex to access this object */
22778   os2ShmNode *pNext;         /* Next in list of all os2ShmNode objects */
22779
22780   int szRegion;              /* Size of shared-memory regions */
22781
22782   int nRegion;               /* Size of array apRegion */
22783   void **apRegion;           /* Array of pointers to shared-memory regions */
22784
22785   int nRef;                  /* Number of os2ShmLink objects pointing to this */
22786   os2ShmLink *pFirst;        /* First os2ShmLink object pointing to this */
22787
22788   HFILE hLockFile;           /* File used for inter-process memory locking */
22789   char shmBaseName[1];       /* Name of the memory object !!! must last !!! */
22790 };
22791
22792
22793 /*
22794 ** Structure used internally by this VFS to record the state of an
22795 ** open shared memory connection.
22796 **
22797 ** The following fields are initialized when this object is created and
22798 ** are read-only thereafter:
22799 **
22800 **    os2Shm.pShmNode
22801 **    os2Shm.id
22802 **
22803 ** All other fields are read/write.  The os2Shm.pShmNode->mutex must be held
22804 ** while accessing any read/write fields.
22805 */
22806 struct os2ShmLink {
22807   os2ShmNode *pShmNode;      /* The underlying os2ShmNode object */
22808   os2ShmLink *pNext;         /* Next os2Shm with the same os2ShmNode */
22809   u32 sharedMask;            /* Mask of shared locks held */
22810   u32 exclMask;              /* Mask of exclusive locks held */
22811 #ifdef SQLITE_DEBUG
22812   u8 id;                     /* Id of this connection with its os2ShmNode */
22813 #endif
22814 };
22815
22816
22817 /*
22818 ** A global list of all os2ShmNode objects.
22819 **
22820 ** The os2ShmMutexHeld() must be true while reading or writing this list.
22821 */
22822 static os2ShmNode *os2ShmNodeList = NULL;
22823
22824 /*
22825 ** Constants used for locking
22826 */
22827 #ifdef  SQLITE_OS2_NO_WAL_LOCK_FILE
22828 #define OS2_SHM_BASE   (PENDING_BYTE + 0x10000)         /* first lock byte */
22829 #else
22830 #define OS2_SHM_BASE   ((22+SQLITE_SHM_NLOCK)*4)        /* first lock byte */
22831 #endif
22832
22833 #define OS2_SHM_DMS    (OS2_SHM_BASE+SQLITE_SHM_NLOCK)  /* deadman switch */
22834
22835 /*
22836 ** Apply advisory locks for all n bytes beginning at ofst.
22837 */
22838 #define _SHM_UNLCK  1   /* no lock */
22839 #define _SHM_RDLCK  2   /* shared lock, no wait */
22840 #define _SHM_WRLCK  3   /* exlusive lock, no wait */
22841 #define _SHM_WRLCK_WAIT 4 /* exclusive lock, wait */
22842 static int os2ShmSystemLock(
22843   os2ShmNode *pNode,    /* Apply locks to this open shared-memory segment */
22844   int lockType,         /* _SHM_UNLCK, _SHM_RDLCK, _SHM_WRLCK or _SHM_WRLCK_WAIT */
22845   int ofst,             /* Offset to first byte to be locked/unlocked */
22846   int nByte             /* Number of bytes to lock or unlock */
22847 ){
22848   APIRET rc;
22849   FILELOCK area;
22850   ULONG mode, timeout;
22851
22852   /* Access to the os2ShmNode object is serialized by the caller */
22853   assert( sqlite3_mutex_held(pNode->mutex) || pNode->nRef==0 );
22854
22855   mode = 1;     /* shared lock */
22856   timeout = 0;  /* no wait */
22857   area.lOffset = ofst;
22858   area.lRange = nByte;
22859
22860   switch( lockType ) {
22861     case _SHM_WRLCK_WAIT:
22862       timeout = (ULONG)-1;      /* wait forever */
22863     case _SHM_WRLCK:
22864       mode = 0;                 /* exclusive lock */
22865     case _SHM_RDLCK:
22866       rc = DosSetFileLocks(pNode->hLockFile, 
22867                            NULL, &area, timeout, mode);
22868       break;
22869     /* case _SHM_UNLCK: */
22870     default:
22871       rc = DosSetFileLocks(pNode->hLockFile, 
22872                            &area, NULL, 0, 0);
22873       break;
22874   }
22875                           
22876   OSTRACE(("SHM-LOCK %d %s %s 0x%08lx\n", 
22877            pNode->hLockFile,
22878            rc==SQLITE_OK ? "ok" : "failed",
22879            lockType==_SHM_UNLCK ? "Unlock" : "Lock",
22880            rc));
22881
22882   ERR_TRACE(rc, ("os2ShmSystemLock: %d %s\n", rc, pNode->shmBaseName))
22883
22884   return ( rc == 0 ) ?  SQLITE_OK : SQLITE_BUSY;
22885 }
22886
22887 /*
22888 ** Find an os2ShmNode in global list or allocate a new one, if not found.
22889 **
22890 ** This is not a VFS shared-memory method; it is a utility function called
22891 ** by VFS shared-memory methods.
22892 */
22893 static int os2OpenSharedMemory( os2File *fd, int szRegion ) {
22894   os2ShmLink *pLink;
22895   os2ShmNode *pNode;
22896   int cbShmName, rc = SQLITE_OK;
22897   char shmName[CCHMAXPATH + 30];
22898 #ifndef SQLITE_OS2_NO_WAL_LOCK_FILE
22899   ULONG action;
22900 #endif
22901   
22902   /* We need some additional space at the end to append the region number */
22903   cbShmName = sprintf(shmName, "\\SHAREMEM\\%s", fd->zFullPathCp );
22904   if( cbShmName >= CCHMAXPATH-8 )
22905     return SQLITE_IOERR_SHMOPEN; 
22906
22907   /* Replace colon in file name to form a valid shared memory name */
22908   shmName[10+1] = '!';
22909
22910   /* Allocate link object (we free it later in case of failure) */
22911   pLink = sqlite3_malloc( sizeof(*pLink) );
22912   if( !pLink )
22913     return SQLITE_NOMEM;
22914
22915   /* Access node list */
22916   os2ShmEnterMutex();
22917
22918   /* Find node by it's shared memory base name */
22919   for( pNode = os2ShmNodeList; 
22920        pNode && stricmp(shmName, pNode->shmBaseName) != 0; 
22921        pNode = pNode->pNext )   ;
22922
22923   /* Not found: allocate a new node */
22924   if( !pNode ) {
22925     pNode = sqlite3_malloc( sizeof(*pNode) + cbShmName );
22926     if( pNode ) {
22927       memset(pNode, 0, sizeof(*pNode) );
22928       pNode->szRegion = szRegion;
22929       pNode->hLockFile = (HFILE)-1;      
22930       strcpy(pNode->shmBaseName, shmName);
22931
22932 #ifdef SQLITE_OS2_NO_WAL_LOCK_FILE
22933       if( DosDupHandle(fd->h, &pNode->hLockFile) != 0 ) {
22934 #else
22935       sprintf(shmName, "%s-lck", fd->zFullPathCp);
22936       if( DosOpen((PSZ)shmName, &pNode->hLockFile, &action, 0, FILE_NORMAL, 
22937                   OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW,
22938                   OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE | 
22939                   OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_FAIL_ON_ERROR,
22940                   NULL) != 0 ) {
22941 #endif
22942         sqlite3_free(pNode);  
22943         rc = SQLITE_IOERR;
22944       } else {
22945         pNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
22946         if( !pNode->mutex ) {
22947           sqlite3_free(pNode);  
22948           rc = SQLITE_NOMEM;
22949         }
22950       }   
22951     } else {
22952       rc = SQLITE_NOMEM;
22953     }
22954     
22955     if( rc == SQLITE_OK ) {
22956       pNode->pNext = os2ShmNodeList;
22957       os2ShmNodeList = pNode;
22958     } else {
22959       pNode = NULL;
22960     }
22961   } else if( pNode->szRegion != szRegion ) {
22962     rc = SQLITE_IOERR_SHMSIZE;
22963     pNode = NULL;
22964   }
22965
22966   if( pNode ) {
22967     sqlite3_mutex_enter(pNode->mutex);
22968
22969     memset(pLink, 0, sizeof(*pLink));
22970
22971     pLink->pShmNode = pNode;
22972     pLink->pNext = pNode->pFirst;
22973     pNode->pFirst = pLink;
22974     pNode->nRef++;
22975
22976     fd->pShmLink = pLink;
22977
22978     sqlite3_mutex_leave(pNode->mutex);
22979     
22980   } else {
22981     /* Error occured. Free our link object. */
22982     sqlite3_free(pLink);  
22983   }
22984
22985   os2ShmLeaveMutex();
22986
22987   ERR_TRACE(rc, ("os2OpenSharedMemory: %d  %s\n", rc, fd->zFullPathCp))  
22988   
22989   return rc;
22990 }
22991
22992 /*
22993 ** Purge the os2ShmNodeList list of all entries with nRef==0.
22994 **
22995 ** This is not a VFS shared-memory method; it is a utility function called
22996 ** by VFS shared-memory methods.
22997 */
22998 static void os2PurgeShmNodes( int deleteFlag ) {
22999   os2ShmNode *pNode;
23000   os2ShmNode **ppNode;
23001
23002   os2ShmEnterMutex();
23003   
23004   ppNode = &os2ShmNodeList;
23005
23006   while( *ppNode ) {
23007     pNode = *ppNode;
23008
23009     if( pNode->nRef == 0 ) {
23010       *ppNode = pNode->pNext;   
23011      
23012       if( pNode->apRegion ) {
23013         /* Prevent other processes from resizing the shared memory */
23014         os2ShmSystemLock(pNode, _SHM_WRLCK_WAIT, OS2_SHM_DMS, 1);
23015
23016         while( pNode->nRegion-- ) {
23017 #ifdef SQLITE_DEBUG
23018           int rc = 
23019 #endif          
23020           DosFreeMem(pNode->apRegion[pNode->nRegion]);
23021
23022           OSTRACE(("SHM-PURGE pid-%d unmap region=%d %s\n",
23023                   (int)GetCurrentProcessId(), pNode->nRegion,
23024                   rc == 0 ? "ok" : "failed"));
23025         }
23026
23027         /* Allow other processes to resize the shared memory */
23028         os2ShmSystemLock(pNode, _SHM_UNLCK, OS2_SHM_DMS, 1);
23029
23030         sqlite3_free(pNode->apRegion);
23031       }  
23032
23033       DosClose(pNode->hLockFile);
23034       
23035 #ifndef SQLITE_OS2_NO_WAL_LOCK_FILE
23036       if( deleteFlag ) {
23037          char fileName[CCHMAXPATH];
23038          /* Skip "\\SHAREMEM\\" */
23039          sprintf(fileName, "%s-lck", pNode->shmBaseName + 10);
23040          /* restore colon */
23041          fileName[1] = ':';
23042          
23043          DosForceDelete(fileName); 
23044       }
23045 #endif
23046
23047       sqlite3_mutex_free(pNode->mutex);
23048
23049       sqlite3_free(pNode);
23050       
23051     } else {
23052       ppNode = &pNode->pNext;
23053     }
23054   } 
23055
23056   os2ShmLeaveMutex();
23057 }
23058
23059 /*
23060 ** This function is called to obtain a pointer to region iRegion of the
23061 ** shared-memory associated with the database file id. Shared-memory regions
23062 ** are numbered starting from zero. Each shared-memory region is szRegion
23063 ** bytes in size.
23064 **
23065 ** If an error occurs, an error code is returned and *pp is set to NULL.
23066 **
23067 ** Otherwise, if the bExtend parameter is 0 and the requested shared-memory
23068 ** region has not been allocated (by any client, including one running in a
23069 ** separate process), then *pp is set to NULL and SQLITE_OK returned. If
23070 ** bExtend is non-zero and the requested shared-memory region has not yet
23071 ** been allocated, it is allocated by this function.
23072 **
23073 ** If the shared-memory region has already been allocated or is allocated by
23074 ** this call as described above, then it is mapped into this processes
23075 ** address space (if it is not already), *pp is set to point to the mapped
23076 ** memory and SQLITE_OK returned.
23077 */
23078 static int os2ShmMap(
23079   sqlite3_file *id,               /* Handle open on database file */
23080   int iRegion,                    /* Region to retrieve */
23081   int szRegion,                   /* Size of regions */
23082   int bExtend,                    /* True to extend block if necessary */
23083   void volatile **pp              /* OUT: Mapped memory */
23084 ){
23085   PVOID pvTemp;
23086   void **apRegion;
23087   os2ShmNode *pNode;
23088   int n, rc = SQLITE_OK;
23089   char shmName[CCHMAXPATH];
23090   os2File *pFile = (os2File*)id;
23091   
23092   *pp = NULL;
23093
23094   if( !pFile->pShmLink )
23095     rc = os2OpenSharedMemory( pFile, szRegion );
23096   
23097   if( rc == SQLITE_OK ) {
23098     pNode = pFile->pShmLink->pShmNode ;
23099     
23100     sqlite3_mutex_enter(pNode->mutex);
23101     
23102     assert( szRegion==pNode->szRegion );
23103
23104     /* Unmapped region ? */
23105     if( iRegion >= pNode->nRegion ) {
23106       /* Prevent other processes from resizing the shared memory */
23107       os2ShmSystemLock(pNode, _SHM_WRLCK_WAIT, OS2_SHM_DMS, 1);
23108
23109       apRegion = sqlite3_realloc(
23110         pNode->apRegion, (iRegion + 1) * sizeof(apRegion[0]));
23111
23112       if( apRegion ) {
23113         pNode->apRegion = apRegion;
23114
23115         while( pNode->nRegion <= iRegion ) {
23116           sprintf(shmName, "%s-%u", 
23117                   pNode->shmBaseName, pNode->nRegion);
23118
23119           if( DosGetNamedSharedMem(&pvTemp, (PSZ)shmName, 
23120                 PAG_READ | PAG_WRITE) != NO_ERROR ) {
23121             if( !bExtend )
23122               break;
23123
23124             if( DosAllocSharedMem(&pvTemp, (PSZ)shmName, szRegion,
23125                   PAG_READ | PAG_WRITE | PAG_COMMIT | OBJ_ANY) != NO_ERROR && 
23126                 DosAllocSharedMem(&pvTemp, (PSZ)shmName, szRegion,
23127                   PAG_READ | PAG_WRITE | PAG_COMMIT) != NO_ERROR ) { 
23128               rc = SQLITE_NOMEM;
23129               break;
23130             }
23131           }
23132
23133           apRegion[pNode->nRegion++] = pvTemp;
23134         }
23135
23136         /* zero out remaining entries */ 
23137         for( n = pNode->nRegion; n <= iRegion; n++ )
23138           pNode->apRegion[n] = NULL;
23139
23140         /* Return this region (maybe zero) */
23141         *pp = pNode->apRegion[iRegion];
23142       } else {
23143         rc = SQLITE_NOMEM;
23144       }
23145
23146       /* Allow other processes to resize the shared memory */
23147       os2ShmSystemLock(pNode, _SHM_UNLCK, OS2_SHM_DMS, 1);
23148       
23149     } else {
23150       /* Region has been mapped previously */
23151       *pp = pNode->apRegion[iRegion];
23152     }
23153
23154     sqlite3_mutex_leave(pNode->mutex);
23155   } 
23156
23157   ERR_TRACE(rc, ("os2ShmMap: %s iRgn = %d, szRgn = %d, bExt = %d : %d\n", 
23158                  pFile->zFullPathCp, iRegion, szRegion, bExtend, rc))
23159           
23160   return rc;
23161 }
23162
23163 /*
23164 ** Close a connection to shared-memory.  Delete the underlying
23165 ** storage if deleteFlag is true.
23166 **
23167 ** If there is no shared memory associated with the connection then this
23168 ** routine is a harmless no-op.
23169 */
23170 static int os2ShmUnmap(
23171   sqlite3_file *id,               /* The underlying database file */
23172   int deleteFlag                  /* Delete shared-memory if true */
23173 ){
23174   os2File *pFile = (os2File*)id;
23175   os2ShmLink *pLink = pFile->pShmLink;
23176   
23177   if( pLink ) {
23178     int nRef = -1;
23179     os2ShmLink **ppLink;
23180     os2ShmNode *pNode = pLink->pShmNode;
23181
23182     sqlite3_mutex_enter(pNode->mutex);
23183     
23184     for( ppLink = &pNode->pFirst;
23185          *ppLink && *ppLink != pLink;
23186          ppLink = &(*ppLink)->pNext )   ;
23187          
23188     assert(*ppLink);
23189
23190     if( *ppLink ) {
23191       *ppLink = pLink->pNext;
23192       nRef = --pNode->nRef;
23193     } else {
23194       ERR_TRACE(1, ("os2ShmUnmap: link not found ! %s\n", 
23195                     pNode->shmBaseName))
23196     }
23197     
23198     pFile->pShmLink = NULL;
23199     sqlite3_free(pLink);
23200
23201     sqlite3_mutex_leave(pNode->mutex);
23202     
23203     if( nRef == 0 )
23204       os2PurgeShmNodes( deleteFlag );
23205   }
23206
23207   return SQLITE_OK;
23208 }
23209
23210 /*
23211 ** Change the lock state for a shared-memory segment.
23212 **
23213 ** Note that the relationship between SHAREd and EXCLUSIVE locks is a little
23214 ** different here than in posix.  In xShmLock(), one can go from unlocked
23215 ** to shared and back or from unlocked to exclusive and back.  But one may
23216 ** not go from shared to exclusive or from exclusive to shared.
23217 */
23218 static int os2ShmLock(
23219   sqlite3_file *id,          /* Database file holding the shared memory */
23220   int ofst,                  /* First lock to acquire or release */
23221   int n,                     /* Number of locks to acquire or release */
23222   int flags                  /* What to do with the lock */
23223 ){
23224   u32 mask;                             /* Mask of locks to take or release */
23225   int rc = SQLITE_OK;                   /* Result code */
23226   os2File *pFile = (os2File*)id;
23227   os2ShmLink *p = pFile->pShmLink;      /* The shared memory being locked */
23228   os2ShmLink *pX;                       /* For looping over all siblings */
23229   os2ShmNode *pShmNode = p->pShmNode;   /* Our node */
23230   
23231   assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK );
23232   assert( n>=1 );
23233   assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
23234        || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
23235        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED)
23236        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
23237   assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
23238
23239   mask = (u32)((1U<<(ofst+n)) - (1U<<ofst));
23240   assert( n>1 || mask==(1<<ofst) );
23241
23242
23243   sqlite3_mutex_enter(pShmNode->mutex);
23244
23245   if( flags & SQLITE_SHM_UNLOCK ){
23246     u32 allMask = 0; /* Mask of locks held by siblings */
23247
23248     /* See if any siblings hold this same lock */
23249     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
23250       if( pX==p ) continue;
23251       assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 );
23252       allMask |= pX->sharedMask;
23253     }
23254
23255     /* Unlock the system-level locks */
23256     if( (mask & allMask)==0 ){
23257       rc = os2ShmSystemLock(pShmNode, _SHM_UNLCK, ofst+OS2_SHM_BASE, n);
23258     }else{
23259       rc = SQLITE_OK;
23260     }
23261
23262     /* Undo the local locks */
23263     if( rc==SQLITE_OK ){
23264       p->exclMask &= ~mask;
23265       p->sharedMask &= ~mask;
23266     } 
23267   }else if( flags & SQLITE_SHM_SHARED ){
23268     u32 allShared = 0;  /* Union of locks held by connections other than "p" */
23269
23270     /* Find out which shared locks are already held by sibling connections.
23271     ** If any sibling already holds an exclusive lock, go ahead and return
23272     ** SQLITE_BUSY.
23273     */
23274     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
23275       if( (pX->exclMask & mask)!=0 ){
23276         rc = SQLITE_BUSY;
23277         break;
23278       }
23279       allShared |= pX->sharedMask;
23280     }
23281
23282     /* Get shared locks at the system level, if necessary */
23283     if( rc==SQLITE_OK ){
23284       if( (allShared & mask)==0 ){
23285         rc = os2ShmSystemLock(pShmNode, _SHM_RDLCK, ofst+OS2_SHM_BASE, n);
23286       }else{
23287         rc = SQLITE_OK;
23288       }
23289     }
23290
23291     /* Get the local shared locks */
23292     if( rc==SQLITE_OK ){
23293       p->sharedMask |= mask;
23294     }
23295   }else{
23296     /* Make sure no sibling connections hold locks that will block this
23297     ** lock.  If any do, return SQLITE_BUSY right away.
23298     */
23299     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
23300       if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
23301         rc = SQLITE_BUSY;
23302         break;
23303       }
23304     }
23305   
23306     /* Get the exclusive locks at the system level.  Then if successful
23307     ** also mark the local connection as being locked.
23308     */
23309     if( rc==SQLITE_OK ){
23310       rc = os2ShmSystemLock(pShmNode, _SHM_WRLCK, ofst+OS2_SHM_BASE, n);
23311       if( rc==SQLITE_OK ){
23312         assert( (p->sharedMask & mask)==0 );
23313         p->exclMask |= mask;
23314       }
23315     }
23316   }
23317
23318   sqlite3_mutex_leave(pShmNode->mutex);
23319   
23320   OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x %s\n",
23321            p->id, (int)GetCurrentProcessId(), p->sharedMask, p->exclMask,
23322            rc ? "failed" : "ok"));
23323
23324   ERR_TRACE(rc, ("os2ShmLock: ofst = %d, n = %d, flags = 0x%x -> %d \n", 
23325                  ofst, n, flags, rc))
23326                   
23327   return rc; 
23328 }
23329
23330 /*
23331 ** Implement a memory barrier or memory fence on shared memory.
23332 **
23333 ** All loads and stores begun before the barrier must complete before
23334 ** any load or store begun after the barrier.
23335 */
23336 static void os2ShmBarrier(
23337   sqlite3_file *id                /* Database file holding the shared memory */
23338 ){
23339   UNUSED_PARAMETER(id);
23340   os2ShmEnterMutex();
23341   os2ShmLeaveMutex();
23342 }
23343
23344 #else
23345 # define os2ShmMap     0
23346 # define os2ShmLock    0
23347 # define os2ShmBarrier 0
23348 # define os2ShmUnmap   0
23349 #endif /* #ifndef SQLITE_OMIT_WAL */
23350
23351
23352 /*
23353 ** This vector defines all the methods that can operate on an
23354 ** sqlite3_file for os2.
23355 */
23356 static const sqlite3_io_methods os2IoMethod = {
23357   2,                              /* iVersion */
23358   os2Close,                       /* xClose */
23359   os2Read,                        /* xRead */
23360   os2Write,                       /* xWrite */
23361   os2Truncate,                    /* xTruncate */
23362   os2Sync,                        /* xSync */
23363   os2FileSize,                    /* xFileSize */
23364   os2Lock,                        /* xLock */
23365   os2Unlock,                      /* xUnlock */
23366   os2CheckReservedLock,           /* xCheckReservedLock */
23367   os2FileControl,                 /* xFileControl */
23368   os2SectorSize,                  /* xSectorSize */
23369   os2DeviceCharacteristics,       /* xDeviceCharacteristics */
23370   os2ShmMap,                      /* xShmMap */
23371   os2ShmLock,                     /* xShmLock */
23372   os2ShmBarrier,                  /* xShmBarrier */
23373   os2ShmUnmap                     /* xShmUnmap */
23374 };
23375
23376
23377 /***************************************************************************
23378 ** Here ends the I/O methods that form the sqlite3_io_methods object.
23379 **
23380 ** The next block of code implements the VFS methods.
23381 ****************************************************************************/
23382
23383 /*
23384 ** Create a temporary file name in zBuf.  zBuf must be big enough to
23385 ** hold at pVfs->mxPathname characters.
23386 */
23387 static int getTempname(int nBuf, char *zBuf ){
23388   static const char zChars[] =
23389     "abcdefghijklmnopqrstuvwxyz"
23390     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
23391     "0123456789";
23392   int i, j;
23393   PSZ zTempPathCp;      
23394   char zTempPath[CCHMAXPATH];
23395   ULONG ulDriveNum, ulDriveMap;
23396   
23397   /* It's odd to simulate an io-error here, but really this is just
23398   ** using the io-error infrastructure to test that SQLite handles this
23399   ** function failing. 
23400   */
23401   SimulateIOError( return SQLITE_IOERR );
23402
23403   if( sqlite3_temp_directory ) {
23404     sqlite3_snprintf(CCHMAXPATH-30, zTempPath, "%s", sqlite3_temp_directory);
23405   } else if( DosScanEnv( (PSZ)"TEMP",   &zTempPathCp ) == NO_ERROR ||
23406              DosScanEnv( (PSZ)"TMP",    &zTempPathCp ) == NO_ERROR ||
23407              DosScanEnv( (PSZ)"TMPDIR", &zTempPathCp ) == NO_ERROR ) {
23408     char *zTempPathUTF = convertCpPathToUtf8( (char *)zTempPathCp );
23409     sqlite3_snprintf(CCHMAXPATH-30, zTempPath, "%s", zTempPathUTF);
23410     free( zTempPathUTF );
23411   } else if( DosQueryCurrentDisk( &ulDriveNum, &ulDriveMap ) == NO_ERROR ) {
23412     zTempPath[0] = (char)('A' + ulDriveNum - 1);
23413     zTempPath[1] = ':'; 
23414     zTempPath[2] = '\0'; 
23415   } else {
23416     zTempPath[0] = '\0'; 
23417   }
23418   
23419   /* Strip off a trailing slashes or backslashes, otherwise we would get *
23420    * multiple (back)slashes which causes DosOpen() to fail.              *
23421    * Trailing spaces are not allowed, either.                            */
23422   j = sqlite3Strlen30(zTempPath);
23423   while( j > 0 && ( zTempPath[j-1] == '\\' || zTempPath[j-1] == '/' || 
23424                     zTempPath[j-1] == ' ' ) ){
23425     j--;
23426   }
23427   zTempPath[j] = '\0';
23428   
23429   /* We use 20 bytes to randomize the name */
23430   sqlite3_snprintf(nBuf-22, zBuf,
23431                    "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath);
23432   j = sqlite3Strlen30(zBuf);
23433   sqlite3_randomness( 20, &zBuf[j] );
23434   for( i = 0; i < 20; i++, j++ ){
23435     zBuf[j] = zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
23436   }
23437   zBuf[j] = 0;
23438
23439   OSTRACE(( "TEMP FILENAME: %s\n", zBuf ));
23440   return SQLITE_OK;
23441 }
23442
23443
23444 /*
23445 ** Turn a relative pathname into a full pathname.  Write the full
23446 ** pathname into zFull[].  zFull[] will be at least pVfs->mxPathname
23447 ** bytes in size.
23448 */
23449 static int os2FullPathname(
23450   sqlite3_vfs *pVfs,          /* Pointer to vfs object */
23451   const char *zRelative,      /* Possibly relative input path */
23452   int nFull,                  /* Size of output buffer in bytes */
23453   char *zFull                 /* Output buffer */
23454 ){
23455   char *zRelativeCp = convertUtf8PathToCp( zRelative );
23456   char zFullCp[CCHMAXPATH] = "\0";
23457   char *zFullUTF;
23458   APIRET rc = DosQueryPathInfo( (PSZ)zRelativeCp, FIL_QUERYFULLNAME, 
23459                                 zFullCp, CCHMAXPATH );
23460   free( zRelativeCp );
23461   zFullUTF = convertCpPathToUtf8( zFullCp );
23462   sqlite3_snprintf( nFull, zFull, zFullUTF );
23463   free( zFullUTF );
23464   return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR;
23465 }
23466
23467
23468 /*
23469 ** Open a file.
23470 */
23471 static int os2Open(
23472   sqlite3_vfs *pVfs,            /* Not used */
23473   const char *zName,            /* Name of the file (UTF-8) */
23474   sqlite3_file *id,             /* Write the SQLite file handle here */
23475   int flags,                    /* Open mode flags */
23476   int *pOutFlags                /* Status return flags */
23477 ){
23478   HFILE h;
23479   ULONG ulOpenFlags = 0;
23480   ULONG ulOpenMode = 0;
23481   ULONG ulAction = 0;
23482   ULONG rc;
23483   os2File *pFile = (os2File*)id;
23484   const char *zUtf8Name = zName;
23485   char *zNameCp;
23486   char  zTmpname[CCHMAXPATH];
23487
23488   int isExclusive  = (flags & SQLITE_OPEN_EXCLUSIVE);
23489   int isCreate     = (flags & SQLITE_OPEN_CREATE);
23490   int isReadWrite  = (flags & SQLITE_OPEN_READWRITE);
23491 #ifndef NDEBUG
23492   int isDelete     = (flags & SQLITE_OPEN_DELETEONCLOSE);
23493   int isReadonly   = (flags & SQLITE_OPEN_READONLY);
23494   int eType        = (flags & 0xFFFFFF00);
23495   int isOpenJournal = (isCreate && (
23496         eType==SQLITE_OPEN_MASTER_JOURNAL 
23497      || eType==SQLITE_OPEN_MAIN_JOURNAL 
23498      || eType==SQLITE_OPEN_WAL
23499   ));
23500 #endif
23501
23502   UNUSED_PARAMETER(pVfs);
23503   assert( id!=0 );
23504
23505   /* Check the following statements are true: 
23506   **
23507   **   (a) Exactly one of the READWRITE and READONLY flags must be set, and 
23508   **   (b) if CREATE is set, then READWRITE must also be set, and
23509   **   (c) if EXCLUSIVE is set, then CREATE must also be set.
23510   **   (d) if DELETEONCLOSE is set, then CREATE must also be set.
23511   */
23512   assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
23513   assert(isCreate==0 || isReadWrite);
23514   assert(isExclusive==0 || isCreate);
23515   assert(isDelete==0 || isCreate);
23516
23517   /* The main DB, main journal, WAL file and master journal are never 
23518   ** automatically deleted. Nor are they ever temporary files.  */
23519   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
23520   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
23521   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
23522   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
23523
23524   /* Assert that the upper layer has set one of the "file-type" flags. */
23525   assert( eType==SQLITE_OPEN_MAIN_DB      || eType==SQLITE_OPEN_TEMP_DB 
23526        || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL 
23527        || eType==SQLITE_OPEN_SUBJOURNAL   || eType==SQLITE_OPEN_MASTER_JOURNAL 
23528        || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
23529   );
23530
23531   memset( pFile, 0, sizeof(*pFile) );
23532   pFile->h = (HFILE)-1;
23533
23534   /* If the second argument to this function is NULL, generate a 
23535   ** temporary file name to use 
23536   */
23537   if( !zUtf8Name ){
23538     assert(isDelete && !isOpenJournal);
23539     rc = getTempname(CCHMAXPATH, zTmpname);
23540     if( rc!=SQLITE_OK ){
23541       return rc;
23542     }
23543     zUtf8Name = zTmpname;
23544   }
23545
23546   if( isReadWrite ){
23547     ulOpenMode |= OPEN_ACCESS_READWRITE;
23548   }else{
23549     ulOpenMode |= OPEN_ACCESS_READONLY;
23550   }
23551
23552   /* Open in random access mode for possibly better speed.  Allow full
23553   ** sharing because file locks will provide exclusive access when needed.
23554   ** The handle should not be inherited by child processes and we don't 
23555   ** want popups from the critical error handler.
23556   */
23557   ulOpenMode |= OPEN_FLAGS_RANDOM | OPEN_SHARE_DENYNONE | 
23558                 OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_FAIL_ON_ERROR;
23559
23560   /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is 
23561   ** created. SQLite doesn't use it to indicate "exclusive access" 
23562   ** as it is usually understood.
23563   */
23564   if( isExclusive ){
23565     /* Creates a new file, only if it does not already exist. */
23566     /* If the file exists, it fails. */
23567     ulOpenFlags |= OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS;
23568   }else if( isCreate ){
23569     /* Open existing file, or create if it doesn't exist */
23570     ulOpenFlags |= OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS;
23571   }else{
23572     /* Opens a file, only if it exists. */
23573     ulOpenFlags |= OPEN_ACTION_FAIL_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS;
23574   }
23575
23576   zNameCp = convertUtf8PathToCp( zUtf8Name );
23577   rc = DosOpen( (PSZ)zNameCp,
23578                 &h,
23579                 &ulAction,
23580                 0L,
23581                 FILE_NORMAL,
23582                 ulOpenFlags,
23583                 ulOpenMode,
23584                 (PEAOP2)NULL );
23585   free( zNameCp );
23586
23587   if( rc != NO_ERROR ){
23588     OSTRACE(( "OPEN Invalid handle rc=%d: zName=%s, ulAction=%#lx, ulFlags=%#lx, ulMode=%#lx\n",
23589               rc, zUtf8Name, ulAction, ulOpenFlags, ulOpenMode ));
23590
23591     if( isReadWrite ){
23592       return os2Open( pVfs, zName, id,
23593                       ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)),
23594                       pOutFlags );
23595     }else{
23596       return SQLITE_CANTOPEN;
23597     }
23598   }
23599
23600   if( pOutFlags ){
23601     *pOutFlags = isReadWrite ? SQLITE_OPEN_READWRITE : SQLITE_OPEN_READONLY;
23602   }
23603
23604   os2FullPathname( pVfs, zUtf8Name, sizeof( zTmpname ), zTmpname );
23605   pFile->zFullPathCp = convertUtf8PathToCp( zTmpname );
23606   pFile->pMethod = &os2IoMethod;
23607   pFile->flags = flags;
23608   pFile->h = h;
23609
23610   OpenCounter(+1);
23611   OSTRACE(( "OPEN %d pOutFlags=%d\n", pFile->h, pOutFlags ));
23612   return SQLITE_OK;
23613 }
23614
23615 /*
23616 ** Delete the named file.
23617 */
23618 static int os2Delete(
23619   sqlite3_vfs *pVfs,                     /* Not used on os2 */
23620   const char *zFilename,                 /* Name of file to delete */
23621   int syncDir                            /* Not used on os2 */
23622 ){
23623   APIRET rc;
23624   char *zFilenameCp;
23625   SimulateIOError( return SQLITE_IOERR_DELETE );
23626   zFilenameCp = convertUtf8PathToCp( zFilename );
23627   rc = DosDelete( (PSZ)zFilenameCp );
23628   free( zFilenameCp );
23629   OSTRACE(( "DELETE \"%s\"\n", zFilename ));
23630   return (rc == NO_ERROR ||
23631           rc == ERROR_FILE_NOT_FOUND ||
23632           rc == ERROR_PATH_NOT_FOUND ) ? SQLITE_OK : SQLITE_IOERR_DELETE;
23633 }
23634
23635 /*
23636 ** Check the existance and status of a file.
23637 */
23638 static int os2Access(
23639   sqlite3_vfs *pVfs,        /* Not used on os2 */
23640   const char *zFilename,    /* Name of file to check */
23641   int flags,                /* Type of test to make on this file */
23642   int *pOut                 /* Write results here */
23643 ){
23644   APIRET rc;
23645   FILESTATUS3 fsts3ConfigInfo;
23646   char *zFilenameCp;
23647
23648   UNUSED_PARAMETER(pVfs);
23649   SimulateIOError( return SQLITE_IOERR_ACCESS; );
23650   
23651   zFilenameCp = convertUtf8PathToCp( zFilename );
23652   rc = DosQueryPathInfo( (PSZ)zFilenameCp, FIL_STANDARD,
23653                          &fsts3ConfigInfo, sizeof(FILESTATUS3) );
23654   free( zFilenameCp );
23655   OSTRACE(( "ACCESS fsts3ConfigInfo.attrFile=%d flags=%d rc=%d\n",
23656             fsts3ConfigInfo.attrFile, flags, rc ));
23657
23658   switch( flags ){
23659     case SQLITE_ACCESS_EXISTS:
23660       /* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file
23661       ** as if it does not exist.
23662       */
23663       if( fsts3ConfigInfo.cbFile == 0 ) 
23664         rc = ERROR_FILE_NOT_FOUND;
23665       break;
23666     case SQLITE_ACCESS_READ:
23667       break;
23668     case SQLITE_ACCESS_READWRITE:
23669       if( fsts3ConfigInfo.attrFile & FILE_READONLY )
23670         rc = ERROR_ACCESS_DENIED;
23671       break;
23672     default:
23673       rc = ERROR_FILE_NOT_FOUND;
23674       assert( !"Invalid flags argument" );
23675   }
23676
23677   *pOut = (rc == NO_ERROR);
23678   OSTRACE(( "ACCESS %s flags %d: rc=%d\n", zFilename, flags, *pOut ));
23679
23680   return SQLITE_OK;
23681 }
23682
23683
23684 #ifndef SQLITE_OMIT_LOAD_EXTENSION
23685 /*
23686 ** Interfaces for opening a shared library, finding entry points
23687 ** within the shared library, and closing the shared library.
23688 */
23689 /*
23690 ** Interfaces for opening a shared library, finding entry points
23691 ** within the shared library, and closing the shared library.
23692 */
23693 static void *os2DlOpen(sqlite3_vfs *pVfs, const char *zFilename){
23694   HMODULE hmod;
23695   APIRET rc;
23696   char *zFilenameCp = convertUtf8PathToCp(zFilename);
23697   rc = DosLoadModule(NULL, 0, (PSZ)zFilenameCp, &hmod);
23698   free(zFilenameCp);
23699   return rc != NO_ERROR ? 0 : (void*)hmod;
23700 }
23701 /*
23702 ** A no-op since the error code is returned on the DosLoadModule call.
23703 ** os2Dlopen returns zero if DosLoadModule is not successful.
23704 */
23705 static void os2DlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){
23706 /* no-op */
23707 }
23708 static void (*os2DlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){
23709   PFN pfn;
23710   APIRET rc;
23711   rc = DosQueryProcAddr((HMODULE)pHandle, 0L, (PSZ)zSymbol, &pfn);
23712   if( rc != NO_ERROR ){
23713     /* if the symbol itself was not found, search again for the same
23714      * symbol with an extra underscore, that might be needed depending
23715      * on the calling convention */
23716     char _zSymbol[256] = "_";
23717     strncat(_zSymbol, zSymbol, 254);
23718     rc = DosQueryProcAddr((HMODULE)pHandle, 0L, (PSZ)_zSymbol, &pfn);
23719   }
23720   return rc != NO_ERROR ? 0 : (void(*)(void))pfn;
23721 }
23722 static void os2DlClose(sqlite3_vfs *pVfs, void *pHandle){
23723   DosFreeModule((HMODULE)pHandle);
23724 }
23725 #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */
23726   #define os2DlOpen 0
23727   #define os2DlError 0
23728   #define os2DlSym 0
23729   #define os2DlClose 0
23730 #endif
23731
23732
23733 /*
23734 ** Write up to nBuf bytes of randomness into zBuf.
23735 */
23736 static int os2Randomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf ){
23737   int n = 0;
23738 #if defined(SQLITE_TEST)
23739   n = nBuf;
23740   memset(zBuf, 0, nBuf);
23741 #else
23742   int i;                           
23743   PPIB ppib;
23744   PTIB ptib;
23745   DATETIME dt; 
23746   static unsigned c = 0;
23747   /* Ordered by variation probability */
23748   static ULONG svIdx[6] = { QSV_MS_COUNT, QSV_TIME_LOW,
23749                             QSV_MAXPRMEM, QSV_MAXSHMEM,
23750                             QSV_TOTAVAILMEM, QSV_TOTRESMEM };
23751
23752   /* 8 bytes; timezone and weekday don't increase the randomness much */
23753   if( (int)sizeof(dt)-3 <= nBuf - n ){
23754     c += 0x0100;
23755     DosGetDateTime(&dt);
23756     dt.year = (USHORT)((dt.year - 1900) | c);
23757     memcpy(&zBuf[n], &dt, sizeof(dt)-3);
23758     n += sizeof(dt)-3;
23759   }
23760
23761   /* 4 bytes; PIDs and TIDs are 16 bit internally, so combine them */
23762   if( (int)sizeof(ULONG) <= nBuf - n ){
23763     DosGetInfoBlocks(&ptib, &ppib);
23764     *(PULONG)&zBuf[n] = MAKELONG(ppib->pib_ulpid,
23765                                  ptib->tib_ptib2->tib2_ultid);
23766     n += sizeof(ULONG);
23767   }
23768
23769   /* Up to 6 * 4 bytes; variables depend on the system state */
23770   for( i = 0; i < 6 && (int)sizeof(ULONG) <= nBuf - n; i++ ){
23771     DosQuerySysInfo(svIdx[i], svIdx[i], 
23772                     (PULONG)&zBuf[n], sizeof(ULONG));
23773     n += sizeof(ULONG);
23774   } 
23775 #endif
23776
23777   return n;
23778 }
23779
23780 /*
23781 ** Sleep for a little while.  Return the amount of time slept.
23782 ** The argument is the number of microseconds we want to sleep.
23783 ** The return value is the number of microseconds of sleep actually
23784 ** requested from the underlying operating system, a number which
23785 ** might be greater than or equal to the argument, but not less
23786 ** than the argument.
23787 */
23788 static int os2Sleep( sqlite3_vfs *pVfs, int microsec ){
23789   DosSleep( (microsec/1000) );
23790   return microsec;
23791 }
23792
23793 /*
23794 ** The following variable, if set to a non-zero value, becomes the result
23795 ** returned from sqlite3OsCurrentTime().  This is used for testing.
23796 */
23797 #ifdef SQLITE_TEST
23798 SQLITE_API int sqlite3_current_time = 0;
23799 #endif
23800
23801 /*
23802 ** Find the current time (in Universal Coordinated Time).  Write into *piNow
23803 ** the current time and date as a Julian Day number times 86_400_000.  In
23804 ** other words, write into *piNow the number of milliseconds since the Julian
23805 ** epoch of noon in Greenwich on November 24, 4714 B.C according to the
23806 ** proleptic Gregorian calendar.
23807 **
23808 ** On success, return 0.  Return 1 if the time and date cannot be found.
23809 */
23810 static int os2CurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *piNow){
23811 #ifdef SQLITE_TEST
23812   static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
23813 #endif
23814   int year, month, datepart, timepart;
23815  
23816   DATETIME dt;
23817   DosGetDateTime( &dt );
23818
23819   year = dt.year;
23820   month = dt.month;
23821
23822   /* Calculations from http://www.astro.keele.ac.uk/~rno/Astronomy/hjd.html
23823   ** http://www.astro.keele.ac.uk/~rno/Astronomy/hjd-0.1.c
23824   ** Calculate the Julian days
23825   */
23826   datepart = (int)dt.day - 32076 +
23827     1461*(year + 4800 + (month - 14)/12)/4 +
23828     367*(month - 2 - (month - 14)/12*12)/12 -
23829     3*((year + 4900 + (month - 14)/12)/100)/4;
23830
23831   /* Time in milliseconds, hours to noon added */
23832   timepart = 12*3600*1000 + dt.hundredths*10 + dt.seconds*1000 +
23833     ((int)dt.minutes + dt.timezone)*60*1000 + dt.hours*3600*1000;
23834
23835   *piNow = (sqlite3_int64)datepart*86400*1000 + timepart;
23836    
23837 #ifdef SQLITE_TEST
23838   if( sqlite3_current_time ){
23839     *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
23840   }
23841 #endif
23842
23843   UNUSED_PARAMETER(pVfs);
23844   return 0;
23845 }
23846
23847 /*
23848 ** Find the current time (in Universal Coordinated Time).  Write the
23849 ** current time and date as a Julian Day number into *prNow and
23850 ** return 0.  Return 1 if the time and date cannot be found.
23851 */
23852 static int os2CurrentTime( sqlite3_vfs *pVfs, double *prNow ){
23853   int rc;
23854   sqlite3_int64 i;
23855   rc = os2CurrentTimeInt64(pVfs, &i);
23856   if( !rc ){
23857     *prNow = i/86400000.0;
23858   }
23859   return rc;
23860 }
23861
23862 /*
23863 ** The idea is that this function works like a combination of
23864 ** GetLastError() and FormatMessage() on windows (or errno and
23865 ** strerror_r() on unix). After an error is returned by an OS
23866 ** function, SQLite calls this function with zBuf pointing to
23867 ** a buffer of nBuf bytes. The OS layer should populate the
23868 ** buffer with a nul-terminated UTF-8 encoded error message
23869 ** describing the last IO error to have occurred within the calling
23870 ** thread.
23871 **
23872 ** If the error message is too large for the supplied buffer,
23873 ** it should be truncated. The return value of xGetLastError
23874 ** is zero if the error message fits in the buffer, or non-zero
23875 ** otherwise (if the message was truncated). If non-zero is returned,
23876 ** then it is not necessary to include the nul-terminator character
23877 ** in the output buffer.
23878 **
23879 ** Not supplying an error message will have no adverse effect
23880 ** on SQLite. It is fine to have an implementation that never
23881 ** returns an error message:
23882 **
23883 **   int xGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
23884 **     assert(zBuf[0]=='\0');
23885 **     return 0;
23886 **   }
23887 **
23888 ** However if an error message is supplied, it will be incorporated
23889 ** by sqlite into the error message available to the user using
23890 ** sqlite3_errmsg(), possibly making IO errors easier to debug.
23891 */
23892 static int os2GetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
23893   assert(zBuf[0]=='\0');
23894   return 0;
23895 }
23896
23897 /*
23898 ** Initialize and deinitialize the operating system interface.
23899 */
23900 SQLITE_API int sqlite3_os_init(void){
23901   static sqlite3_vfs os2Vfs = {
23902     3,                 /* iVersion */
23903     sizeof(os2File),   /* szOsFile */
23904     CCHMAXPATH,        /* mxPathname */
23905     0,                 /* pNext */
23906     "os2",             /* zName */
23907     0,                 /* pAppData */
23908
23909     os2Open,           /* xOpen */
23910     os2Delete,         /* xDelete */
23911     os2Access,         /* xAccess */
23912     os2FullPathname,   /* xFullPathname */
23913     os2DlOpen,         /* xDlOpen */
23914     os2DlError,        /* xDlError */
23915     os2DlSym,          /* xDlSym */
23916     os2DlClose,        /* xDlClose */
23917     os2Randomness,     /* xRandomness */
23918     os2Sleep,          /* xSleep */
23919     os2CurrentTime,    /* xCurrentTime */
23920     os2GetLastError,   /* xGetLastError */
23921     os2CurrentTimeInt64, /* xCurrentTimeInt64 */
23922     0,                 /* xSetSystemCall */
23923     0,                 /* xGetSystemCall */
23924     0                  /* xNextSystemCall */
23925   };
23926   sqlite3_vfs_register(&os2Vfs, 1);
23927   initUconvObjects();
23928 /*  sqlite3OSTrace = 1; */
23929   return SQLITE_OK;
23930 }
23931 SQLITE_API int sqlite3_os_end(void){
23932   freeUconvObjects();
23933   return SQLITE_OK;
23934 }
23935
23936 #endif /* SQLITE_OS_OS2 */
23937
23938 /************** End of os_os2.c **********************************************/
23939 /************** Begin file os_unix.c *****************************************/
23940 /*
23941 ** 2004 May 22
23942 **
23943 ** The author disclaims copyright to this source code.  In place of
23944 ** a legal notice, here is a blessing:
23945 **
23946 **    May you do good and not evil.
23947 **    May you find forgiveness for yourself and forgive others.
23948 **    May you share freely, never taking more than you give.
23949 **
23950 ******************************************************************************
23951 **
23952 ** This file contains the VFS implementation for unix-like operating systems
23953 ** include Linux, MacOSX, *BSD, QNX, VxWorks, AIX, HPUX, and others.
23954 **
23955 ** There are actually several different VFS implementations in this file.
23956 ** The differences are in the way that file locking is done.  The default
23957 ** implementation uses Posix Advisory Locks.  Alternative implementations
23958 ** use flock(), dot-files, various proprietary locking schemas, or simply
23959 ** skip locking all together.
23960 **
23961 ** This source file is organized into divisions where the logic for various
23962 ** subfunctions is contained within the appropriate division.  PLEASE
23963 ** KEEP THE STRUCTURE OF THIS FILE INTACT.  New code should be placed
23964 ** in the correct division and should be clearly labeled.
23965 **
23966 ** The layout of divisions is as follows:
23967 **
23968 **   *  General-purpose declarations and utility functions.
23969 **   *  Unique file ID logic used by VxWorks.
23970 **   *  Various locking primitive implementations (all except proxy locking):
23971 **      + for Posix Advisory Locks
23972 **      + for no-op locks
23973 **      + for dot-file locks
23974 **      + for flock() locking
23975 **      + for named semaphore locks (VxWorks only)
23976 **      + for AFP filesystem locks (MacOSX only)
23977 **   *  sqlite3_file methods not associated with locking.
23978 **   *  Definitions of sqlite3_io_methods objects for all locking
23979 **      methods plus "finder" functions for each locking method.
23980 **   *  sqlite3_vfs method implementations.
23981 **   *  Locking primitives for the proxy uber-locking-method. (MacOSX only)
23982 **   *  Definitions of sqlite3_vfs objects for all locking methods
23983 **      plus implementations of sqlite3_os_init() and sqlite3_os_end().
23984 */
23985 #if SQLITE_OS_UNIX              /* This file is used on unix only */
23986
23987 /*
23988 ** There are various methods for file locking used for concurrency
23989 ** control:
23990 **
23991 **   1. POSIX locking (the default),
23992 **   2. No locking,
23993 **   3. Dot-file locking,
23994 **   4. flock() locking,
23995 **   5. AFP locking (OSX only),
23996 **   6. Named POSIX semaphores (VXWorks only),
23997 **   7. proxy locking. (OSX only)
23998 **
23999 ** Styles 4, 5, and 7 are only available of SQLITE_ENABLE_LOCKING_STYLE
24000 ** is defined to 1.  The SQLITE_ENABLE_LOCKING_STYLE also enables automatic
24001 ** selection of the appropriate locking style based on the filesystem
24002 ** where the database is located.  
24003 */
24004 #if !defined(SQLITE_ENABLE_LOCKING_STYLE)
24005 #  if defined(__APPLE__)
24006 #    define SQLITE_ENABLE_LOCKING_STYLE 1
24007 #  else
24008 #    define SQLITE_ENABLE_LOCKING_STYLE 0
24009 #  endif
24010 #endif
24011
24012 /*
24013 ** Define the OS_VXWORKS pre-processor macro to 1 if building on 
24014 ** vxworks, or 0 otherwise.
24015 */
24016 #ifndef OS_VXWORKS
24017 #  if defined(__RTP__) || defined(_WRS_KERNEL)
24018 #    define OS_VXWORKS 1
24019 #  else
24020 #    define OS_VXWORKS 0
24021 #  endif
24022 #endif
24023
24024 /*
24025 ** These #defines should enable >2GB file support on Posix if the
24026 ** underlying operating system supports it.  If the OS lacks
24027 ** large file support, these should be no-ops.
24028 **
24029 ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch
24030 ** on the compiler command line.  This is necessary if you are compiling
24031 ** on a recent machine (ex: RedHat 7.2) but you want your code to work
24032 ** on an older machine (ex: RedHat 6.0).  If you compile on RedHat 7.2
24033 ** without this option, LFS is enable.  But LFS does not exist in the kernel
24034 ** in RedHat 6.0, so the code won't work.  Hence, for maximum binary
24035 ** portability you should omit LFS.
24036 **
24037 ** The previous paragraph was written in 2005.  (This paragraph is written
24038 ** on 2008-11-28.) These days, all Linux kernels support large files, so
24039 ** you should probably leave LFS enabled.  But some embedded platforms might
24040 ** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful.
24041 */
24042 #ifndef SQLITE_DISABLE_LFS
24043 # define _LARGE_FILE       1
24044 # ifndef _FILE_OFFSET_BITS
24045 #   define _FILE_OFFSET_BITS 64
24046 # endif
24047 # define _LARGEFILE_SOURCE 1
24048 #endif
24049
24050 /*
24051 ** standard include files.
24052 */
24053 #include <sys/types.h>
24054 #include <sys/stat.h>
24055 #include <fcntl.h>
24056 #include <unistd.h>
24057 #include <sys/time.h>
24058 #include <errno.h>
24059 #ifndef SQLITE_OMIT_WAL
24060 #include <sys/mman.h>
24061 #endif
24062
24063 #if SQLITE_ENABLE_LOCKING_STYLE
24064 # include <sys/ioctl.h>
24065 # if OS_VXWORKS
24066 #  include <semaphore.h>
24067 #  include <limits.h>
24068 # else
24069 #  include <sys/file.h>
24070 #  include <sys/param.h>
24071 # endif
24072 #endif /* SQLITE_ENABLE_LOCKING_STYLE */
24073
24074 #if defined(__APPLE__) || (SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS)
24075 # include <sys/mount.h>
24076 #endif
24077
24078 /*
24079 ** Allowed values of unixFile.fsFlags
24080 */
24081 #define SQLITE_FSFLAGS_IS_MSDOS     0x1
24082
24083 /*
24084 ** If we are to be thread-safe, include the pthreads header and define
24085 ** the SQLITE_UNIX_THREADS macro.
24086 */
24087 #if SQLITE_THREADSAFE
24088 # define SQLITE_UNIX_THREADS 1
24089 #endif
24090
24091 /*
24092 ** Default permissions when creating a new file
24093 */
24094 #ifndef SQLITE_DEFAULT_FILE_PERMISSIONS
24095 # define SQLITE_DEFAULT_FILE_PERMISSIONS 0644
24096 #endif
24097
24098 /*
24099  ** Default permissions when creating auto proxy dir
24100  */
24101 #ifndef SQLITE_DEFAULT_PROXYDIR_PERMISSIONS
24102 # define SQLITE_DEFAULT_PROXYDIR_PERMISSIONS 0755
24103 #endif
24104
24105 /*
24106 ** Maximum supported path-length.
24107 */
24108 #define MAX_PATHNAME 512
24109
24110 /*
24111 ** Only set the lastErrno if the error code is a real error and not 
24112 ** a normal expected return code of SQLITE_BUSY or SQLITE_OK
24113 */
24114 #define IS_LOCK_ERROR(x)  ((x != SQLITE_OK) && (x != SQLITE_BUSY))
24115
24116 /* Forward references */
24117 typedef struct unixShm unixShm;               /* Connection shared memory */
24118 typedef struct unixShmNode unixShmNode;       /* Shared memory instance */
24119 typedef struct unixInodeInfo unixInodeInfo;   /* An i-node */
24120 typedef struct UnixUnusedFd UnixUnusedFd;     /* An unused file descriptor */
24121
24122 /*
24123 ** Sometimes, after a file handle is closed by SQLite, the file descriptor
24124 ** cannot be closed immediately. In these cases, instances of the following
24125 ** structure are used to store the file descriptor while waiting for an
24126 ** opportunity to either close or reuse it.
24127 */
24128 struct UnixUnusedFd {
24129   int fd;                   /* File descriptor to close */
24130   int flags;                /* Flags this file descriptor was opened with */
24131   UnixUnusedFd *pNext;      /* Next unused file descriptor on same file */
24132 };
24133
24134 /*
24135 ** The unixFile structure is subclass of sqlite3_file specific to the unix
24136 ** VFS implementations.
24137 */
24138 typedef struct unixFile unixFile;
24139 struct unixFile {
24140   sqlite3_io_methods const *pMethod;  /* Always the first entry */
24141   unixInodeInfo *pInode;              /* Info about locks on this inode */
24142   int h;                              /* The file descriptor */
24143   unsigned char eFileLock;            /* The type of lock held on this fd */
24144   unsigned char ctrlFlags;            /* Behavioral bits.  UNIXFILE_* flags */
24145   int lastErrno;                      /* The unix errno from last I/O error */
24146   void *lockingContext;               /* Locking style specific state */
24147   UnixUnusedFd *pUnused;              /* Pre-allocated UnixUnusedFd */
24148   const char *zPath;                  /* Name of the file */
24149   unixShm *pShm;                      /* Shared memory segment information */
24150   int szChunk;                        /* Configured by FCNTL_CHUNK_SIZE */
24151 #if SQLITE_ENABLE_LOCKING_STYLE
24152   int openFlags;                      /* The flags specified at open() */
24153 #endif
24154 #if SQLITE_ENABLE_LOCKING_STYLE || defined(__APPLE__)
24155   unsigned fsFlags;                   /* cached details from statfs() */
24156 #endif
24157 #if OS_VXWORKS
24158   int isDelete;                       /* Delete on close if true */
24159   struct vxworksFileId *pId;          /* Unique file ID */
24160 #endif
24161 #ifndef NDEBUG
24162   /* The next group of variables are used to track whether or not the
24163   ** transaction counter in bytes 24-27 of database files are updated
24164   ** whenever any part of the database changes.  An assertion fault will
24165   ** occur if a file is updated without also updating the transaction
24166   ** counter.  This test is made to avoid new problems similar to the
24167   ** one described by ticket #3584. 
24168   */
24169   unsigned char transCntrChng;   /* True if the transaction counter changed */
24170   unsigned char dbUpdate;        /* True if any part of database file changed */
24171   unsigned char inNormalWrite;   /* True if in a normal write operation */
24172 #endif
24173 #ifdef SQLITE_TEST
24174   /* In test mode, increase the size of this structure a bit so that 
24175   ** it is larger than the struct CrashFile defined in test6.c.
24176   */
24177   char aPadding[32];
24178 #endif
24179 };
24180
24181 /*
24182 ** Allowed values for the unixFile.ctrlFlags bitmask:
24183 */
24184 #define UNIXFILE_EXCL   0x01     /* Connections from one process only */
24185 #define UNIXFILE_RDONLY 0x02     /* Connection is read only */
24186 #define UNIXFILE_DIRSYNC 0x04    /* Directory sync needed */
24187
24188 /*
24189 ** Include code that is common to all os_*.c files
24190 */
24191 /************** Include os_common.h in the middle of os_unix.c ***************/
24192 /************** Begin file os_common.h ***************************************/
24193 /*
24194 ** 2004 May 22
24195 **
24196 ** The author disclaims copyright to this source code.  In place of
24197 ** a legal notice, here is a blessing:
24198 **
24199 **    May you do good and not evil.
24200 **    May you find forgiveness for yourself and forgive others.
24201 **    May you share freely, never taking more than you give.
24202 **
24203 ******************************************************************************
24204 **
24205 ** This file contains macros and a little bit of code that is common to
24206 ** all of the platform-specific files (os_*.c) and is #included into those
24207 ** files.
24208 **
24209 ** This file should be #included by the os_*.c files only.  It is not a
24210 ** general purpose header file.
24211 */
24212 #ifndef _OS_COMMON_H_
24213 #define _OS_COMMON_H_
24214
24215 /*
24216 ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
24217 ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
24218 ** switch.  The following code should catch this problem at compile-time.
24219 */
24220 #ifdef MEMORY_DEBUG
24221 # error "The MEMORY_DEBUG macro is obsolete.  Use SQLITE_DEBUG instead."
24222 #endif
24223
24224 #ifdef SQLITE_DEBUG
24225 SQLITE_PRIVATE int sqlite3OSTrace = 0;
24226 #define OSTRACE(X)          if( sqlite3OSTrace ) sqlite3DebugPrintf X
24227 #else
24228 #define OSTRACE(X)
24229 #endif
24230
24231 /*
24232 ** Macros for performance tracing.  Normally turned off.  Only works
24233 ** on i486 hardware.
24234 */
24235 #ifdef SQLITE_PERFORMANCE_TRACE
24236
24237 /* 
24238 ** hwtime.h contains inline assembler code for implementing 
24239 ** high-performance timing routines.
24240 */
24241 /************** Include hwtime.h in the middle of os_common.h ****************/
24242 /************** Begin file hwtime.h ******************************************/
24243 /*
24244 ** 2008 May 27
24245 **
24246 ** The author disclaims copyright to this source code.  In place of
24247 ** a legal notice, here is a blessing:
24248 **
24249 **    May you do good and not evil.
24250 **    May you find forgiveness for yourself and forgive others.
24251 **    May you share freely, never taking more than you give.
24252 **
24253 ******************************************************************************
24254 **
24255 ** This file contains inline asm code for retrieving "high-performance"
24256 ** counters for x86 class CPUs.
24257 */
24258 #ifndef _HWTIME_H_
24259 #define _HWTIME_H_
24260
24261 /*
24262 ** The following routine only works on pentium-class (or newer) processors.
24263 ** It uses the RDTSC opcode to read the cycle count value out of the
24264 ** processor and returns that value.  This can be used for high-res
24265 ** profiling.
24266 */
24267 #if (defined(__GNUC__) || defined(_MSC_VER)) && \
24268       (defined(i386) || defined(__i386__) || defined(_M_IX86))
24269
24270   #if defined(__GNUC__)
24271
24272   __inline__ sqlite_uint64 sqlite3Hwtime(void){
24273      unsigned int lo, hi;
24274      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
24275      return (sqlite_uint64)hi << 32 | lo;
24276   }
24277
24278   #elif defined(_MSC_VER)
24279
24280   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
24281      __asm {
24282         rdtsc
24283         ret       ; return value at EDX:EAX
24284      }
24285   }
24286
24287   #endif
24288
24289 #elif (defined(__GNUC__) && defined(__x86_64__))
24290
24291   __inline__ sqlite_uint64 sqlite3Hwtime(void){
24292       unsigned long val;
24293       __asm__ __volatile__ ("rdtsc" : "=A" (val));
24294       return val;
24295   }
24296  
24297 #elif (defined(__GNUC__) && defined(__ppc__))
24298
24299   __inline__ sqlite_uint64 sqlite3Hwtime(void){
24300       unsigned long long retval;
24301       unsigned long junk;
24302       __asm__ __volatile__ ("\n\
24303           1:      mftbu   %1\n\
24304                   mftb    %L0\n\
24305                   mftbu   %0\n\
24306                   cmpw    %0,%1\n\
24307                   bne     1b"
24308                   : "=r" (retval), "=r" (junk));
24309       return retval;
24310   }
24311
24312 #else
24313
24314   #error Need implementation of sqlite3Hwtime() for your platform.
24315
24316   /*
24317   ** To compile without implementing sqlite3Hwtime() for your platform,
24318   ** you can remove the above #error and use the following
24319   ** stub function.  You will lose timing support for many
24320   ** of the debugging and testing utilities, but it should at
24321   ** least compile and run.
24322   */
24323 SQLITE_PRIVATE   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
24324
24325 #endif
24326
24327 #endif /* !defined(_HWTIME_H_) */
24328
24329 /************** End of hwtime.h **********************************************/
24330 /************** Continuing where we left off in os_common.h ******************/
24331
24332 static sqlite_uint64 g_start;
24333 static sqlite_uint64 g_elapsed;
24334 #define TIMER_START       g_start=sqlite3Hwtime()
24335 #define TIMER_END         g_elapsed=sqlite3Hwtime()-g_start
24336 #define TIMER_ELAPSED     g_elapsed
24337 #else
24338 #define TIMER_START
24339 #define TIMER_END
24340 #define TIMER_ELAPSED     ((sqlite_uint64)0)
24341 #endif
24342
24343 /*
24344 ** If we compile with the SQLITE_TEST macro set, then the following block
24345 ** of code will give us the ability to simulate a disk I/O error.  This
24346 ** is used for testing the I/O recovery logic.
24347 */
24348 #ifdef SQLITE_TEST
24349 SQLITE_API int sqlite3_io_error_hit = 0;            /* Total number of I/O Errors */
24350 SQLITE_API int sqlite3_io_error_hardhit = 0;        /* Number of non-benign errors */
24351 SQLITE_API int sqlite3_io_error_pending = 0;        /* Count down to first I/O error */
24352 SQLITE_API int sqlite3_io_error_persist = 0;        /* True if I/O errors persist */
24353 SQLITE_API int sqlite3_io_error_benign = 0;         /* True if errors are benign */
24354 SQLITE_API int sqlite3_diskfull_pending = 0;
24355 SQLITE_API int sqlite3_diskfull = 0;
24356 #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
24357 #define SimulateIOError(CODE)  \
24358   if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
24359        || sqlite3_io_error_pending-- == 1 )  \
24360               { local_ioerr(); CODE; }
24361 static void local_ioerr(){
24362   IOTRACE(("IOERR\n"));
24363   sqlite3_io_error_hit++;
24364   if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
24365 }
24366 #define SimulateDiskfullError(CODE) \
24367    if( sqlite3_diskfull_pending ){ \
24368      if( sqlite3_diskfull_pending == 1 ){ \
24369        local_ioerr(); \
24370        sqlite3_diskfull = 1; \
24371        sqlite3_io_error_hit = 1; \
24372        CODE; \
24373      }else{ \
24374        sqlite3_diskfull_pending--; \
24375      } \
24376    }
24377 #else
24378 #define SimulateIOErrorBenign(X)
24379 #define SimulateIOError(A)
24380 #define SimulateDiskfullError(A)
24381 #endif
24382
24383 /*
24384 ** When testing, keep a count of the number of open files.
24385 */
24386 #ifdef SQLITE_TEST
24387 SQLITE_API int sqlite3_open_file_count = 0;
24388 #define OpenCounter(X)  sqlite3_open_file_count+=(X)
24389 #else
24390 #define OpenCounter(X)
24391 #endif
24392
24393 #endif /* !defined(_OS_COMMON_H_) */
24394
24395 /************** End of os_common.h *******************************************/
24396 /************** Continuing where we left off in os_unix.c ********************/
24397
24398 /*
24399 ** Define various macros that are missing from some systems.
24400 */
24401 #ifndef O_LARGEFILE
24402 # define O_LARGEFILE 0
24403 #endif
24404 #ifdef SQLITE_DISABLE_LFS
24405 # undef O_LARGEFILE
24406 # define O_LARGEFILE 0
24407 #endif
24408 #ifndef O_NOFOLLOW
24409 # define O_NOFOLLOW 0
24410 #endif
24411 #ifndef O_BINARY
24412 # define O_BINARY 0
24413 #endif
24414
24415 /*
24416 ** The threadid macro resolves to the thread-id or to 0.  Used for
24417 ** testing and debugging only.
24418 */
24419 #if SQLITE_THREADSAFE
24420 #define threadid pthread_self()
24421 #else
24422 #define threadid 0
24423 #endif
24424
24425 /* Forward reference */
24426 static int openDirectory(const char*, int*);
24427
24428 /*
24429 ** Many system calls are accessed through pointer-to-functions so that
24430 ** they may be overridden at runtime to facilitate fault injection during
24431 ** testing and sandboxing.  The following array holds the names and pointers
24432 ** to all overrideable system calls.
24433 */
24434 static struct unix_syscall {
24435   const char *zName;            /* Name of the sytem call */
24436   sqlite3_syscall_ptr pCurrent; /* Current value of the system call */
24437   sqlite3_syscall_ptr pDefault; /* Default value */
24438 } aSyscall[] = {
24439   { "open",         (sqlite3_syscall_ptr)open,       0  },
24440 #define osOpen      ((int(*)(const char*,int,...))aSyscall[0].pCurrent)
24441
24442   { "close",        (sqlite3_syscall_ptr)close,      0  },
24443 #define osClose     ((int(*)(int))aSyscall[1].pCurrent)
24444
24445   { "access",       (sqlite3_syscall_ptr)access,     0  },
24446 #define osAccess    ((int(*)(const char*,int))aSyscall[2].pCurrent)
24447
24448   { "getcwd",       (sqlite3_syscall_ptr)getcwd,     0  },
24449 #define osGetcwd    ((char*(*)(char*,size_t))aSyscall[3].pCurrent)
24450
24451   { "stat",         (sqlite3_syscall_ptr)stat,       0  },
24452 #define osStat      ((int(*)(const char*,struct stat*))aSyscall[4].pCurrent)
24453
24454 /*
24455 ** The DJGPP compiler environment looks mostly like Unix, but it
24456 ** lacks the fcntl() system call.  So redefine fcntl() to be something
24457 ** that always succeeds.  This means that locking does not occur under
24458 ** DJGPP.  But it is DOS - what did you expect?
24459 */
24460 #ifdef __DJGPP__
24461   { "fstat",        0,                 0  },
24462 #define osFstat(a,b,c)    0
24463 #else     
24464   { "fstat",        (sqlite3_syscall_ptr)fstat,      0  },
24465 #define osFstat     ((int(*)(int,struct stat*))aSyscall[5].pCurrent)
24466 #endif
24467
24468   { "ftruncate",    (sqlite3_syscall_ptr)ftruncate,  0  },
24469 #define osFtruncate ((int(*)(int,off_t))aSyscall[6].pCurrent)
24470
24471   { "fcntl",        (sqlite3_syscall_ptr)fcntl,      0  },
24472 #define osFcntl     ((int(*)(int,int,...))aSyscall[7].pCurrent)
24473
24474   { "read",         (sqlite3_syscall_ptr)read,       0  },
24475 #define osRead      ((ssize_t(*)(int,void*,size_t))aSyscall[8].pCurrent)
24476
24477 #if defined(USE_PREAD) || defined(SQLITE_ENABLE_LOCKING_STYLE)
24478   { "pread",        (sqlite3_syscall_ptr)pread,      0  },
24479 #else
24480   { "pread",        (sqlite3_syscall_ptr)0,          0  },
24481 #endif
24482 #define osPread     ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[9].pCurrent)
24483
24484 #if defined(USE_PREAD64)
24485   { "pread64",      (sqlite3_syscall_ptr)pread64,    0  },
24486 #else
24487   { "pread64",      (sqlite3_syscall_ptr)0,          0  },
24488 #endif
24489 #define osPread64   ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[10].pCurrent)
24490
24491   { "write",        (sqlite3_syscall_ptr)write,      0  },
24492 #define osWrite     ((ssize_t(*)(int,const void*,size_t))aSyscall[11].pCurrent)
24493
24494 #if defined(USE_PREAD) || defined(SQLITE_ENABLE_LOCKING_STYLE)
24495   { "pwrite",       (sqlite3_syscall_ptr)pwrite,     0  },
24496 #else
24497   { "pwrite",       (sqlite3_syscall_ptr)0,          0  },
24498 #endif
24499 #define osPwrite    ((ssize_t(*)(int,const void*,size_t,off_t))\
24500                     aSyscall[12].pCurrent)
24501
24502 #if defined(USE_PREAD64)
24503   { "pwrite64",     (sqlite3_syscall_ptr)pwrite64,   0  },
24504 #else
24505   { "pwrite64",     (sqlite3_syscall_ptr)0,          0  },
24506 #endif
24507 #define osPwrite64  ((ssize_t(*)(int,const void*,size_t,off_t))\
24508                     aSyscall[13].pCurrent)
24509
24510 #if SQLITE_ENABLE_LOCKING_STYLE
24511   { "fchmod",       (sqlite3_syscall_ptr)fchmod,     0  },
24512 #else
24513   { "fchmod",       (sqlite3_syscall_ptr)0,          0  },
24514 #endif
24515 #define osFchmod    ((int(*)(int,mode_t))aSyscall[14].pCurrent)
24516
24517 #if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE
24518   { "fallocate",    (sqlite3_syscall_ptr)posix_fallocate,  0 },
24519 #else
24520   { "fallocate",    (sqlite3_syscall_ptr)0,                0 },
24521 #endif
24522 #define osFallocate ((int(*)(int,off_t,off_t))aSyscall[15].pCurrent)
24523
24524   { "unlink",       (sqlite3_syscall_ptr)unlink,           0 },
24525 #define osUnlink    ((int(*)(const char*))aSyscall[16].pCurrent)
24526
24527   { "openDirectory",    (sqlite3_syscall_ptr)openDirectory,      0 },
24528 #define osOpenDirectory ((int(*)(const char*,int*))aSyscall[17].pCurrent)
24529
24530 }; /* End of the overrideable system calls */
24531
24532 /*
24533 ** This is the xSetSystemCall() method of sqlite3_vfs for all of the
24534 ** "unix" VFSes.  Return SQLITE_OK opon successfully updating the
24535 ** system call pointer, or SQLITE_NOTFOUND if there is no configurable
24536 ** system call named zName.
24537 */
24538 static int unixSetSystemCall(
24539   sqlite3_vfs *pNotUsed,        /* The VFS pointer.  Not used */
24540   const char *zName,            /* Name of system call to override */
24541   sqlite3_syscall_ptr pNewFunc  /* Pointer to new system call value */
24542 ){
24543   unsigned int i;
24544   int rc = SQLITE_NOTFOUND;
24545
24546   UNUSED_PARAMETER(pNotUsed);
24547   if( zName==0 ){
24548     /* If no zName is given, restore all system calls to their default
24549     ** settings and return NULL
24550     */
24551     rc = SQLITE_OK;
24552     for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
24553       if( aSyscall[i].pDefault ){
24554         aSyscall[i].pCurrent = aSyscall[i].pDefault;
24555       }
24556     }
24557   }else{
24558     /* If zName is specified, operate on only the one system call
24559     ** specified.
24560     */
24561     for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
24562       if( strcmp(zName, aSyscall[i].zName)==0 ){
24563         if( aSyscall[i].pDefault==0 ){
24564           aSyscall[i].pDefault = aSyscall[i].pCurrent;
24565         }
24566         rc = SQLITE_OK;
24567         if( pNewFunc==0 ) pNewFunc = aSyscall[i].pDefault;
24568         aSyscall[i].pCurrent = pNewFunc;
24569         break;
24570       }
24571     }
24572   }
24573   return rc;
24574 }
24575
24576 /*
24577 ** Return the value of a system call.  Return NULL if zName is not a
24578 ** recognized system call name.  NULL is also returned if the system call
24579 ** is currently undefined.
24580 */
24581 static sqlite3_syscall_ptr unixGetSystemCall(
24582   sqlite3_vfs *pNotUsed,
24583   const char *zName
24584 ){
24585   unsigned int i;
24586
24587   UNUSED_PARAMETER(pNotUsed);
24588   for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
24589     if( strcmp(zName, aSyscall[i].zName)==0 ) return aSyscall[i].pCurrent;
24590   }
24591   return 0;
24592 }
24593
24594 /*
24595 ** Return the name of the first system call after zName.  If zName==NULL
24596 ** then return the name of the first system call.  Return NULL if zName
24597 ** is the last system call or if zName is not the name of a valid
24598 ** system call.
24599 */
24600 static const char *unixNextSystemCall(sqlite3_vfs *p, const char *zName){
24601   int i = -1;
24602
24603   UNUSED_PARAMETER(p);
24604   if( zName ){
24605     for(i=0; i<ArraySize(aSyscall)-1; i++){
24606       if( strcmp(zName, aSyscall[i].zName)==0 ) break;
24607     }
24608   }
24609   for(i++; i<ArraySize(aSyscall); i++){
24610     if( aSyscall[i].pCurrent!=0 ) return aSyscall[i].zName;
24611   }
24612   return 0;
24613 }
24614
24615 /*
24616 ** Retry open() calls that fail due to EINTR
24617 */
24618 static int robust_open(const char *z, int f, int m){
24619   int rc;
24620   do{ rc = osOpen(z,f,m); }while( rc<0 && errno==EINTR );
24621   return rc;
24622 }
24623
24624 /*
24625 ** Helper functions to obtain and relinquish the global mutex. The
24626 ** global mutex is used to protect the unixInodeInfo and
24627 ** vxworksFileId objects used by this file, all of which may be 
24628 ** shared by multiple threads.
24629 **
24630 ** Function unixMutexHeld() is used to assert() that the global mutex 
24631 ** is held when required. This function is only used as part of assert() 
24632 ** statements. e.g.
24633 **
24634 **   unixEnterMutex()
24635 **     assert( unixMutexHeld() );
24636 **   unixEnterLeave()
24637 */
24638 static void unixEnterMutex(void){
24639   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
24640 }
24641 static void unixLeaveMutex(void){
24642   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
24643 }
24644 #ifdef SQLITE_DEBUG
24645 static int unixMutexHeld(void) {
24646   return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
24647 }
24648 #endif
24649
24650
24651 #ifdef SQLITE_DEBUG
24652 /*
24653 ** Helper function for printing out trace information from debugging
24654 ** binaries. This returns the string represetation of the supplied
24655 ** integer lock-type.
24656 */
24657 static const char *azFileLock(int eFileLock){
24658   switch( eFileLock ){
24659     case NO_LOCK: return "NONE";
24660     case SHARED_LOCK: return "SHARED";
24661     case RESERVED_LOCK: return "RESERVED";
24662     case PENDING_LOCK: return "PENDING";
24663     case EXCLUSIVE_LOCK: return "EXCLUSIVE";
24664   }
24665   return "ERROR";
24666 }
24667 #endif
24668
24669 #ifdef SQLITE_LOCK_TRACE
24670 /*
24671 ** Print out information about all locking operations.
24672 **
24673 ** This routine is used for troubleshooting locks on multithreaded
24674 ** platforms.  Enable by compiling with the -DSQLITE_LOCK_TRACE
24675 ** command-line option on the compiler.  This code is normally
24676 ** turned off.
24677 */
24678 static int lockTrace(int fd, int op, struct flock *p){
24679   char *zOpName, *zType;
24680   int s;
24681   int savedErrno;
24682   if( op==F_GETLK ){
24683     zOpName = "GETLK";
24684   }else if( op==F_SETLK ){
24685     zOpName = "SETLK";
24686   }else{
24687     s = osFcntl(fd, op, p);
24688     sqlite3DebugPrintf("fcntl unknown %d %d %d\n", fd, op, s);
24689     return s;
24690   }
24691   if( p->l_type==F_RDLCK ){
24692     zType = "RDLCK";
24693   }else if( p->l_type==F_WRLCK ){
24694     zType = "WRLCK";
24695   }else if( p->l_type==F_UNLCK ){
24696     zType = "UNLCK";
24697   }else{
24698     assert( 0 );
24699   }
24700   assert( p->l_whence==SEEK_SET );
24701   s = osFcntl(fd, op, p);
24702   savedErrno = errno;
24703   sqlite3DebugPrintf("fcntl %d %d %s %s %d %d %d %d\n",
24704      threadid, fd, zOpName, zType, (int)p->l_start, (int)p->l_len,
24705      (int)p->l_pid, s);
24706   if( s==(-1) && op==F_SETLK && (p->l_type==F_RDLCK || p->l_type==F_WRLCK) ){
24707     struct flock l2;
24708     l2 = *p;
24709     osFcntl(fd, F_GETLK, &l2);
24710     if( l2.l_type==F_RDLCK ){
24711       zType = "RDLCK";
24712     }else if( l2.l_type==F_WRLCK ){
24713       zType = "WRLCK";
24714     }else if( l2.l_type==F_UNLCK ){
24715       zType = "UNLCK";
24716     }else{
24717       assert( 0 );
24718     }
24719     sqlite3DebugPrintf("fcntl-failure-reason: %s %d %d %d\n",
24720        zType, (int)l2.l_start, (int)l2.l_len, (int)l2.l_pid);
24721   }
24722   errno = savedErrno;
24723   return s;
24724 }
24725 #undef osFcntl
24726 #define osFcntl lockTrace
24727 #endif /* SQLITE_LOCK_TRACE */
24728
24729 /*
24730 ** Retry ftruncate() calls that fail due to EINTR
24731 */
24732 static int robust_ftruncate(int h, sqlite3_int64 sz){
24733   int rc;
24734   do{ rc = osFtruncate(h,sz); }while( rc<0 && errno==EINTR );
24735   return rc;
24736 }
24737
24738 /*
24739 ** This routine translates a standard POSIX errno code into something
24740 ** useful to the clients of the sqlite3 functions.  Specifically, it is
24741 ** intended to translate a variety of "try again" errors into SQLITE_BUSY
24742 ** and a variety of "please close the file descriptor NOW" errors into 
24743 ** SQLITE_IOERR
24744 ** 
24745 ** Errors during initialization of locks, or file system support for locks,
24746 ** should handle ENOLCK, ENOTSUP, EOPNOTSUPP separately.
24747 */
24748 static int sqliteErrorFromPosixError(int posixError, int sqliteIOErr) {
24749   switch (posixError) {
24750 #if 0
24751   /* At one point this code was not commented out. In theory, this branch
24752   ** should never be hit, as this function should only be called after
24753   ** a locking-related function (i.e. fcntl()) has returned non-zero with
24754   ** the value of errno as the first argument. Since a system call has failed,
24755   ** errno should be non-zero.
24756   **
24757   ** Despite this, if errno really is zero, we still don't want to return
24758   ** SQLITE_OK. The system call failed, and *some* SQLite error should be
24759   ** propagated back to the caller. Commenting this branch out means errno==0
24760   ** will be handled by the "default:" case below.
24761   */
24762   case 0: 
24763     return SQLITE_OK;
24764 #endif
24765
24766   case EAGAIN:
24767   case ETIMEDOUT:
24768   case EBUSY:
24769   case EINTR:
24770   case ENOLCK:  
24771     /* random NFS retry error, unless during file system support 
24772      * introspection, in which it actually means what it says */
24773     return SQLITE_BUSY;
24774     
24775   case EACCES: 
24776     /* EACCES is like EAGAIN during locking operations, but not any other time*/
24777     if( (sqliteIOErr == SQLITE_IOERR_LOCK) || 
24778         (sqliteIOErr == SQLITE_IOERR_UNLOCK) || 
24779         (sqliteIOErr == SQLITE_IOERR_RDLOCK) ||
24780         (sqliteIOErr == SQLITE_IOERR_CHECKRESERVEDLOCK) ){
24781       return SQLITE_BUSY;
24782     }
24783     /* else fall through */
24784   case EPERM: 
24785     return SQLITE_PERM;
24786     
24787   /* EDEADLK is only possible if a call to fcntl(F_SETLKW) is made. And
24788   ** this module never makes such a call. And the code in SQLite itself 
24789   ** asserts that SQLITE_IOERR_BLOCKED is never returned. For these reasons
24790   ** this case is also commented out. If the system does set errno to EDEADLK,
24791   ** the default SQLITE_IOERR_XXX code will be returned. */
24792 #if 0
24793   case EDEADLK:
24794     return SQLITE_IOERR_BLOCKED;
24795 #endif
24796     
24797 #if EOPNOTSUPP!=ENOTSUP
24798   case EOPNOTSUPP: 
24799     /* something went terribly awry, unless during file system support 
24800      * introspection, in which it actually means what it says */
24801 #endif
24802 #ifdef ENOTSUP
24803   case ENOTSUP: 
24804     /* invalid fd, unless during file system support introspection, in which 
24805      * it actually means what it says */
24806 #endif
24807   case EIO:
24808   case EBADF:
24809   case EINVAL:
24810   case ENOTCONN:
24811   case ENODEV:
24812   case ENXIO:
24813   case ENOENT:
24814   case ESTALE:
24815   case ENOSYS:
24816     /* these should force the client to close the file and reconnect */
24817     
24818   default: 
24819     return sqliteIOErr;
24820   }
24821 }
24822
24823
24824
24825 /******************************************************************************
24826 ****************** Begin Unique File ID Utility Used By VxWorks ***************
24827 **
24828 ** On most versions of unix, we can get a unique ID for a file by concatenating
24829 ** the device number and the inode number.  But this does not work on VxWorks.
24830 ** On VxWorks, a unique file id must be based on the canonical filename.
24831 **
24832 ** A pointer to an instance of the following structure can be used as a
24833 ** unique file ID in VxWorks.  Each instance of this structure contains
24834 ** a copy of the canonical filename.  There is also a reference count.  
24835 ** The structure is reclaimed when the number of pointers to it drops to
24836 ** zero.
24837 **
24838 ** There are never very many files open at one time and lookups are not
24839 ** a performance-critical path, so it is sufficient to put these
24840 ** structures on a linked list.
24841 */
24842 struct vxworksFileId {
24843   struct vxworksFileId *pNext;  /* Next in a list of them all */
24844   int nRef;                     /* Number of references to this one */
24845   int nName;                    /* Length of the zCanonicalName[] string */
24846   char *zCanonicalName;         /* Canonical filename */
24847 };
24848
24849 #if OS_VXWORKS
24850 /* 
24851 ** All unique filenames are held on a linked list headed by this
24852 ** variable:
24853 */
24854 static struct vxworksFileId *vxworksFileList = 0;
24855
24856 /*
24857 ** Simplify a filename into its canonical form
24858 ** by making the following changes:
24859 **
24860 **  * removing any trailing and duplicate /
24861 **  * convert /./ into just /
24862 **  * convert /A/../ where A is any simple name into just /
24863 **
24864 ** Changes are made in-place.  Return the new name length.
24865 **
24866 ** The original filename is in z[0..n-1].  Return the number of
24867 ** characters in the simplified name.
24868 */
24869 static int vxworksSimplifyName(char *z, int n){
24870   int i, j;
24871   while( n>1 && z[n-1]=='/' ){ n--; }
24872   for(i=j=0; i<n; i++){
24873     if( z[i]=='/' ){
24874       if( z[i+1]=='/' ) continue;
24875       if( z[i+1]=='.' && i+2<n && z[i+2]=='/' ){
24876         i += 1;
24877         continue;
24878       }
24879       if( z[i+1]=='.' && i+3<n && z[i+2]=='.' && z[i+3]=='/' ){
24880         while( j>0 && z[j-1]!='/' ){ j--; }
24881         if( j>0 ){ j--; }
24882         i += 2;
24883         continue;
24884       }
24885     }
24886     z[j++] = z[i];
24887   }
24888   z[j] = 0;
24889   return j;
24890 }
24891
24892 /*
24893 ** Find a unique file ID for the given absolute pathname.  Return
24894 ** a pointer to the vxworksFileId object.  This pointer is the unique
24895 ** file ID.
24896 **
24897 ** The nRef field of the vxworksFileId object is incremented before
24898 ** the object is returned.  A new vxworksFileId object is created
24899 ** and added to the global list if necessary.
24900 **
24901 ** If a memory allocation error occurs, return NULL.
24902 */
24903 static struct vxworksFileId *vxworksFindFileId(const char *zAbsoluteName){
24904   struct vxworksFileId *pNew;         /* search key and new file ID */
24905   struct vxworksFileId *pCandidate;   /* For looping over existing file IDs */
24906   int n;                              /* Length of zAbsoluteName string */
24907
24908   assert( zAbsoluteName[0]=='/' );
24909   n = (int)strlen(zAbsoluteName);
24910   pNew = sqlite3_malloc( sizeof(*pNew) + (n+1) );
24911   if( pNew==0 ) return 0;
24912   pNew->zCanonicalName = (char*)&pNew[1];
24913   memcpy(pNew->zCanonicalName, zAbsoluteName, n+1);
24914   n = vxworksSimplifyName(pNew->zCanonicalName, n);
24915
24916   /* Search for an existing entry that matching the canonical name.
24917   ** If found, increment the reference count and return a pointer to
24918   ** the existing file ID.
24919   */
24920   unixEnterMutex();
24921   for(pCandidate=vxworksFileList; pCandidate; pCandidate=pCandidate->pNext){
24922     if( pCandidate->nName==n 
24923      && memcmp(pCandidate->zCanonicalName, pNew->zCanonicalName, n)==0
24924     ){
24925        sqlite3_free(pNew);
24926        pCandidate->nRef++;
24927        unixLeaveMutex();
24928        return pCandidate;
24929     }
24930   }
24931
24932   /* No match was found.  We will make a new file ID */
24933   pNew->nRef = 1;
24934   pNew->nName = n;
24935   pNew->pNext = vxworksFileList;
24936   vxworksFileList = pNew;
24937   unixLeaveMutex();
24938   return pNew;
24939 }
24940
24941 /*
24942 ** Decrement the reference count on a vxworksFileId object.  Free
24943 ** the object when the reference count reaches zero.
24944 */
24945 static void vxworksReleaseFileId(struct vxworksFileId *pId){
24946   unixEnterMutex();
24947   assert( pId->nRef>0 );
24948   pId->nRef--;
24949   if( pId->nRef==0 ){
24950     struct vxworksFileId **pp;
24951     for(pp=&vxworksFileList; *pp && *pp!=pId; pp = &((*pp)->pNext)){}
24952     assert( *pp==pId );
24953     *pp = pId->pNext;
24954     sqlite3_free(pId);
24955   }
24956   unixLeaveMutex();
24957 }
24958 #endif /* OS_VXWORKS */
24959 /*************** End of Unique File ID Utility Used By VxWorks ****************
24960 ******************************************************************************/
24961
24962
24963 /******************************************************************************
24964 *************************** Posix Advisory Locking ****************************
24965 **
24966 ** POSIX advisory locks are broken by design.  ANSI STD 1003.1 (1996)
24967 ** section 6.5.2.2 lines 483 through 490 specify that when a process
24968 ** sets or clears a lock, that operation overrides any prior locks set
24969 ** by the same process.  It does not explicitly say so, but this implies
24970 ** that it overrides locks set by the same process using a different
24971 ** file descriptor.  Consider this test case:
24972 **
24973 **       int fd1 = open("./file1", O_RDWR|O_CREAT, 0644);
24974 **       int fd2 = open("./file2", O_RDWR|O_CREAT, 0644);
24975 **
24976 ** Suppose ./file1 and ./file2 are really the same file (because
24977 ** one is a hard or symbolic link to the other) then if you set
24978 ** an exclusive lock on fd1, then try to get an exclusive lock
24979 ** on fd2, it works.  I would have expected the second lock to
24980 ** fail since there was already a lock on the file due to fd1.
24981 ** But not so.  Since both locks came from the same process, the
24982 ** second overrides the first, even though they were on different
24983 ** file descriptors opened on different file names.
24984 **
24985 ** This means that we cannot use POSIX locks to synchronize file access
24986 ** among competing threads of the same process.  POSIX locks will work fine
24987 ** to synchronize access for threads in separate processes, but not
24988 ** threads within the same process.
24989 **
24990 ** To work around the problem, SQLite has to manage file locks internally
24991 ** on its own.  Whenever a new database is opened, we have to find the
24992 ** specific inode of the database file (the inode is determined by the
24993 ** st_dev and st_ino fields of the stat structure that fstat() fills in)
24994 ** and check for locks already existing on that inode.  When locks are
24995 ** created or removed, we have to look at our own internal record of the
24996 ** locks to see if another thread has previously set a lock on that same
24997 ** inode.
24998 **
24999 ** (Aside: The use of inode numbers as unique IDs does not work on VxWorks.
25000 ** For VxWorks, we have to use the alternative unique ID system based on
25001 ** canonical filename and implemented in the previous division.)
25002 **
25003 ** The sqlite3_file structure for POSIX is no longer just an integer file
25004 ** descriptor.  It is now a structure that holds the integer file
25005 ** descriptor and a pointer to a structure that describes the internal
25006 ** locks on the corresponding inode.  There is one locking structure
25007 ** per inode, so if the same inode is opened twice, both unixFile structures
25008 ** point to the same locking structure.  The locking structure keeps
25009 ** a reference count (so we will know when to delete it) and a "cnt"
25010 ** field that tells us its internal lock status.  cnt==0 means the
25011 ** file is unlocked.  cnt==-1 means the file has an exclusive lock.
25012 ** cnt>0 means there are cnt shared locks on the file.
25013 **
25014 ** Any attempt to lock or unlock a file first checks the locking
25015 ** structure.  The fcntl() system call is only invoked to set a 
25016 ** POSIX lock if the internal lock structure transitions between
25017 ** a locked and an unlocked state.
25018 **
25019 ** But wait:  there are yet more problems with POSIX advisory locks.
25020 **
25021 ** If you close a file descriptor that points to a file that has locks,
25022 ** all locks on that file that are owned by the current process are
25023 ** released.  To work around this problem, each unixInodeInfo object
25024 ** maintains a count of the number of pending locks on tha inode.
25025 ** When an attempt is made to close an unixFile, if there are
25026 ** other unixFile open on the same inode that are holding locks, the call
25027 ** to close() the file descriptor is deferred until all of the locks clear.
25028 ** The unixInodeInfo structure keeps a list of file descriptors that need to
25029 ** be closed and that list is walked (and cleared) when the last lock
25030 ** clears.
25031 **
25032 ** Yet another problem:  LinuxThreads do not play well with posix locks.
25033 **
25034 ** Many older versions of linux use the LinuxThreads library which is
25035 ** not posix compliant.  Under LinuxThreads, a lock created by thread
25036 ** A cannot be modified or overridden by a different thread B.
25037 ** Only thread A can modify the lock.  Locking behavior is correct
25038 ** if the appliation uses the newer Native Posix Thread Library (NPTL)
25039 ** on linux - with NPTL a lock created by thread A can override locks
25040 ** in thread B.  But there is no way to know at compile-time which
25041 ** threading library is being used.  So there is no way to know at
25042 ** compile-time whether or not thread A can override locks on thread B.
25043 ** One has to do a run-time check to discover the behavior of the
25044 ** current process.
25045 **
25046 ** SQLite used to support LinuxThreads.  But support for LinuxThreads
25047 ** was dropped beginning with version 3.7.0.  SQLite will still work with
25048 ** LinuxThreads provided that (1) there is no more than one connection 
25049 ** per database file in the same process and (2) database connections
25050 ** do not move across threads.
25051 */
25052
25053 /*
25054 ** An instance of the following structure serves as the key used
25055 ** to locate a particular unixInodeInfo object.
25056 */
25057 struct unixFileId {
25058   dev_t dev;                  /* Device number */
25059 #if OS_VXWORKS
25060   struct vxworksFileId *pId;  /* Unique file ID for vxworks. */
25061 #else
25062   ino_t ino;                  /* Inode number */
25063 #endif
25064 };
25065
25066 /*
25067 ** An instance of the following structure is allocated for each open
25068 ** inode.  Or, on LinuxThreads, there is one of these structures for
25069 ** each inode opened by each thread.
25070 **
25071 ** A single inode can have multiple file descriptors, so each unixFile
25072 ** structure contains a pointer to an instance of this object and this
25073 ** object keeps a count of the number of unixFile pointing to it.
25074 */
25075 struct unixInodeInfo {
25076   struct unixFileId fileId;       /* The lookup key */
25077   int nShared;                    /* Number of SHARED locks held */
25078   unsigned char eFileLock;        /* One of SHARED_LOCK, RESERVED_LOCK etc. */
25079   unsigned char bProcessLock;     /* An exclusive process lock is held */
25080   int nRef;                       /* Number of pointers to this structure */
25081   unixShmNode *pShmNode;          /* Shared memory associated with this inode */
25082   int nLock;                      /* Number of outstanding file locks */
25083   UnixUnusedFd *pUnused;          /* Unused file descriptors to close */
25084   unixInodeInfo *pNext;           /* List of all unixInodeInfo objects */
25085   unixInodeInfo *pPrev;           /*    .... doubly linked */
25086 #if defined(SQLITE_ENABLE_LOCKING_STYLE)
25087   unsigned long long sharedByte;  /* for AFP simulated shared lock */
25088 #endif
25089 #if OS_VXWORKS
25090   sem_t *pSem;                    /* Named POSIX semaphore */
25091   char aSemName[MAX_PATHNAME+2];  /* Name of that semaphore */
25092 #endif
25093 };
25094
25095 /*
25096 ** A lists of all unixInodeInfo objects.
25097 */
25098 static unixInodeInfo *inodeList = 0;
25099
25100 /*
25101 **
25102 ** This function - unixLogError_x(), is only ever called via the macro
25103 ** unixLogError().
25104 **
25105 ** It is invoked after an error occurs in an OS function and errno has been
25106 ** set. It logs a message using sqlite3_log() containing the current value of
25107 ** errno and, if possible, the human-readable equivalent from strerror() or
25108 ** strerror_r().
25109 **
25110 ** The first argument passed to the macro should be the error code that
25111 ** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN). 
25112 ** The two subsequent arguments should be the name of the OS function that
25113 ** failed (e.g. "unlink", "open") and the the associated file-system path,
25114 ** if any.
25115 */
25116 #define unixLogError(a,b,c)     unixLogErrorAtLine(a,b,c,__LINE__)
25117 static int unixLogErrorAtLine(
25118   int errcode,                    /* SQLite error code */
25119   const char *zFunc,              /* Name of OS function that failed */
25120   const char *zPath,              /* File path associated with error */
25121   int iLine                       /* Source line number where error occurred */
25122 ){
25123   char *zErr;                     /* Message from strerror() or equivalent */
25124   int iErrno = errno;             /* Saved syscall error number */
25125
25126   /* If this is not a threadsafe build (SQLITE_THREADSAFE==0), then use
25127   ** the strerror() function to obtain the human-readable error message
25128   ** equivalent to errno. Otherwise, use strerror_r().
25129   */ 
25130 #if SQLITE_THREADSAFE && defined(HAVE_STRERROR_R)
25131   char aErr[80];
25132   memset(aErr, 0, sizeof(aErr));
25133   zErr = aErr;
25134
25135   /* If STRERROR_R_CHAR_P (set by autoconf scripts) or __USE_GNU is defined,
25136   ** assume that the system provides the the GNU version of strerror_r() that 
25137   ** returns a pointer to a buffer containing the error message. That pointer 
25138   ** may point to aErr[], or it may point to some static storage somewhere. 
25139   ** Otherwise, assume that the system provides the POSIX version of 
25140   ** strerror_r(), which always writes an error message into aErr[].
25141   **
25142   ** If the code incorrectly assumes that it is the POSIX version that is
25143   ** available, the error message will often be an empty string. Not a
25144   ** huge problem. Incorrectly concluding that the GNU version is available 
25145   ** could lead to a segfault though.
25146   */
25147 #if defined(STRERROR_R_CHAR_P) || defined(__USE_GNU)
25148   zErr = 
25149 # endif
25150   strerror_r(iErrno, aErr, sizeof(aErr)-1);
25151
25152 #elif SQLITE_THREADSAFE
25153   /* This is a threadsafe build, but strerror_r() is not available. */
25154   zErr = "";
25155 #else
25156   /* Non-threadsafe build, use strerror(). */
25157   zErr = strerror(iErrno);
25158 #endif
25159
25160   assert( errcode!=SQLITE_OK );
25161   if( zPath==0 ) zPath = "";
25162   sqlite3_log(errcode,
25163       "os_unix.c:%d: (%d) %s(%s) - %s",
25164       iLine, iErrno, zFunc, zPath, zErr
25165   );
25166
25167   return errcode;
25168 }
25169
25170 /*
25171 ** Close a file descriptor.
25172 **
25173 ** We assume that close() almost always works, since it is only in a
25174 ** very sick application or on a very sick platform that it might fail.
25175 ** If it does fail, simply leak the file descriptor, but do log the
25176 ** error.
25177 **
25178 ** Note that it is not safe to retry close() after EINTR since the
25179 ** file descriptor might have already been reused by another thread.
25180 ** So we don't even try to recover from an EINTR.  Just log the error
25181 ** and move on.
25182 */
25183 static void robust_close(unixFile *pFile, int h, int lineno){
25184   if( osClose(h) ){
25185     unixLogErrorAtLine(SQLITE_IOERR_CLOSE, "close",
25186                        pFile ? pFile->zPath : 0, lineno);
25187   }
25188 }
25189
25190 /*
25191 ** Close all file descriptors accumuated in the unixInodeInfo->pUnused list.
25192 */ 
25193 static void closePendingFds(unixFile *pFile){
25194   unixInodeInfo *pInode = pFile->pInode;
25195   UnixUnusedFd *p;
25196   UnixUnusedFd *pNext;
25197   for(p=pInode->pUnused; p; p=pNext){
25198     pNext = p->pNext;
25199     robust_close(pFile, p->fd, __LINE__);
25200     sqlite3_free(p);
25201   }
25202   pInode->pUnused = 0;
25203 }
25204
25205 /*
25206 ** Release a unixInodeInfo structure previously allocated by findInodeInfo().
25207 **
25208 ** The mutex entered using the unixEnterMutex() function must be held
25209 ** when this function is called.
25210 */
25211 static void releaseInodeInfo(unixFile *pFile){
25212   unixInodeInfo *pInode = pFile->pInode;
25213   assert( unixMutexHeld() );
25214   if( ALWAYS(pInode) ){
25215     pInode->nRef--;
25216     if( pInode->nRef==0 ){
25217       assert( pInode->pShmNode==0 );
25218       closePendingFds(pFile);
25219       if( pInode->pPrev ){
25220         assert( pInode->pPrev->pNext==pInode );
25221         pInode->pPrev->pNext = pInode->pNext;
25222       }else{
25223         assert( inodeList==pInode );
25224         inodeList = pInode->pNext;
25225       }
25226       if( pInode->pNext ){
25227         assert( pInode->pNext->pPrev==pInode );
25228         pInode->pNext->pPrev = pInode->pPrev;
25229       }
25230       sqlite3_free(pInode);
25231     }
25232   }
25233 }
25234
25235 /*
25236 ** Given a file descriptor, locate the unixInodeInfo object that
25237 ** describes that file descriptor.  Create a new one if necessary.  The
25238 ** return value might be uninitialized if an error occurs.
25239 **
25240 ** The mutex entered using the unixEnterMutex() function must be held
25241 ** when this function is called.
25242 **
25243 ** Return an appropriate error code.
25244 */
25245 static int findInodeInfo(
25246   unixFile *pFile,               /* Unix file with file desc used in the key */
25247   unixInodeInfo **ppInode        /* Return the unixInodeInfo object here */
25248 ){
25249   int rc;                        /* System call return code */
25250   int fd;                        /* The file descriptor for pFile */
25251   struct unixFileId fileId;      /* Lookup key for the unixInodeInfo */
25252   struct stat statbuf;           /* Low-level file information */
25253   unixInodeInfo *pInode = 0;     /* Candidate unixInodeInfo object */
25254
25255   assert( unixMutexHeld() );
25256
25257   /* Get low-level information about the file that we can used to
25258   ** create a unique name for the file.
25259   */
25260   fd = pFile->h;
25261   rc = osFstat(fd, &statbuf);
25262   if( rc!=0 ){
25263     pFile->lastErrno = errno;
25264 #ifdef EOVERFLOW
25265     if( pFile->lastErrno==EOVERFLOW ) return SQLITE_NOLFS;
25266 #endif
25267     return SQLITE_IOERR;
25268   }
25269
25270 #ifdef __APPLE__
25271   /* On OS X on an msdos filesystem, the inode number is reported
25272   ** incorrectly for zero-size files.  See ticket #3260.  To work
25273   ** around this problem (we consider it a bug in OS X, not SQLite)
25274   ** we always increase the file size to 1 by writing a single byte
25275   ** prior to accessing the inode number.  The one byte written is
25276   ** an ASCII 'S' character which also happens to be the first byte
25277   ** in the header of every SQLite database.  In this way, if there
25278   ** is a race condition such that another thread has already populated
25279   ** the first page of the database, no damage is done.
25280   */
25281   if( statbuf.st_size==0 && (pFile->fsFlags & SQLITE_FSFLAGS_IS_MSDOS)!=0 ){
25282     do{ rc = osWrite(fd, "S", 1); }while( rc<0 && errno==EINTR );
25283     if( rc!=1 ){
25284       pFile->lastErrno = errno;
25285       return SQLITE_IOERR;
25286     }
25287     rc = osFstat(fd, &statbuf);
25288     if( rc!=0 ){
25289       pFile->lastErrno = errno;
25290       return SQLITE_IOERR;
25291     }
25292   }
25293 #endif
25294
25295   memset(&fileId, 0, sizeof(fileId));
25296   fileId.dev = statbuf.st_dev;
25297 #if OS_VXWORKS
25298   fileId.pId = pFile->pId;
25299 #else
25300   fileId.ino = statbuf.st_ino;
25301 #endif
25302   pInode = inodeList;
25303   while( pInode && memcmp(&fileId, &pInode->fileId, sizeof(fileId)) ){
25304     pInode = pInode->pNext;
25305   }
25306   if( pInode==0 ){
25307     pInode = sqlite3_malloc( sizeof(*pInode) );
25308     if( pInode==0 ){
25309       return SQLITE_NOMEM;
25310     }
25311     memset(pInode, 0, sizeof(*pInode));
25312     memcpy(&pInode->fileId, &fileId, sizeof(fileId));
25313     pInode->nRef = 1;
25314     pInode->pNext = inodeList;
25315     pInode->pPrev = 0;
25316     if( inodeList ) inodeList->pPrev = pInode;
25317     inodeList = pInode;
25318   }else{
25319     pInode->nRef++;
25320   }
25321   *ppInode = pInode;
25322   return SQLITE_OK;
25323 }
25324
25325
25326 /*
25327 ** This routine checks if there is a RESERVED lock held on the specified
25328 ** file by this or any other process. If such a lock is held, set *pResOut
25329 ** to a non-zero value otherwise *pResOut is set to zero.  The return value
25330 ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
25331 */
25332 static int unixCheckReservedLock(sqlite3_file *id, int *pResOut){
25333   int rc = SQLITE_OK;
25334   int reserved = 0;
25335   unixFile *pFile = (unixFile*)id;
25336
25337   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
25338
25339   assert( pFile );
25340   unixEnterMutex(); /* Because pFile->pInode is shared across threads */
25341
25342   /* Check if a thread in this process holds such a lock */
25343   if( pFile->pInode->eFileLock>SHARED_LOCK ){
25344     reserved = 1;
25345   }
25346
25347   /* Otherwise see if some other process holds it.
25348   */
25349 #ifndef __DJGPP__
25350   if( !reserved && !pFile->pInode->bProcessLock ){
25351     struct flock lock;
25352     lock.l_whence = SEEK_SET;
25353     lock.l_start = RESERVED_BYTE;
25354     lock.l_len = 1;
25355     lock.l_type = F_WRLCK;
25356     if( osFcntl(pFile->h, F_GETLK, &lock) ){
25357       rc = SQLITE_IOERR_CHECKRESERVEDLOCK;
25358       pFile->lastErrno = errno;
25359     } else if( lock.l_type!=F_UNLCK ){
25360       reserved = 1;
25361     }
25362   }
25363 #endif
25364   
25365   unixLeaveMutex();
25366   OSTRACE(("TEST WR-LOCK %d %d %d (unix)\n", pFile->h, rc, reserved));
25367
25368   *pResOut = reserved;
25369   return rc;
25370 }
25371
25372 /*
25373 ** Attempt to set a system-lock on the file pFile.  The lock is 
25374 ** described by pLock.
25375 **
25376 ** If the pFile was opened read/write from unix-excl, then the only lock
25377 ** ever obtained is an exclusive lock, and it is obtained exactly once
25378 ** the first time any lock is attempted.  All subsequent system locking
25379 ** operations become no-ops.  Locking operations still happen internally,
25380 ** in order to coordinate access between separate database connections
25381 ** within this process, but all of that is handled in memory and the
25382 ** operating system does not participate.
25383 **
25384 ** This function is a pass-through to fcntl(F_SETLK) if pFile is using
25385 ** any VFS other than "unix-excl" or if pFile is opened on "unix-excl"
25386 ** and is read-only.
25387 **
25388 ** Zero is returned if the call completes successfully, or -1 if a call
25389 ** to fcntl() fails. In this case, errno is set appropriately (by fcntl()).
25390 */
25391 static int unixFileLock(unixFile *pFile, struct flock *pLock){
25392   int rc;
25393   unixInodeInfo *pInode = pFile->pInode;
25394   assert( unixMutexHeld() );
25395   assert( pInode!=0 );
25396   if( ((pFile->ctrlFlags & UNIXFILE_EXCL)!=0 || pInode->bProcessLock)
25397    && ((pFile->ctrlFlags & UNIXFILE_RDONLY)==0)
25398   ){
25399     if( pInode->bProcessLock==0 ){
25400       struct flock lock;
25401       assert( pInode->nLock==0 );
25402       lock.l_whence = SEEK_SET;
25403       lock.l_start = SHARED_FIRST;
25404       lock.l_len = SHARED_SIZE;
25405       lock.l_type = F_WRLCK;
25406       rc = osFcntl(pFile->h, F_SETLK, &lock);
25407       if( rc<0 ) return rc;
25408       pInode->bProcessLock = 1;
25409       pInode->nLock++;
25410     }else{
25411       rc = 0;
25412     }
25413   }else{
25414     rc = osFcntl(pFile->h, F_SETLK, pLock);
25415   }
25416   return rc;
25417 }
25418
25419 /*
25420 ** Lock the file with the lock specified by parameter eFileLock - one
25421 ** of the following:
25422 **
25423 **     (1) SHARED_LOCK
25424 **     (2) RESERVED_LOCK
25425 **     (3) PENDING_LOCK
25426 **     (4) EXCLUSIVE_LOCK
25427 **
25428 ** Sometimes when requesting one lock state, additional lock states
25429 ** are inserted in between.  The locking might fail on one of the later
25430 ** transitions leaving the lock state different from what it started but
25431 ** still short of its goal.  The following chart shows the allowed
25432 ** transitions and the inserted intermediate states:
25433 **
25434 **    UNLOCKED -> SHARED
25435 **    SHARED -> RESERVED
25436 **    SHARED -> (PENDING) -> EXCLUSIVE
25437 **    RESERVED -> (PENDING) -> EXCLUSIVE
25438 **    PENDING -> EXCLUSIVE
25439 **
25440 ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
25441 ** routine to lower a locking level.
25442 */
25443 static int unixLock(sqlite3_file *id, int eFileLock){
25444   /* The following describes the implementation of the various locks and
25445   ** lock transitions in terms of the POSIX advisory shared and exclusive
25446   ** lock primitives (called read-locks and write-locks below, to avoid
25447   ** confusion with SQLite lock names). The algorithms are complicated
25448   ** slightly in order to be compatible with windows systems simultaneously
25449   ** accessing the same database file, in case that is ever required.
25450   **
25451   ** Symbols defined in os.h indentify the 'pending byte' and the 'reserved
25452   ** byte', each single bytes at well known offsets, and the 'shared byte
25453   ** range', a range of 510 bytes at a well known offset.
25454   **
25455   ** To obtain a SHARED lock, a read-lock is obtained on the 'pending
25456   ** byte'.  If this is successful, a random byte from the 'shared byte
25457   ** range' is read-locked and the lock on the 'pending byte' released.
25458   **
25459   ** A process may only obtain a RESERVED lock after it has a SHARED lock.
25460   ** A RESERVED lock is implemented by grabbing a write-lock on the
25461   ** 'reserved byte'. 
25462   **
25463   ** A process may only obtain a PENDING lock after it has obtained a
25464   ** SHARED lock. A PENDING lock is implemented by obtaining a write-lock
25465   ** on the 'pending byte'. This ensures that no new SHARED locks can be
25466   ** obtained, but existing SHARED locks are allowed to persist. A process
25467   ** does not have to obtain a RESERVED lock on the way to a PENDING lock.
25468   ** This property is used by the algorithm for rolling back a journal file
25469   ** after a crash.
25470   **
25471   ** An EXCLUSIVE lock, obtained after a PENDING lock is held, is
25472   ** implemented by obtaining a write-lock on the entire 'shared byte
25473   ** range'. Since all other locks require a read-lock on one of the bytes
25474   ** within this range, this ensures that no other locks are held on the
25475   ** database. 
25476   **
25477   ** The reason a single byte cannot be used instead of the 'shared byte
25478   ** range' is that some versions of windows do not support read-locks. By
25479   ** locking a random byte from a range, concurrent SHARED locks may exist
25480   ** even if the locking primitive used is always a write-lock.
25481   */
25482   int rc = SQLITE_OK;
25483   unixFile *pFile = (unixFile*)id;
25484   unixInodeInfo *pInode = pFile->pInode;
25485   struct flock lock;
25486   int tErrno = 0;
25487
25488   assert( pFile );
25489   OSTRACE(("LOCK    %d %s was %s(%s,%d) pid=%d (unix)\n", pFile->h,
25490       azFileLock(eFileLock), azFileLock(pFile->eFileLock),
25491       azFileLock(pInode->eFileLock), pInode->nShared , getpid()));
25492
25493   /* If there is already a lock of this type or more restrictive on the
25494   ** unixFile, do nothing. Don't use the end_lock: exit path, as
25495   ** unixEnterMutex() hasn't been called yet.
25496   */
25497   if( pFile->eFileLock>=eFileLock ){
25498     OSTRACE(("LOCK    %d %s ok (already held) (unix)\n", pFile->h,
25499             azFileLock(eFileLock)));
25500     return SQLITE_OK;
25501   }
25502
25503   /* Make sure the locking sequence is correct.
25504   **  (1) We never move from unlocked to anything higher than shared lock.
25505   **  (2) SQLite never explicitly requests a pendig lock.
25506   **  (3) A shared lock is always held when a reserve lock is requested.
25507   */
25508   assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK );
25509   assert( eFileLock!=PENDING_LOCK );
25510   assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK );
25511
25512   /* This mutex is needed because pFile->pInode is shared across threads
25513   */
25514   unixEnterMutex();
25515   pInode = pFile->pInode;
25516
25517   /* If some thread using this PID has a lock via a different unixFile*
25518   ** handle that precludes the requested lock, return BUSY.
25519   */
25520   if( (pFile->eFileLock!=pInode->eFileLock && 
25521           (pInode->eFileLock>=PENDING_LOCK || eFileLock>SHARED_LOCK))
25522   ){
25523     rc = SQLITE_BUSY;
25524     goto end_lock;
25525   }
25526
25527   /* If a SHARED lock is requested, and some thread using this PID already
25528   ** has a SHARED or RESERVED lock, then increment reference counts and
25529   ** return SQLITE_OK.
25530   */
25531   if( eFileLock==SHARED_LOCK && 
25532       (pInode->eFileLock==SHARED_LOCK || pInode->eFileLock==RESERVED_LOCK) ){
25533     assert( eFileLock==SHARED_LOCK );
25534     assert( pFile->eFileLock==0 );
25535     assert( pInode->nShared>0 );
25536     pFile->eFileLock = SHARED_LOCK;
25537     pInode->nShared++;
25538     pInode->nLock++;
25539     goto end_lock;
25540   }
25541
25542
25543   /* A PENDING lock is needed before acquiring a SHARED lock and before
25544   ** acquiring an EXCLUSIVE lock.  For the SHARED lock, the PENDING will
25545   ** be released.
25546   */
25547   lock.l_len = 1L;
25548   lock.l_whence = SEEK_SET;
25549   if( eFileLock==SHARED_LOCK 
25550       || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock<PENDING_LOCK)
25551   ){
25552     lock.l_type = (eFileLock==SHARED_LOCK?F_RDLCK:F_WRLCK);
25553     lock.l_start = PENDING_BYTE;
25554     if( unixFileLock(pFile, &lock) ){
25555       tErrno = errno;
25556       rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
25557       if( rc!=SQLITE_BUSY ){
25558         pFile->lastErrno = tErrno;
25559       }
25560       goto end_lock;
25561     }
25562   }
25563
25564
25565   /* If control gets to this point, then actually go ahead and make
25566   ** operating system calls for the specified lock.
25567   */
25568   if( eFileLock==SHARED_LOCK ){
25569     assert( pInode->nShared==0 );
25570     assert( pInode->eFileLock==0 );
25571     assert( rc==SQLITE_OK );
25572
25573     /* Now get the read-lock */
25574     lock.l_start = SHARED_FIRST;
25575     lock.l_len = SHARED_SIZE;
25576     if( unixFileLock(pFile, &lock) ){
25577       tErrno = errno;
25578       rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
25579     }
25580
25581     /* Drop the temporary PENDING lock */
25582     lock.l_start = PENDING_BYTE;
25583     lock.l_len = 1L;
25584     lock.l_type = F_UNLCK;
25585     if( unixFileLock(pFile, &lock) && rc==SQLITE_OK ){
25586       /* This could happen with a network mount */
25587       tErrno = errno;
25588       rc = SQLITE_IOERR_UNLOCK; 
25589     }
25590
25591     if( rc ){
25592       if( rc!=SQLITE_BUSY ){
25593         pFile->lastErrno = tErrno;
25594       }
25595       goto end_lock;
25596     }else{
25597       pFile->eFileLock = SHARED_LOCK;
25598       pInode->nLock++;
25599       pInode->nShared = 1;
25600     }
25601   }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){
25602     /* We are trying for an exclusive lock but another thread in this
25603     ** same process is still holding a shared lock. */
25604     rc = SQLITE_BUSY;
25605   }else{
25606     /* The request was for a RESERVED or EXCLUSIVE lock.  It is
25607     ** assumed that there is a SHARED or greater lock on the file
25608     ** already.
25609     */
25610     assert( 0!=pFile->eFileLock );
25611     lock.l_type = F_WRLCK;
25612
25613     assert( eFileLock==RESERVED_LOCK || eFileLock==EXCLUSIVE_LOCK );
25614     if( eFileLock==RESERVED_LOCK ){
25615       lock.l_start = RESERVED_BYTE;
25616       lock.l_len = 1L;
25617     }else{
25618       lock.l_start = SHARED_FIRST;
25619       lock.l_len = SHARED_SIZE;
25620     }
25621
25622     if( unixFileLock(pFile, &lock) ){
25623       tErrno = errno;
25624       rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
25625       if( rc!=SQLITE_BUSY ){
25626         pFile->lastErrno = tErrno;
25627       }
25628     }
25629   }
25630   
25631
25632 #ifndef NDEBUG
25633   /* Set up the transaction-counter change checking flags when
25634   ** transitioning from a SHARED to a RESERVED lock.  The change
25635   ** from SHARED to RESERVED marks the beginning of a normal
25636   ** write operation (not a hot journal rollback).
25637   */
25638   if( rc==SQLITE_OK
25639    && pFile->eFileLock<=SHARED_LOCK
25640    && eFileLock==RESERVED_LOCK
25641   ){
25642     pFile->transCntrChng = 0;
25643     pFile->dbUpdate = 0;
25644     pFile->inNormalWrite = 1;
25645   }
25646 #endif
25647
25648
25649   if( rc==SQLITE_OK ){
25650     pFile->eFileLock = eFileLock;
25651     pInode->eFileLock = eFileLock;
25652   }else if( eFileLock==EXCLUSIVE_LOCK ){
25653     pFile->eFileLock = PENDING_LOCK;
25654     pInode->eFileLock = PENDING_LOCK;
25655   }
25656
25657 end_lock:
25658   unixLeaveMutex();
25659   OSTRACE(("LOCK    %d %s %s (unix)\n", pFile->h, azFileLock(eFileLock), 
25660       rc==SQLITE_OK ? "ok" : "failed"));
25661   return rc;
25662 }
25663
25664 /*
25665 ** Add the file descriptor used by file handle pFile to the corresponding
25666 ** pUnused list.
25667 */
25668 static void setPendingFd(unixFile *pFile){
25669   unixInodeInfo *pInode = pFile->pInode;
25670   UnixUnusedFd *p = pFile->pUnused;
25671   p->pNext = pInode->pUnused;
25672   pInode->pUnused = p;
25673   pFile->h = -1;
25674   pFile->pUnused = 0;
25675 }
25676
25677 /*
25678 ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
25679 ** must be either NO_LOCK or SHARED_LOCK.
25680 **
25681 ** If the locking level of the file descriptor is already at or below
25682 ** the requested locking level, this routine is a no-op.
25683 ** 
25684 ** If handleNFSUnlock is true, then on downgrading an EXCLUSIVE_LOCK to SHARED
25685 ** the byte range is divided into 2 parts and the first part is unlocked then
25686 ** set to a read lock, then the other part is simply unlocked.  This works 
25687 ** around a bug in BSD NFS lockd (also seen on MacOSX 10.3+) that fails to 
25688 ** remove the write lock on a region when a read lock is set.
25689 */
25690 static int posixUnlock(sqlite3_file *id, int eFileLock, int handleNFSUnlock){
25691   unixFile *pFile = (unixFile*)id;
25692   unixInodeInfo *pInode;
25693   struct flock lock;
25694   int rc = SQLITE_OK;
25695   int h;
25696
25697   assert( pFile );
25698   OSTRACE(("UNLOCK  %d %d was %d(%d,%d) pid=%d (unix)\n", pFile->h, eFileLock,
25699       pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared,
25700       getpid()));
25701
25702   assert( eFileLock<=SHARED_LOCK );
25703   if( pFile->eFileLock<=eFileLock ){
25704     return SQLITE_OK;
25705   }
25706   unixEnterMutex();
25707   h = pFile->h;
25708   pInode = pFile->pInode;
25709   assert( pInode->nShared!=0 );
25710   if( pFile->eFileLock>SHARED_LOCK ){
25711     assert( pInode->eFileLock==pFile->eFileLock );
25712     SimulateIOErrorBenign(1);
25713     SimulateIOError( h=(-1) )
25714     SimulateIOErrorBenign(0);
25715
25716 #ifndef NDEBUG
25717     /* When reducing a lock such that other processes can start
25718     ** reading the database file again, make sure that the
25719     ** transaction counter was updated if any part of the database
25720     ** file changed.  If the transaction counter is not updated,
25721     ** other connections to the same file might not realize that
25722     ** the file has changed and hence might not know to flush their
25723     ** cache.  The use of a stale cache can lead to database corruption.
25724     */
25725 #if 0
25726     assert( pFile->inNormalWrite==0
25727          || pFile->dbUpdate==0
25728          || pFile->transCntrChng==1 );
25729 #endif
25730     pFile->inNormalWrite = 0;
25731 #endif
25732
25733     /* downgrading to a shared lock on NFS involves clearing the write lock
25734     ** before establishing the readlock - to avoid a race condition we downgrade
25735     ** the lock in 2 blocks, so that part of the range will be covered by a 
25736     ** write lock until the rest is covered by a read lock:
25737     **  1:   [WWWWW]
25738     **  2:   [....W]
25739     **  3:   [RRRRW]
25740     **  4:   [RRRR.]
25741     */
25742     if( eFileLock==SHARED_LOCK ){
25743
25744 #if !defined(__APPLE__) || !SQLITE_ENABLE_LOCKING_STYLE
25745       (void)handleNFSUnlock;
25746       assert( handleNFSUnlock==0 );
25747 #endif
25748 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
25749       if( handleNFSUnlock ){
25750         int tErrno;               /* Error code from system call errors */
25751         off_t divSize = SHARED_SIZE - 1;
25752         
25753         lock.l_type = F_UNLCK;
25754         lock.l_whence = SEEK_SET;
25755         lock.l_start = SHARED_FIRST;
25756         lock.l_len = divSize;
25757         if( unixFileLock(pFile, &lock)==(-1) ){
25758           tErrno = errno;
25759           rc = SQLITE_IOERR_UNLOCK;
25760           if( IS_LOCK_ERROR(rc) ){
25761             pFile->lastErrno = tErrno;
25762           }
25763           goto end_unlock;
25764         }
25765         lock.l_type = F_RDLCK;
25766         lock.l_whence = SEEK_SET;
25767         lock.l_start = SHARED_FIRST;
25768         lock.l_len = divSize;
25769         if( unixFileLock(pFile, &lock)==(-1) ){
25770           tErrno = errno;
25771           rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_RDLOCK);
25772           if( IS_LOCK_ERROR(rc) ){
25773             pFile->lastErrno = tErrno;
25774           }
25775           goto end_unlock;
25776         }
25777         lock.l_type = F_UNLCK;
25778         lock.l_whence = SEEK_SET;
25779         lock.l_start = SHARED_FIRST+divSize;
25780         lock.l_len = SHARED_SIZE-divSize;
25781         if( unixFileLock(pFile, &lock)==(-1) ){
25782           tErrno = errno;
25783           rc = SQLITE_IOERR_UNLOCK;
25784           if( IS_LOCK_ERROR(rc) ){
25785             pFile->lastErrno = tErrno;
25786           }
25787           goto end_unlock;
25788         }
25789       }else
25790 #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
25791       {
25792         lock.l_type = F_RDLCK;
25793         lock.l_whence = SEEK_SET;
25794         lock.l_start = SHARED_FIRST;
25795         lock.l_len = SHARED_SIZE;
25796         if( unixFileLock(pFile, &lock) ){
25797           /* In theory, the call to unixFileLock() cannot fail because another
25798           ** process is holding an incompatible lock. If it does, this 
25799           ** indicates that the other process is not following the locking
25800           ** protocol. If this happens, return SQLITE_IOERR_RDLOCK. Returning
25801           ** SQLITE_BUSY would confuse the upper layer (in practice it causes 
25802           ** an assert to fail). */ 
25803           rc = SQLITE_IOERR_RDLOCK;
25804           pFile->lastErrno = errno;
25805           goto end_unlock;
25806         }
25807       }
25808     }
25809     lock.l_type = F_UNLCK;
25810     lock.l_whence = SEEK_SET;
25811     lock.l_start = PENDING_BYTE;
25812     lock.l_len = 2L;  assert( PENDING_BYTE+1==RESERVED_BYTE );
25813     if( unixFileLock(pFile, &lock)==0 ){
25814       pInode->eFileLock = SHARED_LOCK;
25815     }else{
25816       rc = SQLITE_IOERR_UNLOCK;
25817       pFile->lastErrno = errno;
25818       goto end_unlock;
25819     }
25820   }
25821   if( eFileLock==NO_LOCK ){
25822     /* Decrement the shared lock counter.  Release the lock using an
25823     ** OS call only when all threads in this same process have released
25824     ** the lock.
25825     */
25826     pInode->nShared--;
25827     if( pInode->nShared==0 ){
25828       lock.l_type = F_UNLCK;
25829       lock.l_whence = SEEK_SET;
25830       lock.l_start = lock.l_len = 0L;
25831       SimulateIOErrorBenign(1);
25832       SimulateIOError( h=(-1) )
25833       SimulateIOErrorBenign(0);
25834       if( unixFileLock(pFile, &lock)==0 ){
25835         pInode->eFileLock = NO_LOCK;
25836       }else{
25837         rc = SQLITE_IOERR_UNLOCK;
25838         pFile->lastErrno = errno;
25839         pInode->eFileLock = NO_LOCK;
25840         pFile->eFileLock = NO_LOCK;
25841       }
25842     }
25843
25844     /* Decrement the count of locks against this same file.  When the
25845     ** count reaches zero, close any other file descriptors whose close
25846     ** was deferred because of outstanding locks.
25847     */
25848     pInode->nLock--;
25849     assert( pInode->nLock>=0 );
25850     if( pInode->nLock==0 ){
25851       closePendingFds(pFile);
25852     }
25853   }
25854         
25855 end_unlock:
25856   unixLeaveMutex();
25857   if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock;
25858   return rc;
25859 }
25860
25861 /*
25862 ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
25863 ** must be either NO_LOCK or SHARED_LOCK.
25864 **
25865 ** If the locking level of the file descriptor is already at or below
25866 ** the requested locking level, this routine is a no-op.
25867 */
25868 static int unixUnlock(sqlite3_file *id, int eFileLock){
25869   return posixUnlock(id, eFileLock, 0);
25870 }
25871
25872 /*
25873 ** This function performs the parts of the "close file" operation 
25874 ** common to all locking schemes. It closes the directory and file
25875 ** handles, if they are valid, and sets all fields of the unixFile
25876 ** structure to 0.
25877 **
25878 ** It is *not* necessary to hold the mutex when this routine is called,
25879 ** even on VxWorks.  A mutex will be acquired on VxWorks by the
25880 ** vxworksReleaseFileId() routine.
25881 */
25882 static int closeUnixFile(sqlite3_file *id){
25883   unixFile *pFile = (unixFile*)id;
25884   if( pFile->h>=0 ){
25885     robust_close(pFile, pFile->h, __LINE__);
25886     pFile->h = -1;
25887   }
25888 #if OS_VXWORKS
25889   if( pFile->pId ){
25890     if( pFile->isDelete ){
25891       osUnlink(pFile->pId->zCanonicalName);
25892     }
25893     vxworksReleaseFileId(pFile->pId);
25894     pFile->pId = 0;
25895   }
25896 #endif
25897   OSTRACE(("CLOSE   %-3d\n", pFile->h));
25898   OpenCounter(-1);
25899   sqlite3_free(pFile->pUnused);
25900   memset(pFile, 0, sizeof(unixFile));
25901   return SQLITE_OK;
25902 }
25903
25904 /*
25905 ** Close a file.
25906 */
25907 static int unixClose(sqlite3_file *id){
25908   int rc = SQLITE_OK;
25909   unixFile *pFile = (unixFile *)id;
25910   unixUnlock(id, NO_LOCK);
25911   unixEnterMutex();
25912
25913   /* unixFile.pInode is always valid here. Otherwise, a different close
25914   ** routine (e.g. nolockClose()) would be called instead.
25915   */
25916   assert( pFile->pInode->nLock>0 || pFile->pInode->bProcessLock==0 );
25917   if( ALWAYS(pFile->pInode) && pFile->pInode->nLock ){
25918     /* If there are outstanding locks, do not actually close the file just
25919     ** yet because that would clear those locks.  Instead, add the file
25920     ** descriptor to pInode->pUnused list.  It will be automatically closed 
25921     ** when the last lock is cleared.
25922     */
25923     setPendingFd(pFile);
25924   }
25925   releaseInodeInfo(pFile);
25926   rc = closeUnixFile(id);
25927   unixLeaveMutex();
25928   return rc;
25929 }
25930
25931 /************** End of the posix advisory lock implementation *****************
25932 ******************************************************************************/
25933
25934 /******************************************************************************
25935 ****************************** No-op Locking **********************************
25936 **
25937 ** Of the various locking implementations available, this is by far the
25938 ** simplest:  locking is ignored.  No attempt is made to lock the database
25939 ** file for reading or writing.
25940 **
25941 ** This locking mode is appropriate for use on read-only databases
25942 ** (ex: databases that are burned into CD-ROM, for example.)  It can
25943 ** also be used if the application employs some external mechanism to
25944 ** prevent simultaneous access of the same database by two or more
25945 ** database connections.  But there is a serious risk of database
25946 ** corruption if this locking mode is used in situations where multiple
25947 ** database connections are accessing the same database file at the same
25948 ** time and one or more of those connections are writing.
25949 */
25950
25951 static int nolockCheckReservedLock(sqlite3_file *NotUsed, int *pResOut){
25952   UNUSED_PARAMETER(NotUsed);
25953   *pResOut = 0;
25954   return SQLITE_OK;
25955 }
25956 static int nolockLock(sqlite3_file *NotUsed, int NotUsed2){
25957   UNUSED_PARAMETER2(NotUsed, NotUsed2);
25958   return SQLITE_OK;
25959 }
25960 static int nolockUnlock(sqlite3_file *NotUsed, int NotUsed2){
25961   UNUSED_PARAMETER2(NotUsed, NotUsed2);
25962   return SQLITE_OK;
25963 }
25964
25965 /*
25966 ** Close the file.
25967 */
25968 static int nolockClose(sqlite3_file *id) {
25969   return closeUnixFile(id);
25970 }
25971
25972 /******************* End of the no-op lock implementation *********************
25973 ******************************************************************************/
25974
25975 /******************************************************************************
25976 ************************* Begin dot-file Locking ******************************
25977 **
25978 ** The dotfile locking implementation uses the existance of separate lock
25979 ** files in order to control access to the database.  This works on just
25980 ** about every filesystem imaginable.  But there are serious downsides:
25981 **
25982 **    (1)  There is zero concurrency.  A single reader blocks all other
25983 **         connections from reading or writing the database.
25984 **
25985 **    (2)  An application crash or power loss can leave stale lock files
25986 **         sitting around that need to be cleared manually.
25987 **
25988 ** Nevertheless, a dotlock is an appropriate locking mode for use if no
25989 ** other locking strategy is available.
25990 **
25991 ** Dotfile locking works by creating a file in the same directory as the
25992 ** database and with the same name but with a ".lock" extension added.
25993 ** The existance of a lock file implies an EXCLUSIVE lock.  All other lock
25994 ** types (SHARED, RESERVED, PENDING) are mapped into EXCLUSIVE.
25995 */
25996
25997 /*
25998 ** The file suffix added to the data base filename in order to create the
25999 ** lock file.
26000 */
26001 #define DOTLOCK_SUFFIX ".lock"
26002
26003 /*
26004 ** This routine checks if there is a RESERVED lock held on the specified
26005 ** file by this or any other process. If such a lock is held, set *pResOut
26006 ** to a non-zero value otherwise *pResOut is set to zero.  The return value
26007 ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
26008 **
26009 ** In dotfile locking, either a lock exists or it does not.  So in this
26010 ** variation of CheckReservedLock(), *pResOut is set to true if any lock
26011 ** is held on the file and false if the file is unlocked.
26012 */
26013 static int dotlockCheckReservedLock(sqlite3_file *id, int *pResOut) {
26014   int rc = SQLITE_OK;
26015   int reserved = 0;
26016   unixFile *pFile = (unixFile*)id;
26017
26018   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
26019   
26020   assert( pFile );
26021
26022   /* Check if a thread in this process holds such a lock */
26023   if( pFile->eFileLock>SHARED_LOCK ){
26024     /* Either this connection or some other connection in the same process
26025     ** holds a lock on the file.  No need to check further. */
26026     reserved = 1;
26027   }else{
26028     /* The lock is held if and only if the lockfile exists */
26029     const char *zLockFile = (const char*)pFile->lockingContext;
26030     reserved = osAccess(zLockFile, 0)==0;
26031   }
26032   OSTRACE(("TEST WR-LOCK %d %d %d (dotlock)\n", pFile->h, rc, reserved));
26033   *pResOut = reserved;
26034   return rc;
26035 }
26036
26037 /*
26038 ** Lock the file with the lock specified by parameter eFileLock - one
26039 ** of the following:
26040 **
26041 **     (1) SHARED_LOCK
26042 **     (2) RESERVED_LOCK
26043 **     (3) PENDING_LOCK
26044 **     (4) EXCLUSIVE_LOCK
26045 **
26046 ** Sometimes when requesting one lock state, additional lock states
26047 ** are inserted in between.  The locking might fail on one of the later
26048 ** transitions leaving the lock state different from what it started but
26049 ** still short of its goal.  The following chart shows the allowed
26050 ** transitions and the inserted intermediate states:
26051 **
26052 **    UNLOCKED -> SHARED
26053 **    SHARED -> RESERVED
26054 **    SHARED -> (PENDING) -> EXCLUSIVE
26055 **    RESERVED -> (PENDING) -> EXCLUSIVE
26056 **    PENDING -> EXCLUSIVE
26057 **
26058 ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
26059 ** routine to lower a locking level.
26060 **
26061 ** With dotfile locking, we really only support state (4): EXCLUSIVE.
26062 ** But we track the other locking levels internally.
26063 */
26064 static int dotlockLock(sqlite3_file *id, int eFileLock) {
26065   unixFile *pFile = (unixFile*)id;
26066   int fd;
26067   char *zLockFile = (char *)pFile->lockingContext;
26068   int rc = SQLITE_OK;
26069
26070
26071   /* If we have any lock, then the lock file already exists.  All we have
26072   ** to do is adjust our internal record of the lock level.
26073   */
26074   if( pFile->eFileLock > NO_LOCK ){
26075     pFile->eFileLock = eFileLock;
26076 #if !OS_VXWORKS
26077     /* Always update the timestamp on the old file */
26078     utimes(zLockFile, NULL);
26079 #endif
26080     return SQLITE_OK;
26081   }
26082   
26083   /* grab an exclusive lock */
26084   fd = robust_open(zLockFile,O_RDONLY|O_CREAT|O_EXCL,0600);
26085   if( fd<0 ){
26086     /* failed to open/create the file, someone else may have stolen the lock */
26087     int tErrno = errno;
26088     if( EEXIST == tErrno ){
26089       rc = SQLITE_BUSY;
26090     } else {
26091       rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
26092       if( IS_LOCK_ERROR(rc) ){
26093         pFile->lastErrno = tErrno;
26094       }
26095     }
26096     return rc;
26097   } 
26098   robust_close(pFile, fd, __LINE__);
26099   
26100   /* got it, set the type and return ok */
26101   pFile->eFileLock = eFileLock;
26102   return rc;
26103 }
26104
26105 /*
26106 ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
26107 ** must be either NO_LOCK or SHARED_LOCK.
26108 **
26109 ** If the locking level of the file descriptor is already at or below
26110 ** the requested locking level, this routine is a no-op.
26111 **
26112 ** When the locking level reaches NO_LOCK, delete the lock file.
26113 */
26114 static int dotlockUnlock(sqlite3_file *id, int eFileLock) {
26115   unixFile *pFile = (unixFile*)id;
26116   char *zLockFile = (char *)pFile->lockingContext;
26117
26118   assert( pFile );
26119   OSTRACE(("UNLOCK  %d %d was %d pid=%d (dotlock)\n", pFile->h, eFileLock,
26120            pFile->eFileLock, getpid()));
26121   assert( eFileLock<=SHARED_LOCK );
26122   
26123   /* no-op if possible */
26124   if( pFile->eFileLock==eFileLock ){
26125     return SQLITE_OK;
26126   }
26127
26128   /* To downgrade to shared, simply update our internal notion of the
26129   ** lock state.  No need to mess with the file on disk.
26130   */
26131   if( eFileLock==SHARED_LOCK ){
26132     pFile->eFileLock = SHARED_LOCK;
26133     return SQLITE_OK;
26134   }
26135   
26136   /* To fully unlock the database, delete the lock file */
26137   assert( eFileLock==NO_LOCK );
26138   if( osUnlink(zLockFile) ){
26139     int rc = 0;
26140     int tErrno = errno;
26141     if( ENOENT != tErrno ){
26142       rc = SQLITE_IOERR_UNLOCK;
26143     }
26144     if( IS_LOCK_ERROR(rc) ){
26145       pFile->lastErrno = tErrno;
26146     }
26147     return rc; 
26148   }
26149   pFile->eFileLock = NO_LOCK;
26150   return SQLITE_OK;
26151 }
26152
26153 /*
26154 ** Close a file.  Make sure the lock has been released before closing.
26155 */
26156 static int dotlockClose(sqlite3_file *id) {
26157   int rc;
26158   if( id ){
26159     unixFile *pFile = (unixFile*)id;
26160     dotlockUnlock(id, NO_LOCK);
26161     sqlite3_free(pFile->lockingContext);
26162   }
26163   rc = closeUnixFile(id);
26164   return rc;
26165 }
26166 /****************** End of the dot-file lock implementation *******************
26167 ******************************************************************************/
26168
26169 /******************************************************************************
26170 ************************** Begin flock Locking ********************************
26171 **
26172 ** Use the flock() system call to do file locking.
26173 **
26174 ** flock() locking is like dot-file locking in that the various
26175 ** fine-grain locking levels supported by SQLite are collapsed into
26176 ** a single exclusive lock.  In other words, SHARED, RESERVED, and
26177 ** PENDING locks are the same thing as an EXCLUSIVE lock.  SQLite
26178 ** still works when you do this, but concurrency is reduced since
26179 ** only a single process can be reading the database at a time.
26180 **
26181 ** Omit this section if SQLITE_ENABLE_LOCKING_STYLE is turned off or if
26182 ** compiling for VXWORKS.
26183 */
26184 #if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS
26185
26186 /*
26187 ** Retry flock() calls that fail with EINTR
26188 */
26189 #ifdef EINTR
26190 static int robust_flock(int fd, int op){
26191   int rc;
26192   do{ rc = flock(fd,op); }while( rc<0 && errno==EINTR );
26193   return rc;
26194 }
26195 #else
26196 # define robust_flock(a,b) flock(a,b)
26197 #endif
26198      
26199
26200 /*
26201 ** This routine checks if there is a RESERVED lock held on the specified
26202 ** file by this or any other process. If such a lock is held, set *pResOut
26203 ** to a non-zero value otherwise *pResOut is set to zero.  The return value
26204 ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
26205 */
26206 static int flockCheckReservedLock(sqlite3_file *id, int *pResOut){
26207   int rc = SQLITE_OK;
26208   int reserved = 0;
26209   unixFile *pFile = (unixFile*)id;
26210   
26211   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
26212   
26213   assert( pFile );
26214   
26215   /* Check if a thread in this process holds such a lock */
26216   if( pFile->eFileLock>SHARED_LOCK ){
26217     reserved = 1;
26218   }
26219   
26220   /* Otherwise see if some other process holds it. */
26221   if( !reserved ){
26222     /* attempt to get the lock */
26223     int lrc = robust_flock(pFile->h, LOCK_EX | LOCK_NB);
26224     if( !lrc ){
26225       /* got the lock, unlock it */
26226       lrc = robust_flock(pFile->h, LOCK_UN);
26227       if ( lrc ) {
26228         int tErrno = errno;
26229         /* unlock failed with an error */
26230         lrc = SQLITE_IOERR_UNLOCK; 
26231         if( IS_LOCK_ERROR(lrc) ){
26232           pFile->lastErrno = tErrno;
26233           rc = lrc;
26234         }
26235       }
26236     } else {
26237       int tErrno = errno;
26238       reserved = 1;
26239       /* someone else might have it reserved */
26240       lrc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK); 
26241       if( IS_LOCK_ERROR(lrc) ){
26242         pFile->lastErrno = tErrno;
26243         rc = lrc;
26244       }
26245     }
26246   }
26247   OSTRACE(("TEST WR-LOCK %d %d %d (flock)\n", pFile->h, rc, reserved));
26248
26249 #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
26250   if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){
26251     rc = SQLITE_OK;
26252     reserved=1;
26253   }
26254 #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
26255   *pResOut = reserved;
26256   return rc;
26257 }
26258
26259 /*
26260 ** Lock the file with the lock specified by parameter eFileLock - one
26261 ** of the following:
26262 **
26263 **     (1) SHARED_LOCK
26264 **     (2) RESERVED_LOCK
26265 **     (3) PENDING_LOCK
26266 **     (4) EXCLUSIVE_LOCK
26267 **
26268 ** Sometimes when requesting one lock state, additional lock states
26269 ** are inserted in between.  The locking might fail on one of the later
26270 ** transitions leaving the lock state different from what it started but
26271 ** still short of its goal.  The following chart shows the allowed
26272 ** transitions and the inserted intermediate states:
26273 **
26274 **    UNLOCKED -> SHARED
26275 **    SHARED -> RESERVED
26276 **    SHARED -> (PENDING) -> EXCLUSIVE
26277 **    RESERVED -> (PENDING) -> EXCLUSIVE
26278 **    PENDING -> EXCLUSIVE
26279 **
26280 ** flock() only really support EXCLUSIVE locks.  We track intermediate
26281 ** lock states in the sqlite3_file structure, but all locks SHARED or
26282 ** above are really EXCLUSIVE locks and exclude all other processes from
26283 ** access the file.
26284 **
26285 ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
26286 ** routine to lower a locking level.
26287 */
26288 static int flockLock(sqlite3_file *id, int eFileLock) {
26289   int rc = SQLITE_OK;
26290   unixFile *pFile = (unixFile*)id;
26291
26292   assert( pFile );
26293
26294   /* if we already have a lock, it is exclusive.  
26295   ** Just adjust level and punt on outta here. */
26296   if (pFile->eFileLock > NO_LOCK) {
26297     pFile->eFileLock = eFileLock;
26298     return SQLITE_OK;
26299   }
26300   
26301   /* grab an exclusive lock */
26302   
26303   if (robust_flock(pFile->h, LOCK_EX | LOCK_NB)) {
26304     int tErrno = errno;
26305     /* didn't get, must be busy */
26306     rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
26307     if( IS_LOCK_ERROR(rc) ){
26308       pFile->lastErrno = tErrno;
26309     }
26310   } else {
26311     /* got it, set the type and return ok */
26312     pFile->eFileLock = eFileLock;
26313   }
26314   OSTRACE(("LOCK    %d %s %s (flock)\n", pFile->h, azFileLock(eFileLock), 
26315            rc==SQLITE_OK ? "ok" : "failed"));
26316 #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
26317   if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){
26318     rc = SQLITE_BUSY;
26319   }
26320 #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
26321   return rc;
26322 }
26323
26324
26325 /*
26326 ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
26327 ** must be either NO_LOCK or SHARED_LOCK.
26328 **
26329 ** If the locking level of the file descriptor is already at or below
26330 ** the requested locking level, this routine is a no-op.
26331 */
26332 static int flockUnlock(sqlite3_file *id, int eFileLock) {
26333   unixFile *pFile = (unixFile*)id;
26334   
26335   assert( pFile );
26336   OSTRACE(("UNLOCK  %d %d was %d pid=%d (flock)\n", pFile->h, eFileLock,
26337            pFile->eFileLock, getpid()));
26338   assert( eFileLock<=SHARED_LOCK );
26339   
26340   /* no-op if possible */
26341   if( pFile->eFileLock==eFileLock ){
26342     return SQLITE_OK;
26343   }
26344   
26345   /* shared can just be set because we always have an exclusive */
26346   if (eFileLock==SHARED_LOCK) {
26347     pFile->eFileLock = eFileLock;
26348     return SQLITE_OK;
26349   }
26350   
26351   /* no, really, unlock. */
26352   if( robust_flock(pFile->h, LOCK_UN) ){
26353 #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
26354     return SQLITE_OK;
26355 #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
26356     return SQLITE_IOERR_UNLOCK;
26357   }else{
26358     pFile->eFileLock = NO_LOCK;
26359     return SQLITE_OK;
26360   }
26361 }
26362
26363 /*
26364 ** Close a file.
26365 */
26366 static int flockClose(sqlite3_file *id) {
26367   if( id ){
26368     flockUnlock(id, NO_LOCK);
26369   }
26370   return closeUnixFile(id);
26371 }
26372
26373 #endif /* SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORK */
26374
26375 /******************* End of the flock lock implementation *********************
26376 ******************************************************************************/
26377
26378 /******************************************************************************
26379 ************************ Begin Named Semaphore Locking ************************
26380 **
26381 ** Named semaphore locking is only supported on VxWorks.
26382 **
26383 ** Semaphore locking is like dot-lock and flock in that it really only
26384 ** supports EXCLUSIVE locking.  Only a single process can read or write
26385 ** the database file at a time.  This reduces potential concurrency, but
26386 ** makes the lock implementation much easier.
26387 */
26388 #if OS_VXWORKS
26389
26390 /*
26391 ** This routine checks if there is a RESERVED lock held on the specified
26392 ** file by this or any other process. If such a lock is held, set *pResOut
26393 ** to a non-zero value otherwise *pResOut is set to zero.  The return value
26394 ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
26395 */
26396 static int semCheckReservedLock(sqlite3_file *id, int *pResOut) {
26397   int rc = SQLITE_OK;
26398   int reserved = 0;
26399   unixFile *pFile = (unixFile*)id;
26400
26401   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
26402   
26403   assert( pFile );
26404
26405   /* Check if a thread in this process holds such a lock */
26406   if( pFile->eFileLock>SHARED_LOCK ){
26407     reserved = 1;
26408   }
26409   
26410   /* Otherwise see if some other process holds it. */
26411   if( !reserved ){
26412     sem_t *pSem = pFile->pInode->pSem;
26413     struct stat statBuf;
26414
26415     if( sem_trywait(pSem)==-1 ){
26416       int tErrno = errno;
26417       if( EAGAIN != tErrno ){
26418         rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_CHECKRESERVEDLOCK);
26419         pFile->lastErrno = tErrno;
26420       } else {
26421         /* someone else has the lock when we are in NO_LOCK */
26422         reserved = (pFile->eFileLock < SHARED_LOCK);
26423       }
26424     }else{
26425       /* we could have it if we want it */
26426       sem_post(pSem);
26427     }
26428   }
26429   OSTRACE(("TEST WR-LOCK %d %d %d (sem)\n", pFile->h, rc, reserved));
26430
26431   *pResOut = reserved;
26432   return rc;
26433 }
26434
26435 /*
26436 ** Lock the file with the lock specified by parameter eFileLock - one
26437 ** of the following:
26438 **
26439 **     (1) SHARED_LOCK
26440 **     (2) RESERVED_LOCK
26441 **     (3) PENDING_LOCK
26442 **     (4) EXCLUSIVE_LOCK
26443 **
26444 ** Sometimes when requesting one lock state, additional lock states
26445 ** are inserted in between.  The locking might fail on one of the later
26446 ** transitions leaving the lock state different from what it started but
26447 ** still short of its goal.  The following chart shows the allowed
26448 ** transitions and the inserted intermediate states:
26449 **
26450 **    UNLOCKED -> SHARED
26451 **    SHARED -> RESERVED
26452 **    SHARED -> (PENDING) -> EXCLUSIVE
26453 **    RESERVED -> (PENDING) -> EXCLUSIVE
26454 **    PENDING -> EXCLUSIVE
26455 **
26456 ** Semaphore locks only really support EXCLUSIVE locks.  We track intermediate
26457 ** lock states in the sqlite3_file structure, but all locks SHARED or
26458 ** above are really EXCLUSIVE locks and exclude all other processes from
26459 ** access the file.
26460 **
26461 ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
26462 ** routine to lower a locking level.
26463 */
26464 static int semLock(sqlite3_file *id, int eFileLock) {
26465   unixFile *pFile = (unixFile*)id;
26466   int fd;
26467   sem_t *pSem = pFile->pInode->pSem;
26468   int rc = SQLITE_OK;
26469
26470   /* if we already have a lock, it is exclusive.  
26471   ** Just adjust level and punt on outta here. */
26472   if (pFile->eFileLock > NO_LOCK) {
26473     pFile->eFileLock = eFileLock;
26474     rc = SQLITE_OK;
26475     goto sem_end_lock;
26476   }
26477   
26478   /* lock semaphore now but bail out when already locked. */
26479   if( sem_trywait(pSem)==-1 ){
26480     rc = SQLITE_BUSY;
26481     goto sem_end_lock;
26482   }
26483
26484   /* got it, set the type and return ok */
26485   pFile->eFileLock = eFileLock;
26486
26487  sem_end_lock:
26488   return rc;
26489 }
26490
26491 /*
26492 ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
26493 ** must be either NO_LOCK or SHARED_LOCK.
26494 **
26495 ** If the locking level of the file descriptor is already at or below
26496 ** the requested locking level, this routine is a no-op.
26497 */
26498 static int semUnlock(sqlite3_file *id, int eFileLock) {
26499   unixFile *pFile = (unixFile*)id;
26500   sem_t *pSem = pFile->pInode->pSem;
26501
26502   assert( pFile );
26503   assert( pSem );
26504   OSTRACE(("UNLOCK  %d %d was %d pid=%d (sem)\n", pFile->h, eFileLock,
26505            pFile->eFileLock, getpid()));
26506   assert( eFileLock<=SHARED_LOCK );
26507   
26508   /* no-op if possible */
26509   if( pFile->eFileLock==eFileLock ){
26510     return SQLITE_OK;
26511   }
26512   
26513   /* shared can just be set because we always have an exclusive */
26514   if (eFileLock==SHARED_LOCK) {
26515     pFile->eFileLock = eFileLock;
26516     return SQLITE_OK;
26517   }
26518   
26519   /* no, really unlock. */
26520   if ( sem_post(pSem)==-1 ) {
26521     int rc, tErrno = errno;
26522     rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK);
26523     if( IS_LOCK_ERROR(rc) ){
26524       pFile->lastErrno = tErrno;
26525     }
26526     return rc; 
26527   }
26528   pFile->eFileLock = NO_LOCK;
26529   return SQLITE_OK;
26530 }
26531
26532 /*
26533  ** Close a file.
26534  */
26535 static int semClose(sqlite3_file *id) {
26536   if( id ){
26537     unixFile *pFile = (unixFile*)id;
26538     semUnlock(id, NO_LOCK);
26539     assert( pFile );
26540     unixEnterMutex();
26541     releaseInodeInfo(pFile);
26542     unixLeaveMutex();
26543     closeUnixFile(id);
26544   }
26545   return SQLITE_OK;
26546 }
26547
26548 #endif /* OS_VXWORKS */
26549 /*
26550 ** Named semaphore locking is only available on VxWorks.
26551 **
26552 *************** End of the named semaphore lock implementation ****************
26553 ******************************************************************************/
26554
26555
26556 /******************************************************************************
26557 *************************** Begin AFP Locking *********************************
26558 **
26559 ** AFP is the Apple Filing Protocol.  AFP is a network filesystem found
26560 ** on Apple Macintosh computers - both OS9 and OSX.
26561 **
26562 ** Third-party implementations of AFP are available.  But this code here
26563 ** only works on OSX.
26564 */
26565
26566 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
26567 /*
26568 ** The afpLockingContext structure contains all afp lock specific state
26569 */
26570 typedef struct afpLockingContext afpLockingContext;
26571 struct afpLockingContext {
26572   int reserved;
26573   const char *dbPath;             /* Name of the open file */
26574 };
26575
26576 struct ByteRangeLockPB2
26577 {
26578   unsigned long long offset;        /* offset to first byte to lock */
26579   unsigned long long length;        /* nbr of bytes to lock */
26580   unsigned long long retRangeStart; /* nbr of 1st byte locked if successful */
26581   unsigned char unLockFlag;         /* 1 = unlock, 0 = lock */
26582   unsigned char startEndFlag;       /* 1=rel to end of fork, 0=rel to start */
26583   int fd;                           /* file desc to assoc this lock with */
26584 };
26585
26586 #define afpfsByteRangeLock2FSCTL        _IOWR('z', 23, struct ByteRangeLockPB2)
26587
26588 /*
26589 ** This is a utility for setting or clearing a bit-range lock on an
26590 ** AFP filesystem.
26591 ** 
26592 ** Return SQLITE_OK on success, SQLITE_BUSY on failure.
26593 */
26594 static int afpSetLock(
26595   const char *path,              /* Name of the file to be locked or unlocked */
26596   unixFile *pFile,               /* Open file descriptor on path */
26597   unsigned long long offset,     /* First byte to be locked */
26598   unsigned long long length,     /* Number of bytes to lock */
26599   int setLockFlag                /* True to set lock.  False to clear lock */
26600 ){
26601   struct ByteRangeLockPB2 pb;
26602   int err;
26603   
26604   pb.unLockFlag = setLockFlag ? 0 : 1;
26605   pb.startEndFlag = 0;
26606   pb.offset = offset;
26607   pb.length = length; 
26608   pb.fd = pFile->h;
26609   
26610   OSTRACE(("AFPSETLOCK [%s] for %d%s in range %llx:%llx\n", 
26611     (setLockFlag?"ON":"OFF"), pFile->h, (pb.fd==-1?"[testval-1]":""),
26612     offset, length));
26613   err = fsctl(path, afpfsByteRangeLock2FSCTL, &pb, 0);
26614   if ( err==-1 ) {
26615     int rc;
26616     int tErrno = errno;
26617     OSTRACE(("AFPSETLOCK failed to fsctl() '%s' %d %s\n",
26618              path, tErrno, strerror(tErrno)));
26619 #ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS
26620     rc = SQLITE_BUSY;
26621 #else
26622     rc = sqliteErrorFromPosixError(tErrno,
26623                     setLockFlag ? SQLITE_IOERR_LOCK : SQLITE_IOERR_UNLOCK);
26624 #endif /* SQLITE_IGNORE_AFP_LOCK_ERRORS */
26625     if( IS_LOCK_ERROR(rc) ){
26626       pFile->lastErrno = tErrno;
26627     }
26628     return rc;
26629   } else {
26630     return SQLITE_OK;
26631   }
26632 }
26633
26634 /*
26635 ** This routine checks if there is a RESERVED lock held on the specified
26636 ** file by this or any other process. If such a lock is held, set *pResOut
26637 ** to a non-zero value otherwise *pResOut is set to zero.  The return value
26638 ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
26639 */
26640 static int afpCheckReservedLock(sqlite3_file *id, int *pResOut){
26641   int rc = SQLITE_OK;
26642   int reserved = 0;
26643   unixFile *pFile = (unixFile*)id;
26644   
26645   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
26646   
26647   assert( pFile );
26648   afpLockingContext *context = (afpLockingContext *) pFile->lockingContext;
26649   if( context->reserved ){
26650     *pResOut = 1;
26651     return SQLITE_OK;
26652   }
26653   unixEnterMutex(); /* Because pFile->pInode is shared across threads */
26654   
26655   /* Check if a thread in this process holds such a lock */
26656   if( pFile->pInode->eFileLock>SHARED_LOCK ){
26657     reserved = 1;
26658   }
26659   
26660   /* Otherwise see if some other process holds it.
26661    */
26662   if( !reserved ){
26663     /* lock the RESERVED byte */
26664     int lrc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1);  
26665     if( SQLITE_OK==lrc ){
26666       /* if we succeeded in taking the reserved lock, unlock it to restore
26667       ** the original state */
26668       lrc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0);
26669     } else {
26670       /* if we failed to get the lock then someone else must have it */
26671       reserved = 1;
26672     }
26673     if( IS_LOCK_ERROR(lrc) ){
26674       rc=lrc;
26675     }
26676   }
26677   
26678   unixLeaveMutex();
26679   OSTRACE(("TEST WR-LOCK %d %d %d (afp)\n", pFile->h, rc, reserved));
26680   
26681   *pResOut = reserved;
26682   return rc;
26683 }
26684
26685 /*
26686 ** Lock the file with the lock specified by parameter eFileLock - one
26687 ** of the following:
26688 **
26689 **     (1) SHARED_LOCK
26690 **     (2) RESERVED_LOCK
26691 **     (3) PENDING_LOCK
26692 **     (4) EXCLUSIVE_LOCK
26693 **
26694 ** Sometimes when requesting one lock state, additional lock states
26695 ** are inserted in between.  The locking might fail on one of the later
26696 ** transitions leaving the lock state different from what it started but
26697 ** still short of its goal.  The following chart shows the allowed
26698 ** transitions and the inserted intermediate states:
26699 **
26700 **    UNLOCKED -> SHARED
26701 **    SHARED -> RESERVED
26702 **    SHARED -> (PENDING) -> EXCLUSIVE
26703 **    RESERVED -> (PENDING) -> EXCLUSIVE
26704 **    PENDING -> EXCLUSIVE
26705 **
26706 ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
26707 ** routine to lower a locking level.
26708 */
26709 static int afpLock(sqlite3_file *id, int eFileLock){
26710   int rc = SQLITE_OK;
26711   unixFile *pFile = (unixFile*)id;
26712   unixInodeInfo *pInode = pFile->pInode;
26713   afpLockingContext *context = (afpLockingContext *) pFile->lockingContext;
26714   
26715   assert( pFile );
26716   OSTRACE(("LOCK    %d %s was %s(%s,%d) pid=%d (afp)\n", pFile->h,
26717            azFileLock(eFileLock), azFileLock(pFile->eFileLock),
26718            azFileLock(pInode->eFileLock), pInode->nShared , getpid()));
26719
26720   /* If there is already a lock of this type or more restrictive on the
26721   ** unixFile, do nothing. Don't use the afp_end_lock: exit path, as
26722   ** unixEnterMutex() hasn't been called yet.
26723   */
26724   if( pFile->eFileLock>=eFileLock ){
26725     OSTRACE(("LOCK    %d %s ok (already held) (afp)\n", pFile->h,
26726            azFileLock(eFileLock)));
26727     return SQLITE_OK;
26728   }
26729
26730   /* Make sure the locking sequence is correct
26731   **  (1) We never move from unlocked to anything higher than shared lock.
26732   **  (2) SQLite never explicitly requests a pendig lock.
26733   **  (3) A shared lock is always held when a reserve lock is requested.
26734   */
26735   assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK );
26736   assert( eFileLock!=PENDING_LOCK );
26737   assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK );
26738   
26739   /* This mutex is needed because pFile->pInode is shared across threads
26740   */
26741   unixEnterMutex();
26742   pInode = pFile->pInode;
26743
26744   /* If some thread using this PID has a lock via a different unixFile*
26745   ** handle that precludes the requested lock, return BUSY.
26746   */
26747   if( (pFile->eFileLock!=pInode->eFileLock && 
26748        (pInode->eFileLock>=PENDING_LOCK || eFileLock>SHARED_LOCK))
26749      ){
26750     rc = SQLITE_BUSY;
26751     goto afp_end_lock;
26752   }
26753   
26754   /* If a SHARED lock is requested, and some thread using this PID already
26755   ** has a SHARED or RESERVED lock, then increment reference counts and
26756   ** return SQLITE_OK.
26757   */
26758   if( eFileLock==SHARED_LOCK && 
26759      (pInode->eFileLock==SHARED_LOCK || pInode->eFileLock==RESERVED_LOCK) ){
26760     assert( eFileLock==SHARED_LOCK );
26761     assert( pFile->eFileLock==0 );
26762     assert( pInode->nShared>0 );
26763     pFile->eFileLock = SHARED_LOCK;
26764     pInode->nShared++;
26765     pInode->nLock++;
26766     goto afp_end_lock;
26767   }
26768     
26769   /* A PENDING lock is needed before acquiring a SHARED lock and before
26770   ** acquiring an EXCLUSIVE lock.  For the SHARED lock, the PENDING will
26771   ** be released.
26772   */
26773   if( eFileLock==SHARED_LOCK 
26774       || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock<PENDING_LOCK)
26775   ){
26776     int failed;
26777     failed = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 1);
26778     if (failed) {
26779       rc = failed;
26780       goto afp_end_lock;
26781     }
26782   }
26783   
26784   /* If control gets to this point, then actually go ahead and make
26785   ** operating system calls for the specified lock.
26786   */
26787   if( eFileLock==SHARED_LOCK ){
26788     int lrc1, lrc2, lrc1Errno;
26789     long lk, mask;
26790     
26791     assert( pInode->nShared==0 );
26792     assert( pInode->eFileLock==0 );
26793         
26794     mask = (sizeof(long)==8) ? LARGEST_INT64 : 0x7fffffff;
26795     /* Now get the read-lock SHARED_LOCK */
26796     /* note that the quality of the randomness doesn't matter that much */
26797     lk = random(); 
26798     pInode->sharedByte = (lk & mask)%(SHARED_SIZE - 1);
26799     lrc1 = afpSetLock(context->dbPath, pFile, 
26800           SHARED_FIRST+pInode->sharedByte, 1, 1);
26801     if( IS_LOCK_ERROR(lrc1) ){
26802       lrc1Errno = pFile->lastErrno;
26803     }
26804     /* Drop the temporary PENDING lock */
26805     lrc2 = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0);
26806     
26807     if( IS_LOCK_ERROR(lrc1) ) {
26808       pFile->lastErrno = lrc1Errno;
26809       rc = lrc1;
26810       goto afp_end_lock;
26811     } else if( IS_LOCK_ERROR(lrc2) ){
26812       rc = lrc2;
26813       goto afp_end_lock;
26814     } else if( lrc1 != SQLITE_OK ) {
26815       rc = lrc1;
26816     } else {
26817       pFile->eFileLock = SHARED_LOCK;
26818       pInode->nLock++;
26819       pInode->nShared = 1;
26820     }
26821   }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){
26822     /* We are trying for an exclusive lock but another thread in this
26823      ** same process is still holding a shared lock. */
26824     rc = SQLITE_BUSY;
26825   }else{
26826     /* The request was for a RESERVED or EXCLUSIVE lock.  It is
26827     ** assumed that there is a SHARED or greater lock on the file
26828     ** already.
26829     */
26830     int failed = 0;
26831     assert( 0!=pFile->eFileLock );
26832     if (eFileLock >= RESERVED_LOCK && pFile->eFileLock < RESERVED_LOCK) {
26833         /* Acquire a RESERVED lock */
26834         failed = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1);
26835       if( !failed ){
26836         context->reserved = 1;
26837       }
26838     }
26839     if (!failed && eFileLock == EXCLUSIVE_LOCK) {
26840       /* Acquire an EXCLUSIVE lock */
26841         
26842       /* Remove the shared lock before trying the range.  we'll need to 
26843       ** reestablish the shared lock if we can't get the  afpUnlock
26844       */
26845       if( !(failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST +
26846                          pInode->sharedByte, 1, 0)) ){
26847         int failed2 = SQLITE_OK;
26848         /* now attemmpt to get the exclusive lock range */
26849         failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST, 
26850                                SHARED_SIZE, 1);
26851         if( failed && (failed2 = afpSetLock(context->dbPath, pFile, 
26852                        SHARED_FIRST + pInode->sharedByte, 1, 1)) ){
26853           /* Can't reestablish the shared lock.  Sqlite can't deal, this is
26854           ** a critical I/O error
26855           */
26856           rc = ((failed & SQLITE_IOERR) == SQLITE_IOERR) ? failed2 : 
26857                SQLITE_IOERR_LOCK;
26858           goto afp_end_lock;
26859         } 
26860       }else{
26861         rc = failed; 
26862       }
26863     }
26864     if( failed ){
26865       rc = failed;
26866     }
26867   }
26868   
26869   if( rc==SQLITE_OK ){
26870     pFile->eFileLock = eFileLock;
26871     pInode->eFileLock = eFileLock;
26872   }else if( eFileLock==EXCLUSIVE_LOCK ){
26873     pFile->eFileLock = PENDING_LOCK;
26874     pInode->eFileLock = PENDING_LOCK;
26875   }
26876   
26877 afp_end_lock:
26878   unixLeaveMutex();
26879   OSTRACE(("LOCK    %d %s %s (afp)\n", pFile->h, azFileLock(eFileLock), 
26880          rc==SQLITE_OK ? "ok" : "failed"));
26881   return rc;
26882 }
26883
26884 /*
26885 ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
26886 ** must be either NO_LOCK or SHARED_LOCK.
26887 **
26888 ** If the locking level of the file descriptor is already at or below
26889 ** the requested locking level, this routine is a no-op.
26890 */
26891 static int afpUnlock(sqlite3_file *id, int eFileLock) {
26892   int rc = SQLITE_OK;
26893   unixFile *pFile = (unixFile*)id;
26894   unixInodeInfo *pInode;
26895   afpLockingContext *context = (afpLockingContext *) pFile->lockingContext;
26896   int skipShared = 0;
26897 #ifdef SQLITE_TEST
26898   int h = pFile->h;
26899 #endif
26900
26901   assert( pFile );
26902   OSTRACE(("UNLOCK  %d %d was %d(%d,%d) pid=%d (afp)\n", pFile->h, eFileLock,
26903            pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared,
26904            getpid()));
26905
26906   assert( eFileLock<=SHARED_LOCK );
26907   if( pFile->eFileLock<=eFileLock ){
26908     return SQLITE_OK;
26909   }
26910   unixEnterMutex();
26911   pInode = pFile->pInode;
26912   assert( pInode->nShared!=0 );
26913   if( pFile->eFileLock>SHARED_LOCK ){
26914     assert( pInode->eFileLock==pFile->eFileLock );
26915     SimulateIOErrorBenign(1);
26916     SimulateIOError( h=(-1) )
26917     SimulateIOErrorBenign(0);
26918     
26919 #ifndef NDEBUG
26920     /* When reducing a lock such that other processes can start
26921     ** reading the database file again, make sure that the
26922     ** transaction counter was updated if any part of the database
26923     ** file changed.  If the transaction counter is not updated,
26924     ** other connections to the same file might not realize that
26925     ** the file has changed and hence might not know to flush their
26926     ** cache.  The use of a stale cache can lead to database corruption.
26927     */
26928     assert( pFile->inNormalWrite==0
26929            || pFile->dbUpdate==0
26930            || pFile->transCntrChng==1 );
26931     pFile->inNormalWrite = 0;
26932 #endif
26933     
26934     if( pFile->eFileLock==EXCLUSIVE_LOCK ){
26935       rc = afpSetLock(context->dbPath, pFile, SHARED_FIRST, SHARED_SIZE, 0);
26936       if( rc==SQLITE_OK && (eFileLock==SHARED_LOCK || pInode->nShared>1) ){
26937         /* only re-establish the shared lock if necessary */
26938         int sharedLockByte = SHARED_FIRST+pInode->sharedByte;
26939         rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 1);
26940       } else {
26941         skipShared = 1;
26942       }
26943     }
26944     if( rc==SQLITE_OK && pFile->eFileLock>=PENDING_LOCK ){
26945       rc = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0);
26946     } 
26947     if( rc==SQLITE_OK && pFile->eFileLock>=RESERVED_LOCK && context->reserved ){
26948       rc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0);
26949       if( !rc ){ 
26950         context->reserved = 0; 
26951       }
26952     }
26953     if( rc==SQLITE_OK && (eFileLock==SHARED_LOCK || pInode->nShared>1)){
26954       pInode->eFileLock = SHARED_LOCK;
26955     }
26956   }
26957   if( rc==SQLITE_OK && eFileLock==NO_LOCK ){
26958
26959     /* Decrement the shared lock counter.  Release the lock using an
26960     ** OS call only when all threads in this same process have released
26961     ** the lock.
26962     */
26963     unsigned long long sharedLockByte = SHARED_FIRST+pInode->sharedByte;
26964     pInode->nShared--;
26965     if( pInode->nShared==0 ){
26966       SimulateIOErrorBenign(1);
26967       SimulateIOError( h=(-1) )
26968       SimulateIOErrorBenign(0);
26969       if( !skipShared ){
26970         rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 0);
26971       }
26972       if( !rc ){
26973         pInode->eFileLock = NO_LOCK;
26974         pFile->eFileLock = NO_LOCK;
26975       }
26976     }
26977     if( rc==SQLITE_OK ){
26978       pInode->nLock--;
26979       assert( pInode->nLock>=0 );
26980       if( pInode->nLock==0 ){
26981         closePendingFds(pFile);
26982       }
26983     }
26984   }
26985   
26986   unixLeaveMutex();
26987   if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock;
26988   return rc;
26989 }
26990
26991 /*
26992 ** Close a file & cleanup AFP specific locking context 
26993 */
26994 static int afpClose(sqlite3_file *id) {
26995   int rc = SQLITE_OK;
26996   if( id ){
26997     unixFile *pFile = (unixFile*)id;
26998     afpUnlock(id, NO_LOCK);
26999     unixEnterMutex();
27000     if( pFile->pInode && pFile->pInode->nLock ){
27001       /* If there are outstanding locks, do not actually close the file just
27002       ** yet because that would clear those locks.  Instead, add the file
27003       ** descriptor to pInode->aPending.  It will be automatically closed when
27004       ** the last lock is cleared.
27005       */
27006       setPendingFd(pFile);
27007     }
27008     releaseInodeInfo(pFile);
27009     sqlite3_free(pFile->lockingContext);
27010     rc = closeUnixFile(id);
27011     unixLeaveMutex();
27012   }
27013   return rc;
27014 }
27015
27016 #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
27017 /*
27018 ** The code above is the AFP lock implementation.  The code is specific
27019 ** to MacOSX and does not work on other unix platforms.  No alternative
27020 ** is available.  If you don't compile for a mac, then the "unix-afp"
27021 ** VFS is not available.
27022 **
27023 ********************* End of the AFP lock implementation **********************
27024 ******************************************************************************/
27025
27026 /******************************************************************************
27027 *************************** Begin NFS Locking ********************************/
27028
27029 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
27030 /*
27031  ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
27032  ** must be either NO_LOCK or SHARED_LOCK.
27033  **
27034  ** If the locking level of the file descriptor is already at or below
27035  ** the requested locking level, this routine is a no-op.
27036  */
27037 static int nfsUnlock(sqlite3_file *id, int eFileLock){
27038   return posixUnlock(id, eFileLock, 1);
27039 }
27040
27041 #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
27042 /*
27043 ** The code above is the NFS lock implementation.  The code is specific
27044 ** to MacOSX and does not work on other unix platforms.  No alternative
27045 ** is available.  
27046 **
27047 ********************* End of the NFS lock implementation **********************
27048 ******************************************************************************/
27049
27050 /******************************************************************************
27051 **************** Non-locking sqlite3_file methods *****************************
27052 **
27053 ** The next division contains implementations for all methods of the 
27054 ** sqlite3_file object other than the locking methods.  The locking
27055 ** methods were defined in divisions above (one locking method per
27056 ** division).  Those methods that are common to all locking modes
27057 ** are gather together into this division.
27058 */
27059
27060 /*
27061 ** Seek to the offset passed as the second argument, then read cnt 
27062 ** bytes into pBuf. Return the number of bytes actually read.
27063 **
27064 ** NB:  If you define USE_PREAD or USE_PREAD64, then it might also
27065 ** be necessary to define _XOPEN_SOURCE to be 500.  This varies from
27066 ** one system to another.  Since SQLite does not define USE_PREAD
27067 ** any any form by default, we will not attempt to define _XOPEN_SOURCE.
27068 ** See tickets #2741 and #2681.
27069 **
27070 ** To avoid stomping the errno value on a failed read the lastErrno value
27071 ** is set before returning.
27072 */
27073 static int seekAndRead(unixFile *id, sqlite3_int64 offset, void *pBuf, int cnt){
27074   int got;
27075 #if (!defined(USE_PREAD) && !defined(USE_PREAD64))
27076   i64 newOffset;
27077 #endif
27078   TIMER_START;
27079 #if defined(USE_PREAD)
27080   do{ got = osPread(id->h, pBuf, cnt, offset); }while( got<0 && errno==EINTR );
27081   SimulateIOError( got = -1 );
27082 #elif defined(USE_PREAD64)
27083   do{ got = osPread64(id->h, pBuf, cnt, offset); }while( got<0 && errno==EINTR);
27084   SimulateIOError( got = -1 );
27085 #else
27086   newOffset = lseek(id->h, offset, SEEK_SET);
27087   SimulateIOError( newOffset-- );
27088   if( newOffset!=offset ){
27089     if( newOffset == -1 ){
27090       ((unixFile*)id)->lastErrno = errno;
27091     }else{
27092       ((unixFile*)id)->lastErrno = 0;                   
27093     }
27094     return -1;
27095   }
27096   do{ got = osRead(id->h, pBuf, cnt); }while( got<0 && errno==EINTR );
27097 #endif
27098   TIMER_END;
27099   if( got<0 ){
27100     ((unixFile*)id)->lastErrno = errno;
27101   }
27102   OSTRACE(("READ    %-3d %5d %7lld %llu\n", id->h, got, offset, TIMER_ELAPSED));
27103   return got;
27104 }
27105
27106 /*
27107 ** Read data from a file into a buffer.  Return SQLITE_OK if all
27108 ** bytes were read successfully and SQLITE_IOERR if anything goes
27109 ** wrong.
27110 */
27111 static int unixRead(
27112   sqlite3_file *id, 
27113   void *pBuf, 
27114   int amt,
27115   sqlite3_int64 offset
27116 ){
27117   unixFile *pFile = (unixFile *)id;
27118   int got;
27119   assert( id );
27120
27121   /* If this is a database file (not a journal, master-journal or temp
27122   ** file), the bytes in the locking range should never be read or written. */
27123 #if 0
27124   assert( pFile->pUnused==0
27125        || offset>=PENDING_BYTE+512
27126        || offset+amt<=PENDING_BYTE 
27127   );
27128 #endif
27129
27130   got = seekAndRead(pFile, offset, pBuf, amt);
27131   if( got==amt ){
27132     return SQLITE_OK;
27133   }else if( got<0 ){
27134     /* lastErrno set by seekAndRead */
27135     return SQLITE_IOERR_READ;
27136   }else{
27137     pFile->lastErrno = 0; /* not a system error */
27138     /* Unread parts of the buffer must be zero-filled */
27139     memset(&((char*)pBuf)[got], 0, amt-got);
27140     return SQLITE_IOERR_SHORT_READ;
27141   }
27142 }
27143
27144 /*
27145 ** Seek to the offset in id->offset then read cnt bytes into pBuf.
27146 ** Return the number of bytes actually read.  Update the offset.
27147 **
27148 ** To avoid stomping the errno value on a failed write the lastErrno value
27149 ** is set before returning.
27150 */
27151 static int seekAndWrite(unixFile *id, i64 offset, const void *pBuf, int cnt){
27152   int got;
27153 #if (!defined(USE_PREAD) && !defined(USE_PREAD64))
27154   i64 newOffset;
27155 #endif
27156   TIMER_START;
27157 #if defined(USE_PREAD)
27158   do{ got = osPwrite(id->h, pBuf, cnt, offset); }while( got<0 && errno==EINTR );
27159 #elif defined(USE_PREAD64)
27160   do{ got = osPwrite64(id->h, pBuf, cnt, offset);}while( got<0 && errno==EINTR);
27161 #else
27162   newOffset = lseek(id->h, offset, SEEK_SET);
27163   SimulateIOError( newOffset-- );
27164   if( newOffset!=offset ){
27165     if( newOffset == -1 ){
27166       ((unixFile*)id)->lastErrno = errno;
27167     }else{
27168       ((unixFile*)id)->lastErrno = 0;                   
27169     }
27170     return -1;
27171   }
27172   do{ got = osWrite(id->h, pBuf, cnt); }while( got<0 && errno==EINTR );
27173 #endif
27174   TIMER_END;
27175   if( got<0 ){
27176     ((unixFile*)id)->lastErrno = errno;
27177   }
27178
27179   OSTRACE(("WRITE   %-3d %5d %7lld %llu\n", id->h, got, offset, TIMER_ELAPSED));
27180   return got;
27181 }
27182
27183
27184 /*
27185 ** Write data from a buffer into a file.  Return SQLITE_OK on success
27186 ** or some other error code on failure.
27187 */
27188 static int unixWrite(
27189   sqlite3_file *id, 
27190   const void *pBuf, 
27191   int amt,
27192   sqlite3_int64 offset 
27193 ){
27194   unixFile *pFile = (unixFile*)id;
27195   int wrote = 0;
27196   assert( id );
27197   assert( amt>0 );
27198
27199   /* If this is a database file (not a journal, master-journal or temp
27200   ** file), the bytes in the locking range should never be read or written. */
27201 #if 0
27202   assert( pFile->pUnused==0
27203        || offset>=PENDING_BYTE+512
27204        || offset+amt<=PENDING_BYTE 
27205   );
27206 #endif
27207
27208 #ifndef NDEBUG
27209   /* If we are doing a normal write to a database file (as opposed to
27210   ** doing a hot-journal rollback or a write to some file other than a
27211   ** normal database file) then record the fact that the database
27212   ** has changed.  If the transaction counter is modified, record that
27213   ** fact too.
27214   */
27215   if( pFile->inNormalWrite ){
27216     pFile->dbUpdate = 1;  /* The database has been modified */
27217     if( offset<=24 && offset+amt>=27 ){
27218       int rc;
27219       char oldCntr[4];
27220       SimulateIOErrorBenign(1);
27221       rc = seekAndRead(pFile, 24, oldCntr, 4);
27222       SimulateIOErrorBenign(0);
27223       if( rc!=4 || memcmp(oldCntr, &((char*)pBuf)[24-offset], 4)!=0 ){
27224         pFile->transCntrChng = 1;  /* The transaction counter has changed */
27225       }
27226     }
27227   }
27228 #endif
27229
27230   while( amt>0 && (wrote = seekAndWrite(pFile, offset, pBuf, amt))>0 ){
27231     amt -= wrote;
27232     offset += wrote;
27233     pBuf = &((char*)pBuf)[wrote];
27234   }
27235   SimulateIOError(( wrote=(-1), amt=1 ));
27236   SimulateDiskfullError(( wrote=0, amt=1 ));
27237
27238   if( amt>0 ){
27239     if( wrote<0 ){
27240       /* lastErrno set by seekAndWrite */
27241       return SQLITE_IOERR_WRITE;
27242     }else{
27243       pFile->lastErrno = 0; /* not a system error */
27244       return SQLITE_FULL;
27245     }
27246   }
27247
27248   return SQLITE_OK;
27249 }
27250
27251 #ifdef SQLITE_TEST
27252 /*
27253 ** Count the number of fullsyncs and normal syncs.  This is used to test
27254 ** that syncs and fullsyncs are occurring at the right times.
27255 */
27256 SQLITE_API int sqlite3_sync_count = 0;
27257 SQLITE_API int sqlite3_fullsync_count = 0;
27258 #endif
27259
27260 /*
27261 ** We do not trust systems to provide a working fdatasync().  Some do.
27262 ** Others do no.  To be safe, we will stick with the (slower) fsync().
27263 ** If you know that your system does support fdatasync() correctly,
27264 ** then simply compile with -Dfdatasync=fdatasync
27265 */
27266 #if !defined(fdatasync) && !defined(__linux__)
27267 # define fdatasync fsync
27268 #endif
27269
27270 /*
27271 ** Define HAVE_FULLFSYNC to 0 or 1 depending on whether or not
27272 ** the F_FULLFSYNC macro is defined.  F_FULLFSYNC is currently
27273 ** only available on Mac OS X.  But that could change.
27274 */
27275 #ifdef F_FULLFSYNC
27276 # define HAVE_FULLFSYNC 1
27277 #else
27278 # define HAVE_FULLFSYNC 0
27279 #endif
27280
27281
27282 /*
27283 ** The fsync() system call does not work as advertised on many
27284 ** unix systems.  The following procedure is an attempt to make
27285 ** it work better.
27286 **
27287 ** The SQLITE_NO_SYNC macro disables all fsync()s.  This is useful
27288 ** for testing when we want to run through the test suite quickly.
27289 ** You are strongly advised *not* to deploy with SQLITE_NO_SYNC
27290 ** enabled, however, since with SQLITE_NO_SYNC enabled, an OS crash
27291 ** or power failure will likely corrupt the database file.
27292 **
27293 ** SQLite sets the dataOnly flag if the size of the file is unchanged.
27294 ** The idea behind dataOnly is that it should only write the file content
27295 ** to disk, not the inode.  We only set dataOnly if the file size is 
27296 ** unchanged since the file size is part of the inode.  However, 
27297 ** Ted Ts'o tells us that fdatasync() will also write the inode if the
27298 ** file size has changed.  The only real difference between fdatasync()
27299 ** and fsync(), Ted tells us, is that fdatasync() will not flush the
27300 ** inode if the mtime or owner or other inode attributes have changed.
27301 ** We only care about the file size, not the other file attributes, so
27302 ** as far as SQLite is concerned, an fdatasync() is always adequate.
27303 ** So, we always use fdatasync() if it is available, regardless of
27304 ** the value of the dataOnly flag.
27305 */
27306 static int full_fsync(int fd, int fullSync, int dataOnly){
27307   int rc;
27308
27309   /* The following "ifdef/elif/else/" block has the same structure as
27310   ** the one below. It is replicated here solely to avoid cluttering 
27311   ** up the real code with the UNUSED_PARAMETER() macros.
27312   */
27313 #ifdef SQLITE_NO_SYNC
27314   UNUSED_PARAMETER(fd);
27315   UNUSED_PARAMETER(fullSync);
27316   UNUSED_PARAMETER(dataOnly);
27317 #elif HAVE_FULLFSYNC
27318   UNUSED_PARAMETER(dataOnly);
27319 #else
27320   UNUSED_PARAMETER(fullSync);
27321   UNUSED_PARAMETER(dataOnly);
27322 #endif
27323
27324   /* Record the number of times that we do a normal fsync() and 
27325   ** FULLSYNC.  This is used during testing to verify that this procedure
27326   ** gets called with the correct arguments.
27327   */
27328 #ifdef SQLITE_TEST
27329   if( fullSync ) sqlite3_fullsync_count++;
27330   sqlite3_sync_count++;
27331 #endif
27332
27333   /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
27334   ** no-op
27335   */
27336 #ifdef SQLITE_NO_SYNC
27337   rc = SQLITE_OK;
27338 #elif HAVE_FULLFSYNC
27339   if( fullSync ){
27340     rc = osFcntl(fd, F_FULLFSYNC, 0);
27341   }else{
27342     rc = 1;
27343   }
27344   /* If the FULLFSYNC failed, fall back to attempting an fsync().
27345   ** It shouldn't be possible for fullfsync to fail on the local 
27346   ** file system (on OSX), so failure indicates that FULLFSYNC
27347   ** isn't supported for this file system. So, attempt an fsync 
27348   ** and (for now) ignore the overhead of a superfluous fcntl call.  
27349   ** It'd be better to detect fullfsync support once and avoid 
27350   ** the fcntl call every time sync is called.
27351   */
27352   if( rc ) rc = fsync(fd);
27353
27354 #elif defined(__APPLE__)
27355   /* fdatasync() on HFS+ doesn't yet flush the file size if it changed correctly
27356   ** so currently we default to the macro that redefines fdatasync to fsync
27357   */
27358   rc = fsync(fd);
27359 #else 
27360   rc = fdatasync(fd);
27361 #if OS_VXWORKS
27362   if( rc==-1 && errno==ENOTSUP ){
27363     rc = fsync(fd);
27364   }
27365 #endif /* OS_VXWORKS */
27366 #endif /* ifdef SQLITE_NO_SYNC elif HAVE_FULLFSYNC */
27367
27368   if( OS_VXWORKS && rc!= -1 ){
27369     rc = 0;
27370   }
27371   return rc;
27372 }
27373
27374 /*
27375 ** Open a file descriptor to the directory containing file zFilename.
27376 ** If successful, *pFd is set to the opened file descriptor and
27377 ** SQLITE_OK is returned. If an error occurs, either SQLITE_NOMEM
27378 ** or SQLITE_CANTOPEN is returned and *pFd is set to an undefined
27379 ** value.
27380 **
27381 ** The directory file descriptor is used for only one thing - to
27382 ** fsync() a directory to make sure file creation and deletion events
27383 ** are flushed to disk.  Such fsyncs are not needed on newer
27384 ** journaling filesystems, but are required on older filesystems.
27385 **
27386 ** This routine can be overridden using the xSetSysCall interface.
27387 ** The ability to override this routine was added in support of the
27388 ** chromium sandbox.  Opening a directory is a security risk (we are
27389 ** told) so making it overrideable allows the chromium sandbox to
27390 ** replace this routine with a harmless no-op.  To make this routine
27391 ** a no-op, replace it with a stub that returns SQLITE_OK but leaves
27392 ** *pFd set to a negative number.
27393 **
27394 ** If SQLITE_OK is returned, the caller is responsible for closing
27395 ** the file descriptor *pFd using close().
27396 */
27397 static int openDirectory(const char *zFilename, int *pFd){
27398   int ii;
27399   int fd = -1;
27400   char zDirname[MAX_PATHNAME+1];
27401
27402   sqlite3_snprintf(MAX_PATHNAME, zDirname, "%s", zFilename);
27403   for(ii=(int)strlen(zDirname); ii>1 && zDirname[ii]!='/'; ii--);
27404   if( ii>0 ){
27405     zDirname[ii] = '\0';
27406     fd = robust_open(zDirname, O_RDONLY|O_BINARY, 0);
27407     if( fd>=0 ){
27408 #ifdef FD_CLOEXEC
27409       osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
27410 #endif
27411       OSTRACE(("OPENDIR %-3d %s\n", fd, zDirname));
27412     }
27413   }
27414   *pFd = fd;
27415   return (fd>=0?SQLITE_OK:unixLogError(SQLITE_CANTOPEN_BKPT, "open", zDirname));
27416 }
27417
27418 /*
27419 ** Make sure all writes to a particular file are committed to disk.
27420 **
27421 ** If dataOnly==0 then both the file itself and its metadata (file
27422 ** size, access time, etc) are synced.  If dataOnly!=0 then only the
27423 ** file data is synced.
27424 **
27425 ** Under Unix, also make sure that the directory entry for the file
27426 ** has been created by fsync-ing the directory that contains the file.
27427 ** If we do not do this and we encounter a power failure, the directory
27428 ** entry for the journal might not exist after we reboot.  The next
27429 ** SQLite to access the file will not know that the journal exists (because
27430 ** the directory entry for the journal was never created) and the transaction
27431 ** will not roll back - possibly leading to database corruption.
27432 */
27433 static int unixSync(sqlite3_file *id, int flags){
27434   int rc;
27435   unixFile *pFile = (unixFile*)id;
27436
27437   int isDataOnly = (flags&SQLITE_SYNC_DATAONLY);
27438   int isFullsync = (flags&0x0F)==SQLITE_SYNC_FULL;
27439
27440   /* Check that one of SQLITE_SYNC_NORMAL or FULL was passed */
27441   assert((flags&0x0F)==SQLITE_SYNC_NORMAL
27442       || (flags&0x0F)==SQLITE_SYNC_FULL
27443   );
27444
27445   /* Unix cannot, but some systems may return SQLITE_FULL from here. This
27446   ** line is to test that doing so does not cause any problems.
27447   */
27448   SimulateDiskfullError( return SQLITE_FULL );
27449
27450   assert( pFile );
27451   OSTRACE(("SYNC    %-3d\n", pFile->h));
27452   rc = full_fsync(pFile->h, isFullsync, isDataOnly);
27453   SimulateIOError( rc=1 );
27454   if( rc ){
27455     pFile->lastErrno = errno;
27456     return unixLogError(SQLITE_IOERR_FSYNC, "full_fsync", pFile->zPath);
27457   }
27458
27459   /* Also fsync the directory containing the file if the DIRSYNC flag
27460   ** is set.  This is a one-time occurrance.  Many systems (examples: AIX)
27461   ** are unable to fsync a directory, so ignore errors on the fsync.
27462   */
27463   if( pFile->ctrlFlags & UNIXFILE_DIRSYNC ){
27464     int dirfd;
27465     OSTRACE(("DIRSYNC %s (have_fullfsync=%d fullsync=%d)\n", pFile->zPath,
27466             HAVE_FULLFSYNC, isFullsync));
27467     rc = osOpenDirectory(pFile->zPath, &dirfd);
27468     if( rc==SQLITE_OK && dirfd>=0 ){
27469       full_fsync(dirfd, 0, 0);
27470       robust_close(pFile, dirfd, __LINE__);
27471     }else if( rc==SQLITE_CANTOPEN ){
27472       rc = SQLITE_OK;
27473     }
27474     pFile->ctrlFlags &= ~UNIXFILE_DIRSYNC;
27475   }
27476   return rc;
27477 }
27478
27479 /*
27480 ** Truncate an open file to a specified size
27481 */
27482 static int unixTruncate(sqlite3_file *id, i64 nByte){
27483   unixFile *pFile = (unixFile *)id;
27484   int rc;
27485   assert( pFile );
27486   SimulateIOError( return SQLITE_IOERR_TRUNCATE );
27487
27488   /* If the user has configured a chunk-size for this file, truncate the
27489   ** file so that it consists of an integer number of chunks (i.e. the
27490   ** actual file size after the operation may be larger than the requested
27491   ** size).
27492   */
27493   if( pFile->szChunk ){
27494     nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
27495   }
27496
27497   rc = robust_ftruncate(pFile->h, (off_t)nByte);
27498   if( rc ){
27499     pFile->lastErrno = errno;
27500     return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath);
27501   }else{
27502 #ifndef NDEBUG
27503     /* If we are doing a normal write to a database file (as opposed to
27504     ** doing a hot-journal rollback or a write to some file other than a
27505     ** normal database file) and we truncate the file to zero length,
27506     ** that effectively updates the change counter.  This might happen
27507     ** when restoring a database using the backup API from a zero-length
27508     ** source.
27509     */
27510     if( pFile->inNormalWrite && nByte==0 ){
27511       pFile->transCntrChng = 1;
27512     }
27513 #endif
27514
27515     return SQLITE_OK;
27516   }
27517 }
27518
27519 /*
27520 ** Determine the current size of a file in bytes
27521 */
27522 static int unixFileSize(sqlite3_file *id, i64 *pSize){
27523   int rc;
27524   struct stat buf;
27525   assert( id );
27526   rc = osFstat(((unixFile*)id)->h, &buf);
27527   SimulateIOError( rc=1 );
27528   if( rc!=0 ){
27529     ((unixFile*)id)->lastErrno = errno;
27530     return SQLITE_IOERR_FSTAT;
27531   }
27532   *pSize = buf.st_size;
27533
27534   /* When opening a zero-size database, the findInodeInfo() procedure
27535   ** writes a single byte into that file in order to work around a bug
27536   ** in the OS-X msdos filesystem.  In order to avoid problems with upper
27537   ** layers, we need to report this file size as zero even though it is
27538   ** really 1.   Ticket #3260.
27539   */
27540   if( *pSize==1 ) *pSize = 0;
27541
27542
27543   return SQLITE_OK;
27544 }
27545
27546 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
27547 /*
27548 ** Handler for proxy-locking file-control verbs.  Defined below in the
27549 ** proxying locking division.
27550 */
27551 static int proxyFileControl(sqlite3_file*,int,void*);
27552 #endif
27553
27554 /* 
27555 ** This function is called to handle the SQLITE_FCNTL_SIZE_HINT 
27556 ** file-control operation.
27557 **
27558 ** If the user has configured a chunk-size for this file, it could be
27559 ** that the file needs to be extended at this point. Otherwise, the
27560 ** SQLITE_FCNTL_SIZE_HINT operation is a no-op for Unix.
27561 */
27562 static int fcntlSizeHint(unixFile *pFile, i64 nByte){
27563   if( pFile->szChunk ){
27564     i64 nSize;                    /* Required file size */
27565     struct stat buf;              /* Used to hold return values of fstat() */
27566    
27567     if( osFstat(pFile->h, &buf) ) return SQLITE_IOERR_FSTAT;
27568
27569     nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk;
27570     if( nSize>(i64)buf.st_size ){
27571
27572 #if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE
27573       /* The code below is handling the return value of osFallocate() 
27574       ** correctly. posix_fallocate() is defined to "returns zero on success, 
27575       ** or an error number on  failure". See the manpage for details. */
27576       int err;
27577       do{
27578         err = osFallocate(pFile->h, buf.st_size, nSize-buf.st_size);
27579       }while( err==EINTR );
27580       if( err ) return SQLITE_IOERR_WRITE;
27581 #else
27582       /* If the OS does not have posix_fallocate(), fake it. First use
27583       ** ftruncate() to set the file size, then write a single byte to
27584       ** the last byte in each block within the extended region. This
27585       ** is the same technique used by glibc to implement posix_fallocate()
27586       ** on systems that do not have a real fallocate() system call.
27587       */
27588       int nBlk = buf.st_blksize;  /* File-system block size */
27589       i64 iWrite;                 /* Next offset to write to */
27590
27591       if( robust_ftruncate(pFile->h, nSize) ){
27592         pFile->lastErrno = errno;
27593         return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath);
27594       }
27595       iWrite = ((buf.st_size + 2*nBlk - 1)/nBlk)*nBlk-1;
27596       while( iWrite<nSize ){
27597         int nWrite = seekAndWrite(pFile, iWrite, "", 1);
27598         if( nWrite!=1 ) return SQLITE_IOERR_WRITE;
27599         iWrite += nBlk;
27600       }
27601 #endif
27602     }
27603   }
27604
27605   return SQLITE_OK;
27606 }
27607
27608 /*
27609 ** Information and control of an open file handle.
27610 */
27611 static int unixFileControl(sqlite3_file *id, int op, void *pArg){
27612   switch( op ){
27613     case SQLITE_FCNTL_LOCKSTATE: {
27614       *(int*)pArg = ((unixFile*)id)->eFileLock;
27615       return SQLITE_OK;
27616     }
27617     case SQLITE_LAST_ERRNO: {
27618       *(int*)pArg = ((unixFile*)id)->lastErrno;
27619       return SQLITE_OK;
27620     }
27621     case SQLITE_FCNTL_CHUNK_SIZE: {
27622       ((unixFile*)id)->szChunk = *(int *)pArg;
27623       return SQLITE_OK;
27624     }
27625     case SQLITE_FCNTL_SIZE_HINT: {
27626       return fcntlSizeHint((unixFile *)id, *(i64 *)pArg);
27627     }
27628 #ifndef NDEBUG
27629     /* The pager calls this method to signal that it has done
27630     ** a rollback and that the database is therefore unchanged and
27631     ** it hence it is OK for the transaction change counter to be
27632     ** unchanged.
27633     */
27634     case SQLITE_FCNTL_DB_UNCHANGED: {
27635       ((unixFile*)id)->dbUpdate = 0;
27636       return SQLITE_OK;
27637     }
27638 #endif
27639 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
27640     case SQLITE_SET_LOCKPROXYFILE:
27641     case SQLITE_GET_LOCKPROXYFILE: {
27642       return proxyFileControl(id,op,pArg);
27643     }
27644 #endif /* SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) */
27645     case SQLITE_FCNTL_SYNC_OMITTED: {
27646       return SQLITE_OK;  /* A no-op */
27647     }
27648   }
27649   return SQLITE_NOTFOUND;
27650 }
27651
27652 /*
27653 ** Return the sector size in bytes of the underlying block device for
27654 ** the specified file. This is almost always 512 bytes, but may be
27655 ** larger for some devices.
27656 **
27657 ** SQLite code assumes this function cannot fail. It also assumes that
27658 ** if two files are created in the same file-system directory (i.e.
27659 ** a database and its journal file) that the sector size will be the
27660 ** same for both.
27661 */
27662 static int unixSectorSize(sqlite3_file *NotUsed){
27663   UNUSED_PARAMETER(NotUsed);
27664   return SQLITE_DEFAULT_SECTOR_SIZE;
27665 }
27666
27667 /*
27668 ** Return the device characteristics for the file. This is always 0 for unix.
27669 */
27670 static int unixDeviceCharacteristics(sqlite3_file *NotUsed){
27671   UNUSED_PARAMETER(NotUsed);
27672   return 0;
27673 }
27674
27675 #ifndef SQLITE_OMIT_WAL
27676
27677
27678 /*
27679 ** Object used to represent an shared memory buffer.  
27680 **
27681 ** When multiple threads all reference the same wal-index, each thread
27682 ** has its own unixShm object, but they all point to a single instance
27683 ** of this unixShmNode object.  In other words, each wal-index is opened
27684 ** only once per process.
27685 **
27686 ** Each unixShmNode object is connected to a single unixInodeInfo object.
27687 ** We could coalesce this object into unixInodeInfo, but that would mean
27688 ** every open file that does not use shared memory (in other words, most
27689 ** open files) would have to carry around this extra information.  So
27690 ** the unixInodeInfo object contains a pointer to this unixShmNode object
27691 ** and the unixShmNode object is created only when needed.
27692 **
27693 ** unixMutexHeld() must be true when creating or destroying
27694 ** this object or while reading or writing the following fields:
27695 **
27696 **      nRef
27697 **
27698 ** The following fields are read-only after the object is created:
27699 ** 
27700 **      fid
27701 **      zFilename
27702 **
27703 ** Either unixShmNode.mutex must be held or unixShmNode.nRef==0 and
27704 ** unixMutexHeld() is true when reading or writing any other field
27705 ** in this structure.
27706 */
27707 struct unixShmNode {
27708   unixInodeInfo *pInode;     /* unixInodeInfo that owns this SHM node */
27709   sqlite3_mutex *mutex;      /* Mutex to access this object */
27710   char *zFilename;           /* Name of the mmapped file */
27711   int h;                     /* Open file descriptor */
27712   int szRegion;              /* Size of shared-memory regions */
27713   int nRegion;               /* Size of array apRegion */
27714   char **apRegion;           /* Array of mapped shared-memory regions */
27715   int nRef;                  /* Number of unixShm objects pointing to this */
27716   unixShm *pFirst;           /* All unixShm objects pointing to this */
27717 #ifdef SQLITE_DEBUG
27718   u8 exclMask;               /* Mask of exclusive locks held */
27719   u8 sharedMask;             /* Mask of shared locks held */
27720   u8 nextShmId;              /* Next available unixShm.id value */
27721 #endif
27722 };
27723
27724 /*
27725 ** Structure used internally by this VFS to record the state of an
27726 ** open shared memory connection.
27727 **
27728 ** The following fields are initialized when this object is created and
27729 ** are read-only thereafter:
27730 **
27731 **    unixShm.pFile
27732 **    unixShm.id
27733 **
27734 ** All other fields are read/write.  The unixShm.pFile->mutex must be held
27735 ** while accessing any read/write fields.
27736 */
27737 struct unixShm {
27738   unixShmNode *pShmNode;     /* The underlying unixShmNode object */
27739   unixShm *pNext;            /* Next unixShm with the same unixShmNode */
27740   u8 hasMutex;               /* True if holding the unixShmNode mutex */
27741   u16 sharedMask;            /* Mask of shared locks held */
27742   u16 exclMask;              /* Mask of exclusive locks held */
27743 #ifdef SQLITE_DEBUG
27744   u8 id;                     /* Id of this connection within its unixShmNode */
27745 #endif
27746 };
27747
27748 /*
27749 ** Constants used for locking
27750 */
27751 #define UNIX_SHM_BASE   ((22+SQLITE_SHM_NLOCK)*4)         /* first lock byte */
27752 #define UNIX_SHM_DMS    (UNIX_SHM_BASE+SQLITE_SHM_NLOCK)  /* deadman switch */
27753
27754 /*
27755 ** Apply posix advisory locks for all bytes from ofst through ofst+n-1.
27756 **
27757 ** Locks block if the mask is exactly UNIX_SHM_C and are non-blocking
27758 ** otherwise.
27759 */
27760 static int unixShmSystemLock(
27761   unixShmNode *pShmNode, /* Apply locks to this open shared-memory segment */
27762   int lockType,          /* F_UNLCK, F_RDLCK, or F_WRLCK */
27763   int ofst,              /* First byte of the locking range */
27764   int n                  /* Number of bytes to lock */
27765 ){
27766   struct flock f;       /* The posix advisory locking structure */
27767   int rc = SQLITE_OK;   /* Result code form fcntl() */
27768
27769   /* Access to the unixShmNode object is serialized by the caller */
27770   assert( sqlite3_mutex_held(pShmNode->mutex) || pShmNode->nRef==0 );
27771
27772   /* Shared locks never span more than one byte */
27773   assert( n==1 || lockType!=F_RDLCK );
27774
27775   /* Locks are within range */
27776   assert( n>=1 && n<SQLITE_SHM_NLOCK );
27777
27778   if( pShmNode->h>=0 ){
27779     /* Initialize the locking parameters */
27780     memset(&f, 0, sizeof(f));
27781     f.l_type = lockType;
27782     f.l_whence = SEEK_SET;
27783     f.l_start = ofst;
27784     f.l_len = n;
27785
27786     rc = osFcntl(pShmNode->h, F_SETLK, &f);
27787     rc = (rc!=(-1)) ? SQLITE_OK : SQLITE_BUSY;
27788   }
27789
27790   /* Update the global lock state and do debug tracing */
27791 #ifdef SQLITE_DEBUG
27792   { u16 mask;
27793   OSTRACE(("SHM-LOCK "));
27794   mask = (1<<(ofst+n)) - (1<<ofst);
27795   if( rc==SQLITE_OK ){
27796     if( lockType==F_UNLCK ){
27797       OSTRACE(("unlock %d ok", ofst));
27798       pShmNode->exclMask &= ~mask;
27799       pShmNode->sharedMask &= ~mask;
27800     }else if( lockType==F_RDLCK ){
27801       OSTRACE(("read-lock %d ok", ofst));
27802       pShmNode->exclMask &= ~mask;
27803       pShmNode->sharedMask |= mask;
27804     }else{
27805       assert( lockType==F_WRLCK );
27806       OSTRACE(("write-lock %d ok", ofst));
27807       pShmNode->exclMask |= mask;
27808       pShmNode->sharedMask &= ~mask;
27809     }
27810   }else{
27811     if( lockType==F_UNLCK ){
27812       OSTRACE(("unlock %d failed", ofst));
27813     }else if( lockType==F_RDLCK ){
27814       OSTRACE(("read-lock failed"));
27815     }else{
27816       assert( lockType==F_WRLCK );
27817       OSTRACE(("write-lock %d failed", ofst));
27818     }
27819   }
27820   OSTRACE((" - afterwards %03x,%03x\n",
27821            pShmNode->sharedMask, pShmNode->exclMask));
27822   }
27823 #endif
27824
27825   return rc;        
27826 }
27827
27828
27829 /*
27830 ** Purge the unixShmNodeList list of all entries with unixShmNode.nRef==0.
27831 **
27832 ** This is not a VFS shared-memory method; it is a utility function called
27833 ** by VFS shared-memory methods.
27834 */
27835 static void unixShmPurge(unixFile *pFd){
27836   unixShmNode *p = pFd->pInode->pShmNode;
27837   assert( unixMutexHeld() );
27838   if( p && p->nRef==0 ){
27839     int i;
27840     assert( p->pInode==pFd->pInode );
27841     if( p->mutex ) sqlite3_mutex_free(p->mutex);
27842     for(i=0; i<p->nRegion; i++){
27843       if( p->h>=0 ){
27844         munmap(p->apRegion[i], p->szRegion);
27845       }else{
27846         sqlite3_free(p->apRegion[i]);
27847       }
27848     }
27849     sqlite3_free(p->apRegion);
27850     if( p->h>=0 ){
27851       robust_close(pFd, p->h, __LINE__);
27852       p->h = -1;
27853     }
27854     p->pInode->pShmNode = 0;
27855     sqlite3_free(p);
27856   }
27857 }
27858
27859 /*
27860 ** Open a shared-memory area associated with open database file pDbFd.  
27861 ** This particular implementation uses mmapped files.
27862 **
27863 ** The file used to implement shared-memory is in the same directory
27864 ** as the open database file and has the same name as the open database
27865 ** file with the "-shm" suffix added.  For example, if the database file
27866 ** is "/home/user1/config.db" then the file that is created and mmapped
27867 ** for shared memory will be called "/home/user1/config.db-shm".  
27868 **
27869 ** Another approach to is to use files in /dev/shm or /dev/tmp or an
27870 ** some other tmpfs mount. But if a file in a different directory
27871 ** from the database file is used, then differing access permissions
27872 ** or a chroot() might cause two different processes on the same
27873 ** database to end up using different files for shared memory - 
27874 ** meaning that their memory would not really be shared - resulting
27875 ** in database corruption.  Nevertheless, this tmpfs file usage
27876 ** can be enabled at compile-time using -DSQLITE_SHM_DIRECTORY="/dev/shm"
27877 ** or the equivalent.  The use of the SQLITE_SHM_DIRECTORY compile-time
27878 ** option results in an incompatible build of SQLite;  builds of SQLite
27879 ** that with differing SQLITE_SHM_DIRECTORY settings attempt to use the
27880 ** same database file at the same time, database corruption will likely
27881 ** result. The SQLITE_SHM_DIRECTORY compile-time option is considered
27882 ** "unsupported" and may go away in a future SQLite release.
27883 **
27884 ** When opening a new shared-memory file, if no other instances of that
27885 ** file are currently open, in this process or in other processes, then
27886 ** the file must be truncated to zero length or have its header cleared.
27887 **
27888 ** If the original database file (pDbFd) is using the "unix-excl" VFS
27889 ** that means that an exclusive lock is held on the database file and
27890 ** that no other processes are able to read or write the database.  In
27891 ** that case, we do not really need shared memory.  No shared memory
27892 ** file is created.  The shared memory will be simulated with heap memory.
27893 */
27894 static int unixOpenSharedMemory(unixFile *pDbFd){
27895   struct unixShm *p = 0;          /* The connection to be opened */
27896   struct unixShmNode *pShmNode;   /* The underlying mmapped file */
27897   int rc;                         /* Result code */
27898   unixInodeInfo *pInode;          /* The inode of fd */
27899   char *zShmFilename;             /* Name of the file used for SHM */
27900   int nShmFilename;               /* Size of the SHM filename in bytes */
27901
27902   /* Allocate space for the new unixShm object. */
27903   p = sqlite3_malloc( sizeof(*p) );
27904   if( p==0 ) return SQLITE_NOMEM;
27905   memset(p, 0, sizeof(*p));
27906   assert( pDbFd->pShm==0 );
27907
27908   /* Check to see if a unixShmNode object already exists. Reuse an existing
27909   ** one if present. Create a new one if necessary.
27910   */
27911   unixEnterMutex();
27912   pInode = pDbFd->pInode;
27913   pShmNode = pInode->pShmNode;
27914   if( pShmNode==0 ){
27915     struct stat sStat;                 /* fstat() info for database file */
27916
27917     /* Call fstat() to figure out the permissions on the database file. If
27918     ** a new *-shm file is created, an attempt will be made to create it
27919     ** with the same permissions. The actual permissions the file is created
27920     ** with are subject to the current umask setting.
27921     */
27922     if( osFstat(pDbFd->h, &sStat) && pInode->bProcessLock==0 ){
27923       rc = SQLITE_IOERR_FSTAT;
27924       goto shm_open_err;
27925     }
27926
27927 #ifdef SQLITE_SHM_DIRECTORY
27928     nShmFilename = sizeof(SQLITE_SHM_DIRECTORY) + 30;
27929 #else
27930     nShmFilename = 5 + (int)strlen(pDbFd->zPath);
27931 #endif
27932     pShmNode = sqlite3_malloc( sizeof(*pShmNode) + nShmFilename );
27933     if( pShmNode==0 ){
27934       rc = SQLITE_NOMEM;
27935       goto shm_open_err;
27936     }
27937     memset(pShmNode, 0, sizeof(*pShmNode));
27938     zShmFilename = pShmNode->zFilename = (char*)&pShmNode[1];
27939 #ifdef SQLITE_SHM_DIRECTORY
27940     sqlite3_snprintf(nShmFilename, zShmFilename, 
27941                      SQLITE_SHM_DIRECTORY "/sqlite-shm-%x-%x",
27942                      (u32)sStat.st_ino, (u32)sStat.st_dev);
27943 #else
27944     sqlite3_snprintf(nShmFilename, zShmFilename, "%s-shm", pDbFd->zPath);
27945 #endif
27946     pShmNode->h = -1;
27947     pDbFd->pInode->pShmNode = pShmNode;
27948     pShmNode->pInode = pDbFd->pInode;
27949     pShmNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
27950     if( pShmNode->mutex==0 ){
27951       rc = SQLITE_NOMEM;
27952       goto shm_open_err;
27953     }
27954
27955     if( pInode->bProcessLock==0 ){
27956       pShmNode->h = robust_open(zShmFilename, O_RDWR|O_CREAT,
27957                                (sStat.st_mode & 0777));
27958       if( pShmNode->h<0 ){
27959         rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zShmFilename);
27960         goto shm_open_err;
27961       }
27962   
27963       /* Check to see if another process is holding the dead-man switch.
27964       ** If not, truncate the file to zero length. 
27965       */
27966       rc = SQLITE_OK;
27967       if( unixShmSystemLock(pShmNode, F_WRLCK, UNIX_SHM_DMS, 1)==SQLITE_OK ){
27968         if( robust_ftruncate(pShmNode->h, 0) ){
27969           rc = unixLogError(SQLITE_IOERR_SHMOPEN, "ftruncate", zShmFilename);
27970         }
27971       }
27972       if( rc==SQLITE_OK ){
27973         rc = unixShmSystemLock(pShmNode, F_RDLCK, UNIX_SHM_DMS, 1);
27974       }
27975       if( rc ) goto shm_open_err;
27976     }
27977   }
27978
27979   /* Make the new connection a child of the unixShmNode */
27980   p->pShmNode = pShmNode;
27981 #ifdef SQLITE_DEBUG
27982   p->id = pShmNode->nextShmId++;
27983 #endif
27984   pShmNode->nRef++;
27985   pDbFd->pShm = p;
27986   unixLeaveMutex();
27987
27988   /* The reference count on pShmNode has already been incremented under
27989   ** the cover of the unixEnterMutex() mutex and the pointer from the
27990   ** new (struct unixShm) object to the pShmNode has been set. All that is
27991   ** left to do is to link the new object into the linked list starting
27992   ** at pShmNode->pFirst. This must be done while holding the pShmNode->mutex 
27993   ** mutex.
27994   */
27995   sqlite3_mutex_enter(pShmNode->mutex);
27996   p->pNext = pShmNode->pFirst;
27997   pShmNode->pFirst = p;
27998   sqlite3_mutex_leave(pShmNode->mutex);
27999   return SQLITE_OK;
28000
28001   /* Jump here on any error */
28002 shm_open_err:
28003   unixShmPurge(pDbFd);       /* This call frees pShmNode if required */
28004   sqlite3_free(p);
28005   unixLeaveMutex();
28006   return rc;
28007 }
28008
28009 /*
28010 ** This function is called to obtain a pointer to region iRegion of the 
28011 ** shared-memory associated with the database file fd. Shared-memory regions 
28012 ** are numbered starting from zero. Each shared-memory region is szRegion 
28013 ** bytes in size.
28014 **
28015 ** If an error occurs, an error code is returned and *pp is set to NULL.
28016 **
28017 ** Otherwise, if the bExtend parameter is 0 and the requested shared-memory
28018 ** region has not been allocated (by any client, including one running in a
28019 ** separate process), then *pp is set to NULL and SQLITE_OK returned. If 
28020 ** bExtend is non-zero and the requested shared-memory region has not yet 
28021 ** been allocated, it is allocated by this function.
28022 **
28023 ** If the shared-memory region has already been allocated or is allocated by
28024 ** this call as described above, then it is mapped into this processes 
28025 ** address space (if it is not already), *pp is set to point to the mapped 
28026 ** memory and SQLITE_OK returned.
28027 */
28028 static int unixShmMap(
28029   sqlite3_file *fd,               /* Handle open on database file */
28030   int iRegion,                    /* Region to retrieve */
28031   int szRegion,                   /* Size of regions */
28032   int bExtend,                    /* True to extend file if necessary */
28033   void volatile **pp              /* OUT: Mapped memory */
28034 ){
28035   unixFile *pDbFd = (unixFile*)fd;
28036   unixShm *p;
28037   unixShmNode *pShmNode;
28038   int rc = SQLITE_OK;
28039
28040   /* If the shared-memory file has not yet been opened, open it now. */
28041   if( pDbFd->pShm==0 ){
28042     rc = unixOpenSharedMemory(pDbFd);
28043     if( rc!=SQLITE_OK ) return rc;
28044   }
28045
28046   p = pDbFd->pShm;
28047   pShmNode = p->pShmNode;
28048   sqlite3_mutex_enter(pShmNode->mutex);
28049   assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 );
28050   assert( pShmNode->pInode==pDbFd->pInode );
28051   assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 );
28052   assert( pShmNode->h<0 || pDbFd->pInode->bProcessLock==0 );
28053
28054   if( pShmNode->nRegion<=iRegion ){
28055     char **apNew;                      /* New apRegion[] array */
28056     int nByte = (iRegion+1)*szRegion;  /* Minimum required file size */
28057     struct stat sStat;                 /* Used by fstat() */
28058
28059     pShmNode->szRegion = szRegion;
28060
28061     if( pShmNode->h>=0 ){
28062       /* The requested region is not mapped into this processes address space.
28063       ** Check to see if it has been allocated (i.e. if the wal-index file is
28064       ** large enough to contain the requested region).
28065       */
28066       if( osFstat(pShmNode->h, &sStat) ){
28067         rc = SQLITE_IOERR_SHMSIZE;
28068         goto shmpage_out;
28069       }
28070   
28071       if( sStat.st_size<nByte ){
28072         /* The requested memory region does not exist. If bExtend is set to
28073         ** false, exit early. *pp will be set to NULL and SQLITE_OK returned.
28074         **
28075         ** Alternatively, if bExtend is true, use ftruncate() to allocate
28076         ** the requested memory region.
28077         */
28078         if( !bExtend ) goto shmpage_out;
28079         if( robust_ftruncate(pShmNode->h, nByte) ){
28080           rc = unixLogError(SQLITE_IOERR_SHMSIZE, "ftruncate",
28081                             pShmNode->zFilename);
28082           goto shmpage_out;
28083         }
28084       }
28085     }
28086
28087     /* Map the requested memory region into this processes address space. */
28088     apNew = (char **)sqlite3_realloc(
28089         pShmNode->apRegion, (iRegion+1)*sizeof(char *)
28090     );
28091     if( !apNew ){
28092       rc = SQLITE_IOERR_NOMEM;
28093       goto shmpage_out;
28094     }
28095     pShmNode->apRegion = apNew;
28096     while(pShmNode->nRegion<=iRegion){
28097       void *pMem;
28098       if( pShmNode->h>=0 ){
28099         pMem = mmap(0, szRegion, PROT_READ|PROT_WRITE, 
28100             MAP_SHARED, pShmNode->h, pShmNode->nRegion*szRegion
28101         );
28102         if( pMem==MAP_FAILED ){
28103           rc = SQLITE_IOERR;
28104           goto shmpage_out;
28105         }
28106       }else{
28107         pMem = sqlite3_malloc(szRegion);
28108         if( pMem==0 ){
28109           rc = SQLITE_NOMEM;
28110           goto shmpage_out;
28111         }
28112         memset(pMem, 0, szRegion);
28113       }
28114       pShmNode->apRegion[pShmNode->nRegion] = pMem;
28115       pShmNode->nRegion++;
28116     }
28117   }
28118
28119 shmpage_out:
28120   if( pShmNode->nRegion>iRegion ){
28121     *pp = pShmNode->apRegion[iRegion];
28122   }else{
28123     *pp = 0;
28124   }
28125   sqlite3_mutex_leave(pShmNode->mutex);
28126   return rc;
28127 }
28128
28129 /*
28130 ** Change the lock state for a shared-memory segment.
28131 **
28132 ** Note that the relationship between SHAREd and EXCLUSIVE locks is a little
28133 ** different here than in posix.  In xShmLock(), one can go from unlocked
28134 ** to shared and back or from unlocked to exclusive and back.  But one may
28135 ** not go from shared to exclusive or from exclusive to shared.
28136 */
28137 static int unixShmLock(
28138   sqlite3_file *fd,          /* Database file holding the shared memory */
28139   int ofst,                  /* First lock to acquire or release */
28140   int n,                     /* Number of locks to acquire or release */
28141   int flags                  /* What to do with the lock */
28142 ){
28143   unixFile *pDbFd = (unixFile*)fd;      /* Connection holding shared memory */
28144   unixShm *p = pDbFd->pShm;             /* The shared memory being locked */
28145   unixShm *pX;                          /* For looping over all siblings */
28146   unixShmNode *pShmNode = p->pShmNode;  /* The underlying file iNode */
28147   int rc = SQLITE_OK;                   /* Result code */
28148   u16 mask;                             /* Mask of locks to take or release */
28149
28150   assert( pShmNode==pDbFd->pInode->pShmNode );
28151   assert( pShmNode->pInode==pDbFd->pInode );
28152   assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK );
28153   assert( n>=1 );
28154   assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
28155        || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
28156        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED)
28157        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
28158   assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
28159   assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 );
28160   assert( pShmNode->h<0 || pDbFd->pInode->bProcessLock==0 );
28161
28162   mask = (1<<(ofst+n)) - (1<<ofst);
28163   assert( n>1 || mask==(1<<ofst) );
28164   sqlite3_mutex_enter(pShmNode->mutex);
28165   if( flags & SQLITE_SHM_UNLOCK ){
28166     u16 allMask = 0; /* Mask of locks held by siblings */
28167
28168     /* See if any siblings hold this same lock */
28169     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
28170       if( pX==p ) continue;
28171       assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 );
28172       allMask |= pX->sharedMask;
28173     }
28174
28175     /* Unlock the system-level locks */
28176     if( (mask & allMask)==0 ){
28177       rc = unixShmSystemLock(pShmNode, F_UNLCK, ofst+UNIX_SHM_BASE, n);
28178     }else{
28179       rc = SQLITE_OK;
28180     }
28181
28182     /* Undo the local locks */
28183     if( rc==SQLITE_OK ){
28184       p->exclMask &= ~mask;
28185       p->sharedMask &= ~mask;
28186     } 
28187   }else if( flags & SQLITE_SHM_SHARED ){
28188     u16 allShared = 0;  /* Union of locks held by connections other than "p" */
28189
28190     /* Find out which shared locks are already held by sibling connections.
28191     ** If any sibling already holds an exclusive lock, go ahead and return
28192     ** SQLITE_BUSY.
28193     */
28194     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
28195       if( (pX->exclMask & mask)!=0 ){
28196         rc = SQLITE_BUSY;
28197         break;
28198       }
28199       allShared |= pX->sharedMask;
28200     }
28201
28202     /* Get shared locks at the system level, if necessary */
28203     if( rc==SQLITE_OK ){
28204       if( (allShared & mask)==0 ){
28205         rc = unixShmSystemLock(pShmNode, F_RDLCK, ofst+UNIX_SHM_BASE, n);
28206       }else{
28207         rc = SQLITE_OK;
28208       }
28209     }
28210
28211     /* Get the local shared locks */
28212     if( rc==SQLITE_OK ){
28213       p->sharedMask |= mask;
28214     }
28215   }else{
28216     /* Make sure no sibling connections hold locks that will block this
28217     ** lock.  If any do, return SQLITE_BUSY right away.
28218     */
28219     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
28220       if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
28221         rc = SQLITE_BUSY;
28222         break;
28223       }
28224     }
28225   
28226     /* Get the exclusive locks at the system level.  Then if successful
28227     ** also mark the local connection as being locked.
28228     */
28229     if( rc==SQLITE_OK ){
28230       rc = unixShmSystemLock(pShmNode, F_WRLCK, ofst+UNIX_SHM_BASE, n);
28231       if( rc==SQLITE_OK ){
28232         assert( (p->sharedMask & mask)==0 );
28233         p->exclMask |= mask;
28234       }
28235     }
28236   }
28237   sqlite3_mutex_leave(pShmNode->mutex);
28238   OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x\n",
28239            p->id, getpid(), p->sharedMask, p->exclMask));
28240   return rc;
28241 }
28242
28243 /*
28244 ** Implement a memory barrier or memory fence on shared memory.  
28245 **
28246 ** All loads and stores begun before the barrier must complete before
28247 ** any load or store begun after the barrier.
28248 */
28249 static void unixShmBarrier(
28250   sqlite3_file *fd                /* Database file holding the shared memory */
28251 ){
28252   UNUSED_PARAMETER(fd);
28253   unixEnterMutex();
28254   unixLeaveMutex();
28255 }
28256
28257 /*
28258 ** Close a connection to shared-memory.  Delete the underlying 
28259 ** storage if deleteFlag is true.
28260 **
28261 ** If there is no shared memory associated with the connection then this
28262 ** routine is a harmless no-op.
28263 */
28264 static int unixShmUnmap(
28265   sqlite3_file *fd,               /* The underlying database file */
28266   int deleteFlag                  /* Delete shared-memory if true */
28267 ){
28268   unixShm *p;                     /* The connection to be closed */
28269   unixShmNode *pShmNode;          /* The underlying shared-memory file */
28270   unixShm **pp;                   /* For looping over sibling connections */
28271   unixFile *pDbFd;                /* The underlying database file */
28272
28273   pDbFd = (unixFile*)fd;
28274   p = pDbFd->pShm;
28275   if( p==0 ) return SQLITE_OK;
28276   pShmNode = p->pShmNode;
28277
28278   assert( pShmNode==pDbFd->pInode->pShmNode );
28279   assert( pShmNode->pInode==pDbFd->pInode );
28280
28281   /* Remove connection p from the set of connections associated
28282   ** with pShmNode */
28283   sqlite3_mutex_enter(pShmNode->mutex);
28284   for(pp=&pShmNode->pFirst; (*pp)!=p; pp = &(*pp)->pNext){}
28285   *pp = p->pNext;
28286
28287   /* Free the connection p */
28288   sqlite3_free(p);
28289   pDbFd->pShm = 0;
28290   sqlite3_mutex_leave(pShmNode->mutex);
28291
28292   /* If pShmNode->nRef has reached 0, then close the underlying
28293   ** shared-memory file, too */
28294   unixEnterMutex();
28295   assert( pShmNode->nRef>0 );
28296   pShmNode->nRef--;
28297   if( pShmNode->nRef==0 ){
28298     if( deleteFlag && pShmNode->h>=0 ) osUnlink(pShmNode->zFilename);
28299     unixShmPurge(pDbFd);
28300   }
28301   unixLeaveMutex();
28302
28303   return SQLITE_OK;
28304 }
28305
28306
28307 #else
28308 # define unixShmMap     0
28309 # define unixShmLock    0
28310 # define unixShmBarrier 0
28311 # define unixShmUnmap   0
28312 #endif /* #ifndef SQLITE_OMIT_WAL */
28313
28314 /*
28315 ** Here ends the implementation of all sqlite3_file methods.
28316 **
28317 ********************** End sqlite3_file Methods *******************************
28318 ******************************************************************************/
28319
28320 /*
28321 ** This division contains definitions of sqlite3_io_methods objects that
28322 ** implement various file locking strategies.  It also contains definitions
28323 ** of "finder" functions.  A finder-function is used to locate the appropriate
28324 ** sqlite3_io_methods object for a particular database file.  The pAppData
28325 ** field of the sqlite3_vfs VFS objects are initialized to be pointers to
28326 ** the correct finder-function for that VFS.
28327 **
28328 ** Most finder functions return a pointer to a fixed sqlite3_io_methods
28329 ** object.  The only interesting finder-function is autolockIoFinder, which
28330 ** looks at the filesystem type and tries to guess the best locking
28331 ** strategy from that.
28332 **
28333 ** For finder-funtion F, two objects are created:
28334 **
28335 **    (1) The real finder-function named "FImpt()".
28336 **
28337 **    (2) A constant pointer to this function named just "F".
28338 **
28339 **
28340 ** A pointer to the F pointer is used as the pAppData value for VFS
28341 ** objects.  We have to do this instead of letting pAppData point
28342 ** directly at the finder-function since C90 rules prevent a void*
28343 ** from be cast into a function pointer.
28344 **
28345 **
28346 ** Each instance of this macro generates two objects:
28347 **
28348 **   *  A constant sqlite3_io_methods object call METHOD that has locking
28349 **      methods CLOSE, LOCK, UNLOCK, CKRESLOCK.
28350 **
28351 **   *  An I/O method finder function called FINDER that returns a pointer
28352 **      to the METHOD object in the previous bullet.
28353 */
28354 #define IOMETHODS(FINDER, METHOD, VERSION, CLOSE, LOCK, UNLOCK, CKLOCK)      \
28355 static const sqlite3_io_methods METHOD = {                                   \
28356    VERSION,                    /* iVersion */                                \
28357    CLOSE,                      /* xClose */                                  \
28358    unixRead,                   /* xRead */                                   \
28359    unixWrite,                  /* xWrite */                                  \
28360    unixTruncate,               /* xTruncate */                               \
28361    unixSync,                   /* xSync */                                   \
28362    unixFileSize,               /* xFileSize */                               \
28363    LOCK,                       /* xLock */                                   \
28364    UNLOCK,                     /* xUnlock */                                 \
28365    CKLOCK,                     /* xCheckReservedLock */                      \
28366    unixFileControl,            /* xFileControl */                            \
28367    unixSectorSize,             /* xSectorSize */                             \
28368    unixDeviceCharacteristics,  /* xDeviceCapabilities */                     \
28369    unixShmMap,                 /* xShmMap */                                 \
28370    unixShmLock,                /* xShmLock */                                \
28371    unixShmBarrier,             /* xShmBarrier */                             \
28372    unixShmUnmap                /* xShmUnmap */                               \
28373 };                                                                           \
28374 static const sqlite3_io_methods *FINDER##Impl(const char *z, unixFile *p){   \
28375   UNUSED_PARAMETER(z); UNUSED_PARAMETER(p);                                  \
28376   return &METHOD;                                                            \
28377 }                                                                            \
28378 static const sqlite3_io_methods *(*const FINDER)(const char*,unixFile *p)    \
28379     = FINDER##Impl;
28380
28381 /*
28382 ** Here are all of the sqlite3_io_methods objects for each of the
28383 ** locking strategies.  Functions that return pointers to these methods
28384 ** are also created.
28385 */
28386 IOMETHODS(
28387   posixIoFinder,            /* Finder function name */
28388   posixIoMethods,           /* sqlite3_io_methods object name */
28389   2,                        /* shared memory is enabled */
28390   unixClose,                /* xClose method */
28391   unixLock,                 /* xLock method */
28392   unixUnlock,               /* xUnlock method */
28393   unixCheckReservedLock     /* xCheckReservedLock method */
28394 )
28395 IOMETHODS(
28396   nolockIoFinder,           /* Finder function name */
28397   nolockIoMethods,          /* sqlite3_io_methods object name */
28398   1,                        /* shared memory is disabled */
28399   nolockClose,              /* xClose method */
28400   nolockLock,               /* xLock method */
28401   nolockUnlock,             /* xUnlock method */
28402   nolockCheckReservedLock   /* xCheckReservedLock method */
28403 )
28404 IOMETHODS(
28405   dotlockIoFinder,          /* Finder function name */
28406   dotlockIoMethods,         /* sqlite3_io_methods object name */
28407   1,                        /* shared memory is disabled */
28408   dotlockClose,             /* xClose method */
28409   dotlockLock,              /* xLock method */
28410   dotlockUnlock,            /* xUnlock method */
28411   dotlockCheckReservedLock  /* xCheckReservedLock method */
28412 )
28413
28414 #if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS
28415 IOMETHODS(
28416   flockIoFinder,            /* Finder function name */
28417   flockIoMethods,           /* sqlite3_io_methods object name */
28418   1,                        /* shared memory is disabled */
28419   flockClose,               /* xClose method */
28420   flockLock,                /* xLock method */
28421   flockUnlock,              /* xUnlock method */
28422   flockCheckReservedLock    /* xCheckReservedLock method */
28423 )
28424 #endif
28425
28426 #if OS_VXWORKS
28427 IOMETHODS(
28428   semIoFinder,              /* Finder function name */
28429   semIoMethods,             /* sqlite3_io_methods object name */
28430   1,                        /* shared memory is disabled */
28431   semClose,                 /* xClose method */
28432   semLock,                  /* xLock method */
28433   semUnlock,                /* xUnlock method */
28434   semCheckReservedLock      /* xCheckReservedLock method */
28435 )
28436 #endif
28437
28438 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
28439 IOMETHODS(
28440   afpIoFinder,              /* Finder function name */
28441   afpIoMethods,             /* sqlite3_io_methods object name */
28442   1,                        /* shared memory is disabled */
28443   afpClose,                 /* xClose method */
28444   afpLock,                  /* xLock method */
28445   afpUnlock,                /* xUnlock method */
28446   afpCheckReservedLock      /* xCheckReservedLock method */
28447 )
28448 #endif
28449
28450 /*
28451 ** The proxy locking method is a "super-method" in the sense that it
28452 ** opens secondary file descriptors for the conch and lock files and
28453 ** it uses proxy, dot-file, AFP, and flock() locking methods on those
28454 ** secondary files.  For this reason, the division that implements
28455 ** proxy locking is located much further down in the file.  But we need
28456 ** to go ahead and define the sqlite3_io_methods and finder function
28457 ** for proxy locking here.  So we forward declare the I/O methods.
28458 */
28459 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
28460 static int proxyClose(sqlite3_file*);
28461 static int proxyLock(sqlite3_file*, int);
28462 static int proxyUnlock(sqlite3_file*, int);
28463 static int proxyCheckReservedLock(sqlite3_file*, int*);
28464 IOMETHODS(
28465   proxyIoFinder,            /* Finder function name */
28466   proxyIoMethods,           /* sqlite3_io_methods object name */
28467   1,                        /* shared memory is disabled */
28468   proxyClose,               /* xClose method */
28469   proxyLock,                /* xLock method */
28470   proxyUnlock,              /* xUnlock method */
28471   proxyCheckReservedLock    /* xCheckReservedLock method */
28472 )
28473 #endif
28474
28475 /* nfs lockd on OSX 10.3+ doesn't clear write locks when a read lock is set */
28476 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
28477 IOMETHODS(
28478   nfsIoFinder,               /* Finder function name */
28479   nfsIoMethods,              /* sqlite3_io_methods object name */
28480   1,                         /* shared memory is disabled */
28481   unixClose,                 /* xClose method */
28482   unixLock,                  /* xLock method */
28483   nfsUnlock,                 /* xUnlock method */
28484   unixCheckReservedLock      /* xCheckReservedLock method */
28485 )
28486 #endif
28487
28488 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
28489 /* 
28490 ** This "finder" function attempts to determine the best locking strategy 
28491 ** for the database file "filePath".  It then returns the sqlite3_io_methods
28492 ** object that implements that strategy.
28493 **
28494 ** This is for MacOSX only.
28495 */
28496 static const sqlite3_io_methods *autolockIoFinderImpl(
28497   const char *filePath,    /* name of the database file */
28498   unixFile *pNew           /* open file object for the database file */
28499 ){
28500   static const struct Mapping {
28501     const char *zFilesystem;              /* Filesystem type name */
28502     const sqlite3_io_methods *pMethods;   /* Appropriate locking method */
28503   } aMap[] = {
28504     { "hfs",    &posixIoMethods },
28505     { "ufs",    &posixIoMethods },
28506     { "afpfs",  &afpIoMethods },
28507     { "smbfs",  &afpIoMethods },
28508     { "webdav", &nolockIoMethods },
28509     { 0, 0 }
28510   };
28511   int i;
28512   struct statfs fsInfo;
28513   struct flock lockInfo;
28514
28515   if( !filePath ){
28516     /* If filePath==NULL that means we are dealing with a transient file
28517     ** that does not need to be locked. */
28518     return &nolockIoMethods;
28519   }
28520   if( statfs(filePath, &fsInfo) != -1 ){
28521     if( fsInfo.f_flags & MNT_RDONLY ){
28522       return &nolockIoMethods;
28523     }
28524     for(i=0; aMap[i].zFilesystem; i++){
28525       if( strcmp(fsInfo.f_fstypename, aMap[i].zFilesystem)==0 ){
28526         return aMap[i].pMethods;
28527       }
28528     }
28529   }
28530
28531   /* Default case. Handles, amongst others, "nfs".
28532   ** Test byte-range lock using fcntl(). If the call succeeds, 
28533   ** assume that the file-system supports POSIX style locks. 
28534   */
28535   lockInfo.l_len = 1;
28536   lockInfo.l_start = 0;
28537   lockInfo.l_whence = SEEK_SET;
28538   lockInfo.l_type = F_RDLCK;
28539   if( osFcntl(pNew->h, F_GETLK, &lockInfo)!=-1 ) {
28540     if( strcmp(fsInfo.f_fstypename, "nfs")==0 ){
28541       return &nfsIoMethods;
28542     } else {
28543       return &posixIoMethods;
28544     }
28545   }else{
28546     return &dotlockIoMethods;
28547   }
28548 }
28549 static const sqlite3_io_methods 
28550   *(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl;
28551
28552 #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
28553
28554 #if OS_VXWORKS && SQLITE_ENABLE_LOCKING_STYLE
28555 /* 
28556 ** This "finder" function attempts to determine the best locking strategy 
28557 ** for the database file "filePath".  It then returns the sqlite3_io_methods
28558 ** object that implements that strategy.
28559 **
28560 ** This is for VXWorks only.
28561 */
28562 static const sqlite3_io_methods *autolockIoFinderImpl(
28563   const char *filePath,    /* name of the database file */
28564   unixFile *pNew           /* the open file object */
28565 ){
28566   struct flock lockInfo;
28567
28568   if( !filePath ){
28569     /* If filePath==NULL that means we are dealing with a transient file
28570     ** that does not need to be locked. */
28571     return &nolockIoMethods;
28572   }
28573
28574   /* Test if fcntl() is supported and use POSIX style locks.
28575   ** Otherwise fall back to the named semaphore method.
28576   */
28577   lockInfo.l_len = 1;
28578   lockInfo.l_start = 0;
28579   lockInfo.l_whence = SEEK_SET;
28580   lockInfo.l_type = F_RDLCK;
28581   if( osFcntl(pNew->h, F_GETLK, &lockInfo)!=-1 ) {
28582     return &posixIoMethods;
28583   }else{
28584     return &semIoMethods;
28585   }
28586 }
28587 static const sqlite3_io_methods 
28588   *(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl;
28589
28590 #endif /* OS_VXWORKS && SQLITE_ENABLE_LOCKING_STYLE */
28591
28592 /*
28593 ** An abstract type for a pointer to a IO method finder function:
28594 */
28595 typedef const sqlite3_io_methods *(*finder_type)(const char*,unixFile*);
28596
28597
28598 /****************************************************************************
28599 **************************** sqlite3_vfs methods ****************************
28600 **
28601 ** This division contains the implementation of methods on the
28602 ** sqlite3_vfs object.
28603 */
28604
28605 /*
28606 ** Initializes a unixFile structure with zeros.
28607 */
28608 void initUnixFile(sqlite3_file* file) {
28609   memset(file, 0, sizeof(unixFile));
28610 }
28611
28612 /*
28613 ** Initialize the contents of the unixFile structure pointed to by pId.
28614 */
28615 int fillInUnixFile(
28616   sqlite3_vfs *pVfs,      /* Pointer to vfs object */
28617   int h,                  /* Open file descriptor of file being opened */
28618   int syncDir,            /* True to sync directory on first sync */
28619   sqlite3_file *pId,      /* Write to the unixFile structure here */
28620   const char *zFilename,  /* Name of the file being opened */
28621   int noLock,             /* Omit locking if true */
28622   int isDelete,           /* Delete on close if true */
28623   int isReadOnly          /* True if the file is opened read-only */
28624 ){
28625   const sqlite3_io_methods *pLockingStyle;
28626   unixFile *pNew = (unixFile *)pId;
28627   int rc = SQLITE_OK;
28628
28629   assert( pNew->pInode==NULL );
28630
28631   /* Parameter isDelete is only used on vxworks. Express this explicitly 
28632   ** here to prevent compiler warnings about unused parameters.
28633   */
28634   UNUSED_PARAMETER(isDelete);
28635
28636   /* Usually the path zFilename should not be a relative pathname. The
28637   ** exception is when opening the proxy "conch" file in builds that
28638   ** include the special Apple locking styles.
28639   */
28640 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
28641   assert( zFilename==0 || zFilename[0]=='/' 
28642     || pVfs->pAppData==(void*)&autolockIoFinder );
28643 #else
28644   assert( zFilename==0 || zFilename[0]=='/' );
28645 #endif
28646
28647   OSTRACE(("OPEN    %-3d %s\n", h, zFilename));
28648   pNew->h = h;
28649   pNew->zPath = zFilename;
28650   if( strcmp(pVfs->zName,"unix-excl")==0 ){
28651     pNew->ctrlFlags = UNIXFILE_EXCL;
28652   }else{
28653     pNew->ctrlFlags = 0;
28654   }
28655   if( isReadOnly ){
28656     pNew->ctrlFlags |= UNIXFILE_RDONLY;
28657   }
28658   if( syncDir ){
28659     pNew->ctrlFlags |= UNIXFILE_DIRSYNC;
28660   }
28661
28662 #if OS_VXWORKS
28663   pNew->pId = vxworksFindFileId(zFilename);
28664   if( pNew->pId==0 ){
28665     noLock = 1;
28666     rc = SQLITE_NOMEM;
28667   }
28668 #endif
28669
28670   if( noLock ){
28671     pLockingStyle = &nolockIoMethods;
28672   }else{
28673     pLockingStyle = (**(finder_type*)pVfs->pAppData)(zFilename, pNew);
28674 #if SQLITE_ENABLE_LOCKING_STYLE
28675     /* Cache zFilename in the locking context (AFP and dotlock override) for
28676     ** proxyLock activation is possible (remote proxy is based on db name)
28677     ** zFilename remains valid until file is closed, to support */
28678     pNew->lockingContext = (void*)zFilename;
28679 #endif
28680   }
28681
28682   if( pLockingStyle == &posixIoMethods
28683 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
28684     || pLockingStyle == &nfsIoMethods
28685 #endif
28686   ){
28687     unixEnterMutex();
28688     rc = findInodeInfo(pNew, &pNew->pInode);
28689     if( rc!=SQLITE_OK ){
28690       /* If an error occured in findInodeInfo(), close the file descriptor
28691       ** immediately, before releasing the mutex. findInodeInfo() may fail
28692       ** in two scenarios:
28693       **
28694       **   (a) A call to fstat() failed.
28695       **   (b) A malloc failed.
28696       **
28697       ** Scenario (b) may only occur if the process is holding no other
28698       ** file descriptors open on the same file. If there were other file
28699       ** descriptors on this file, then no malloc would be required by
28700       ** findInodeInfo(). If this is the case, it is quite safe to close
28701       ** handle h - as it is guaranteed that no posix locks will be released
28702       ** by doing so.
28703       **
28704       ** If scenario (a) caused the error then things are not so safe. The
28705       ** implicit assumption here is that if fstat() fails, things are in
28706       ** such bad shape that dropping a lock or two doesn't matter much.
28707       */
28708       robust_close(pNew, h, __LINE__);
28709       h = -1;
28710     }
28711     unixLeaveMutex();
28712   }
28713
28714 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
28715   else if( pLockingStyle == &afpIoMethods ){
28716     /* AFP locking uses the file path so it needs to be included in
28717     ** the afpLockingContext.
28718     */
28719     afpLockingContext *pCtx;
28720     pNew->lockingContext = pCtx = sqlite3_malloc( sizeof(*pCtx) );
28721     if( pCtx==0 ){
28722       rc = SQLITE_NOMEM;
28723     }else{
28724       /* NB: zFilename exists and remains valid until the file is closed
28725       ** according to requirement F11141.  So we do not need to make a
28726       ** copy of the filename. */
28727       pCtx->dbPath = zFilename;
28728       pCtx->reserved = 0;
28729       srandomdev();
28730       unixEnterMutex();
28731       rc = findInodeInfo(pNew, &pNew->pInode);
28732       if( rc!=SQLITE_OK ){
28733         sqlite3_free(pNew->lockingContext);
28734         robust_close(pNew, h, __LINE__);
28735         h = -1;
28736       }
28737       unixLeaveMutex();        
28738     }
28739   }
28740 #endif
28741
28742   else if( pLockingStyle == &dotlockIoMethods ){
28743     /* Dotfile locking uses the file path so it needs to be included in
28744     ** the dotlockLockingContext 
28745     */
28746     char *zLockFile;
28747     int nFilename;
28748     nFilename = (int)strlen(zFilename) + 6;
28749     zLockFile = (char *)sqlite3_malloc(nFilename);
28750     if( zLockFile==0 ){
28751       rc = SQLITE_NOMEM;
28752     }else{
28753       sqlite3_snprintf(nFilename, zLockFile, "%s" DOTLOCK_SUFFIX, zFilename);
28754     }
28755     pNew->lockingContext = zLockFile;
28756   }
28757
28758 #if OS_VXWORKS
28759   else if( pLockingStyle == &semIoMethods ){
28760     /* Named semaphore locking uses the file path so it needs to be
28761     ** included in the semLockingContext
28762     */
28763     unixEnterMutex();
28764     rc = findInodeInfo(pNew, &pNew->pInode);
28765     if( (rc==SQLITE_OK) && (pNew->pInode->pSem==NULL) ){
28766       char *zSemName = pNew->pInode->aSemName;
28767       int n;
28768       sqlite3_snprintf(MAX_PATHNAME, zSemName, "/%s.sem",
28769                        pNew->pId->zCanonicalName);
28770       for( n=1; zSemName[n]; n++ )
28771         if( zSemName[n]=='/' ) zSemName[n] = '_';
28772       pNew->pInode->pSem = sem_open(zSemName, O_CREAT, 0666, 1);
28773       if( pNew->pInode->pSem == SEM_FAILED ){
28774         rc = SQLITE_NOMEM;
28775         pNew->pInode->aSemName[0] = '\0';
28776       }
28777     }
28778     unixLeaveMutex();
28779   }
28780 #endif
28781   
28782   pNew->lastErrno = 0;
28783 #if OS_VXWORKS
28784   if( rc!=SQLITE_OK ){
28785     if( h>=0 ) robust_close(pNew, h, __LINE__);
28786     h = -1;
28787     osUnlink(zFilename);
28788     isDelete = 0;
28789   }
28790   pNew->isDelete = isDelete;
28791 #endif
28792   if( rc!=SQLITE_OK ){
28793     if( h>=0 ) robust_close(pNew, h, __LINE__);
28794   }else{
28795     pNew->pMethod = pLockingStyle;
28796     OpenCounter(+1);
28797   }
28798   return rc;
28799 }
28800
28801 /*
28802 ** Return the name of a directory in which to put temporary files.
28803 ** If no suitable temporary file directory can be found, return NULL.
28804 */
28805 static const char *unixTempFileDir(void){
28806   static const char *azDirs[] = {
28807      0,
28808      0,
28809      "/var/tmp",
28810      "/usr/tmp",
28811      "/tmp",
28812      0        /* List terminator */
28813   };
28814   unsigned int i;
28815   struct stat buf;
28816   const char *zDir = 0;
28817
28818   azDirs[0] = sqlite3_temp_directory;
28819   if( !azDirs[1] ) azDirs[1] = getenv("TMPDIR");
28820   for(i=0; i<sizeof(azDirs)/sizeof(azDirs[0]); zDir=azDirs[i++]){
28821     if( zDir==0 ) continue;
28822     if( osStat(zDir, &buf) ) continue;
28823     if( !S_ISDIR(buf.st_mode) ) continue;
28824     if( osAccess(zDir, 07) ) continue;
28825     break;
28826   }
28827   return zDir;
28828 }
28829
28830 /*
28831 ** Create a temporary file name in zBuf.  zBuf must be allocated
28832 ** by the calling process and must be big enough to hold at least
28833 ** pVfs->mxPathname bytes.
28834 */
28835 static int unixGetTempname(int nBuf, char *zBuf){
28836   static const unsigned char zChars[] =
28837     "abcdefghijklmnopqrstuvwxyz"
28838     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
28839     "0123456789";
28840   unsigned int i, j;
28841   const char *zDir;
28842
28843   /* It's odd to simulate an io-error here, but really this is just
28844   ** using the io-error infrastructure to test that SQLite handles this
28845   ** function failing. 
28846   */
28847   SimulateIOError( return SQLITE_IOERR );
28848
28849   zDir = unixTempFileDir();
28850   if( zDir==0 ) zDir = ".";
28851
28852   /* Check that the output buffer is large enough for the temporary file 
28853   ** name. If it is not, return SQLITE_ERROR.
28854   */
28855   if( (strlen(zDir) + strlen(SQLITE_TEMP_FILE_PREFIX) + 17) >= (size_t)nBuf ){
28856     return SQLITE_ERROR;
28857   }
28858
28859   do{
28860     sqlite3_snprintf(nBuf-17, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX, zDir);
28861     j = (int)strlen(zBuf);
28862     sqlite3_randomness(15, &zBuf[j]);
28863     for(i=0; i<15; i++, j++){
28864       zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
28865     }
28866     zBuf[j] = 0;
28867   }while( osAccess(zBuf,0)==0 );
28868   return SQLITE_OK;
28869 }
28870
28871 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
28872 /*
28873 ** Routine to transform a unixFile into a proxy-locking unixFile.
28874 ** Implementation in the proxy-lock division, but used by unixOpen()
28875 ** if SQLITE_PREFER_PROXY_LOCKING is defined.
28876 */
28877 static int proxyTransformUnixFile(unixFile*, const char*);
28878 #endif
28879
28880 /*
28881 ** Search for an unused file descriptor that was opened on the database 
28882 ** file (not a journal or master-journal file) identified by pathname
28883 ** zPath with SQLITE_OPEN_XXX flags matching those passed as the second
28884 ** argument to this function.
28885 **
28886 ** Such a file descriptor may exist if a database connection was closed
28887 ** but the associated file descriptor could not be closed because some
28888 ** other file descriptor open on the same file is holding a file-lock.
28889 ** Refer to comments in the unixClose() function and the lengthy comment
28890 ** describing "Posix Advisory Locking" at the start of this file for 
28891 ** further details. Also, ticket #4018.
28892 **
28893 ** If a suitable file descriptor is found, then it is returned. If no
28894 ** such file descriptor is located, -1 is returned.
28895 */
28896 static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
28897   UnixUnusedFd *pUnused = 0;
28898
28899   /* Do not search for an unused file descriptor on vxworks. Not because
28900   ** vxworks would not benefit from the change (it might, we're not sure),
28901   ** but because no way to test it is currently available. It is better 
28902   ** not to risk breaking vxworks support for the sake of such an obscure 
28903   ** feature.  */
28904 #if !OS_VXWORKS
28905   struct stat sStat;                   /* Results of stat() call */
28906
28907   /* A stat() call may fail for various reasons. If this happens, it is
28908   ** almost certain that an open() call on the same path will also fail.
28909   ** For this reason, if an error occurs in the stat() call here, it is
28910   ** ignored and -1 is returned. The caller will try to open a new file
28911   ** descriptor on the same path, fail, and return an error to SQLite.
28912   **
28913   ** Even if a subsequent open() call does succeed, the consequences of
28914   ** not searching for a resusable file descriptor are not dire.  */
28915   if( 0==osStat(zPath, &sStat) ){
28916     unixInodeInfo *pInode;
28917
28918     unixEnterMutex();
28919     pInode = inodeList;
28920     while( pInode && (pInode->fileId.dev!=sStat.st_dev
28921                      || pInode->fileId.ino!=sStat.st_ino) ){
28922        pInode = pInode->pNext;
28923     }
28924     if( pInode ){
28925       UnixUnusedFd **pp;
28926       for(pp=&pInode->pUnused; *pp && (*pp)->flags!=flags; pp=&((*pp)->pNext));
28927       pUnused = *pp;
28928       if( pUnused ){
28929         *pp = pUnused->pNext;
28930       }
28931     }
28932     unixLeaveMutex();
28933   }
28934 #endif    /* if !OS_VXWORKS */
28935   return pUnused;
28936 }
28937
28938 /*
28939 ** This function is called by unixOpen() to determine the unix permissions
28940 ** to create new files with. If no error occurs, then SQLITE_OK is returned
28941 ** and a value suitable for passing as the third argument to open(2) is
28942 ** written to *pMode. If an IO error occurs, an SQLite error code is 
28943 ** returned and the value of *pMode is not modified.
28944 **
28945 ** If the file being opened is a temporary file, it is always created with
28946 ** the octal permissions 0600 (read/writable by owner only). If the file
28947 ** is a database or master journal file, it is created with the permissions 
28948 ** mask SQLITE_DEFAULT_FILE_PERMISSIONS.
28949 **
28950 ** Finally, if the file being opened is a WAL or regular journal file, then 
28951 ** this function queries the file-system for the permissions on the 
28952 ** corresponding database file and sets *pMode to this value. Whenever 
28953 ** possible, WAL and journal files are created using the same permissions 
28954 ** as the associated database file.
28955 */
28956 static int findCreateFileMode(
28957   const char *zPath,              /* Path of file (possibly) being created */
28958   int flags,                      /* Flags passed as 4th argument to xOpen() */
28959   mode_t *pMode                   /* OUT: Permissions to open file with */
28960 ){
28961   int rc = SQLITE_OK;             /* Return Code */
28962   if( flags & (SQLITE_OPEN_WAL|SQLITE_OPEN_MAIN_JOURNAL) ){
28963     char zDb[MAX_PATHNAME+1];     /* Database file path */
28964     int nDb;                      /* Number of valid bytes in zDb */
28965     struct stat sStat;            /* Output of stat() on database file */
28966
28967     /* zPath is a path to a WAL or journal file. The following block derives
28968     ** the path to the associated database file from zPath. This block handles
28969     ** the following naming conventions:
28970     **
28971     **   "<path to db>-journal"
28972     **   "<path to db>-wal"
28973     **   "<path to db>-journal-NNNN"
28974     **   "<path to db>-wal-NNNN"
28975     **
28976     ** where NNNN is a 4 digit decimal number. The NNNN naming schemes are 
28977     ** used by the test_multiplex.c module.
28978     */
28979     nDb = sqlite3Strlen30(zPath) - 1; 
28980     while( nDb>0 && zPath[nDb]!='l' ) nDb--;
28981     nDb -= ((flags & SQLITE_OPEN_WAL) ? 3 : 7);
28982     memcpy(zDb, zPath, nDb);
28983     zDb[nDb] = '\0';
28984
28985     if( 0==osStat(zDb, &sStat) ){
28986       *pMode = sStat.st_mode & 0777;
28987     }else{
28988       rc = SQLITE_IOERR_FSTAT;
28989     }
28990   }else if( flags & SQLITE_OPEN_DELETEONCLOSE ){
28991     *pMode = 0600;
28992   }else{
28993     *pMode = SQLITE_DEFAULT_FILE_PERMISSIONS;
28994   }
28995   return rc;
28996 }
28997
28998 /*
28999 ** Initializes a unixFile structure with zeros.
29000 */
29001 void chromium_sqlite3_initialize_unix_sqlite3_file(sqlite3_file* file) {
29002   memset(file, 0, sizeof(unixFile));
29003 }
29004
29005 int chromium_sqlite3_fill_in_unix_sqlite3_file(sqlite3_vfs* vfs,
29006                                                int fd,
29007                                                int dirfd,
29008                                                sqlite3_file* file,
29009                                                const char* fileName,
29010                                                int noLock,
29011                                                int isDelete) {
29012   return fillInUnixFile(vfs, fd, dirfd, file, fileName, noLock, isDelete, 0);
29013 }
29014
29015 /*
29016 ** Search for an unused file descriptor that was opened on the database file.
29017 ** If a suitable file descriptor if found, then it is stored in *fd; otherwise,
29018 ** *fd is not modified.
29019 **
29020 ** If a reusable file descriptor is not found, and a new UnixUnusedFd cannot
29021 ** be allocated, SQLITE_NOMEM is returned. Otherwise, SQLITE_OK is returned.
29022 */
29023 int chromium_sqlite3_get_reusable_file_handle(sqlite3_file* file,
29024                                               const char* fileName,
29025                                               int flags,
29026                                               int* fd) {
29027   unixFile* unixSQLite3File = (unixFile*)file;
29028   int fileType = flags & 0xFFFFFF00;
29029   if (fileType == SQLITE_OPEN_MAIN_DB) {
29030     UnixUnusedFd *unusedFd = findReusableFd(fileName, flags);
29031     if (unusedFd) {
29032       *fd = unusedFd->fd;
29033     } else {
29034       unusedFd = sqlite3_malloc(sizeof(*unusedFd));
29035       if (!unusedFd) {
29036         return SQLITE_NOMEM;
29037       }
29038     }
29039     unixSQLite3File->pUnused = unusedFd;
29040   }
29041   return SQLITE_OK;
29042 }
29043
29044 /*
29045 ** Marks 'fd' as the unused file descriptor for 'pFile'.
29046 */
29047 void chromium_sqlite3_update_reusable_file_handle(sqlite3_file* file,
29048                                                   int fd,
29049                                                   int flags) {
29050   unixFile* unixSQLite3File = (unixFile*)file;
29051   if (unixSQLite3File->pUnused) {
29052     unixSQLite3File->pUnused->fd = fd;
29053     unixSQLite3File->pUnused->flags = flags;
29054   }
29055 }
29056
29057 /*
29058 ** Destroys pFile's field that keeps track of the unused file descriptor.
29059 */
29060 void chromium_sqlite3_destroy_reusable_file_handle(sqlite3_file* file) {
29061   unixFile* unixSQLite3File = (unixFile*)file;
29062   sqlite3_free(unixSQLite3File->pUnused);
29063 }
29064
29065 /*
29066 ** Open the file zPath.
29067 ** 
29068 ** Previously, the SQLite OS layer used three functions in place of this
29069 ** one:
29070 **
29071 **     sqlite3OsOpenReadWrite();
29072 **     sqlite3OsOpenReadOnly();
29073 **     sqlite3OsOpenExclusive();
29074 **
29075 ** These calls correspond to the following combinations of flags:
29076 **
29077 **     ReadWrite() ->     (READWRITE | CREATE)
29078 **     ReadOnly()  ->     (READONLY) 
29079 **     OpenExclusive() -> (READWRITE | CREATE | EXCLUSIVE)
29080 **
29081 ** The old OpenExclusive() accepted a boolean argument - "delFlag". If
29082 ** true, the file was configured to be automatically deleted when the
29083 ** file handle closed. To achieve the same effect using this new 
29084 ** interface, add the DELETEONCLOSE flag to those specified above for 
29085 ** OpenExclusive().
29086 */
29087 static int unixOpen(
29088   sqlite3_vfs *pVfs,           /* The VFS for which this is the xOpen method */
29089   const char *zPath,           /* Pathname of file to be opened */
29090   sqlite3_file *pFile,         /* The file descriptor to be filled in */
29091   int flags,                   /* Input flags to control the opening */
29092   int *pOutFlags               /* Output flags returned to SQLite core */
29093 ){
29094   unixFile *p = (unixFile *)pFile;
29095   int fd = -1;                   /* File descriptor returned by open() */
29096   int openFlags = 0;             /* Flags to pass to open() */
29097   int eType = flags&0xFFFFFF00;  /* Type of file to open */
29098   int noLock;                    /* True to omit locking primitives */
29099   int rc = SQLITE_OK;            /* Function Return Code */
29100
29101   int isExclusive  = (flags & SQLITE_OPEN_EXCLUSIVE);
29102   int isDelete     = (flags & SQLITE_OPEN_DELETEONCLOSE);
29103   int isCreate     = (flags & SQLITE_OPEN_CREATE);
29104   int isReadonly   = (flags & SQLITE_OPEN_READONLY);
29105   int isReadWrite  = (flags & SQLITE_OPEN_READWRITE);
29106 #if SQLITE_ENABLE_LOCKING_STYLE
29107   int isAutoProxy  = (flags & SQLITE_OPEN_AUTOPROXY);
29108 #endif
29109
29110   /* If creating a master or main-file journal, this function will open
29111   ** a file-descriptor on the directory too. The first time unixSync()
29112   ** is called the directory file descriptor will be fsync()ed and close()d.
29113   */
29114   int syncDir = (isCreate && (
29115         eType==SQLITE_OPEN_MASTER_JOURNAL 
29116      || eType==SQLITE_OPEN_MAIN_JOURNAL 
29117      || eType==SQLITE_OPEN_WAL
29118   ));
29119
29120   /* If argument zPath is a NULL pointer, this function is required to open
29121   ** a temporary file. Use this buffer to store the file name in.
29122   */
29123   char zTmpname[MAX_PATHNAME+1];
29124   const char *zName = zPath;
29125
29126   /* Check the following statements are true: 
29127   **
29128   **   (a) Exactly one of the READWRITE and READONLY flags must be set, and 
29129   **   (b) if CREATE is set, then READWRITE must also be set, and
29130   **   (c) if EXCLUSIVE is set, then CREATE must also be set.
29131   **   (d) if DELETEONCLOSE is set, then CREATE must also be set.
29132   */
29133   assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
29134   assert(isCreate==0 || isReadWrite);
29135   assert(isExclusive==0 || isCreate);
29136   assert(isDelete==0 || isCreate);
29137
29138   /* The main DB, main journal, WAL file and master journal are never 
29139   ** automatically deleted. Nor are they ever temporary files.  */
29140   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
29141   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
29142   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
29143   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
29144
29145   /* Assert that the upper layer has set one of the "file-type" flags. */
29146   assert( eType==SQLITE_OPEN_MAIN_DB      || eType==SQLITE_OPEN_TEMP_DB 
29147        || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL 
29148        || eType==SQLITE_OPEN_SUBJOURNAL   || eType==SQLITE_OPEN_MASTER_JOURNAL 
29149        || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
29150   );
29151
29152   chromium_sqlite3_initialize_unix_sqlite3_file(pFile);
29153
29154   if( eType==SQLITE_OPEN_MAIN_DB ){
29155     rc = chromium_sqlite3_get_reusable_file_handle(pFile, zName, flags, &fd);
29156     if( rc!=SQLITE_OK ){
29157       return rc;
29158     }
29159   }else if( !zName ){
29160     /* If zName is NULL, the upper layer is requesting a temp file. */
29161     assert(isDelete && !syncDir);
29162     rc = unixGetTempname(MAX_PATHNAME+1, zTmpname);
29163     if( rc!=SQLITE_OK ){
29164       return rc;
29165     }
29166     zName = zTmpname;
29167   }
29168
29169   /* Determine the value of the flags parameter passed to POSIX function
29170   ** open(). These must be calculated even if open() is not called, as
29171   ** they may be stored as part of the file handle and used by the 
29172   ** 'conch file' locking functions later on.  */
29173   if( isReadonly )  openFlags |= O_RDONLY;
29174   if( isReadWrite ) openFlags |= O_RDWR;
29175   if( isCreate )    openFlags |= O_CREAT;
29176   if( isExclusive ) openFlags |= (O_EXCL|O_NOFOLLOW);
29177   openFlags |= (O_LARGEFILE|O_BINARY);
29178
29179   if( fd<0 ){
29180     mode_t openMode;              /* Permissions to create file with */
29181     rc = findCreateFileMode(zName, flags, &openMode);
29182     if( rc!=SQLITE_OK ){
29183       assert( !p->pUnused );
29184       assert( eType==SQLITE_OPEN_WAL || eType==SQLITE_OPEN_MAIN_JOURNAL );
29185       return rc;
29186     }
29187     fd = robust_open(zName, openFlags, openMode);
29188     OSTRACE(("OPENX   %-3d %s 0%o\n", fd, zName, openFlags));
29189     if( fd<0 && errno!=EISDIR && isReadWrite && !isExclusive ){
29190       /* Failed to open the file for read/write access. Try read-only. */
29191       flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
29192       openFlags &= ~(O_RDWR|O_CREAT);
29193       flags |= SQLITE_OPEN_READONLY;
29194       openFlags |= O_RDONLY;
29195       isReadonly = 1;
29196       fd = robust_open(zName, openFlags, openMode);
29197     }
29198     if( fd<0 ){
29199       rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zName);
29200       goto open_finished;
29201     }
29202   }
29203   assert( fd>=0 );
29204   if( pOutFlags ){
29205     *pOutFlags = flags;
29206   }
29207
29208   chromium_sqlite3_update_reusable_file_handle(pFile, fd, flags);
29209
29210   if( isDelete ){
29211 #if OS_VXWORKS
29212     zPath = zName;
29213 #else
29214     osUnlink(zName);
29215 #endif
29216   }
29217 #if SQLITE_ENABLE_LOCKING_STYLE
29218   else{
29219     p->openFlags = openFlags;
29220   }
29221 #endif
29222
29223 #ifdef FD_CLOEXEC
29224   osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
29225 #endif
29226
29227   noLock = eType!=SQLITE_OPEN_MAIN_DB;
29228
29229   
29230 #if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
29231   struct statfs fsInfo;
29232   if( fstatfs(fd, &fsInfo) == -1 ){
29233     ((unixFile*)pFile)->lastErrno = errno;
29234     robust_close(p, fd, __LINE__);
29235     return SQLITE_IOERR_ACCESS;
29236   }
29237   if (0 == strncmp("msdos", fsInfo.f_fstypename, 5)) {
29238     ((unixFile*)pFile)->fsFlags |= SQLITE_FSFLAGS_IS_MSDOS;
29239   }
29240 #endif
29241   
29242 #if SQLITE_ENABLE_LOCKING_STYLE
29243 #if SQLITE_PREFER_PROXY_LOCKING
29244   isAutoProxy = 1;
29245 #endif
29246   if( isAutoProxy && (zPath!=NULL) && (!noLock) && pVfs->xOpen ){
29247     char *envforce = getenv("SQLITE_FORCE_PROXY_LOCKING");
29248     int useProxy = 0;
29249
29250     /* SQLITE_FORCE_PROXY_LOCKING==1 means force always use proxy, 0 means 
29251     ** never use proxy, NULL means use proxy for non-local files only.  */
29252     if( envforce!=NULL ){
29253       useProxy = atoi(envforce)>0;
29254     }else{
29255       struct statfs fsInfo;
29256       if( statfs(zPath, &fsInfo) == -1 ){
29257         /* In theory, the close(fd) call is sub-optimal. If the file opened
29258         ** with fd is a database file, and there are other connections open
29259         ** on that file that are currently holding advisory locks on it,
29260         ** then the call to close() will cancel those locks. In practice,
29261         ** we're assuming that statfs() doesn't fail very often. At least
29262         ** not while other file descriptors opened by the same process on
29263         ** the same file are working.  */
29264         p->lastErrno = errno;
29265         robust_close(p, fd, __LINE__);
29266         rc = SQLITE_IOERR_ACCESS;
29267         goto open_finished;
29268       }
29269       useProxy = !(fsInfo.f_flags&MNT_LOCAL);
29270     }
29271     if( useProxy ){
29272       rc = fillInUnixFile(pVfs, fd, syncDir, pFile, zPath, noLock,
29273                           isDelete, isReadonly);
29274       if( rc==SQLITE_OK ){
29275         rc = proxyTransformUnixFile((unixFile*)pFile, ":auto:");
29276         if( rc!=SQLITE_OK ){
29277           /* Use unixClose to clean up the resources added in fillInUnixFile 
29278           ** and clear all the structure's references.  Specifically, 
29279           ** pFile->pMethods will be NULL so sqlite3OsClose will be a no-op 
29280           */
29281           unixClose(pFile);
29282           return rc;
29283         }
29284       }
29285       goto open_finished;
29286     }
29287   }
29288 #endif
29289   
29290   rc = fillInUnixFile(pVfs, fd, syncDir, pFile, zPath, noLock,
29291                       isDelete, isReadonly);
29292 open_finished:
29293   if( rc!=SQLITE_OK ){
29294     chromium_sqlite3_destroy_reusable_file_handle(pFile);
29295   }
29296   return rc;
29297 }
29298
29299
29300 /*
29301 ** Delete the file at zPath. If the dirSync argument is true, fsync()
29302 ** the directory after deleting the file.
29303 */
29304 static int unixDelete(
29305   sqlite3_vfs *NotUsed,     /* VFS containing this as the xDelete method */
29306   const char *zPath,        /* Name of file to be deleted */
29307   int dirSync               /* If true, fsync() directory after deleting file */
29308 ){
29309   int rc = SQLITE_OK;
29310   UNUSED_PARAMETER(NotUsed);
29311   SimulateIOError(return SQLITE_IOERR_DELETE);
29312   if( osUnlink(zPath)==(-1) && errno!=ENOENT ){
29313     return unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
29314   }
29315 #ifndef SQLITE_DISABLE_DIRSYNC
29316   if( dirSync ){
29317     int fd;
29318     rc = osOpenDirectory(zPath, &fd);
29319     if( rc==SQLITE_OK ){
29320 #if OS_VXWORKS
29321       if( fsync(fd)==-1 )
29322 #else
29323       if( fsync(fd) )
29324 #endif
29325       {
29326         rc = unixLogError(SQLITE_IOERR_DIR_FSYNC, "fsync", zPath);
29327       }
29328       robust_close(0, fd, __LINE__);
29329     }else if( rc==SQLITE_CANTOPEN ){
29330       rc = SQLITE_OK;
29331     }
29332   }
29333 #endif
29334   return rc;
29335 }
29336
29337 /*
29338 ** Test the existance of or access permissions of file zPath. The
29339 ** test performed depends on the value of flags:
29340 **
29341 **     SQLITE_ACCESS_EXISTS: Return 1 if the file exists
29342 **     SQLITE_ACCESS_READWRITE: Return 1 if the file is read and writable.
29343 **     SQLITE_ACCESS_READONLY: Return 1 if the file is readable.
29344 **
29345 ** Otherwise return 0.
29346 */
29347 static int unixAccess(
29348   sqlite3_vfs *NotUsed,   /* The VFS containing this xAccess method */
29349   const char *zPath,      /* Path of the file to examine */
29350   int flags,              /* What do we want to learn about the zPath file? */
29351   int *pResOut            /* Write result boolean here */
29352 ){
29353   int amode = 0;
29354   UNUSED_PARAMETER(NotUsed);
29355   SimulateIOError( return SQLITE_IOERR_ACCESS; );
29356   switch( flags ){
29357     case SQLITE_ACCESS_EXISTS:
29358       amode = F_OK;
29359       break;
29360     case SQLITE_ACCESS_READWRITE:
29361       amode = W_OK|R_OK;
29362       break;
29363     case SQLITE_ACCESS_READ:
29364       amode = R_OK;
29365       break;
29366
29367     default:
29368       assert(!"Invalid flags argument");
29369   }
29370   *pResOut = (osAccess(zPath, amode)==0);
29371   if( flags==SQLITE_ACCESS_EXISTS && *pResOut ){
29372     struct stat buf;
29373     if( 0==osStat(zPath, &buf) && buf.st_size==0 ){
29374       *pResOut = 0;
29375     }
29376   }
29377   return SQLITE_OK;
29378 }
29379
29380
29381 /*
29382 ** Turn a relative pathname into a full pathname. The relative path
29383 ** is stored as a nul-terminated string in the buffer pointed to by
29384 ** zPath. 
29385 **
29386 ** zOut points to a buffer of at least sqlite3_vfs.mxPathname bytes 
29387 ** (in this case, MAX_PATHNAME bytes). The full-path is written to
29388 ** this buffer before returning.
29389 */
29390 static int unixFullPathname(
29391   sqlite3_vfs *pVfs,            /* Pointer to vfs object */
29392   const char *zPath,            /* Possibly relative input path */
29393   int nOut,                     /* Size of output buffer in bytes */
29394   char *zOut                    /* Output buffer */
29395 ){
29396
29397   /* It's odd to simulate an io-error here, but really this is just
29398   ** using the io-error infrastructure to test that SQLite handles this
29399   ** function failing. This function could fail if, for example, the
29400   ** current working directory has been unlinked.
29401   */
29402   SimulateIOError( return SQLITE_ERROR );
29403
29404   assert( pVfs->mxPathname==MAX_PATHNAME );
29405   UNUSED_PARAMETER(pVfs);
29406
29407   zOut[nOut-1] = '\0';
29408   if( zPath[0]=='/' ){
29409     sqlite3_snprintf(nOut, zOut, "%s", zPath);
29410   }else{
29411     int nCwd;
29412     if( osGetcwd(zOut, nOut-1)==0 ){
29413       return unixLogError(SQLITE_CANTOPEN_BKPT, "getcwd", zPath);
29414     }
29415     nCwd = (int)strlen(zOut);
29416     sqlite3_snprintf(nOut-nCwd, &zOut[nCwd], "/%s", zPath);
29417   }
29418   return SQLITE_OK;
29419 }
29420
29421
29422 #ifndef SQLITE_OMIT_LOAD_EXTENSION
29423 /*
29424 ** Interfaces for opening a shared library, finding entry points
29425 ** within the shared library, and closing the shared library.
29426 */
29427 #include <dlfcn.h>
29428 static void *unixDlOpen(sqlite3_vfs *NotUsed, const char *zFilename){
29429   UNUSED_PARAMETER(NotUsed);
29430   return dlopen(zFilename, RTLD_NOW | RTLD_GLOBAL);
29431 }
29432
29433 /*
29434 ** SQLite calls this function immediately after a call to unixDlSym() or
29435 ** unixDlOpen() fails (returns a null pointer). If a more detailed error
29436 ** message is available, it is written to zBufOut. If no error message
29437 ** is available, zBufOut is left unmodified and SQLite uses a default
29438 ** error message.
29439 */
29440 static void unixDlError(sqlite3_vfs *NotUsed, int nBuf, char *zBufOut){
29441   const char *zErr;
29442   UNUSED_PARAMETER(NotUsed);
29443   unixEnterMutex();
29444   zErr = dlerror();
29445   if( zErr ){
29446     sqlite3_snprintf(nBuf, zBufOut, "%s", zErr);
29447   }
29448   unixLeaveMutex();
29449 }
29450 static void (*unixDlSym(sqlite3_vfs *NotUsed, void *p, const char*zSym))(void){
29451   /* 
29452   ** GCC with -pedantic-errors says that C90 does not allow a void* to be
29453   ** cast into a pointer to a function.  And yet the library dlsym() routine
29454   ** returns a void* which is really a pointer to a function.  So how do we
29455   ** use dlsym() with -pedantic-errors?
29456   **
29457   ** Variable x below is defined to be a pointer to a function taking
29458   ** parameters void* and const char* and returning a pointer to a function.
29459   ** We initialize x by assigning it a pointer to the dlsym() function.
29460   ** (That assignment requires a cast.)  Then we call the function that
29461   ** x points to.  
29462   **
29463   ** This work-around is unlikely to work correctly on any system where
29464   ** you really cannot cast a function pointer into void*.  But then, on the
29465   ** other hand, dlsym() will not work on such a system either, so we have
29466   ** not really lost anything.
29467   */
29468   void (*(*x)(void*,const char*))(void);
29469   UNUSED_PARAMETER(NotUsed);
29470   x = (void(*(*)(void*,const char*))(void))dlsym;
29471   return (*x)(p, zSym);
29472 }
29473 static void unixDlClose(sqlite3_vfs *NotUsed, void *pHandle){
29474   UNUSED_PARAMETER(NotUsed);
29475   dlclose(pHandle);
29476 }
29477 #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */
29478   #define unixDlOpen  0
29479   #define unixDlError 0
29480   #define unixDlSym   0
29481   #define unixDlClose 0
29482 #endif
29483
29484 /*
29485 ** Write nBuf bytes of random data to the supplied buffer zBuf.
29486 */
29487 static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){
29488   UNUSED_PARAMETER(NotUsed);
29489   assert((size_t)nBuf>=(sizeof(time_t)+sizeof(int)));
29490
29491   /* We have to initialize zBuf to prevent valgrind from reporting
29492   ** errors.  The reports issued by valgrind are incorrect - we would
29493   ** prefer that the randomness be increased by making use of the
29494   ** uninitialized space in zBuf - but valgrind errors tend to worry
29495   ** some users.  Rather than argue, it seems easier just to initialize
29496   ** the whole array and silence valgrind, even if that means less randomness
29497   ** in the random seed.
29498   **
29499   ** When testing, initializing zBuf[] to zero is all we do.  That means
29500   ** that we always use the same random number sequence.  This makes the
29501   ** tests repeatable.
29502   */
29503   memset(zBuf, 0, nBuf);
29504 #if !defined(SQLITE_TEST)
29505   {
29506     int pid, fd;
29507     fd = robust_open("/dev/urandom", O_RDONLY, 0);
29508     if( fd<0 ){
29509       time_t t;
29510       time(&t);
29511       memcpy(zBuf, &t, sizeof(t));
29512       pid = getpid();
29513       memcpy(&zBuf[sizeof(t)], &pid, sizeof(pid));
29514       assert( sizeof(t)+sizeof(pid)<=(size_t)nBuf );
29515       nBuf = sizeof(t) + sizeof(pid);
29516     }else{
29517       do{ nBuf = osRead(fd, zBuf, nBuf); }while( nBuf<0 && errno==EINTR );
29518       robust_close(0, fd, __LINE__);
29519     }
29520   }
29521 #endif
29522   return nBuf;
29523 }
29524
29525
29526 /*
29527 ** Sleep for a little while.  Return the amount of time slept.
29528 ** The argument is the number of microseconds we want to sleep.
29529 ** The return value is the number of microseconds of sleep actually
29530 ** requested from the underlying operating system, a number which
29531 ** might be greater than or equal to the argument, but not less
29532 ** than the argument.
29533 */
29534 static int unixSleep(sqlite3_vfs *NotUsed, int microseconds){
29535 #if OS_VXWORKS
29536   struct timespec sp;
29537
29538   sp.tv_sec = microseconds / 1000000;
29539   sp.tv_nsec = (microseconds % 1000000) * 1000;
29540   nanosleep(&sp, NULL);
29541   UNUSED_PARAMETER(NotUsed);
29542   return microseconds;
29543 #elif defined(HAVE_USLEEP) && HAVE_USLEEP
29544   usleep(microseconds);
29545   UNUSED_PARAMETER(NotUsed);
29546   return microseconds;
29547 #else
29548   int seconds = (microseconds+999999)/1000000;
29549   sleep(seconds);
29550   UNUSED_PARAMETER(NotUsed);
29551   return seconds*1000000;
29552 #endif
29553 }
29554
29555 /*
29556 ** The following variable, if set to a non-zero value, is interpreted as
29557 ** the number of seconds since 1970 and is used to set the result of
29558 ** sqlite3OsCurrentTime() during testing.
29559 */
29560 #ifdef SQLITE_TEST
29561 SQLITE_API int sqlite3_current_time = 0;  /* Fake system time in seconds since 1970. */
29562 #endif
29563
29564 /*
29565 ** Find the current time (in Universal Coordinated Time).  Write into *piNow
29566 ** the current time and date as a Julian Day number times 86_400_000.  In
29567 ** other words, write into *piNow the number of milliseconds since the Julian
29568 ** epoch of noon in Greenwich on November 24, 4714 B.C according to the
29569 ** proleptic Gregorian calendar.
29570 **
29571 ** On success, return 0.  Return 1 if the time and date cannot be found.
29572 */
29573 static int unixCurrentTimeInt64(sqlite3_vfs *NotUsed, sqlite3_int64 *piNow){
29574   static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
29575 #if defined(NO_GETTOD)
29576   time_t t;
29577   time(&t);
29578   *piNow = ((sqlite3_int64)t)*1000 + unixEpoch;
29579 #elif OS_VXWORKS
29580   struct timespec sNow;
29581   clock_gettime(CLOCK_REALTIME, &sNow);
29582   *piNow = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_nsec/1000000;
29583 #else
29584   struct timeval sNow;
29585   gettimeofday(&sNow, 0);
29586   *piNow = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_usec/1000;
29587 #endif
29588
29589 #ifdef SQLITE_TEST
29590   if( sqlite3_current_time ){
29591     *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
29592   }
29593 #endif
29594   UNUSED_PARAMETER(NotUsed);
29595   return 0;
29596 }
29597
29598 /*
29599 ** Find the current time (in Universal Coordinated Time).  Write the
29600 ** current time and date as a Julian Day number into *prNow and
29601 ** return 0.  Return 1 if the time and date cannot be found.
29602 */
29603 static int unixCurrentTime(sqlite3_vfs *NotUsed, double *prNow){
29604   sqlite3_int64 i;
29605   UNUSED_PARAMETER(NotUsed);
29606   unixCurrentTimeInt64(0, &i);
29607   *prNow = i/86400000.0;
29608   return 0;
29609 }
29610
29611 /*
29612 ** We added the xGetLastError() method with the intention of providing
29613 ** better low-level error messages when operating-system problems come up
29614 ** during SQLite operation.  But so far, none of that has been implemented
29615 ** in the core.  So this routine is never called.  For now, it is merely
29616 ** a place-holder.
29617 */
29618 static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){
29619   UNUSED_PARAMETER(NotUsed);
29620   UNUSED_PARAMETER(NotUsed2);
29621   UNUSED_PARAMETER(NotUsed3);
29622   return 0;
29623 }
29624
29625
29626 /*
29627 ************************ End of sqlite3_vfs methods ***************************
29628 ******************************************************************************/
29629
29630 /******************************************************************************
29631 ************************** Begin Proxy Locking ********************************
29632 **
29633 ** Proxy locking is a "uber-locking-method" in this sense:  It uses the
29634 ** other locking methods on secondary lock files.  Proxy locking is a
29635 ** meta-layer over top of the primitive locking implemented above.  For
29636 ** this reason, the division that implements of proxy locking is deferred
29637 ** until late in the file (here) after all of the other I/O methods have
29638 ** been defined - so that the primitive locking methods are available
29639 ** as services to help with the implementation of proxy locking.
29640 **
29641 ****
29642 **
29643 ** The default locking schemes in SQLite use byte-range locks on the
29644 ** database file to coordinate safe, concurrent access by multiple readers
29645 ** and writers [http://sqlite.org/lockingv3.html].  The five file locking
29646 ** states (UNLOCKED, PENDING, SHARED, RESERVED, EXCLUSIVE) are implemented
29647 ** as POSIX read & write locks over fixed set of locations (via fsctl),
29648 ** on AFP and SMB only exclusive byte-range locks are available via fsctl
29649 ** with _IOWR('z', 23, struct ByteRangeLockPB2) to track the same 5 states.
29650 ** To simulate a F_RDLCK on the shared range, on AFP a randomly selected
29651 ** address in the shared range is taken for a SHARED lock, the entire
29652 ** shared range is taken for an EXCLUSIVE lock):
29653 **
29654 **      PENDING_BYTE        0x40000000                  
29655 **      RESERVED_BYTE       0x40000001
29656 **      SHARED_RANGE        0x40000002 -> 0x40000200
29657 **
29658 ** This works well on the local file system, but shows a nearly 100x
29659 ** slowdown in read performance on AFP because the AFP client disables
29660 ** the read cache when byte-range locks are present.  Enabling the read
29661 ** cache exposes a cache coherency problem that is present on all OS X
29662 ** supported network file systems.  NFS and AFP both observe the
29663 ** close-to-open semantics for ensuring cache coherency
29664 ** [http://nfs.sourceforge.net/#faq_a8], which does not effectively
29665 ** address the requirements for concurrent database access by multiple
29666 ** readers and writers
29667 ** [http://www.nabble.com/SQLite-on-NFS-cache-coherency-td15655701.html].
29668 **
29669 ** To address the performance and cache coherency issues, proxy file locking
29670 ** changes the way database access is controlled by limiting access to a
29671 ** single host at a time and moving file locks off of the database file
29672 ** and onto a proxy file on the local file system.  
29673 **
29674 **
29675 ** Using proxy locks
29676 ** -----------------
29677 **
29678 ** C APIs
29679 **
29680 **  sqlite3_file_control(db, dbname, SQLITE_SET_LOCKPROXYFILE,
29681 **                       <proxy_path> | ":auto:");
29682 **  sqlite3_file_control(db, dbname, SQLITE_GET_LOCKPROXYFILE, &<proxy_path>);
29683 **
29684 **
29685 ** SQL pragmas
29686 **
29687 **  PRAGMA [database.]lock_proxy_file=<proxy_path> | :auto:
29688 **  PRAGMA [database.]lock_proxy_file
29689 **
29690 ** Specifying ":auto:" means that if there is a conch file with a matching
29691 ** host ID in it, the proxy path in the conch file will be used, otherwise
29692 ** a proxy path based on the user's temp dir
29693 ** (via confstr(_CS_DARWIN_USER_TEMP_DIR,...)) will be used and the
29694 ** actual proxy file name is generated from the name and path of the
29695 ** database file.  For example:
29696 **
29697 **       For database path "/Users/me/foo.db" 
29698 **       The lock path will be "<tmpdir>/sqliteplocks/_Users_me_foo.db:auto:")
29699 **
29700 ** Once a lock proxy is configured for a database connection, it can not
29701 ** be removed, however it may be switched to a different proxy path via
29702 ** the above APIs (assuming the conch file is not being held by another
29703 ** connection or process). 
29704 **
29705 **
29706 ** How proxy locking works
29707 ** -----------------------
29708 **
29709 ** Proxy file locking relies primarily on two new supporting files: 
29710 **
29711 **   *  conch file to limit access to the database file to a single host
29712 **      at a time
29713 **
29714 **   *  proxy file to act as a proxy for the advisory locks normally
29715 **      taken on the database
29716 **
29717 ** The conch file - to use a proxy file, sqlite must first "hold the conch"
29718 ** by taking an sqlite-style shared lock on the conch file, reading the
29719 ** contents and comparing the host's unique host ID (see below) and lock
29720 ** proxy path against the values stored in the conch.  The conch file is
29721 ** stored in the same directory as the database file and the file name
29722 ** is patterned after the database file name as ".<databasename>-conch".
29723 ** If the conch file does not exist, or it's contents do not match the
29724 ** host ID and/or proxy path, then the lock is escalated to an exclusive
29725 ** lock and the conch file contents is updated with the host ID and proxy
29726 ** path and the lock is downgraded to a shared lock again.  If the conch
29727 ** is held by another process (with a shared lock), the exclusive lock
29728 ** will fail and SQLITE_BUSY is returned.
29729 **
29730 ** The proxy file - a single-byte file used for all advisory file locks
29731 ** normally taken on the database file.   This allows for safe sharing
29732 ** of the database file for multiple readers and writers on the same
29733 ** host (the conch ensures that they all use the same local lock file).
29734 **
29735 ** Requesting the lock proxy does not immediately take the conch, it is
29736 ** only taken when the first request to lock database file is made.  
29737 ** This matches the semantics of the traditional locking behavior, where
29738 ** opening a connection to a database file does not take a lock on it.
29739 ** The shared lock and an open file descriptor are maintained until 
29740 ** the connection to the database is closed. 
29741 **
29742 ** The proxy file and the lock file are never deleted so they only need
29743 ** to be created the first time they are used.
29744 **
29745 ** Configuration options
29746 ** ---------------------
29747 **
29748 **  SQLITE_PREFER_PROXY_LOCKING
29749 **
29750 **       Database files accessed on non-local file systems are
29751 **       automatically configured for proxy locking, lock files are
29752 **       named automatically using the same logic as
29753 **       PRAGMA lock_proxy_file=":auto:"
29754 **    
29755 **  SQLITE_PROXY_DEBUG
29756 **
29757 **       Enables the logging of error messages during host id file
29758 **       retrieval and creation
29759 **
29760 **  LOCKPROXYDIR
29761 **
29762 **       Overrides the default directory used for lock proxy files that
29763 **       are named automatically via the ":auto:" setting
29764 **
29765 **  SQLITE_DEFAULT_PROXYDIR_PERMISSIONS
29766 **
29767 **       Permissions to use when creating a directory for storing the
29768 **       lock proxy files, only used when LOCKPROXYDIR is not set.
29769 **    
29770 **    
29771 ** As mentioned above, when compiled with SQLITE_PREFER_PROXY_LOCKING,
29772 ** setting the environment variable SQLITE_FORCE_PROXY_LOCKING to 1 will
29773 ** force proxy locking to be used for every database file opened, and 0
29774 ** will force automatic proxy locking to be disabled for all database
29775 ** files (explicity calling the SQLITE_SET_LOCKPROXYFILE pragma or
29776 ** sqlite_file_control API is not affected by SQLITE_FORCE_PROXY_LOCKING).
29777 */
29778
29779 /*
29780 ** Proxy locking is only available on MacOSX 
29781 */
29782 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29783
29784 /*
29785 ** The proxyLockingContext has the path and file structures for the remote 
29786 ** and local proxy files in it
29787 */
29788 typedef struct proxyLockingContext proxyLockingContext;
29789 struct proxyLockingContext {
29790   unixFile *conchFile;         /* Open conch file */
29791   char *conchFilePath;         /* Name of the conch file */
29792   unixFile *lockProxy;         /* Open proxy lock file */
29793   char *lockProxyPath;         /* Name of the proxy lock file */
29794   char *dbPath;                /* Name of the open file */
29795   int conchHeld;               /* 1 if the conch is held, -1 if lockless */
29796   void *oldLockingContext;     /* Original lockingcontext to restore on close */
29797   sqlite3_io_methods const *pOldMethod;     /* Original I/O methods for close */
29798 };
29799
29800 /* 
29801 ** The proxy lock file path for the database at dbPath is written into lPath, 
29802 ** which must point to valid, writable memory large enough for a maxLen length
29803 ** file path. 
29804 */
29805 static int proxyGetLockPath(const char *dbPath, char *lPath, size_t maxLen){
29806   int len;
29807   int dbLen;
29808   int i;
29809
29810 #ifdef LOCKPROXYDIR
29811   len = strlcpy(lPath, LOCKPROXYDIR, maxLen);
29812 #else
29813 # ifdef _CS_DARWIN_USER_TEMP_DIR
29814   {
29815     if( !confstr(_CS_DARWIN_USER_TEMP_DIR, lPath, maxLen) ){
29816       OSTRACE(("GETLOCKPATH  failed %s errno=%d pid=%d\n",
29817                lPath, errno, getpid()));
29818       return SQLITE_IOERR_LOCK;
29819     }
29820     len = strlcat(lPath, "sqliteplocks", maxLen);    
29821   }
29822 # else
29823   len = strlcpy(lPath, "/tmp/", maxLen);
29824 # endif
29825 #endif
29826
29827   if( lPath[len-1]!='/' ){
29828     len = strlcat(lPath, "/", maxLen);
29829   }
29830   
29831   /* transform the db path to a unique cache name */
29832   dbLen = (int)strlen(dbPath);
29833   for( i=0; i<dbLen && (i+len+7)<(int)maxLen; i++){
29834     char c = dbPath[i];
29835     lPath[i+len] = (c=='/')?'_':c;
29836   }
29837   lPath[i+len]='\0';
29838   strlcat(lPath, ":auto:", maxLen);
29839   OSTRACE(("GETLOCKPATH  proxy lock path=%s pid=%d\n", lPath, getpid()));
29840   return SQLITE_OK;
29841 }
29842
29843 /* 
29844  ** Creates the lock file and any missing directories in lockPath
29845  */
29846 static int proxyCreateLockPath(const char *lockPath){
29847   int i, len;
29848   char buf[MAXPATHLEN];
29849   int start = 0;
29850   
29851   assert(lockPath!=NULL);
29852   /* try to create all the intermediate directories */
29853   len = (int)strlen(lockPath);
29854   buf[0] = lockPath[0];
29855   for( i=1; i<len; i++ ){
29856     if( lockPath[i] == '/' && (i - start > 0) ){
29857       /* only mkdir if leaf dir != "." or "/" or ".." */
29858       if( i-start>2 || (i-start==1 && buf[start] != '.' && buf[start] != '/') 
29859          || (i-start==2 && buf[start] != '.' && buf[start+1] != '.') ){
29860         buf[i]='\0';
29861         if( mkdir(buf, SQLITE_DEFAULT_PROXYDIR_PERMISSIONS) ){
29862           int err=errno;
29863           if( err!=EEXIST ) {
29864             OSTRACE(("CREATELOCKPATH  FAILED creating %s, "
29865                      "'%s' proxy lock path=%s pid=%d\n",
29866                      buf, strerror(err), lockPath, getpid()));
29867             return err;
29868           }
29869         }
29870       }
29871       start=i+1;
29872     }
29873     buf[i] = lockPath[i];
29874   }
29875   OSTRACE(("CREATELOCKPATH  proxy lock path=%s pid=%d\n", lockPath, getpid()));
29876   return 0;
29877 }
29878
29879 /*
29880 ** Create a new VFS file descriptor (stored in memory obtained from
29881 ** sqlite3_malloc) and open the file named "path" in the file descriptor.
29882 **
29883 ** The caller is responsible not only for closing the file descriptor
29884 ** but also for freeing the memory associated with the file descriptor.
29885 */
29886 static int proxyCreateUnixFile(
29887     const char *path,        /* path for the new unixFile */
29888     unixFile **ppFile,       /* unixFile created and returned by ref */
29889     int islockfile           /* if non zero missing dirs will be created */
29890 ) {
29891   int fd = -1;
29892   unixFile *pNew;
29893   int rc = SQLITE_OK;
29894   int openFlags = O_RDWR | O_CREAT;
29895   sqlite3_vfs dummyVfs;
29896   int terrno = 0;
29897   UnixUnusedFd *pUnused = NULL;
29898
29899   /* 1. first try to open/create the file
29900   ** 2. if that fails, and this is a lock file (not-conch), try creating
29901   ** the parent directories and then try again.
29902   ** 3. if that fails, try to open the file read-only
29903   ** otherwise return BUSY (if lock file) or CANTOPEN for the conch file
29904   */
29905   pUnused = findReusableFd(path, openFlags);
29906   if( pUnused ){
29907     fd = pUnused->fd;
29908   }else{
29909     pUnused = sqlite3_malloc(sizeof(*pUnused));
29910     if( !pUnused ){
29911       return SQLITE_NOMEM;
29912     }
29913   }
29914   if( fd<0 ){
29915     fd = robust_open(path, openFlags, SQLITE_DEFAULT_FILE_PERMISSIONS);
29916     terrno = errno;
29917     if( fd<0 && errno==ENOENT && islockfile ){
29918       if( proxyCreateLockPath(path) == SQLITE_OK ){
29919         fd = robust_open(path, openFlags, SQLITE_DEFAULT_FILE_PERMISSIONS);
29920       }
29921     }
29922   }
29923   if( fd<0 ){
29924     openFlags = O_RDONLY;
29925     fd = robust_open(path, openFlags, SQLITE_DEFAULT_FILE_PERMISSIONS);
29926     terrno = errno;
29927   }
29928   if( fd<0 ){
29929     if( islockfile ){
29930       return SQLITE_BUSY;
29931     }
29932     switch (terrno) {
29933       case EACCES:
29934         return SQLITE_PERM;
29935       case EIO: 
29936         return SQLITE_IOERR_LOCK; /* even though it is the conch */
29937       default:
29938         return SQLITE_CANTOPEN_BKPT;
29939     }
29940   }
29941   
29942   pNew = (unixFile *)sqlite3_malloc(sizeof(*pNew));
29943   if( pNew==NULL ){
29944     rc = SQLITE_NOMEM;
29945     goto end_create_proxy;
29946   }
29947   memset(pNew, 0, sizeof(unixFile));
29948   pNew->openFlags = openFlags;
29949   memset(&dummyVfs, 0, sizeof(dummyVfs));
29950   dummyVfs.pAppData = (void*)&autolockIoFinder;
29951   dummyVfs.zName = "dummy";
29952   pUnused->fd = fd;
29953   pUnused->flags = openFlags;
29954   pNew->pUnused = pUnused;
29955   
29956   rc = fillInUnixFile(&dummyVfs, fd, 0, (sqlite3_file*)pNew, path, 0, 0, 0);
29957   if( rc==SQLITE_OK ){
29958     *ppFile = pNew;
29959     return SQLITE_OK;
29960   }
29961 end_create_proxy:    
29962   robust_close(pNew, fd, __LINE__);
29963   sqlite3_free(pNew);
29964   sqlite3_free(pUnused);
29965   return rc;
29966 }
29967
29968 #ifdef SQLITE_TEST
29969 /* simulate multiple hosts by creating unique hostid file paths */
29970 SQLITE_API int sqlite3_hostid_num = 0;
29971 #endif
29972
29973 #define PROXY_HOSTIDLEN    16  /* conch file host id length */
29974
29975 /* Not always defined in the headers as it ought to be */
29976 extern int gethostuuid(uuid_t id, const struct timespec *wait);
29977
29978 /* get the host ID via gethostuuid(), pHostID must point to PROXY_HOSTIDLEN 
29979 ** bytes of writable memory.
29980 */
29981 static int proxyGetHostID(unsigned char *pHostID, int *pError){
29982   assert(PROXY_HOSTIDLEN == sizeof(uuid_t));
29983   memset(pHostID, 0, PROXY_HOSTIDLEN);
29984 #if defined(__MAX_OS_X_VERSION_MIN_REQUIRED)\
29985                && __MAC_OS_X_VERSION_MIN_REQUIRED<1050
29986   {
29987     static const struct timespec timeout = {1, 0}; /* 1 sec timeout */
29988     if( gethostuuid(pHostID, &timeout) ){
29989       int err = errno;
29990       if( pError ){
29991         *pError = err;
29992       }
29993       return SQLITE_IOERR;
29994     }
29995   }
29996 #endif
29997 #ifdef SQLITE_TEST
29998   /* simulate multiple hosts by creating unique hostid file paths */
29999   if( sqlite3_hostid_num != 0){
30000     pHostID[0] = (char)(pHostID[0] + (char)(sqlite3_hostid_num & 0xFF));
30001   }
30002 #endif
30003   
30004   return SQLITE_OK;
30005 }
30006
30007 /* The conch file contains the header, host id and lock file path
30008  */
30009 #define PROXY_CONCHVERSION 2   /* 1-byte header, 16-byte host id, path */
30010 #define PROXY_HEADERLEN    1   /* conch file header length */
30011 #define PROXY_PATHINDEX    (PROXY_HEADERLEN+PROXY_HOSTIDLEN)
30012 #define PROXY_MAXCONCHLEN  (PROXY_HEADERLEN+PROXY_HOSTIDLEN+MAXPATHLEN)
30013
30014 /* 
30015 ** Takes an open conch file, copies the contents to a new path and then moves 
30016 ** it back.  The newly created file's file descriptor is assigned to the
30017 ** conch file structure and finally the original conch file descriptor is 
30018 ** closed.  Returns zero if successful.
30019 */
30020 static int proxyBreakConchLock(unixFile *pFile, uuid_t myHostID){
30021   proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; 
30022   unixFile *conchFile = pCtx->conchFile;
30023   char tPath[MAXPATHLEN];
30024   char buf[PROXY_MAXCONCHLEN];
30025   char *cPath = pCtx->conchFilePath;
30026   size_t readLen = 0;
30027   size_t pathLen = 0;
30028   char errmsg[64] = "";
30029   int fd = -1;
30030   int rc = -1;
30031   UNUSED_PARAMETER(myHostID);
30032
30033   /* create a new path by replace the trailing '-conch' with '-break' */
30034   pathLen = strlcpy(tPath, cPath, MAXPATHLEN);
30035   if( pathLen>MAXPATHLEN || pathLen<6 || 
30036      (strlcpy(&tPath[pathLen-5], "break", 6) != 5) ){
30037     sqlite3_snprintf(sizeof(errmsg),errmsg,"path error (len %d)",(int)pathLen);
30038     goto end_breaklock;
30039   }
30040   /* read the conch content */
30041   readLen = osPread(conchFile->h, buf, PROXY_MAXCONCHLEN, 0);
30042   if( readLen<PROXY_PATHINDEX ){
30043     sqlite3_snprintf(sizeof(errmsg),errmsg,"read error (len %d)",(int)readLen);
30044     goto end_breaklock;
30045   }
30046   /* write it out to the temporary break file */
30047   fd = robust_open(tPath, (O_RDWR|O_CREAT|O_EXCL),
30048                    SQLITE_DEFAULT_FILE_PERMISSIONS);
30049   if( fd<0 ){
30050     sqlite3_snprintf(sizeof(errmsg), errmsg, "create failed (%d)", errno);
30051     goto end_breaklock;
30052   }
30053   if( osPwrite(fd, buf, readLen, 0) != (ssize_t)readLen ){
30054     sqlite3_snprintf(sizeof(errmsg), errmsg, "write failed (%d)", errno);
30055     goto end_breaklock;
30056   }
30057   if( rename(tPath, cPath) ){
30058     sqlite3_snprintf(sizeof(errmsg), errmsg, "rename failed (%d)", errno);
30059     goto end_breaklock;
30060   }
30061   rc = 0;
30062   fprintf(stderr, "broke stale lock on %s\n", cPath);
30063   robust_close(pFile, conchFile->h, __LINE__);
30064   conchFile->h = fd;
30065   conchFile->openFlags = O_RDWR | O_CREAT;
30066
30067 end_breaklock:
30068   if( rc ){
30069     if( fd>=0 ){
30070       osUnlink(tPath);
30071       robust_close(pFile, fd, __LINE__);
30072     }
30073     fprintf(stderr, "failed to break stale lock on %s, %s\n", cPath, errmsg);
30074   }
30075   return rc;
30076 }
30077
30078 /* Take the requested lock on the conch file and break a stale lock if the 
30079 ** host id matches.
30080 */
30081 static int proxyConchLock(unixFile *pFile, uuid_t myHostID, int lockType){
30082   proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; 
30083   unixFile *conchFile = pCtx->conchFile;
30084   int rc = SQLITE_OK;
30085   int nTries = 0;
30086   struct timespec conchModTime;
30087   
30088   do {
30089     rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType);
30090     nTries ++;
30091     if( rc==SQLITE_BUSY ){
30092       /* If the lock failed (busy):
30093        * 1st try: get the mod time of the conch, wait 0.5s and try again. 
30094        * 2nd try: fail if the mod time changed or host id is different, wait 
30095        *           10 sec and try again
30096        * 3rd try: break the lock unless the mod time has changed.
30097        */
30098       struct stat buf;
30099       if( osFstat(conchFile->h, &buf) ){
30100         pFile->lastErrno = errno;
30101         return SQLITE_IOERR_LOCK;
30102       }
30103       
30104       if( nTries==1 ){
30105         conchModTime = buf.st_mtimespec;
30106         usleep(500000); /* wait 0.5 sec and try the lock again*/
30107         continue;  
30108       }
30109
30110       assert( nTries>1 );
30111       if( conchModTime.tv_sec != buf.st_mtimespec.tv_sec || 
30112          conchModTime.tv_nsec != buf.st_mtimespec.tv_nsec ){
30113         return SQLITE_BUSY;
30114       }
30115       
30116       if( nTries==2 ){  
30117         char tBuf[PROXY_MAXCONCHLEN];
30118         int len = osPread(conchFile->h, tBuf, PROXY_MAXCONCHLEN, 0);
30119         if( len<0 ){
30120           pFile->lastErrno = errno;
30121           return SQLITE_IOERR_LOCK;
30122         }
30123         if( len>PROXY_PATHINDEX && tBuf[0]==(char)PROXY_CONCHVERSION){
30124           /* don't break the lock if the host id doesn't match */
30125           if( 0!=memcmp(&tBuf[PROXY_HEADERLEN], myHostID, PROXY_HOSTIDLEN) ){
30126             return SQLITE_BUSY;
30127           }
30128         }else{
30129           /* don't break the lock on short read or a version mismatch */
30130           return SQLITE_BUSY;
30131         }
30132         usleep(10000000); /* wait 10 sec and try the lock again */
30133         continue; 
30134       }
30135       
30136       assert( nTries==3 );
30137       if( 0==proxyBreakConchLock(pFile, myHostID) ){
30138         rc = SQLITE_OK;
30139         if( lockType==EXCLUSIVE_LOCK ){
30140           rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, SHARED_LOCK);          
30141         }
30142         if( !rc ){
30143           rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType);
30144         }
30145       }
30146     }
30147   } while( rc==SQLITE_BUSY && nTries<3 );
30148   
30149   return rc;
30150 }
30151
30152 /* Takes the conch by taking a shared lock and read the contents conch, if 
30153 ** lockPath is non-NULL, the host ID and lock file path must match.  A NULL 
30154 ** lockPath means that the lockPath in the conch file will be used if the 
30155 ** host IDs match, or a new lock path will be generated automatically 
30156 ** and written to the conch file.
30157 */
30158 static int proxyTakeConch(unixFile *pFile){
30159   proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext; 
30160   
30161   if( pCtx->conchHeld!=0 ){
30162     return SQLITE_OK;
30163   }else{
30164     unixFile *conchFile = pCtx->conchFile;
30165     uuid_t myHostID;
30166     int pError = 0;
30167     char readBuf[PROXY_MAXCONCHLEN];
30168     char lockPath[MAXPATHLEN];
30169     char *tempLockPath = NULL;
30170     int rc = SQLITE_OK;
30171     int createConch = 0;
30172     int hostIdMatch = 0;
30173     int readLen = 0;
30174     int tryOldLockPath = 0;
30175     int forceNewLockPath = 0;
30176     
30177     OSTRACE(("TAKECONCH  %d for %s pid=%d\n", conchFile->h,
30178              (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), getpid()));
30179
30180     rc = proxyGetHostID(myHostID, &pError);
30181     if( (rc&0xff)==SQLITE_IOERR ){
30182       pFile->lastErrno = pError;
30183       goto end_takeconch;
30184     }
30185     rc = proxyConchLock(pFile, myHostID, SHARED_LOCK);
30186     if( rc!=SQLITE_OK ){
30187       goto end_takeconch;
30188     }
30189     /* read the existing conch file */
30190     readLen = seekAndRead((unixFile*)conchFile, 0, readBuf, PROXY_MAXCONCHLEN);
30191     if( readLen<0 ){
30192       /* I/O error: lastErrno set by seekAndRead */
30193       pFile->lastErrno = conchFile->lastErrno;
30194       rc = SQLITE_IOERR_READ;
30195       goto end_takeconch;
30196     }else if( readLen<=(PROXY_HEADERLEN+PROXY_HOSTIDLEN) || 
30197              readBuf[0]!=(char)PROXY_CONCHVERSION ){
30198       /* a short read or version format mismatch means we need to create a new 
30199       ** conch file. 
30200       */
30201       createConch = 1;
30202     }
30203     /* if the host id matches and the lock path already exists in the conch
30204     ** we'll try to use the path there, if we can't open that path, we'll 
30205     ** retry with a new auto-generated path 
30206     */
30207     do { /* in case we need to try again for an :auto: named lock file */
30208
30209       if( !createConch && !forceNewLockPath ){
30210         hostIdMatch = !memcmp(&readBuf[PROXY_HEADERLEN], myHostID, 
30211                                   PROXY_HOSTIDLEN);
30212         /* if the conch has data compare the contents */
30213         if( !pCtx->lockProxyPath ){
30214           /* for auto-named local lock file, just check the host ID and we'll
30215            ** use the local lock file path that's already in there
30216            */
30217           if( hostIdMatch ){
30218             size_t pathLen = (readLen - PROXY_PATHINDEX);
30219             
30220             if( pathLen>=MAXPATHLEN ){
30221               pathLen=MAXPATHLEN-1;
30222             }
30223             memcpy(lockPath, &readBuf[PROXY_PATHINDEX], pathLen);
30224             lockPath[pathLen] = 0;
30225             tempLockPath = lockPath;
30226             tryOldLockPath = 1;
30227             /* create a copy of the lock path if the conch is taken */
30228             goto end_takeconch;
30229           }
30230         }else if( hostIdMatch
30231                && !strncmp(pCtx->lockProxyPath, &readBuf[PROXY_PATHINDEX],
30232                            readLen-PROXY_PATHINDEX)
30233         ){
30234           /* conch host and lock path match */
30235           goto end_takeconch; 
30236         }
30237       }
30238       
30239       /* if the conch isn't writable and doesn't match, we can't take it */
30240       if( (conchFile->openFlags&O_RDWR) == 0 ){
30241         rc = SQLITE_BUSY;
30242         goto end_takeconch;
30243       }
30244       
30245       /* either the conch didn't match or we need to create a new one */
30246       if( !pCtx->lockProxyPath ){
30247         proxyGetLockPath(pCtx->dbPath, lockPath, MAXPATHLEN);
30248         tempLockPath = lockPath;
30249         /* create a copy of the lock path _only_ if the conch is taken */
30250       }
30251       
30252       /* update conch with host and path (this will fail if other process
30253       ** has a shared lock already), if the host id matches, use the big
30254       ** stick.
30255       */
30256       futimes(conchFile->h, NULL);
30257       if( hostIdMatch && !createConch ){
30258         if( conchFile->pInode && conchFile->pInode->nShared>1 ){
30259           /* We are trying for an exclusive lock but another thread in this
30260            ** same process is still holding a shared lock. */
30261           rc = SQLITE_BUSY;
30262         } else {          
30263           rc = proxyConchLock(pFile, myHostID, EXCLUSIVE_LOCK);
30264         }
30265       }else{
30266         rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, EXCLUSIVE_LOCK);
30267       }
30268       if( rc==SQLITE_OK ){
30269         char writeBuffer[PROXY_MAXCONCHLEN];
30270         int writeSize = 0;
30271         
30272         writeBuffer[0] = (char)PROXY_CONCHVERSION;
30273         memcpy(&writeBuffer[PROXY_HEADERLEN], myHostID, PROXY_HOSTIDLEN);
30274         if( pCtx->lockProxyPath!=NULL ){
30275           strlcpy(&writeBuffer[PROXY_PATHINDEX], pCtx->lockProxyPath, MAXPATHLEN);
30276         }else{
30277           strlcpy(&writeBuffer[PROXY_PATHINDEX], tempLockPath, MAXPATHLEN);
30278         }
30279         writeSize = PROXY_PATHINDEX + strlen(&writeBuffer[PROXY_PATHINDEX]);
30280         robust_ftruncate(conchFile->h, writeSize);
30281         rc = unixWrite((sqlite3_file *)conchFile, writeBuffer, writeSize, 0);
30282         fsync(conchFile->h);
30283         /* If we created a new conch file (not just updated the contents of a 
30284          ** valid conch file), try to match the permissions of the database 
30285          */
30286         if( rc==SQLITE_OK && createConch ){
30287           struct stat buf;
30288           int err = osFstat(pFile->h, &buf);
30289           if( err==0 ){
30290             mode_t cmode = buf.st_mode&(S_IRUSR|S_IWUSR | S_IRGRP|S_IWGRP |
30291                                         S_IROTH|S_IWOTH);
30292             /* try to match the database file R/W permissions, ignore failure */
30293 #ifndef SQLITE_PROXY_DEBUG
30294             osFchmod(conchFile->h, cmode);
30295 #else
30296             do{
30297               rc = osFchmod(conchFile->h, cmode);
30298             }while( rc==(-1) && errno==EINTR );
30299             if( rc!=0 ){
30300               int code = errno;
30301               fprintf(stderr, "fchmod %o FAILED with %d %s\n",
30302                       cmode, code, strerror(code));
30303             } else {
30304               fprintf(stderr, "fchmod %o SUCCEDED\n",cmode);
30305             }
30306           }else{
30307             int code = errno;
30308             fprintf(stderr, "STAT FAILED[%d] with %d %s\n", 
30309                     err, code, strerror(code));
30310 #endif
30311           }
30312         }
30313       }
30314       conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, SHARED_LOCK);
30315       
30316     end_takeconch:
30317       OSTRACE(("TRANSPROXY: CLOSE  %d\n", pFile->h));
30318       if( rc==SQLITE_OK && pFile->openFlags ){
30319         if( pFile->h>=0 ){
30320           robust_close(pFile, pFile->h, __LINE__);
30321         }
30322         pFile->h = -1;
30323         int fd = robust_open(pCtx->dbPath, pFile->openFlags,
30324                       SQLITE_DEFAULT_FILE_PERMISSIONS);
30325         OSTRACE(("TRANSPROXY: OPEN  %d\n", fd));
30326         if( fd>=0 ){
30327           pFile->h = fd;
30328         }else{
30329           rc=SQLITE_CANTOPEN_BKPT; /* SQLITE_BUSY? proxyTakeConch called
30330            during locking */
30331         }
30332       }
30333       if( rc==SQLITE_OK && !pCtx->lockProxy ){
30334         char *path = tempLockPath ? tempLockPath : pCtx->lockProxyPath;
30335         rc = proxyCreateUnixFile(path, &pCtx->lockProxy, 1);
30336         if( rc!=SQLITE_OK && rc!=SQLITE_NOMEM && tryOldLockPath ){
30337           /* we couldn't create the proxy lock file with the old lock file path
30338            ** so try again via auto-naming 
30339            */
30340           forceNewLockPath = 1;
30341           tryOldLockPath = 0;
30342           continue; /* go back to the do {} while start point, try again */
30343         }
30344       }
30345       if( rc==SQLITE_OK ){
30346         /* Need to make a copy of path if we extracted the value
30347          ** from the conch file or the path was allocated on the stack
30348          */
30349         if( tempLockPath ){
30350           pCtx->lockProxyPath = sqlite3DbStrDup(0, tempLockPath);
30351           if( !pCtx->lockProxyPath ){
30352             rc = SQLITE_NOMEM;
30353           }
30354         }
30355       }
30356       if( rc==SQLITE_OK ){
30357         pCtx->conchHeld = 1;
30358         
30359         if( pCtx->lockProxy->pMethod == &afpIoMethods ){
30360           afpLockingContext *afpCtx;
30361           afpCtx = (afpLockingContext *)pCtx->lockProxy->lockingContext;
30362           afpCtx->dbPath = pCtx->lockProxyPath;
30363         }
30364       } else {
30365         conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK);
30366       }
30367       OSTRACE(("TAKECONCH  %d %s\n", conchFile->h,
30368                rc==SQLITE_OK?"ok":"failed"));
30369       return rc;
30370     } while (1); /* in case we need to retry the :auto: lock file - 
30371                  ** we should never get here except via the 'continue' call. */
30372   }
30373 }
30374
30375 /*
30376 ** If pFile holds a lock on a conch file, then release that lock.
30377 */
30378 static int proxyReleaseConch(unixFile *pFile){
30379   int rc = SQLITE_OK;         /* Subroutine return code */
30380   proxyLockingContext *pCtx;  /* The locking context for the proxy lock */
30381   unixFile *conchFile;        /* Name of the conch file */
30382
30383   pCtx = (proxyLockingContext *)pFile->lockingContext;
30384   conchFile = pCtx->conchFile;
30385   OSTRACE(("RELEASECONCH  %d for %s pid=%d\n", conchFile->h,
30386            (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), 
30387            getpid()));
30388   if( pCtx->conchHeld>0 ){
30389     rc = conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK);
30390   }
30391   pCtx->conchHeld = 0;
30392   OSTRACE(("RELEASECONCH  %d %s\n", conchFile->h,
30393            (rc==SQLITE_OK ? "ok" : "failed")));
30394   return rc;
30395 }
30396
30397 /*
30398 ** Given the name of a database file, compute the name of its conch file.
30399 ** Store the conch filename in memory obtained from sqlite3_malloc().
30400 ** Make *pConchPath point to the new name.  Return SQLITE_OK on success
30401 ** or SQLITE_NOMEM if unable to obtain memory.
30402 **
30403 ** The caller is responsible for ensuring that the allocated memory
30404 ** space is eventually freed.
30405 **
30406 ** *pConchPath is set to NULL if a memory allocation error occurs.
30407 */
30408 static int proxyCreateConchPathname(char *dbPath, char **pConchPath){
30409   int i;                        /* Loop counter */
30410   int len = (int)strlen(dbPath); /* Length of database filename - dbPath */
30411   char *conchPath;              /* buffer in which to construct conch name */
30412
30413   /* Allocate space for the conch filename and initialize the name to
30414   ** the name of the original database file. */  
30415   *pConchPath = conchPath = (char *)sqlite3_malloc(len + 8);
30416   if( conchPath==0 ){
30417     return SQLITE_NOMEM;
30418   }
30419   memcpy(conchPath, dbPath, len+1);
30420   
30421   /* now insert a "." before the last / character */
30422   for( i=(len-1); i>=0; i-- ){
30423     if( conchPath[i]=='/' ){
30424       i++;
30425       break;
30426     }
30427   }
30428   conchPath[i]='.';
30429   while ( i<len ){
30430     conchPath[i+1]=dbPath[i];
30431     i++;
30432   }
30433
30434   /* append the "-conch" suffix to the file */
30435   memcpy(&conchPath[i+1], "-conch", 7);
30436   assert( (int)strlen(conchPath) == len+7 );
30437
30438   return SQLITE_OK;
30439 }
30440
30441
30442 /* Takes a fully configured proxy locking-style unix file and switches
30443 ** the local lock file path 
30444 */
30445 static int switchLockProxyPath(unixFile *pFile, const char *path) {
30446   proxyLockingContext *pCtx = (proxyLockingContext*)pFile->lockingContext;
30447   char *oldPath = pCtx->lockProxyPath;
30448   int rc = SQLITE_OK;
30449
30450   if( pFile->eFileLock!=NO_LOCK ){
30451     return SQLITE_BUSY;
30452   }  
30453
30454   /* nothing to do if the path is NULL, :auto: or matches the existing path */
30455   if( !path || path[0]=='\0' || !strcmp(path, ":auto:") ||
30456     (oldPath && !strncmp(oldPath, path, MAXPATHLEN)) ){
30457     return SQLITE_OK;
30458   }else{
30459     unixFile *lockProxy = pCtx->lockProxy;
30460     pCtx->lockProxy=NULL;
30461     pCtx->conchHeld = 0;
30462     if( lockProxy!=NULL ){
30463       rc=lockProxy->pMethod->xClose((sqlite3_file *)lockProxy);
30464       if( rc ) return rc;
30465       sqlite3_free(lockProxy);
30466     }
30467     sqlite3_free(oldPath);
30468     pCtx->lockProxyPath = sqlite3DbStrDup(0, path);
30469   }
30470   
30471   return rc;
30472 }
30473
30474 /*
30475 ** pFile is a file that has been opened by a prior xOpen call.  dbPath
30476 ** is a string buffer at least MAXPATHLEN+1 characters in size.
30477 **
30478 ** This routine find the filename associated with pFile and writes it
30479 ** int dbPath.
30480 */
30481 static int proxyGetDbPathForUnixFile(unixFile *pFile, char *dbPath){
30482 #if defined(__APPLE__)
30483   if( pFile->pMethod == &afpIoMethods ){
30484     /* afp style keeps a reference to the db path in the filePath field 
30485     ** of the struct */
30486     assert( (int)strlen((char*)pFile->lockingContext)<=MAXPATHLEN );
30487     strlcpy(dbPath, ((afpLockingContext *)pFile->lockingContext)->dbPath, MAXPATHLEN);
30488   } else
30489 #endif
30490   if( pFile->pMethod == &dotlockIoMethods ){
30491     /* dot lock style uses the locking context to store the dot lock
30492     ** file path */
30493     int len = strlen((char *)pFile->lockingContext) - strlen(DOTLOCK_SUFFIX);
30494     memcpy(dbPath, (char *)pFile->lockingContext, len + 1);
30495   }else{
30496     /* all other styles use the locking context to store the db file path */
30497     assert( strlen((char*)pFile->lockingContext)<=MAXPATHLEN );
30498     strlcpy(dbPath, (char *)pFile->lockingContext, MAXPATHLEN);
30499   }
30500   return SQLITE_OK;
30501 }
30502
30503 /*
30504 ** Takes an already filled in unix file and alters it so all file locking 
30505 ** will be performed on the local proxy lock file.  The following fields
30506 ** are preserved in the locking context so that they can be restored and 
30507 ** the unix structure properly cleaned up at close time:
30508 **  ->lockingContext
30509 **  ->pMethod
30510 */
30511 static int proxyTransformUnixFile(unixFile *pFile, const char *path) {
30512   proxyLockingContext *pCtx;
30513   char dbPath[MAXPATHLEN+1];       /* Name of the database file */
30514   char *lockPath=NULL;
30515   int rc = SQLITE_OK;
30516   
30517   if( pFile->eFileLock!=NO_LOCK ){
30518     return SQLITE_BUSY;
30519   }
30520   proxyGetDbPathForUnixFile(pFile, dbPath);
30521   if( !path || path[0]=='\0' || !strcmp(path, ":auto:") ){
30522     lockPath=NULL;
30523   }else{
30524     lockPath=(char *)path;
30525   }
30526   
30527   OSTRACE(("TRANSPROXY  %d for %s pid=%d\n", pFile->h,
30528            (lockPath ? lockPath : ":auto:"), getpid()));
30529
30530   pCtx = sqlite3_malloc( sizeof(*pCtx) );
30531   if( pCtx==0 ){
30532     return SQLITE_NOMEM;
30533   }
30534   memset(pCtx, 0, sizeof(*pCtx));
30535
30536   rc = proxyCreateConchPathname(dbPath, &pCtx->conchFilePath);
30537   if( rc==SQLITE_OK ){
30538     rc = proxyCreateUnixFile(pCtx->conchFilePath, &pCtx->conchFile, 0);
30539     if( rc==SQLITE_CANTOPEN && ((pFile->openFlags&O_RDWR) == 0) ){
30540       /* if (a) the open flags are not O_RDWR, (b) the conch isn't there, and
30541       ** (c) the file system is read-only, then enable no-locking access.
30542       ** Ugh, since O_RDONLY==0x0000 we test for !O_RDWR since unixOpen asserts
30543       ** that openFlags will have only one of O_RDONLY or O_RDWR.
30544       */
30545       struct statfs fsInfo;
30546       struct stat conchInfo;
30547       int goLockless = 0;
30548
30549       if( osStat(pCtx->conchFilePath, &conchInfo) == -1 ) {
30550         int err = errno;
30551         if( (err==ENOENT) && (statfs(dbPath, &fsInfo) != -1) ){
30552           goLockless = (fsInfo.f_flags&MNT_RDONLY) == MNT_RDONLY;
30553         }
30554       }
30555       if( goLockless ){
30556         pCtx->conchHeld = -1; /* read only FS/ lockless */
30557         rc = SQLITE_OK;
30558       }
30559     }
30560   }  
30561   if( rc==SQLITE_OK && lockPath ){
30562     pCtx->lockProxyPath = sqlite3DbStrDup(0, lockPath);
30563   }
30564
30565   if( rc==SQLITE_OK ){
30566     pCtx->dbPath = sqlite3DbStrDup(0, dbPath);
30567     if( pCtx->dbPath==NULL ){
30568       rc = SQLITE_NOMEM;
30569     }
30570   }
30571   if( rc==SQLITE_OK ){
30572     /* all memory is allocated, proxys are created and assigned, 
30573     ** switch the locking context and pMethod then return.
30574     */
30575     pCtx->oldLockingContext = pFile->lockingContext;
30576     pFile->lockingContext = pCtx;
30577     pCtx->pOldMethod = pFile->pMethod;
30578     pFile->pMethod = &proxyIoMethods;
30579   }else{
30580     if( pCtx->conchFile ){ 
30581       pCtx->conchFile->pMethod->xClose((sqlite3_file *)pCtx->conchFile);
30582       sqlite3_free(pCtx->conchFile);
30583     }
30584     sqlite3DbFree(0, pCtx->lockProxyPath);
30585     sqlite3_free(pCtx->conchFilePath); 
30586     sqlite3_free(pCtx);
30587   }
30588   OSTRACE(("TRANSPROXY  %d %s\n", pFile->h,
30589            (rc==SQLITE_OK ? "ok" : "failed")));
30590   return rc;
30591 }
30592
30593
30594 /*
30595 ** This routine handles sqlite3_file_control() calls that are specific
30596 ** to proxy locking.
30597 */
30598 static int proxyFileControl(sqlite3_file *id, int op, void *pArg){
30599   switch( op ){
30600     case SQLITE_GET_LOCKPROXYFILE: {
30601       unixFile *pFile = (unixFile*)id;
30602       if( pFile->pMethod == &proxyIoMethods ){
30603         proxyLockingContext *pCtx = (proxyLockingContext*)pFile->lockingContext;
30604         proxyTakeConch(pFile);
30605         if( pCtx->lockProxyPath ){
30606           *(const char **)pArg = pCtx->lockProxyPath;
30607         }else{
30608           *(const char **)pArg = ":auto: (not held)";
30609         }
30610       } else {
30611         *(const char **)pArg = NULL;
30612       }
30613       return SQLITE_OK;
30614     }
30615     case SQLITE_SET_LOCKPROXYFILE: {
30616       unixFile *pFile = (unixFile*)id;
30617       int rc = SQLITE_OK;
30618       int isProxyStyle = (pFile->pMethod == &proxyIoMethods);
30619       if( pArg==NULL || (const char *)pArg==0 ){
30620         if( isProxyStyle ){
30621           /* turn off proxy locking - not supported */
30622           rc = SQLITE_ERROR /*SQLITE_PROTOCOL? SQLITE_MISUSE?*/;
30623         }else{
30624           /* turn off proxy locking - already off - NOOP */
30625           rc = SQLITE_OK;
30626         }
30627       }else{
30628         const char *proxyPath = (const char *)pArg;
30629         if( isProxyStyle ){
30630           proxyLockingContext *pCtx = 
30631             (proxyLockingContext*)pFile->lockingContext;
30632           if( !strcmp(pArg, ":auto:") 
30633            || (pCtx->lockProxyPath &&
30634                !strncmp(pCtx->lockProxyPath, proxyPath, MAXPATHLEN))
30635           ){
30636             rc = SQLITE_OK;
30637           }else{
30638             rc = switchLockProxyPath(pFile, proxyPath);
30639           }
30640         }else{
30641           /* turn on proxy file locking */
30642           rc = proxyTransformUnixFile(pFile, proxyPath);
30643         }
30644       }
30645       return rc;
30646     }
30647     default: {
30648       assert( 0 );  /* The call assures that only valid opcodes are sent */
30649     }
30650   }
30651   /*NOTREACHED*/
30652   return SQLITE_ERROR;
30653 }
30654
30655 /*
30656 ** Within this division (the proxying locking implementation) the procedures
30657 ** above this point are all utilities.  The lock-related methods of the
30658 ** proxy-locking sqlite3_io_method object follow.
30659 */
30660
30661
30662 /*
30663 ** This routine checks if there is a RESERVED lock held on the specified
30664 ** file by this or any other process. If such a lock is held, set *pResOut
30665 ** to a non-zero value otherwise *pResOut is set to zero.  The return value
30666 ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
30667 */
30668 static int proxyCheckReservedLock(sqlite3_file *id, int *pResOut) {
30669   unixFile *pFile = (unixFile*)id;
30670   int rc = proxyTakeConch(pFile);
30671   if( rc==SQLITE_OK ){
30672     proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
30673     if( pCtx->conchHeld>0 ){
30674       unixFile *proxy = pCtx->lockProxy;
30675       return proxy->pMethod->xCheckReservedLock((sqlite3_file*)proxy, pResOut);
30676     }else{ /* conchHeld < 0 is lockless */
30677       pResOut=0;
30678     }
30679   }
30680   return rc;
30681 }
30682
30683 /*
30684 ** Lock the file with the lock specified by parameter eFileLock - one
30685 ** of the following:
30686 **
30687 **     (1) SHARED_LOCK
30688 **     (2) RESERVED_LOCK
30689 **     (3) PENDING_LOCK
30690 **     (4) EXCLUSIVE_LOCK
30691 **
30692 ** Sometimes when requesting one lock state, additional lock states
30693 ** are inserted in between.  The locking might fail on one of the later
30694 ** transitions leaving the lock state different from what it started but
30695 ** still short of its goal.  The following chart shows the allowed
30696 ** transitions and the inserted intermediate states:
30697 **
30698 **    UNLOCKED -> SHARED
30699 **    SHARED -> RESERVED
30700 **    SHARED -> (PENDING) -> EXCLUSIVE
30701 **    RESERVED -> (PENDING) -> EXCLUSIVE
30702 **    PENDING -> EXCLUSIVE
30703 **
30704 ** This routine will only increase a lock.  Use the sqlite3OsUnlock()
30705 ** routine to lower a locking level.
30706 */
30707 static int proxyLock(sqlite3_file *id, int eFileLock) {
30708   unixFile *pFile = (unixFile*)id;
30709   int rc = proxyTakeConch(pFile);
30710   if( rc==SQLITE_OK ){
30711     proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
30712     if( pCtx->conchHeld>0 ){
30713       unixFile *proxy = pCtx->lockProxy;
30714       rc = proxy->pMethod->xLock((sqlite3_file*)proxy, eFileLock);
30715       pFile->eFileLock = proxy->eFileLock;
30716     }else{
30717       /* conchHeld < 0 is lockless */
30718     }
30719   }
30720   return rc;
30721 }
30722
30723
30724 /*
30725 ** Lower the locking level on file descriptor pFile to eFileLock.  eFileLock
30726 ** must be either NO_LOCK or SHARED_LOCK.
30727 **
30728 ** If the locking level of the file descriptor is already at or below
30729 ** the requested locking level, this routine is a no-op.
30730 */
30731 static int proxyUnlock(sqlite3_file *id, int eFileLock) {
30732   unixFile *pFile = (unixFile*)id;
30733   int rc = proxyTakeConch(pFile);
30734   if( rc==SQLITE_OK ){
30735     proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
30736     if( pCtx->conchHeld>0 ){
30737       unixFile *proxy = pCtx->lockProxy;
30738       rc = proxy->pMethod->xUnlock((sqlite3_file*)proxy, eFileLock);
30739       pFile->eFileLock = proxy->eFileLock;
30740     }else{
30741       /* conchHeld < 0 is lockless */
30742     }
30743   }
30744   return rc;
30745 }
30746
30747 /*
30748 ** Close a file that uses proxy locks.
30749 */
30750 static int proxyClose(sqlite3_file *id) {
30751   if( id ){
30752     unixFile *pFile = (unixFile*)id;
30753     proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
30754     unixFile *lockProxy = pCtx->lockProxy;
30755     unixFile *conchFile = pCtx->conchFile;
30756     int rc = SQLITE_OK;
30757     
30758     if( lockProxy ){
30759       rc = lockProxy->pMethod->xUnlock((sqlite3_file*)lockProxy, NO_LOCK);
30760       if( rc ) return rc;
30761       rc = lockProxy->pMethod->xClose((sqlite3_file*)lockProxy);
30762       if( rc ) return rc;
30763       sqlite3_free(lockProxy);
30764       pCtx->lockProxy = 0;
30765     }
30766     if( conchFile ){
30767       if( pCtx->conchHeld ){
30768         rc = proxyReleaseConch(pFile);
30769         if( rc ) return rc;
30770       }
30771       rc = conchFile->pMethod->xClose((sqlite3_file*)conchFile);
30772       if( rc ) return rc;
30773       sqlite3_free(conchFile);
30774     }
30775     sqlite3DbFree(0, pCtx->lockProxyPath);
30776     sqlite3_free(pCtx->conchFilePath);
30777     sqlite3DbFree(0, pCtx->dbPath);
30778     /* restore the original locking context and pMethod then close it */
30779     pFile->lockingContext = pCtx->oldLockingContext;
30780     pFile->pMethod = pCtx->pOldMethod;
30781     sqlite3_free(pCtx);
30782     return pFile->pMethod->xClose(id);
30783   }
30784   return SQLITE_OK;
30785 }
30786
30787
30788
30789 #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
30790 /*
30791 ** The proxy locking style is intended for use with AFP filesystems.
30792 ** And since AFP is only supported on MacOSX, the proxy locking is also
30793 ** restricted to MacOSX.
30794 ** 
30795 **
30796 ******************* End of the proxy lock implementation **********************
30797 ******************************************************************************/
30798
30799 /*
30800 ** Initialize the operating system interface.
30801 **
30802 ** This routine registers all VFS implementations for unix-like operating
30803 ** systems.  This routine, and the sqlite3_os_end() routine that follows,
30804 ** should be the only routines in this file that are visible from other
30805 ** files.
30806 **
30807 ** This routine is called once during SQLite initialization and by a
30808 ** single thread.  The memory allocation and mutex subsystems have not
30809 ** necessarily been initialized when this routine is called, and so they
30810 ** should not be used.
30811 */
30812 SQLITE_API int sqlite3_os_init(void){ 
30813   /* 
30814   ** The following macro defines an initializer for an sqlite3_vfs object.
30815   ** The name of the VFS is NAME.  The pAppData is a pointer to a pointer
30816   ** to the "finder" function.  (pAppData is a pointer to a pointer because
30817   ** silly C90 rules prohibit a void* from being cast to a function pointer
30818   ** and so we have to go through the intermediate pointer to avoid problems
30819   ** when compiling with -pedantic-errors on GCC.)
30820   **
30821   ** The FINDER parameter to this macro is the name of the pointer to the
30822   ** finder-function.  The finder-function returns a pointer to the
30823   ** sqlite_io_methods object that implements the desired locking
30824   ** behaviors.  See the division above that contains the IOMETHODS
30825   ** macro for addition information on finder-functions.
30826   **
30827   ** Most finders simply return a pointer to a fixed sqlite3_io_methods
30828   ** object.  But the "autolockIoFinder" available on MacOSX does a little
30829   ** more than that; it looks at the filesystem type that hosts the 
30830   ** database file and tries to choose an locking method appropriate for
30831   ** that filesystem time.
30832   */
30833   #define UNIXVFS(VFSNAME, FINDER) {                        \
30834     3,                    /* iVersion */                    \
30835     sizeof(unixFile),     /* szOsFile */                    \
30836     MAX_PATHNAME,         /* mxPathname */                  \
30837     0,                    /* pNext */                       \
30838     VFSNAME,              /* zName */                       \
30839     (void*)&FINDER,       /* pAppData */                    \
30840     unixOpen,             /* xOpen */                       \
30841     unixDelete,           /* xDelete */                     \
30842     unixAccess,           /* xAccess */                     \
30843     unixFullPathname,     /* xFullPathname */               \
30844     unixDlOpen,           /* xDlOpen */                     \
30845     unixDlError,          /* xDlError */                    \
30846     unixDlSym,            /* xDlSym */                      \
30847     unixDlClose,          /* xDlClose */                    \
30848     unixRandomness,       /* xRandomness */                 \
30849     unixSleep,            /* xSleep */                      \
30850     unixCurrentTime,      /* xCurrentTime */                \
30851     unixGetLastError,     /* xGetLastError */               \
30852     unixCurrentTimeInt64, /* xCurrentTimeInt64 */           \
30853     unixSetSystemCall,    /* xSetSystemCall */              \
30854     unixGetSystemCall,    /* xGetSystemCall */              \
30855     unixNextSystemCall,   /* xNextSystemCall */             \
30856   }
30857
30858   /*
30859   ** All default VFSes for unix are contained in the following array.
30860   **
30861   ** Note that the sqlite3_vfs.pNext field of the VFS object is modified
30862   ** by the SQLite core when the VFS is registered.  So the following
30863   ** array cannot be const.
30864   */
30865   static sqlite3_vfs aVfs[] = {
30866 #if SQLITE_ENABLE_LOCKING_STYLE && (OS_VXWORKS || defined(__APPLE__))
30867     UNIXVFS("unix",          autolockIoFinder ),
30868 #else
30869     UNIXVFS("unix",          posixIoFinder ),
30870 #endif
30871     UNIXVFS("unix-none",     nolockIoFinder ),
30872     UNIXVFS("unix-dotfile",  dotlockIoFinder ),
30873     UNIXVFS("unix-excl",     posixIoFinder ),
30874 #if OS_VXWORKS
30875     UNIXVFS("unix-namedsem", semIoFinder ),
30876 #endif
30877 #if SQLITE_ENABLE_LOCKING_STYLE
30878     UNIXVFS("unix-posix",    posixIoFinder ),
30879 #if !OS_VXWORKS
30880     UNIXVFS("unix-flock",    flockIoFinder ),
30881 #endif
30882 #endif
30883 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
30884     UNIXVFS("unix-afp",      afpIoFinder ),
30885     UNIXVFS("unix-nfs",      nfsIoFinder ),
30886     UNIXVFS("unix-proxy",    proxyIoFinder ),
30887 #endif
30888   };
30889   unsigned int i;          /* Loop counter */
30890
30891   /* Double-check that the aSyscall[] array has been constructed
30892   ** correctly.  See ticket [bb3a86e890c8e96ab] */
30893   assert( ArraySize(aSyscall)==18 );
30894
30895   /* Register all VFSes defined in the aVfs[] array */
30896   for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){
30897     sqlite3_vfs_register(&aVfs[i], i==0);
30898   }
30899   return SQLITE_OK; 
30900 }
30901
30902 /*
30903 ** Shutdown the operating system interface.
30904 **
30905 ** Some operating systems might need to do some cleanup in this routine,
30906 ** to release dynamically allocated objects.  But not on unix.
30907 ** This routine is a no-op for unix.
30908 */
30909 SQLITE_API int sqlite3_os_end(void){ 
30910   return SQLITE_OK; 
30911 }
30912  
30913 #endif /* SQLITE_OS_UNIX */
30914
30915 /************** End of os_unix.c *********************************************/
30916 /************** Begin file os_win.c ******************************************/
30917 /*
30918 ** 2004 May 22
30919 **
30920 ** The author disclaims copyright to this source code.  In place of
30921 ** a legal notice, here is a blessing:
30922 **
30923 **    May you do good and not evil.
30924 **    May you find forgiveness for yourself and forgive others.
30925 **    May you share freely, never taking more than you give.
30926 **
30927 ******************************************************************************
30928 **
30929 ** This file contains code that is specific to windows.
30930 */
30931 #if SQLITE_OS_WIN               /* This file is used for windows only */
30932
30933
30934 /*
30935 ** A Note About Memory Allocation:
30936 **
30937 ** This driver uses malloc()/free() directly rather than going through
30938 ** the SQLite-wrappers sqlite3_malloc()/sqlite3_free().  Those wrappers
30939 ** are designed for use on embedded systems where memory is scarce and
30940 ** malloc failures happen frequently.  Win32 does not typically run on
30941 ** embedded systems, and when it does the developers normally have bigger
30942 ** problems to worry about than running out of memory.  So there is not
30943 ** a compelling need to use the wrappers.
30944 **
30945 ** But there is a good reason to not use the wrappers.  If we use the
30946 ** wrappers then we will get simulated malloc() failures within this
30947 ** driver.  And that causes all kinds of problems for our tests.  We
30948 ** could enhance SQLite to deal with simulated malloc failures within
30949 ** the OS driver, but the code to deal with those failure would not
30950 ** be exercised on Linux (which does not need to malloc() in the driver)
30951 ** and so we would have difficulty writing coverage tests for that
30952 ** code.  Better to leave the code out, we think.
30953 **
30954 ** The point of this discussion is as follows:  When creating a new
30955 ** OS layer for an embedded system, if you use this file as an example,
30956 ** avoid the use of malloc()/free().  Those routines work ok on windows
30957 ** desktops but not so well in embedded systems.
30958 */
30959
30960 #include <winbase.h>
30961
30962 #ifdef __CYGWIN__
30963 # include <sys/cygwin.h>
30964 #endif
30965
30966 /*
30967 ** Macros used to determine whether or not to use threads.
30968 */
30969 #if defined(THREADSAFE) && THREADSAFE
30970 # define SQLITE_W32_THREADS 1
30971 #endif
30972
30973 /*
30974 ** Include code that is common to all os_*.c files
30975 */
30976 /************** Include os_common.h in the middle of os_win.c ****************/
30977 /************** Begin file os_common.h ***************************************/
30978 /*
30979 ** 2004 May 22
30980 **
30981 ** The author disclaims copyright to this source code.  In place of
30982 ** a legal notice, here is a blessing:
30983 **
30984 **    May you do good and not evil.
30985 **    May you find forgiveness for yourself and forgive others.
30986 **    May you share freely, never taking more than you give.
30987 **
30988 ******************************************************************************
30989 **
30990 ** This file contains macros and a little bit of code that is common to
30991 ** all of the platform-specific files (os_*.c) and is #included into those
30992 ** files.
30993 **
30994 ** This file should be #included by the os_*.c files only.  It is not a
30995 ** general purpose header file.
30996 */
30997 #ifndef _OS_COMMON_H_
30998 #define _OS_COMMON_H_
30999
31000 /*
31001 ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
31002 ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
31003 ** switch.  The following code should catch this problem at compile-time.
31004 */
31005 #ifdef MEMORY_DEBUG
31006 # error "The MEMORY_DEBUG macro is obsolete.  Use SQLITE_DEBUG instead."
31007 #endif
31008
31009 #ifdef SQLITE_DEBUG
31010 SQLITE_PRIVATE int sqlite3OSTrace = 0;
31011 #define OSTRACE(X)          if( sqlite3OSTrace ) sqlite3DebugPrintf X
31012 #else
31013 #define OSTRACE(X)
31014 #endif
31015
31016 /*
31017 ** Macros for performance tracing.  Normally turned off.  Only works
31018 ** on i486 hardware.
31019 */
31020 #ifdef SQLITE_PERFORMANCE_TRACE
31021
31022 /* 
31023 ** hwtime.h contains inline assembler code for implementing 
31024 ** high-performance timing routines.
31025 */
31026 /************** Include hwtime.h in the middle of os_common.h ****************/
31027 /************** Begin file hwtime.h ******************************************/
31028 /*
31029 ** 2008 May 27
31030 **
31031 ** The author disclaims copyright to this source code.  In place of
31032 ** a legal notice, here is a blessing:
31033 **
31034 **    May you do good and not evil.
31035 **    May you find forgiveness for yourself and forgive others.
31036 **    May you share freely, never taking more than you give.
31037 **
31038 ******************************************************************************
31039 **
31040 ** This file contains inline asm code for retrieving "high-performance"
31041 ** counters for x86 class CPUs.
31042 */
31043 #ifndef _HWTIME_H_
31044 #define _HWTIME_H_
31045
31046 /*
31047 ** The following routine only works on pentium-class (or newer) processors.
31048 ** It uses the RDTSC opcode to read the cycle count value out of the
31049 ** processor and returns that value.  This can be used for high-res
31050 ** profiling.
31051 */
31052 #if (defined(__GNUC__) || defined(_MSC_VER)) && \
31053       (defined(i386) || defined(__i386__) || defined(_M_IX86))
31054
31055   #if defined(__GNUC__)
31056
31057   __inline__ sqlite_uint64 sqlite3Hwtime(void){
31058      unsigned int lo, hi;
31059      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
31060      return (sqlite_uint64)hi << 32 | lo;
31061   }
31062
31063   #elif defined(_MSC_VER)
31064
31065   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
31066      __asm {
31067         rdtsc
31068         ret       ; return value at EDX:EAX
31069      }
31070   }
31071
31072   #endif
31073
31074 #elif (defined(__GNUC__) && defined(__x86_64__))
31075
31076   __inline__ sqlite_uint64 sqlite3Hwtime(void){
31077       unsigned long val;
31078       __asm__ __volatile__ ("rdtsc" : "=A" (val));
31079       return val;
31080   }
31081  
31082 #elif (defined(__GNUC__) && defined(__ppc__))
31083
31084   __inline__ sqlite_uint64 sqlite3Hwtime(void){
31085       unsigned long long retval;
31086       unsigned long junk;
31087       __asm__ __volatile__ ("\n\
31088           1:      mftbu   %1\n\
31089                   mftb    %L0\n\
31090                   mftbu   %0\n\
31091                   cmpw    %0,%1\n\
31092                   bne     1b"
31093                   : "=r" (retval), "=r" (junk));
31094       return retval;
31095   }
31096
31097 #else
31098
31099   #error Need implementation of sqlite3Hwtime() for your platform.
31100
31101   /*
31102   ** To compile without implementing sqlite3Hwtime() for your platform,
31103   ** you can remove the above #error and use the following
31104   ** stub function.  You will lose timing support for many
31105   ** of the debugging and testing utilities, but it should at
31106   ** least compile and run.
31107   */
31108 SQLITE_PRIVATE   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
31109
31110 #endif
31111
31112 #endif /* !defined(_HWTIME_H_) */
31113
31114 /************** End of hwtime.h **********************************************/
31115 /************** Continuing where we left off in os_common.h ******************/
31116
31117 static sqlite_uint64 g_start;
31118 static sqlite_uint64 g_elapsed;
31119 #define TIMER_START       g_start=sqlite3Hwtime()
31120 #define TIMER_END         g_elapsed=sqlite3Hwtime()-g_start
31121 #define TIMER_ELAPSED     g_elapsed
31122 #else
31123 #define TIMER_START
31124 #define TIMER_END
31125 #define TIMER_ELAPSED     ((sqlite_uint64)0)
31126 #endif
31127
31128 /*
31129 ** If we compile with the SQLITE_TEST macro set, then the following block
31130 ** of code will give us the ability to simulate a disk I/O error.  This
31131 ** is used for testing the I/O recovery logic.
31132 */
31133 #ifdef SQLITE_TEST
31134 SQLITE_API int sqlite3_io_error_hit = 0;            /* Total number of I/O Errors */
31135 SQLITE_API int sqlite3_io_error_hardhit = 0;        /* Number of non-benign errors */
31136 SQLITE_API int sqlite3_io_error_pending = 0;        /* Count down to first I/O error */
31137 SQLITE_API int sqlite3_io_error_persist = 0;        /* True if I/O errors persist */
31138 SQLITE_API int sqlite3_io_error_benign = 0;         /* True if errors are benign */
31139 SQLITE_API int sqlite3_diskfull_pending = 0;
31140 SQLITE_API int sqlite3_diskfull = 0;
31141 #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
31142 #define SimulateIOError(CODE)  \
31143   if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
31144        || sqlite3_io_error_pending-- == 1 )  \
31145               { local_ioerr(); CODE; }
31146 static void local_ioerr(){
31147   IOTRACE(("IOERR\n"));
31148   sqlite3_io_error_hit++;
31149   if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
31150 }
31151 #define SimulateDiskfullError(CODE) \
31152    if( sqlite3_diskfull_pending ){ \
31153      if( sqlite3_diskfull_pending == 1 ){ \
31154        local_ioerr(); \
31155        sqlite3_diskfull = 1; \
31156        sqlite3_io_error_hit = 1; \
31157        CODE; \
31158      }else{ \
31159        sqlite3_diskfull_pending--; \
31160      } \
31161    }
31162 #else
31163 #define SimulateIOErrorBenign(X)
31164 #define SimulateIOError(A)
31165 #define SimulateDiskfullError(A)
31166 #endif
31167
31168 /*
31169 ** When testing, keep a count of the number of open files.
31170 */
31171 #ifdef SQLITE_TEST
31172 SQLITE_API int sqlite3_open_file_count = 0;
31173 #define OpenCounter(X)  sqlite3_open_file_count+=(X)
31174 #else
31175 #define OpenCounter(X)
31176 #endif
31177
31178 #endif /* !defined(_OS_COMMON_H_) */
31179
31180 /************** End of os_common.h *******************************************/
31181 /************** Continuing where we left off in os_win.c *********************/
31182
31183 /*
31184 ** Some microsoft compilers lack this definition.
31185 */
31186 #ifndef INVALID_FILE_ATTRIBUTES
31187 # define INVALID_FILE_ATTRIBUTES ((DWORD)-1) 
31188 #endif
31189
31190 /*
31191 ** Determine if we are dealing with WindowsCE - which has a much
31192 ** reduced API.
31193 */
31194 #if SQLITE_OS_WINCE
31195 # define AreFileApisANSI() 1
31196 # define FormatMessageW(a,b,c,d,e,f,g) 0
31197 #endif
31198
31199 /* Forward references */
31200 typedef struct winShm winShm;           /* A connection to shared-memory */
31201 typedef struct winShmNode winShmNode;   /* A region of shared-memory */
31202
31203 /*
31204 ** WinCE lacks native support for file locking so we have to fake it
31205 ** with some code of our own.
31206 */
31207 #if SQLITE_OS_WINCE
31208 typedef struct winceLock {
31209   int nReaders;       /* Number of reader locks obtained */
31210   BOOL bPending;      /* Indicates a pending lock has been obtained */
31211   BOOL bReserved;     /* Indicates a reserved lock has been obtained */
31212   BOOL bExclusive;    /* Indicates an exclusive lock has been obtained */
31213 } winceLock;
31214 #endif
31215
31216 /*
31217 ** The winFile structure is a subclass of sqlite3_file* specific to the win32
31218 ** portability layer.
31219 */
31220 typedef struct winFile winFile;
31221 struct winFile {
31222   const sqlite3_io_methods *pMethod; /*** Must be first ***/
31223   sqlite3_vfs *pVfs;      /* The VFS used to open this file */
31224   HANDLE h;               /* Handle for accessing the file */
31225   unsigned char locktype; /* Type of lock currently held on this file */
31226   short sharedLockByte;   /* Randomly chosen byte used as a shared lock */
31227   DWORD lastErrno;        /* The Windows errno from the last I/O error */
31228   DWORD sectorSize;       /* Sector size of the device file is on */
31229   winShm *pShm;           /* Instance of shared memory on this file */
31230   const char *zPath;      /* Full pathname of this file */
31231   int szChunk;            /* Chunk size configured by FCNTL_CHUNK_SIZE */
31232 #if SQLITE_OS_WINCE
31233   WCHAR *zDeleteOnClose;  /* Name of file to delete when closing */
31234   HANDLE hMutex;          /* Mutex used to control access to shared lock */  
31235   HANDLE hShared;         /* Shared memory segment used for locking */
31236   winceLock local;        /* Locks obtained by this instance of winFile */
31237   winceLock *shared;      /* Global shared lock memory for the file  */
31238 #endif
31239 };
31240
31241 /*
31242 ** Forward prototypes.
31243 */
31244 static int getSectorSize(
31245     sqlite3_vfs *pVfs,
31246     const char *zRelative     /* UTF-8 file name */
31247 );
31248
31249 /*
31250 ** The following variable is (normally) set once and never changes
31251 ** thereafter.  It records whether the operating system is Win95
31252 ** or WinNT.
31253 **
31254 ** 0:   Operating system unknown.
31255 ** 1:   Operating system is Win95.
31256 ** 2:   Operating system is WinNT.
31257 **
31258 ** In order to facilitate testing on a WinNT system, the test fixture
31259 ** can manually set this value to 1 to emulate Win98 behavior.
31260 */
31261 #ifdef SQLITE_TEST
31262 SQLITE_API int sqlite3_os_type = 0;
31263 #else
31264 static int sqlite3_os_type = 0;
31265 #endif
31266
31267 /*
31268 ** Return true (non-zero) if we are running under WinNT, Win2K, WinXP,
31269 ** or WinCE.  Return false (zero) for Win95, Win98, or WinME.
31270 **
31271 ** Here is an interesting observation:  Win95, Win98, and WinME lack
31272 ** the LockFileEx() API.  But we can still statically link against that
31273 ** API as long as we don't call it when running Win95/98/ME.  A call to
31274 ** this routine is used to determine if the host is Win95/98/ME or
31275 ** WinNT/2K/XP so that we will know whether or not we can safely call
31276 ** the LockFileEx() API.
31277 */
31278 #if SQLITE_OS_WINCE
31279 # define isNT()  (1)
31280 #else
31281   static int isNT(void){
31282     if( sqlite3_os_type==0 ){
31283       OSVERSIONINFO sInfo;
31284       sInfo.dwOSVersionInfoSize = sizeof(sInfo);
31285       GetVersionEx(&sInfo);
31286       sqlite3_os_type = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1;
31287     }
31288     return sqlite3_os_type==2;
31289   }
31290 #endif /* SQLITE_OS_WINCE */
31291
31292 /*
31293 ** Convert a UTF-8 string to microsoft unicode (UTF-16?). 
31294 **
31295 ** Space to hold the returned string is obtained from malloc.
31296 */
31297 static WCHAR *utf8ToUnicode(const char *zFilename){
31298   int nChar;
31299   WCHAR *zWideFilename;
31300
31301   nChar = MultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0);
31302   zWideFilename = malloc( nChar*sizeof(zWideFilename[0]) );
31303   if( zWideFilename==0 ){
31304     return 0;
31305   }
31306   nChar = MultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename, nChar);
31307   if( nChar==0 ){
31308     free(zWideFilename);
31309     zWideFilename = 0;
31310   }
31311   return zWideFilename;
31312 }
31313
31314 /*
31315 ** Convert microsoft unicode to UTF-8.  Space to hold the returned string is
31316 ** obtained from malloc().
31317 */
31318 static char *unicodeToUtf8(const WCHAR *zWideFilename){
31319   int nByte;
31320   char *zFilename;
31321
31322   nByte = WideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, 0, 0, 0, 0);
31323   zFilename = malloc( nByte );
31324   if( zFilename==0 ){
31325     return 0;
31326   }
31327   nByte = WideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, zFilename, nByte,
31328                               0, 0);
31329   if( nByte == 0 ){
31330     free(zFilename);
31331     zFilename = 0;
31332   }
31333   return zFilename;
31334 }
31335
31336 /*
31337 ** Convert an ansi string to microsoft unicode, based on the
31338 ** current codepage settings for file apis.
31339 ** 
31340 ** Space to hold the returned string is obtained
31341 ** from malloc.
31342 */
31343 static WCHAR *mbcsToUnicode(const char *zFilename){
31344   int nByte;
31345   WCHAR *zMbcsFilename;
31346   int codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
31347
31348   nByte = MultiByteToWideChar(codepage, 0, zFilename, -1, NULL,0)*sizeof(WCHAR);
31349   zMbcsFilename = malloc( nByte*sizeof(zMbcsFilename[0]) );
31350   if( zMbcsFilename==0 ){
31351     return 0;
31352   }
31353   nByte = MultiByteToWideChar(codepage, 0, zFilename, -1, zMbcsFilename, nByte);
31354   if( nByte==0 ){
31355     free(zMbcsFilename);
31356     zMbcsFilename = 0;
31357   }
31358   return zMbcsFilename;
31359 }
31360
31361 /*
31362 ** Convert microsoft unicode to multibyte character string, based on the
31363 ** user's Ansi codepage.
31364 **
31365 ** Space to hold the returned string is obtained from
31366 ** malloc().
31367 */
31368 static char *unicodeToMbcs(const WCHAR *zWideFilename){
31369   int nByte;
31370   char *zFilename;
31371   int codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
31372
31373   nByte = WideCharToMultiByte(codepage, 0, zWideFilename, -1, 0, 0, 0, 0);
31374   zFilename = malloc( nByte );
31375   if( zFilename==0 ){
31376     return 0;
31377   }
31378   nByte = WideCharToMultiByte(codepage, 0, zWideFilename, -1, zFilename, nByte,
31379                               0, 0);
31380   if( nByte == 0 ){
31381     free(zFilename);
31382     zFilename = 0;
31383   }
31384   return zFilename;
31385 }
31386
31387 /*
31388 ** Convert multibyte character string to UTF-8.  Space to hold the
31389 ** returned string is obtained from malloc().
31390 */
31391 SQLITE_API char *sqlite3_win32_mbcs_to_utf8(const char *zFilename){
31392   char *zFilenameUtf8;
31393   WCHAR *zTmpWide;
31394
31395   zTmpWide = mbcsToUnicode(zFilename);
31396   if( zTmpWide==0 ){
31397     return 0;
31398   }
31399   zFilenameUtf8 = unicodeToUtf8(zTmpWide);
31400   free(zTmpWide);
31401   return zFilenameUtf8;
31402 }
31403
31404 /*
31405 ** Convert UTF-8 to multibyte character string.  Space to hold the 
31406 ** returned string is obtained from malloc().
31407 */
31408 static char *utf8ToMbcs(const char *zFilename){
31409   char *zFilenameMbcs;
31410   WCHAR *zTmpWide;
31411
31412   zTmpWide = utf8ToUnicode(zFilename);
31413   if( zTmpWide==0 ){
31414     return 0;
31415   }
31416   zFilenameMbcs = unicodeToMbcs(zTmpWide);
31417   free(zTmpWide);
31418   return zFilenameMbcs;
31419 }
31420
31421 #if SQLITE_OS_WINCE
31422 /*************************************************************************
31423 ** This section contains code for WinCE only.
31424 */
31425 /*
31426 ** WindowsCE does not have a localtime() function.  So create a
31427 ** substitute.
31428 */
31429 struct tm *__cdecl localtime(const time_t *t)
31430 {
31431   static struct tm y;
31432   FILETIME uTm, lTm;
31433   SYSTEMTIME pTm;
31434   sqlite3_int64 t64;
31435   t64 = *t;
31436   t64 = (t64 + 11644473600)*10000000;
31437   uTm.dwLowDateTime = (DWORD)(t64 & 0xFFFFFFFF);
31438   uTm.dwHighDateTime= (DWORD)(t64 >> 32);
31439   FileTimeToLocalFileTime(&uTm,&lTm);
31440   FileTimeToSystemTime(&lTm,&pTm);
31441   y.tm_year = pTm.wYear - 1900;
31442   y.tm_mon = pTm.wMonth - 1;
31443   y.tm_wday = pTm.wDayOfWeek;
31444   y.tm_mday = pTm.wDay;
31445   y.tm_hour = pTm.wHour;
31446   y.tm_min = pTm.wMinute;
31447   y.tm_sec = pTm.wSecond;
31448   return &y;
31449 }
31450
31451 /* This will never be called, but defined to make the code compile */
31452 #define GetTempPathA(a,b)
31453
31454 #define LockFile(a,b,c,d,e)       winceLockFile(&a, b, c, d, e)
31455 #define UnlockFile(a,b,c,d,e)     winceUnlockFile(&a, b, c, d, e)
31456 #define LockFileEx(a,b,c,d,e,f)   winceLockFileEx(&a, b, c, d, e, f)
31457
31458 #define HANDLE_TO_WINFILE(a) (winFile*)&((char*)a)[-(int)offsetof(winFile,h)]
31459
31460 /*
31461 ** Acquire a lock on the handle h
31462 */
31463 static void winceMutexAcquire(HANDLE h){
31464    DWORD dwErr;
31465    do {
31466      dwErr = WaitForSingleObject(h, INFINITE);
31467    } while (dwErr != WAIT_OBJECT_0 && dwErr != WAIT_ABANDONED);
31468 }
31469 /*
31470 ** Release a lock acquired by winceMutexAcquire()
31471 */
31472 #define winceMutexRelease(h) ReleaseMutex(h)
31473
31474 /*
31475 ** Create the mutex and shared memory used for locking in the file
31476 ** descriptor pFile
31477 */
31478 static BOOL winceCreateLock(const char *zFilename, winFile *pFile){
31479   WCHAR *zTok;
31480   WCHAR *zName = utf8ToUnicode(zFilename);
31481   BOOL bInit = TRUE;
31482
31483   /* Initialize the local lockdata */
31484   ZeroMemory(&pFile->local, sizeof(pFile->local));
31485
31486   /* Replace the backslashes from the filename and lowercase it
31487   ** to derive a mutex name. */
31488   zTok = CharLowerW(zName);
31489   for (;*zTok;zTok++){
31490     if (*zTok == '\\') *zTok = '_';
31491   }
31492
31493   /* Create/open the named mutex */
31494   pFile->hMutex = CreateMutexW(NULL, FALSE, zName);
31495   if (!pFile->hMutex){
31496     pFile->lastErrno = GetLastError();
31497     free(zName);
31498     return FALSE;
31499   }
31500
31501   /* Acquire the mutex before continuing */
31502   winceMutexAcquire(pFile->hMutex);
31503   
31504   /* Since the names of named mutexes, semaphores, file mappings etc are 
31505   ** case-sensitive, take advantage of that by uppercasing the mutex name
31506   ** and using that as the shared filemapping name.
31507   */
31508   CharUpperW(zName);
31509   pFile->hShared = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL,
31510                                        PAGE_READWRITE, 0, sizeof(winceLock),
31511                                        zName);  
31512
31513   /* Set a flag that indicates we're the first to create the memory so it 
31514   ** must be zero-initialized */
31515   if (GetLastError() == ERROR_ALREADY_EXISTS){
31516     bInit = FALSE;
31517   }
31518
31519   free(zName);
31520
31521   /* If we succeeded in making the shared memory handle, map it. */
31522   if (pFile->hShared){
31523     pFile->shared = (winceLock*)MapViewOfFile(pFile->hShared, 
31524              FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, sizeof(winceLock));
31525     /* If mapping failed, close the shared memory handle and erase it */
31526     if (!pFile->shared){
31527       pFile->lastErrno = GetLastError();
31528       CloseHandle(pFile->hShared);
31529       pFile->hShared = NULL;
31530     }
31531   }
31532
31533   /* If shared memory could not be created, then close the mutex and fail */
31534   if (pFile->hShared == NULL){
31535     winceMutexRelease(pFile->hMutex);
31536     CloseHandle(pFile->hMutex);
31537     pFile->hMutex = NULL;
31538     return FALSE;
31539   }
31540   
31541   /* Initialize the shared memory if we're supposed to */
31542   if (bInit) {
31543     ZeroMemory(pFile->shared, sizeof(winceLock));
31544   }
31545
31546   winceMutexRelease(pFile->hMutex);
31547   return TRUE;
31548 }
31549
31550 /*
31551 ** Destroy the part of winFile that deals with wince locks
31552 */
31553 static void winceDestroyLock(winFile *pFile){
31554   if (pFile->hMutex){
31555     /* Acquire the mutex */
31556     winceMutexAcquire(pFile->hMutex);
31557
31558     /* The following blocks should probably assert in debug mode, but they
31559        are to cleanup in case any locks remained open */
31560     if (pFile->local.nReaders){
31561       pFile->shared->nReaders --;
31562     }
31563     if (pFile->local.bReserved){
31564       pFile->shared->bReserved = FALSE;
31565     }
31566     if (pFile->local.bPending){
31567       pFile->shared->bPending = FALSE;
31568     }
31569     if (pFile->local.bExclusive){
31570       pFile->shared->bExclusive = FALSE;
31571     }
31572
31573     /* De-reference and close our copy of the shared memory handle */
31574     UnmapViewOfFile(pFile->shared);
31575     CloseHandle(pFile->hShared);
31576
31577     /* Done with the mutex */
31578     winceMutexRelease(pFile->hMutex);    
31579     CloseHandle(pFile->hMutex);
31580     pFile->hMutex = NULL;
31581   }
31582 }
31583
31584 /* 
31585 ** An implementation of the LockFile() API of windows for wince
31586 */
31587 static BOOL winceLockFile(
31588   HANDLE *phFile,
31589   DWORD dwFileOffsetLow,
31590   DWORD dwFileOffsetHigh,
31591   DWORD nNumberOfBytesToLockLow,
31592   DWORD nNumberOfBytesToLockHigh
31593 ){
31594   winFile *pFile = HANDLE_TO_WINFILE(phFile);
31595   BOOL bReturn = FALSE;
31596
31597   UNUSED_PARAMETER(dwFileOffsetHigh);
31598   UNUSED_PARAMETER(nNumberOfBytesToLockHigh);
31599
31600   if (!pFile->hMutex) return TRUE;
31601   winceMutexAcquire(pFile->hMutex);
31602
31603   /* Wanting an exclusive lock? */
31604   if (dwFileOffsetLow == (DWORD)SHARED_FIRST
31605        && nNumberOfBytesToLockLow == (DWORD)SHARED_SIZE){
31606     if (pFile->shared->nReaders == 0 && pFile->shared->bExclusive == 0){
31607        pFile->shared->bExclusive = TRUE;
31608        pFile->local.bExclusive = TRUE;
31609        bReturn = TRUE;
31610     }
31611   }
31612
31613   /* Want a read-only lock? */
31614   else if (dwFileOffsetLow == (DWORD)SHARED_FIRST &&
31615            nNumberOfBytesToLockLow == 1){
31616     if (pFile->shared->bExclusive == 0){
31617       pFile->local.nReaders ++;
31618       if (pFile->local.nReaders == 1){
31619         pFile->shared->nReaders ++;
31620       }
31621       bReturn = TRUE;
31622     }
31623   }
31624
31625   /* Want a pending lock? */
31626   else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToLockLow == 1){
31627     /* If no pending lock has been acquired, then acquire it */
31628     if (pFile->shared->bPending == 0) {
31629       pFile->shared->bPending = TRUE;
31630       pFile->local.bPending = TRUE;
31631       bReturn = TRUE;
31632     }
31633   }
31634
31635   /* Want a reserved lock? */
31636   else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToLockLow == 1){
31637     if (pFile->shared->bReserved == 0) {
31638       pFile->shared->bReserved = TRUE;
31639       pFile->local.bReserved = TRUE;
31640       bReturn = TRUE;
31641     }
31642   }
31643
31644   winceMutexRelease(pFile->hMutex);
31645   return bReturn;
31646 }
31647
31648 /*
31649 ** An implementation of the UnlockFile API of windows for wince
31650 */
31651 static BOOL winceUnlockFile(
31652   HANDLE *phFile,
31653   DWORD dwFileOffsetLow,
31654   DWORD dwFileOffsetHigh,
31655   DWORD nNumberOfBytesToUnlockLow,
31656   DWORD nNumberOfBytesToUnlockHigh
31657 ){
31658   winFile *pFile = HANDLE_TO_WINFILE(phFile);
31659   BOOL bReturn = FALSE;
31660
31661   UNUSED_PARAMETER(dwFileOffsetHigh);
31662   UNUSED_PARAMETER(nNumberOfBytesToUnlockHigh);
31663
31664   if (!pFile->hMutex) return TRUE;
31665   winceMutexAcquire(pFile->hMutex);
31666
31667   /* Releasing a reader lock or an exclusive lock */
31668   if (dwFileOffsetLow == (DWORD)SHARED_FIRST){
31669     /* Did we have an exclusive lock? */
31670     if (pFile->local.bExclusive){
31671       assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE);
31672       pFile->local.bExclusive = FALSE;
31673       pFile->shared->bExclusive = FALSE;
31674       bReturn = TRUE;
31675     }
31676
31677     /* Did we just have a reader lock? */
31678     else if (pFile->local.nReaders){
31679       assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE || nNumberOfBytesToUnlockLow == 1);
31680       pFile->local.nReaders --;
31681       if (pFile->local.nReaders == 0)
31682       {
31683         pFile->shared->nReaders --;
31684       }
31685       bReturn = TRUE;
31686     }
31687   }
31688
31689   /* Releasing a pending lock */
31690   else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToUnlockLow == 1){
31691     if (pFile->local.bPending){
31692       pFile->local.bPending = FALSE;
31693       pFile->shared->bPending = FALSE;
31694       bReturn = TRUE;
31695     }
31696   }
31697   /* Releasing a reserved lock */
31698   else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToUnlockLow == 1){
31699     if (pFile->local.bReserved) {
31700       pFile->local.bReserved = FALSE;
31701       pFile->shared->bReserved = FALSE;
31702       bReturn = TRUE;
31703     }
31704   }
31705
31706   winceMutexRelease(pFile->hMutex);
31707   return bReturn;
31708 }
31709
31710 /*
31711 ** An implementation of the LockFileEx() API of windows for wince
31712 */
31713 static BOOL winceLockFileEx(
31714   HANDLE *phFile,
31715   DWORD dwFlags,
31716   DWORD dwReserved,
31717   DWORD nNumberOfBytesToLockLow,
31718   DWORD nNumberOfBytesToLockHigh,
31719   LPOVERLAPPED lpOverlapped
31720 ){
31721   UNUSED_PARAMETER(dwReserved);
31722   UNUSED_PARAMETER(nNumberOfBytesToLockHigh);
31723
31724   /* If the caller wants a shared read lock, forward this call
31725   ** to winceLockFile */
31726   if (lpOverlapped->Offset == (DWORD)SHARED_FIRST &&
31727       dwFlags == 1 &&
31728       nNumberOfBytesToLockLow == (DWORD)SHARED_SIZE){
31729     return winceLockFile(phFile, SHARED_FIRST, 0, 1, 0);
31730   }
31731   return FALSE;
31732 }
31733 /*
31734 ** End of the special code for wince
31735 *****************************************************************************/
31736 #endif /* SQLITE_OS_WINCE */
31737
31738 /*****************************************************************************
31739 ** The next group of routines implement the I/O methods specified
31740 ** by the sqlite3_io_methods object.
31741 ******************************************************************************/
31742
31743 /*
31744 ** Some microsoft compilers lack this definition.
31745 */
31746 #ifndef INVALID_SET_FILE_POINTER
31747 # define INVALID_SET_FILE_POINTER ((DWORD)-1)
31748 #endif
31749
31750 /*
31751 ** Move the current position of the file handle passed as the first 
31752 ** argument to offset iOffset within the file. If successful, return 0. 
31753 ** Otherwise, set pFile->lastErrno and return non-zero.
31754 */
31755 static int seekWinFile(winFile *pFile, sqlite3_int64 iOffset){
31756   LONG upperBits;                 /* Most sig. 32 bits of new offset */
31757   LONG lowerBits;                 /* Least sig. 32 bits of new offset */
31758   DWORD dwRet;                    /* Value returned by SetFilePointer() */
31759
31760   upperBits = (LONG)((iOffset>>32) & 0x7fffffff);
31761   lowerBits = (LONG)(iOffset & 0xffffffff);
31762
31763   /* API oddity: If successful, SetFilePointer() returns a dword 
31764   ** containing the lower 32-bits of the new file-offset. Or, if it fails,
31765   ** it returns INVALID_SET_FILE_POINTER. However according to MSDN, 
31766   ** INVALID_SET_FILE_POINTER may also be a valid new offset. So to determine 
31767   ** whether an error has actually occured, it is also necessary to call 
31768   ** GetLastError().
31769   */
31770   dwRet = SetFilePointer(pFile->h, lowerBits, &upperBits, FILE_BEGIN);
31771   if( (dwRet==INVALID_SET_FILE_POINTER && GetLastError()!=NO_ERROR) ){
31772     pFile->lastErrno = GetLastError();
31773     return 1;
31774   }
31775
31776   return 0;
31777 }
31778
31779 /*
31780 ** Close a file.
31781 **
31782 ** It is reported that an attempt to close a handle might sometimes
31783 ** fail.  This is a very unreasonable result, but windows is notorious
31784 ** for being unreasonable so I do not doubt that it might happen.  If
31785 ** the close fails, we pause for 100 milliseconds and try again.  As
31786 ** many as MX_CLOSE_ATTEMPT attempts to close the handle are made before
31787 ** giving up and returning an error.
31788 */
31789 #define MX_CLOSE_ATTEMPT 3
31790 static int winClose(sqlite3_file *id){
31791   int rc, cnt = 0;
31792   winFile *pFile = (winFile*)id;
31793
31794   assert( id!=0 );
31795   assert( pFile->pShm==0 );
31796   OSTRACE(("CLOSE %d\n", pFile->h));
31797   do{
31798     rc = CloseHandle(pFile->h);
31799     /* SimulateIOError( rc=0; cnt=MX_CLOSE_ATTEMPT; ); */
31800   }while( rc==0 && ++cnt < MX_CLOSE_ATTEMPT && (Sleep(100), 1) );
31801 #if SQLITE_OS_WINCE
31802 #define WINCE_DELETION_ATTEMPTS 3
31803   winceDestroyLock(pFile);
31804   if( pFile->zDeleteOnClose ){
31805     int cnt = 0;
31806     while(
31807            DeleteFileW(pFile->zDeleteOnClose)==0
31808         && GetFileAttributesW(pFile->zDeleteOnClose)!=0xffffffff 
31809         && cnt++ < WINCE_DELETION_ATTEMPTS
31810     ){
31811        Sleep(100);  /* Wait a little before trying again */
31812     }
31813     free(pFile->zDeleteOnClose);
31814   }
31815 #endif
31816   OSTRACE(("CLOSE %d %s\n", pFile->h, rc ? "ok" : "failed"));
31817   OpenCounter(-1);
31818   return rc ? SQLITE_OK : SQLITE_IOERR;
31819 }
31820
31821 /*
31822 ** Read data from a file into a buffer.  Return SQLITE_OK if all
31823 ** bytes were read successfully and SQLITE_IOERR if anything goes
31824 ** wrong.
31825 */
31826 static int winRead(
31827   sqlite3_file *id,          /* File to read from */
31828   void *pBuf,                /* Write content into this buffer */
31829   int amt,                   /* Number of bytes to read */
31830   sqlite3_int64 offset       /* Begin reading at this offset */
31831 ){
31832   winFile *pFile = (winFile*)id;  /* file handle */
31833   DWORD nRead;                    /* Number of bytes actually read from file */
31834
31835   assert( id!=0 );
31836   SimulateIOError(return SQLITE_IOERR_READ);
31837   OSTRACE(("READ %d lock=%d\n", pFile->h, pFile->locktype));
31838
31839   if( seekWinFile(pFile, offset) ){
31840     return SQLITE_FULL;
31841   }
31842   if( !ReadFile(pFile->h, pBuf, amt, &nRead, 0) ){
31843     pFile->lastErrno = GetLastError();
31844     return SQLITE_IOERR_READ;
31845   }
31846   if( nRead<(DWORD)amt ){
31847     /* Unread parts of the buffer must be zero-filled */
31848     memset(&((char*)pBuf)[nRead], 0, amt-nRead);
31849     return SQLITE_IOERR_SHORT_READ;
31850   }
31851
31852   return SQLITE_OK;
31853 }
31854
31855 /*
31856 ** Write data from a buffer into a file.  Return SQLITE_OK on success
31857 ** or some other error code on failure.
31858 */
31859 static int winWrite(
31860   sqlite3_file *id,               /* File to write into */
31861   const void *pBuf,               /* The bytes to be written */
31862   int amt,                        /* Number of bytes to write */
31863   sqlite3_int64 offset            /* Offset into the file to begin writing at */
31864 ){
31865   int rc;                         /* True if error has occured, else false */
31866   winFile *pFile = (winFile*)id;  /* File handle */
31867
31868   assert( amt>0 );
31869   assert( pFile );
31870   SimulateIOError(return SQLITE_IOERR_WRITE);
31871   SimulateDiskfullError(return SQLITE_FULL);
31872
31873   OSTRACE(("WRITE %d lock=%d\n", pFile->h, pFile->locktype));
31874
31875   rc = seekWinFile(pFile, offset);
31876   if( rc==0 ){
31877     u8 *aRem = (u8 *)pBuf;        /* Data yet to be written */
31878     int nRem = amt;               /* Number of bytes yet to be written */
31879     DWORD nWrite;                 /* Bytes written by each WriteFile() call */
31880
31881     while( nRem>0 && WriteFile(pFile->h, aRem, nRem, &nWrite, 0) && nWrite>0 ){
31882       aRem += nWrite;
31883       nRem -= nWrite;
31884     }
31885     if( nRem>0 ){
31886       pFile->lastErrno = GetLastError();
31887       rc = 1;
31888     }
31889   }
31890
31891   if( rc ){
31892     if( pFile->lastErrno==ERROR_HANDLE_DISK_FULL ){
31893       return SQLITE_FULL;
31894     }
31895     return SQLITE_IOERR_WRITE;
31896   }
31897   return SQLITE_OK;
31898 }
31899
31900 /*
31901 ** Truncate an open file to a specified size
31902 */
31903 static int winTruncate(sqlite3_file *id, sqlite3_int64 nByte){
31904   winFile *pFile = (winFile*)id;  /* File handle object */
31905   int rc = SQLITE_OK;             /* Return code for this function */
31906
31907   assert( pFile );
31908
31909   OSTRACE(("TRUNCATE %d %lld\n", pFile->h, nByte));
31910   SimulateIOError(return SQLITE_IOERR_TRUNCATE);
31911
31912   /* If the user has configured a chunk-size for this file, truncate the
31913   ** file so that it consists of an integer number of chunks (i.e. the
31914   ** actual file size after the operation may be larger than the requested
31915   ** size).
31916   */
31917   if( pFile->szChunk ){
31918     nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
31919   }
31920
31921   /* SetEndOfFile() returns non-zero when successful, or zero when it fails. */
31922   if( seekWinFile(pFile, nByte) ){
31923     rc = SQLITE_IOERR_TRUNCATE;
31924   }else if( 0==SetEndOfFile(pFile->h) ){
31925     pFile->lastErrno = GetLastError();
31926     rc = SQLITE_IOERR_TRUNCATE;
31927   }
31928
31929   OSTRACE(("TRUNCATE %d %lld %s\n", pFile->h, nByte, rc ? "failed" : "ok"));
31930   return rc;
31931 }
31932
31933 #ifdef SQLITE_TEST
31934 /*
31935 ** Count the number of fullsyncs and normal syncs.  This is used to test
31936 ** that syncs and fullsyncs are occuring at the right times.
31937 */
31938 SQLITE_API int sqlite3_sync_count = 0;
31939 SQLITE_API int sqlite3_fullsync_count = 0;
31940 #endif
31941
31942 /*
31943 ** Make sure all writes to a particular file are committed to disk.
31944 */
31945 static int winSync(sqlite3_file *id, int flags){
31946 #if !defined(NDEBUG) || !defined(SQLITE_NO_SYNC) || defined(SQLITE_DEBUG)
31947   winFile *pFile = (winFile*)id;
31948 #else
31949   UNUSED_PARAMETER(id);
31950 #endif
31951
31952   assert( pFile );
31953   /* Check that one of SQLITE_SYNC_NORMAL or FULL was passed */
31954   assert((flags&0x0F)==SQLITE_SYNC_NORMAL
31955       || (flags&0x0F)==SQLITE_SYNC_FULL
31956   );
31957
31958   OSTRACE(("SYNC %d lock=%d\n", pFile->h, pFile->locktype));
31959
31960 #ifndef SQLITE_TEST
31961   UNUSED_PARAMETER(flags);
31962 #else
31963   if( flags & SQLITE_SYNC_FULL ){
31964     sqlite3_fullsync_count++;
31965   }
31966   sqlite3_sync_count++;
31967 #endif
31968
31969   /* Unix cannot, but some systems may return SQLITE_FULL from here. This
31970   ** line is to test that doing so does not cause any problems.
31971   */
31972   SimulateDiskfullError( return SQLITE_FULL );
31973   SimulateIOError( return SQLITE_IOERR; );
31974
31975   /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
31976   ** no-op
31977   */
31978 #ifdef SQLITE_NO_SYNC
31979   return SQLITE_OK;
31980 #else
31981   if( FlushFileBuffers(pFile->h) ){
31982     return SQLITE_OK;
31983   }else{
31984     pFile->lastErrno = GetLastError();
31985     return SQLITE_IOERR;
31986   }
31987 #endif
31988 }
31989
31990 /*
31991 ** Determine the current size of a file in bytes
31992 */
31993 static int winFileSize(sqlite3_file *id, sqlite3_int64 *pSize){
31994   DWORD upperBits;
31995   DWORD lowerBits;
31996   winFile *pFile = (winFile*)id;
31997   DWORD error;
31998
31999   assert( id!=0 );
32000   SimulateIOError(return SQLITE_IOERR_FSTAT);
32001   lowerBits = GetFileSize(pFile->h, &upperBits);
32002   if(   (lowerBits == INVALID_FILE_SIZE)
32003      && ((error = GetLastError()) != NO_ERROR) )
32004   {
32005     pFile->lastErrno = error;
32006     return SQLITE_IOERR_FSTAT;
32007   }
32008   *pSize = (((sqlite3_int64)upperBits)<<32) + lowerBits;
32009   return SQLITE_OK;
32010 }
32011
32012 /*
32013 ** LOCKFILE_FAIL_IMMEDIATELY is undefined on some Windows systems.
32014 */
32015 #ifndef LOCKFILE_FAIL_IMMEDIATELY
32016 # define LOCKFILE_FAIL_IMMEDIATELY 1
32017 #endif
32018
32019 /*
32020 ** Acquire a reader lock.
32021 ** Different API routines are called depending on whether or not this
32022 ** is Win95 or WinNT.
32023 */
32024 static int getReadLock(winFile *pFile){
32025   int res;
32026   if( isNT() ){
32027     OVERLAPPED ovlp;
32028     ovlp.Offset = SHARED_FIRST;
32029     ovlp.OffsetHigh = 0;
32030     ovlp.hEvent = 0;
32031     res = LockFileEx(pFile->h, LOCKFILE_FAIL_IMMEDIATELY,
32032                      0, SHARED_SIZE, 0, &ovlp);
32033 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
32034 */
32035 #if SQLITE_OS_WINCE==0
32036   }else{
32037     int lk;
32038     sqlite3_randomness(sizeof(lk), &lk);
32039     pFile->sharedLockByte = (short)((lk & 0x7fffffff)%(SHARED_SIZE - 1));
32040     res = LockFile(pFile->h, SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0);
32041 #endif
32042   }
32043   if( res == 0 ){
32044     pFile->lastErrno = GetLastError();
32045   }
32046   return res;
32047 }
32048
32049 /*
32050 ** Undo a readlock
32051 */
32052 static int unlockReadLock(winFile *pFile){
32053   int res;
32054   if( isNT() ){
32055     res = UnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
32056 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
32057 */
32058 #if SQLITE_OS_WINCE==0
32059   }else{
32060     res = UnlockFile(pFile->h, SHARED_FIRST + pFile->sharedLockByte, 0, 1, 0);
32061 #endif
32062   }
32063   if( res == 0 ){
32064     pFile->lastErrno = GetLastError();
32065   }
32066   return res;
32067 }
32068
32069 /*
32070 ** Lock the file with the lock specified by parameter locktype - one
32071 ** of the following:
32072 **
32073 **     (1) SHARED_LOCK
32074 **     (2) RESERVED_LOCK
32075 **     (3) PENDING_LOCK
32076 **     (4) EXCLUSIVE_LOCK
32077 **
32078 ** Sometimes when requesting one lock state, additional lock states
32079 ** are inserted in between.  The locking might fail on one of the later
32080 ** transitions leaving the lock state different from what it started but
32081 ** still short of its goal.  The following chart shows the allowed
32082 ** transitions and the inserted intermediate states:
32083 **
32084 **    UNLOCKED -> SHARED
32085 **    SHARED -> RESERVED
32086 **    SHARED -> (PENDING) -> EXCLUSIVE
32087 **    RESERVED -> (PENDING) -> EXCLUSIVE
32088 **    PENDING -> EXCLUSIVE
32089 **
32090 ** This routine will only increase a lock.  The winUnlock() routine
32091 ** erases all locks at once and returns us immediately to locking level 0.
32092 ** It is not possible to lower the locking level one step at a time.  You
32093 ** must go straight to locking level 0.
32094 */
32095 static int winLock(sqlite3_file *id, int locktype){
32096   int rc = SQLITE_OK;    /* Return code from subroutines */
32097   int res = 1;           /* Result of a windows lock call */
32098   int newLocktype;       /* Set pFile->locktype to this value before exiting */
32099   int gotPendingLock = 0;/* True if we acquired a PENDING lock this time */
32100   winFile *pFile = (winFile*)id;
32101   DWORD error = NO_ERROR;
32102
32103   assert( id!=0 );
32104   OSTRACE(("LOCK %d %d was %d(%d)\n",
32105            pFile->h, locktype, pFile->locktype, pFile->sharedLockByte));
32106
32107   /* If there is already a lock of this type or more restrictive on the
32108   ** OsFile, do nothing. Don't use the end_lock: exit path, as
32109   ** sqlite3OsEnterMutex() hasn't been called yet.
32110   */
32111   if( pFile->locktype>=locktype ){
32112     return SQLITE_OK;
32113   }
32114
32115   /* Make sure the locking sequence is correct
32116   */
32117   assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK );
32118   assert( locktype!=PENDING_LOCK );
32119   assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK );
32120
32121   /* Lock the PENDING_LOCK byte if we need to acquire a PENDING lock or
32122   ** a SHARED lock.  If we are acquiring a SHARED lock, the acquisition of
32123   ** the PENDING_LOCK byte is temporary.
32124   */
32125   newLocktype = pFile->locktype;
32126   if(   (pFile->locktype==NO_LOCK)
32127      || (   (locktype==EXCLUSIVE_LOCK)
32128          && (pFile->locktype==RESERVED_LOCK))
32129   ){
32130     int cnt = 3;
32131     while( cnt-->0 && (res = LockFile(pFile->h, PENDING_BYTE, 0, 1, 0))==0 ){
32132       /* Try 3 times to get the pending lock.  The pending lock might be
32133       ** held by another reader process who will release it momentarily.
32134       */
32135       OSTRACE(("could not get a PENDING lock. cnt=%d\n", cnt));
32136       Sleep(1);
32137     }
32138     gotPendingLock = res;
32139     if( !res ){
32140       error = GetLastError();
32141     }
32142   }
32143
32144   /* Acquire a shared lock
32145   */
32146   if( locktype==SHARED_LOCK && res ){
32147     assert( pFile->locktype==NO_LOCK );
32148     res = getReadLock(pFile);
32149     if( res ){
32150       newLocktype = SHARED_LOCK;
32151     }else{
32152       error = GetLastError();
32153     }
32154   }
32155
32156   /* Acquire a RESERVED lock
32157   */
32158   if( locktype==RESERVED_LOCK && res ){
32159     assert( pFile->locktype==SHARED_LOCK );
32160     res = LockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
32161     if( res ){
32162       newLocktype = RESERVED_LOCK;
32163     }else{
32164       error = GetLastError();
32165     }
32166   }
32167
32168   /* Acquire a PENDING lock
32169   */
32170   if( locktype==EXCLUSIVE_LOCK && res ){
32171     newLocktype = PENDING_LOCK;
32172     gotPendingLock = 0;
32173   }
32174
32175   /* Acquire an EXCLUSIVE lock
32176   */
32177   if( locktype==EXCLUSIVE_LOCK && res ){
32178     assert( pFile->locktype>=SHARED_LOCK );
32179     res = unlockReadLock(pFile);
32180     OSTRACE(("unreadlock = %d\n", res));
32181     res = LockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
32182     if( res ){
32183       newLocktype = EXCLUSIVE_LOCK;
32184     }else{
32185       error = GetLastError();
32186       OSTRACE(("error-code = %d\n", error));
32187       getReadLock(pFile);
32188     }
32189   }
32190
32191   /* If we are holding a PENDING lock that ought to be released, then
32192   ** release it now.
32193   */
32194   if( gotPendingLock && locktype==SHARED_LOCK ){
32195     UnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0);
32196   }
32197
32198   /* Update the state of the lock has held in the file descriptor then
32199   ** return the appropriate result code.
32200   */
32201   if( res ){
32202     rc = SQLITE_OK;
32203   }else{
32204     OSTRACE(("LOCK FAILED %d trying for %d but got %d\n", pFile->h,
32205            locktype, newLocktype));
32206     pFile->lastErrno = error;
32207     rc = SQLITE_BUSY;
32208   }
32209   pFile->locktype = (u8)newLocktype;
32210   return rc;
32211 }
32212
32213 /*
32214 ** This routine checks if there is a RESERVED lock held on the specified
32215 ** file by this or any other process. If such a lock is held, return
32216 ** non-zero, otherwise zero.
32217 */
32218 static int winCheckReservedLock(sqlite3_file *id, int *pResOut){
32219   int rc;
32220   winFile *pFile = (winFile*)id;
32221
32222   SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
32223
32224   assert( id!=0 );
32225   if( pFile->locktype>=RESERVED_LOCK ){
32226     rc = 1;
32227     OSTRACE(("TEST WR-LOCK %d %d (local)\n", pFile->h, rc));
32228   }else{
32229     rc = LockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
32230     if( rc ){
32231       UnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
32232     }
32233     rc = !rc;
32234     OSTRACE(("TEST WR-LOCK %d %d (remote)\n", pFile->h, rc));
32235   }
32236   *pResOut = rc;
32237   return SQLITE_OK;
32238 }
32239
32240 /*
32241 ** Lower the locking level on file descriptor id to locktype.  locktype
32242 ** must be either NO_LOCK or SHARED_LOCK.
32243 **
32244 ** If the locking level of the file descriptor is already at or below
32245 ** the requested locking level, this routine is a no-op.
32246 **
32247 ** It is not possible for this routine to fail if the second argument
32248 ** is NO_LOCK.  If the second argument is SHARED_LOCK then this routine
32249 ** might return SQLITE_IOERR;
32250 */
32251 static int winUnlock(sqlite3_file *id, int locktype){
32252   int type;
32253   winFile *pFile = (winFile*)id;
32254   int rc = SQLITE_OK;
32255   assert( pFile!=0 );
32256   assert( locktype<=SHARED_LOCK );
32257   OSTRACE(("UNLOCK %d to %d was %d(%d)\n", pFile->h, locktype,
32258           pFile->locktype, pFile->sharedLockByte));
32259   type = pFile->locktype;
32260   if( type>=EXCLUSIVE_LOCK ){
32261     UnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
32262     if( locktype==SHARED_LOCK && !getReadLock(pFile) ){
32263       /* This should never happen.  We should always be able to
32264       ** reacquire the read lock */
32265       rc = SQLITE_IOERR_UNLOCK;
32266     }
32267   }
32268   if( type>=RESERVED_LOCK ){
32269     UnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
32270   }
32271   if( locktype==NO_LOCK && type>=SHARED_LOCK ){
32272     unlockReadLock(pFile);
32273   }
32274   if( type>=PENDING_LOCK ){
32275     UnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0);
32276   }
32277   pFile->locktype = (u8)locktype;
32278   return rc;
32279 }
32280
32281 /*
32282 ** Control and query of the open file handle.
32283 */
32284 static int winFileControl(sqlite3_file *id, int op, void *pArg){
32285   switch( op ){
32286     case SQLITE_FCNTL_LOCKSTATE: {
32287       *(int*)pArg = ((winFile*)id)->locktype;
32288       return SQLITE_OK;
32289     }
32290     case SQLITE_LAST_ERRNO: {
32291       *(int*)pArg = (int)((winFile*)id)->lastErrno;
32292       return SQLITE_OK;
32293     }
32294     case SQLITE_FCNTL_CHUNK_SIZE: {
32295       ((winFile*)id)->szChunk = *(int *)pArg;
32296       return SQLITE_OK;
32297     }
32298     case SQLITE_FCNTL_SIZE_HINT: {
32299       sqlite3_int64 sz = *(sqlite3_int64*)pArg;
32300       SimulateIOErrorBenign(1);
32301       winTruncate(id, sz);
32302       SimulateIOErrorBenign(0);
32303       return SQLITE_OK;
32304     }
32305     case SQLITE_FCNTL_SYNC_OMITTED: {
32306       return SQLITE_OK;
32307     }
32308   }
32309   return SQLITE_NOTFOUND;
32310 }
32311
32312 /*
32313 ** Return the sector size in bytes of the underlying block device for
32314 ** the specified file. This is almost always 512 bytes, but may be
32315 ** larger for some devices.
32316 **
32317 ** SQLite code assumes this function cannot fail. It also assumes that
32318 ** if two files are created in the same file-system directory (i.e.
32319 ** a database and its journal file) that the sector size will be the
32320 ** same for both.
32321 */
32322 static int winSectorSize(sqlite3_file *id){
32323   assert( id!=0 );
32324   return (int)(((winFile*)id)->sectorSize);
32325 }
32326
32327 /*
32328 ** Return a vector of device characteristics.
32329 */
32330 static int winDeviceCharacteristics(sqlite3_file *id){
32331   UNUSED_PARAMETER(id);
32332   return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN;
32333 }
32334
32335 #ifndef SQLITE_OMIT_WAL
32336
32337 /* 
32338 ** Windows will only let you create file view mappings
32339 ** on allocation size granularity boundaries.
32340 ** During sqlite3_os_init() we do a GetSystemInfo()
32341 ** to get the granularity size.
32342 */
32343 SYSTEM_INFO winSysInfo;
32344
32345 /*
32346 ** Helper functions to obtain and relinquish the global mutex. The
32347 ** global mutex is used to protect the winLockInfo objects used by 
32348 ** this file, all of which may be shared by multiple threads.
32349 **
32350 ** Function winShmMutexHeld() is used to assert() that the global mutex 
32351 ** is held when required. This function is only used as part of assert() 
32352 ** statements. e.g.
32353 **
32354 **   winShmEnterMutex()
32355 **     assert( winShmMutexHeld() );
32356 **   winShmLeaveMutex()
32357 */
32358 static void winShmEnterMutex(void){
32359   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
32360 }
32361 static void winShmLeaveMutex(void){
32362   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
32363 }
32364 #ifdef SQLITE_DEBUG
32365 static int winShmMutexHeld(void) {
32366   return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
32367 }
32368 #endif
32369
32370 /*
32371 ** Object used to represent a single file opened and mmapped to provide
32372 ** shared memory.  When multiple threads all reference the same
32373 ** log-summary, each thread has its own winFile object, but they all
32374 ** point to a single instance of this object.  In other words, each
32375 ** log-summary is opened only once per process.
32376 **
32377 ** winShmMutexHeld() must be true when creating or destroying
32378 ** this object or while reading or writing the following fields:
32379 **
32380 **      nRef
32381 **      pNext 
32382 **
32383 ** The following fields are read-only after the object is created:
32384 ** 
32385 **      fid
32386 **      zFilename
32387 **
32388 ** Either winShmNode.mutex must be held or winShmNode.nRef==0 and
32389 ** winShmMutexHeld() is true when reading or writing any other field
32390 ** in this structure.
32391 **
32392 */
32393 struct winShmNode {
32394   sqlite3_mutex *mutex;      /* Mutex to access this object */
32395   char *zFilename;           /* Name of the file */
32396   winFile hFile;             /* File handle from winOpen */
32397
32398   int szRegion;              /* Size of shared-memory regions */
32399   int nRegion;               /* Size of array apRegion */
32400   struct ShmRegion {
32401     HANDLE hMap;             /* File handle from CreateFileMapping */
32402     void *pMap;
32403   } *aRegion;
32404   DWORD lastErrno;           /* The Windows errno from the last I/O error */
32405
32406   int nRef;                  /* Number of winShm objects pointing to this */
32407   winShm *pFirst;            /* All winShm objects pointing to this */
32408   winShmNode *pNext;         /* Next in list of all winShmNode objects */
32409 #ifdef SQLITE_DEBUG
32410   u8 nextShmId;              /* Next available winShm.id value */
32411 #endif
32412 };
32413
32414 /*
32415 ** A global array of all winShmNode objects.
32416 **
32417 ** The winShmMutexHeld() must be true while reading or writing this list.
32418 */
32419 static winShmNode *winShmNodeList = 0;
32420
32421 /*
32422 ** Structure used internally by this VFS to record the state of an
32423 ** open shared memory connection.
32424 **
32425 ** The following fields are initialized when this object is created and
32426 ** are read-only thereafter:
32427 **
32428 **    winShm.pShmNode
32429 **    winShm.id
32430 **
32431 ** All other fields are read/write.  The winShm.pShmNode->mutex must be held
32432 ** while accessing any read/write fields.
32433 */
32434 struct winShm {
32435   winShmNode *pShmNode;      /* The underlying winShmNode object */
32436   winShm *pNext;             /* Next winShm with the same winShmNode */
32437   u8 hasMutex;               /* True if holding the winShmNode mutex */
32438   u16 sharedMask;            /* Mask of shared locks held */
32439   u16 exclMask;              /* Mask of exclusive locks held */
32440 #ifdef SQLITE_DEBUG
32441   u8 id;                     /* Id of this connection with its winShmNode */
32442 #endif
32443 };
32444
32445 /*
32446 ** Constants used for locking
32447 */
32448 #define WIN_SHM_BASE   ((22+SQLITE_SHM_NLOCK)*4)        /* first lock byte */
32449 #define WIN_SHM_DMS    (WIN_SHM_BASE+SQLITE_SHM_NLOCK)  /* deadman switch */
32450
32451 /*
32452 ** Apply advisory locks for all n bytes beginning at ofst.
32453 */
32454 #define _SHM_UNLCK  1
32455 #define _SHM_RDLCK  2
32456 #define _SHM_WRLCK  3
32457 static int winShmSystemLock(
32458   winShmNode *pFile,    /* Apply locks to this open shared-memory segment */
32459   int lockType,         /* _SHM_UNLCK, _SHM_RDLCK, or _SHM_WRLCK */
32460   int ofst,             /* Offset to first byte to be locked/unlocked */
32461   int nByte             /* Number of bytes to lock or unlock */
32462 ){
32463   OVERLAPPED ovlp;
32464   DWORD dwFlags;
32465   int rc = 0;           /* Result code form Lock/UnlockFileEx() */
32466
32467   /* Access to the winShmNode object is serialized by the caller */
32468   assert( sqlite3_mutex_held(pFile->mutex) || pFile->nRef==0 );
32469
32470   /* Initialize the locking parameters */
32471   dwFlags = LOCKFILE_FAIL_IMMEDIATELY;
32472   if( lockType == _SHM_WRLCK ) dwFlags |= LOCKFILE_EXCLUSIVE_LOCK;
32473
32474   memset(&ovlp, 0, sizeof(OVERLAPPED));
32475   ovlp.Offset = ofst;
32476
32477   /* Release/Acquire the system-level lock */
32478   if( lockType==_SHM_UNLCK ){
32479     rc = UnlockFileEx(pFile->hFile.h, 0, nByte, 0, &ovlp);
32480   }else{
32481     rc = LockFileEx(pFile->hFile.h, dwFlags, 0, nByte, 0, &ovlp);
32482   }
32483   
32484   if( rc!= 0 ){
32485     rc = SQLITE_OK;
32486   }else{
32487     pFile->lastErrno =  GetLastError();
32488     rc = SQLITE_BUSY;
32489   }
32490
32491   OSTRACE(("SHM-LOCK %d %s %s 0x%08lx\n", 
32492            pFile->hFile.h,
32493            rc==SQLITE_OK ? "ok" : "failed",
32494            lockType==_SHM_UNLCK ? "UnlockFileEx" : "LockFileEx",
32495            pFile->lastErrno));
32496
32497   return rc;
32498 }
32499
32500 /* Forward references to VFS methods */
32501 static int winOpen(sqlite3_vfs*,const char*,sqlite3_file*,int,int*);
32502 static int winDelete(sqlite3_vfs *,const char*,int);
32503
32504 /*
32505 ** Purge the winShmNodeList list of all entries with winShmNode.nRef==0.
32506 **
32507 ** This is not a VFS shared-memory method; it is a utility function called
32508 ** by VFS shared-memory methods.
32509 */
32510 static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){
32511   winShmNode **pp;
32512   winShmNode *p;
32513   BOOL bRc;
32514   assert( winShmMutexHeld() );
32515   pp = &winShmNodeList;
32516   while( (p = *pp)!=0 ){
32517     if( p->nRef==0 ){
32518       int i;
32519       if( p->mutex ) sqlite3_mutex_free(p->mutex);
32520       for(i=0; i<p->nRegion; i++){
32521         bRc = UnmapViewOfFile(p->aRegion[i].pMap);
32522         OSTRACE(("SHM-PURGE pid-%d unmap region=%d %s\n",
32523                  (int)GetCurrentProcessId(), i,
32524                  bRc ? "ok" : "failed"));
32525         bRc = CloseHandle(p->aRegion[i].hMap);
32526         OSTRACE(("SHM-PURGE pid-%d close region=%d %s\n",
32527                  (int)GetCurrentProcessId(), i,
32528                  bRc ? "ok" : "failed"));
32529       }
32530       if( p->hFile.h != INVALID_HANDLE_VALUE ){
32531         SimulateIOErrorBenign(1);
32532         winClose((sqlite3_file *)&p->hFile);
32533         SimulateIOErrorBenign(0);
32534       }
32535       if( deleteFlag ){
32536         SimulateIOErrorBenign(1);
32537         winDelete(pVfs, p->zFilename, 0);
32538         SimulateIOErrorBenign(0);
32539       }
32540       *pp = p->pNext;
32541       sqlite3_free(p->aRegion);
32542       sqlite3_free(p);
32543     }else{
32544       pp = &p->pNext;
32545     }
32546   }
32547 }
32548
32549 /*
32550 ** Open the shared-memory area associated with database file pDbFd.
32551 **
32552 ** When opening a new shared-memory file, if no other instances of that
32553 ** file are currently open, in this process or in other processes, then
32554 ** the file must be truncated to zero length or have its header cleared.
32555 */
32556 static int winOpenSharedMemory(winFile *pDbFd){
32557   struct winShm *p;                  /* The connection to be opened */
32558   struct winShmNode *pShmNode = 0;   /* The underlying mmapped file */
32559   int rc;                            /* Result code */
32560   struct winShmNode *pNew;           /* Newly allocated winShmNode */
32561   int nName;                         /* Size of zName in bytes */
32562
32563   assert( pDbFd->pShm==0 );    /* Not previously opened */
32564
32565   /* Allocate space for the new sqlite3_shm object.  Also speculatively
32566   ** allocate space for a new winShmNode and filename.
32567   */
32568   p = sqlite3_malloc( sizeof(*p) );
32569   if( p==0 ) return SQLITE_NOMEM;
32570   memset(p, 0, sizeof(*p));
32571   nName = sqlite3Strlen30(pDbFd->zPath);
32572   pNew = sqlite3_malloc( sizeof(*pShmNode) + nName + 15 );
32573   if( pNew==0 ){
32574     sqlite3_free(p);
32575     return SQLITE_NOMEM;
32576   }
32577   memset(pNew, 0, sizeof(*pNew));
32578   pNew->zFilename = (char*)&pNew[1];
32579   sqlite3_snprintf(nName+15, pNew->zFilename, "%s-shm", pDbFd->zPath);
32580
32581   /* Look to see if there is an existing winShmNode that can be used.
32582   ** If no matching winShmNode currently exists, create a new one.
32583   */
32584   winShmEnterMutex();
32585   for(pShmNode = winShmNodeList; pShmNode; pShmNode=pShmNode->pNext){
32586     /* TBD need to come up with better match here.  Perhaps
32587     ** use FILE_ID_BOTH_DIR_INFO Structure.
32588     */
32589     if( sqlite3StrICmp(pShmNode->zFilename, pNew->zFilename)==0 ) break;
32590   }
32591   if( pShmNode ){
32592     sqlite3_free(pNew);
32593   }else{
32594     pShmNode = pNew;
32595     pNew = 0;
32596     ((winFile*)(&pShmNode->hFile))->h = INVALID_HANDLE_VALUE;
32597     pShmNode->pNext = winShmNodeList;
32598     winShmNodeList = pShmNode;
32599
32600     pShmNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
32601     if( pShmNode->mutex==0 ){
32602       rc = SQLITE_NOMEM;
32603       goto shm_open_err;
32604     }
32605
32606     rc = winOpen(pDbFd->pVfs,
32607                  pShmNode->zFilename,             /* Name of the file (UTF-8) */
32608                  (sqlite3_file*)&pShmNode->hFile,  /* File handle here */
32609                  SQLITE_OPEN_WAL | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, /* Mode flags */
32610                  0);
32611     if( SQLITE_OK!=rc ){
32612       rc = SQLITE_CANTOPEN_BKPT;
32613       goto shm_open_err;
32614     }
32615
32616     /* Check to see if another process is holding the dead-man switch.
32617     ** If not, truncate the file to zero length. 
32618     */
32619     if( winShmSystemLock(pShmNode, _SHM_WRLCK, WIN_SHM_DMS, 1)==SQLITE_OK ){
32620       rc = winTruncate((sqlite3_file *)&pShmNode->hFile, 0);
32621       if( rc!=SQLITE_OK ){
32622         rc = SQLITE_IOERR_SHMOPEN;
32623       }
32624     }
32625     if( rc==SQLITE_OK ){
32626       winShmSystemLock(pShmNode, _SHM_UNLCK, WIN_SHM_DMS, 1);
32627       rc = winShmSystemLock(pShmNode, _SHM_RDLCK, WIN_SHM_DMS, 1);
32628     }
32629     if( rc ) goto shm_open_err;
32630   }
32631
32632   /* Make the new connection a child of the winShmNode */
32633   p->pShmNode = pShmNode;
32634 #ifdef SQLITE_DEBUG
32635   p->id = pShmNode->nextShmId++;
32636 #endif
32637   pShmNode->nRef++;
32638   pDbFd->pShm = p;
32639   winShmLeaveMutex();
32640
32641   /* The reference count on pShmNode has already been incremented under
32642   ** the cover of the winShmEnterMutex() mutex and the pointer from the
32643   ** new (struct winShm) object to the pShmNode has been set. All that is
32644   ** left to do is to link the new object into the linked list starting
32645   ** at pShmNode->pFirst. This must be done while holding the pShmNode->mutex 
32646   ** mutex.
32647   */
32648   sqlite3_mutex_enter(pShmNode->mutex);
32649   p->pNext = pShmNode->pFirst;
32650   pShmNode->pFirst = p;
32651   sqlite3_mutex_leave(pShmNode->mutex);
32652   return SQLITE_OK;
32653
32654   /* Jump here on any error */
32655 shm_open_err:
32656   winShmSystemLock(pShmNode, _SHM_UNLCK, WIN_SHM_DMS, 1);
32657   winShmPurge(pDbFd->pVfs, 0);      /* This call frees pShmNode if required */
32658   sqlite3_free(p);
32659   sqlite3_free(pNew);
32660   winShmLeaveMutex();
32661   return rc;
32662 }
32663
32664 /*
32665 ** Close a connection to shared-memory.  Delete the underlying 
32666 ** storage if deleteFlag is true.
32667 */
32668 static int winShmUnmap(
32669   sqlite3_file *fd,          /* Database holding shared memory */
32670   int deleteFlag             /* Delete after closing if true */
32671 ){
32672   winFile *pDbFd;       /* Database holding shared-memory */
32673   winShm *p;            /* The connection to be closed */
32674   winShmNode *pShmNode; /* The underlying shared-memory file */
32675   winShm **pp;          /* For looping over sibling connections */
32676
32677   pDbFd = (winFile*)fd;
32678   p = pDbFd->pShm;
32679   if( p==0 ) return SQLITE_OK;
32680   pShmNode = p->pShmNode;
32681
32682   /* Remove connection p from the set of connections associated
32683   ** with pShmNode */
32684   sqlite3_mutex_enter(pShmNode->mutex);
32685   for(pp=&pShmNode->pFirst; (*pp)!=p; pp = &(*pp)->pNext){}
32686   *pp = p->pNext;
32687
32688   /* Free the connection p */
32689   sqlite3_free(p);
32690   pDbFd->pShm = 0;
32691   sqlite3_mutex_leave(pShmNode->mutex);
32692
32693   /* If pShmNode->nRef has reached 0, then close the underlying
32694   ** shared-memory file, too */
32695   winShmEnterMutex();
32696   assert( pShmNode->nRef>0 );
32697   pShmNode->nRef--;
32698   if( pShmNode->nRef==0 ){
32699     winShmPurge(pDbFd->pVfs, deleteFlag);
32700   }
32701   winShmLeaveMutex();
32702
32703   return SQLITE_OK;
32704 }
32705
32706 /*
32707 ** Change the lock state for a shared-memory segment.
32708 */
32709 static int winShmLock(
32710   sqlite3_file *fd,          /* Database file holding the shared memory */
32711   int ofst,                  /* First lock to acquire or release */
32712   int n,                     /* Number of locks to acquire or release */
32713   int flags                  /* What to do with the lock */
32714 ){
32715   winFile *pDbFd = (winFile*)fd;        /* Connection holding shared memory */
32716   winShm *p = pDbFd->pShm;              /* The shared memory being locked */
32717   winShm *pX;                           /* For looping over all siblings */
32718   winShmNode *pShmNode = p->pShmNode;
32719   int rc = SQLITE_OK;                   /* Result code */
32720   u16 mask;                             /* Mask of locks to take or release */
32721
32722   assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK );
32723   assert( n>=1 );
32724   assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
32725        || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
32726        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED)
32727        || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
32728   assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
32729
32730   mask = (u16)((1U<<(ofst+n)) - (1U<<ofst));
32731   assert( n>1 || mask==(1<<ofst) );
32732   sqlite3_mutex_enter(pShmNode->mutex);
32733   if( flags & SQLITE_SHM_UNLOCK ){
32734     u16 allMask = 0; /* Mask of locks held by siblings */
32735
32736     /* See if any siblings hold this same lock */
32737     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
32738       if( pX==p ) continue;
32739       assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 );
32740       allMask |= pX->sharedMask;
32741     }
32742
32743     /* Unlock the system-level locks */
32744     if( (mask & allMask)==0 ){
32745       rc = winShmSystemLock(pShmNode, _SHM_UNLCK, ofst+WIN_SHM_BASE, n);
32746     }else{
32747       rc = SQLITE_OK;
32748     }
32749
32750     /* Undo the local locks */
32751     if( rc==SQLITE_OK ){
32752       p->exclMask &= ~mask;
32753       p->sharedMask &= ~mask;
32754     } 
32755   }else if( flags & SQLITE_SHM_SHARED ){
32756     u16 allShared = 0;  /* Union of locks held by connections other than "p" */
32757
32758     /* Find out which shared locks are already held by sibling connections.
32759     ** If any sibling already holds an exclusive lock, go ahead and return
32760     ** SQLITE_BUSY.
32761     */
32762     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
32763       if( (pX->exclMask & mask)!=0 ){
32764         rc = SQLITE_BUSY;
32765         break;
32766       }
32767       allShared |= pX->sharedMask;
32768     }
32769
32770     /* Get shared locks at the system level, if necessary */
32771     if( rc==SQLITE_OK ){
32772       if( (allShared & mask)==0 ){
32773         rc = winShmSystemLock(pShmNode, _SHM_RDLCK, ofst+WIN_SHM_BASE, n);
32774       }else{
32775         rc = SQLITE_OK;
32776       }
32777     }
32778
32779     /* Get the local shared locks */
32780     if( rc==SQLITE_OK ){
32781       p->sharedMask |= mask;
32782     }
32783   }else{
32784     /* Make sure no sibling connections hold locks that will block this
32785     ** lock.  If any do, return SQLITE_BUSY right away.
32786     */
32787     for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
32788       if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
32789         rc = SQLITE_BUSY;
32790         break;
32791       }
32792     }
32793   
32794     /* Get the exclusive locks at the system level.  Then if successful
32795     ** also mark the local connection as being locked.
32796     */
32797     if( rc==SQLITE_OK ){
32798       rc = winShmSystemLock(pShmNode, _SHM_WRLCK, ofst+WIN_SHM_BASE, n);
32799       if( rc==SQLITE_OK ){
32800         assert( (p->sharedMask & mask)==0 );
32801         p->exclMask |= mask;
32802       }
32803     }
32804   }
32805   sqlite3_mutex_leave(pShmNode->mutex);
32806   OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x %s\n",
32807            p->id, (int)GetCurrentProcessId(), p->sharedMask, p->exclMask,
32808            rc ? "failed" : "ok"));
32809   return rc;
32810 }
32811
32812 /*
32813 ** Implement a memory barrier or memory fence on shared memory.  
32814 **
32815 ** All loads and stores begun before the barrier must complete before
32816 ** any load or store begun after the barrier.
32817 */
32818 static void winShmBarrier(
32819   sqlite3_file *fd          /* Database holding the shared memory */
32820 ){
32821   UNUSED_PARAMETER(fd);
32822   /* MemoryBarrier(); // does not work -- do not know why not */
32823   winShmEnterMutex();
32824   winShmLeaveMutex();
32825 }
32826
32827 /*
32828 ** This function is called to obtain a pointer to region iRegion of the 
32829 ** shared-memory associated with the database file fd. Shared-memory regions 
32830 ** are numbered starting from zero. Each shared-memory region is szRegion 
32831 ** bytes in size.
32832 **
32833 ** If an error occurs, an error code is returned and *pp is set to NULL.
32834 **
32835 ** Otherwise, if the isWrite parameter is 0 and the requested shared-memory
32836 ** region has not been allocated (by any client, including one running in a
32837 ** separate process), then *pp is set to NULL and SQLITE_OK returned. If 
32838 ** isWrite is non-zero and the requested shared-memory region has not yet 
32839 ** been allocated, it is allocated by this function.
32840 **
32841 ** If the shared-memory region has already been allocated or is allocated by
32842 ** this call as described above, then it is mapped into this processes 
32843 ** address space (if it is not already), *pp is set to point to the mapped 
32844 ** memory and SQLITE_OK returned.
32845 */
32846 static int winShmMap(
32847   sqlite3_file *fd,               /* Handle open on database file */
32848   int iRegion,                    /* Region to retrieve */
32849   int szRegion,                   /* Size of regions */
32850   int isWrite,                    /* True to extend file if necessary */
32851   void volatile **pp              /* OUT: Mapped memory */
32852 ){
32853   winFile *pDbFd = (winFile*)fd;
32854   winShm *p = pDbFd->pShm;
32855   winShmNode *pShmNode;
32856   int rc = SQLITE_OK;
32857
32858   if( !p ){
32859     rc = winOpenSharedMemory(pDbFd);
32860     if( rc!=SQLITE_OK ) return rc;
32861     p = pDbFd->pShm;
32862   }
32863   pShmNode = p->pShmNode;
32864
32865   sqlite3_mutex_enter(pShmNode->mutex);
32866   assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 );
32867
32868   if( pShmNode->nRegion<=iRegion ){
32869     struct ShmRegion *apNew;           /* New aRegion[] array */
32870     int nByte = (iRegion+1)*szRegion;  /* Minimum required file size */
32871     sqlite3_int64 sz;                  /* Current size of wal-index file */
32872
32873     pShmNode->szRegion = szRegion;
32874
32875     /* The requested region is not mapped into this processes address space.
32876     ** Check to see if it has been allocated (i.e. if the wal-index file is
32877     ** large enough to contain the requested region).
32878     */
32879     rc = winFileSize((sqlite3_file *)&pShmNode->hFile, &sz);
32880     if( rc!=SQLITE_OK ){
32881       rc = SQLITE_IOERR_SHMSIZE;
32882       goto shmpage_out;
32883     }
32884
32885     if( sz<nByte ){
32886       /* The requested memory region does not exist. If isWrite is set to
32887       ** zero, exit early. *pp will be set to NULL and SQLITE_OK returned.
32888       **
32889       ** Alternatively, if isWrite is non-zero, use ftruncate() to allocate
32890       ** the requested memory region.
32891       */
32892       if( !isWrite ) goto shmpage_out;
32893       rc = winTruncate((sqlite3_file *)&pShmNode->hFile, nByte);
32894       if( rc!=SQLITE_OK ){
32895         rc = SQLITE_IOERR_SHMSIZE;
32896         goto shmpage_out;
32897       }
32898     }
32899
32900     /* Map the requested memory region into this processes address space. */
32901     apNew = (struct ShmRegion *)sqlite3_realloc(
32902         pShmNode->aRegion, (iRegion+1)*sizeof(apNew[0])
32903     );
32904     if( !apNew ){
32905       rc = SQLITE_IOERR_NOMEM;
32906       goto shmpage_out;
32907     }
32908     pShmNode->aRegion = apNew;
32909
32910     while( pShmNode->nRegion<=iRegion ){
32911       HANDLE hMap;                /* file-mapping handle */
32912       void *pMap = 0;             /* Mapped memory region */
32913      
32914       hMap = CreateFileMapping(pShmNode->hFile.h, 
32915           NULL, PAGE_READWRITE, 0, nByte, NULL
32916       );
32917       OSTRACE(("SHM-MAP pid-%d create region=%d nbyte=%d %s\n",
32918                (int)GetCurrentProcessId(), pShmNode->nRegion, nByte,
32919                hMap ? "ok" : "failed"));
32920       if( hMap ){
32921         int iOffset = pShmNode->nRegion*szRegion;
32922         int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity;
32923         pMap = MapViewOfFile(hMap, FILE_MAP_WRITE | FILE_MAP_READ,
32924             0, iOffset - iOffsetShift, szRegion + iOffsetShift
32925         );
32926         OSTRACE(("SHM-MAP pid-%d map region=%d offset=%d size=%d %s\n",
32927                  (int)GetCurrentProcessId(), pShmNode->nRegion, iOffset, szRegion,
32928                  pMap ? "ok" : "failed"));
32929       }
32930       if( !pMap ){
32931         pShmNode->lastErrno = GetLastError();
32932         rc = SQLITE_IOERR;
32933         if( hMap ) CloseHandle(hMap);
32934         goto shmpage_out;
32935       }
32936
32937       pShmNode->aRegion[pShmNode->nRegion].pMap = pMap;
32938       pShmNode->aRegion[pShmNode->nRegion].hMap = hMap;
32939       pShmNode->nRegion++;
32940     }
32941   }
32942
32943 shmpage_out:
32944   if( pShmNode->nRegion>iRegion ){
32945     int iOffset = iRegion*szRegion;
32946     int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity;
32947     char *p = (char *)pShmNode->aRegion[iRegion].pMap;
32948     *pp = (void *)&p[iOffsetShift];
32949   }else{
32950     *pp = 0;
32951   }
32952   sqlite3_mutex_leave(pShmNode->mutex);
32953   return rc;
32954 }
32955
32956 #else
32957 # define winShmMap     0
32958 # define winShmLock    0
32959 # define winShmBarrier 0
32960 # define winShmUnmap   0
32961 #endif /* #ifndef SQLITE_OMIT_WAL */
32962
32963 /*
32964 ** Here ends the implementation of all sqlite3_file methods.
32965 **
32966 ********************** End sqlite3_file Methods *******************************
32967 ******************************************************************************/
32968
32969 /*
32970 ** This vector defines all the methods that can operate on an
32971 ** sqlite3_file for win32.
32972 */
32973 static const sqlite3_io_methods winIoMethod = {
32974   2,                              /* iVersion */
32975   winClose,                       /* xClose */
32976   winRead,                        /* xRead */
32977   winWrite,                       /* xWrite */
32978   winTruncate,                    /* xTruncate */
32979   winSync,                        /* xSync */
32980   winFileSize,                    /* xFileSize */
32981   winLock,                        /* xLock */
32982   winUnlock,                      /* xUnlock */
32983   winCheckReservedLock,           /* xCheckReservedLock */
32984   winFileControl,                 /* xFileControl */
32985   winSectorSize,                  /* xSectorSize */
32986   winDeviceCharacteristics,       /* xDeviceCharacteristics */
32987   winShmMap,                      /* xShmMap */
32988   winShmLock,                     /* xShmLock */
32989   winShmBarrier,                  /* xShmBarrier */
32990   winShmUnmap                     /* xShmUnmap */
32991 };
32992
32993 /****************************************************************************
32994 **************************** sqlite3_vfs methods ****************************
32995 **
32996 ** This division contains the implementation of methods on the
32997 ** sqlite3_vfs object.
32998 */
32999
33000 /*
33001 ** Convert a UTF-8 filename into whatever form the underlying
33002 ** operating system wants filenames in.  Space to hold the result
33003 ** is obtained from malloc and must be freed by the calling
33004 ** function.
33005 */
33006 static void *convertUtf8Filename(const char *zFilename){
33007   void *zConverted = 0;
33008   if( isNT() ){
33009     zConverted = utf8ToUnicode(zFilename);
33010 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
33011 */
33012 #if SQLITE_OS_WINCE==0
33013   }else{
33014     zConverted = utf8ToMbcs(zFilename);
33015 #endif
33016   }
33017   /* caller will handle out of memory */
33018   return zConverted;
33019 }
33020
33021 /*
33022 ** Create a temporary file name in zBuf.  zBuf must be big enough to
33023 ** hold at pVfs->mxPathname characters.
33024 */
33025 static int getTempname(int nBuf, char *zBuf){
33026   static char zChars[] =
33027     "abcdefghijklmnopqrstuvwxyz"
33028     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
33029     "0123456789";
33030   size_t i, j;
33031   char zTempPath[MAX_PATH+1];
33032
33033   /* It's odd to simulate an io-error here, but really this is just
33034   ** using the io-error infrastructure to test that SQLite handles this
33035   ** function failing. 
33036   */
33037   SimulateIOError( return SQLITE_IOERR );
33038
33039   if( sqlite3_temp_directory ){
33040     sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", sqlite3_temp_directory);
33041   }else if( isNT() ){
33042     char *zMulti;
33043     WCHAR zWidePath[MAX_PATH];
33044     GetTempPathW(MAX_PATH-30, zWidePath);
33045     zMulti = unicodeToUtf8(zWidePath);
33046     if( zMulti ){
33047       sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zMulti);
33048       free(zMulti);
33049     }else{
33050       return SQLITE_NOMEM;
33051     }
33052 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
33053 ** Since the ASCII version of these Windows API do not exist for WINCE,
33054 ** it's important to not reference them for WINCE builds.
33055 */
33056 #if SQLITE_OS_WINCE==0
33057   }else{
33058     char *zUtf8;
33059     char zMbcsPath[MAX_PATH];
33060     GetTempPathA(MAX_PATH-30, zMbcsPath);
33061     zUtf8 = sqlite3_win32_mbcs_to_utf8(zMbcsPath);
33062     if( zUtf8 ){
33063       sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zUtf8);
33064       free(zUtf8);
33065     }else{
33066       return SQLITE_NOMEM;
33067     }
33068 #endif
33069   }
33070
33071   /* Check that the output buffer is large enough for the temporary file 
33072   ** name. If it is not, return SQLITE_ERROR.
33073   */
33074   if( (sqlite3Strlen30(zTempPath) + sqlite3Strlen30(SQLITE_TEMP_FILE_PREFIX) + 17) >= nBuf ){
33075     return SQLITE_ERROR;
33076   }
33077
33078   for(i=sqlite3Strlen30(zTempPath); i>0 && zTempPath[i-1]=='\\'; i--){}
33079   zTempPath[i] = 0;
33080
33081   sqlite3_snprintf(nBuf-17, zBuf,
33082                    "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath);
33083   j = sqlite3Strlen30(zBuf);
33084   sqlite3_randomness(15, &zBuf[j]);
33085   for(i=0; i<15; i++, j++){
33086     zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
33087   }
33088   zBuf[j] = 0;
33089
33090   OSTRACE(("TEMP FILENAME: %s\n", zBuf));
33091   return SQLITE_OK; 
33092 }
33093
33094 /*
33095 ** The return value of getLastErrorMsg
33096 ** is zero if the error message fits in the buffer, or non-zero
33097 ** otherwise (if the message was truncated).
33098 */
33099 static int getLastErrorMsg(int nBuf, char *zBuf){
33100   /* FormatMessage returns 0 on failure.  Otherwise it
33101   ** returns the number of TCHARs written to the output
33102   ** buffer, excluding the terminating null char.
33103   */
33104   DWORD error = GetLastError();
33105   DWORD dwLen = 0;
33106   char *zOut = 0;
33107
33108   if( isNT() ){
33109     WCHAR *zTempWide = NULL;
33110     dwLen = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
33111                            NULL,
33112                            error,
33113                            0,
33114                            (LPWSTR) &zTempWide,
33115                            0,
33116                            0);
33117     if( dwLen > 0 ){
33118       /* allocate a buffer and convert to UTF8 */
33119       zOut = unicodeToUtf8(zTempWide);
33120       /* free the system buffer allocated by FormatMessage */
33121       LocalFree(zTempWide);
33122     }
33123 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
33124 ** Since the ASCII version of these Windows API do not exist for WINCE,
33125 ** it's important to not reference them for WINCE builds.
33126 */
33127 #if SQLITE_OS_WINCE==0
33128   }else{
33129     char *zTemp = NULL;
33130     dwLen = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
33131                            NULL,
33132                            error,
33133                            0,
33134                            (LPSTR) &zTemp,
33135                            0,
33136                            0);
33137     if( dwLen > 0 ){
33138       /* allocate a buffer and convert to UTF8 */
33139       zOut = sqlite3_win32_mbcs_to_utf8(zTemp);
33140       /* free the system buffer allocated by FormatMessage */
33141       LocalFree(zTemp);
33142     }
33143 #endif
33144   }
33145   if( 0 == dwLen ){
33146     sqlite3_snprintf(nBuf, zBuf, "OsError 0x%x (%u)", error, error);
33147   }else{
33148     /* copy a maximum of nBuf chars to output buffer */
33149     sqlite3_snprintf(nBuf, zBuf, "%s", zOut);
33150     /* free the UTF8 buffer */
33151     free(zOut);
33152   }
33153   return 0;
33154 }
33155
33156 /*
33157 ** Open a file.
33158 */
33159 static int winOpen(
33160   sqlite3_vfs *pVfs,        /* Not used */
33161   const char *zName,        /* Name of the file (UTF-8) */
33162   sqlite3_file *id,         /* Write the SQLite file handle here */
33163   int flags,                /* Open mode flags */
33164   int *pOutFlags            /* Status return flags */
33165 ){
33166   HANDLE h;
33167   DWORD dwDesiredAccess;
33168   DWORD dwShareMode;
33169   DWORD dwCreationDisposition;
33170   DWORD dwFlagsAndAttributes = 0;
33171 #if SQLITE_OS_WINCE
33172   int isTemp = 0;
33173 #endif
33174   winFile *pFile = (winFile*)id;
33175   void *zConverted;              /* Filename in OS encoding */
33176   const char *zUtf8Name = zName; /* Filename in UTF-8 encoding */
33177
33178   /* If argument zPath is a NULL pointer, this function is required to open
33179   ** a temporary file. Use this buffer to store the file name in.
33180   */
33181   char zTmpname[MAX_PATH+1];     /* Buffer used to create temp filename */
33182
33183   int rc = SQLITE_OK;            /* Function Return Code */
33184 #if !defined(NDEBUG) || SQLITE_OS_WINCE
33185   int eType = flags&0xFFFFFF00;  /* Type of file to open */
33186 #endif
33187
33188   int isExclusive  = (flags & SQLITE_OPEN_EXCLUSIVE);
33189   int isDelete     = (flags & SQLITE_OPEN_DELETEONCLOSE);
33190   int isCreate     = (flags & SQLITE_OPEN_CREATE);
33191 #ifndef NDEBUG
33192   int isReadonly   = (flags & SQLITE_OPEN_READONLY);
33193 #endif
33194   int isReadWrite  = (flags & SQLITE_OPEN_READWRITE);
33195
33196 #ifndef NDEBUG
33197   int isOpenJournal = (isCreate && (
33198         eType==SQLITE_OPEN_MASTER_JOURNAL 
33199      || eType==SQLITE_OPEN_MAIN_JOURNAL 
33200      || eType==SQLITE_OPEN_WAL
33201   ));
33202 #endif
33203
33204   /* Check the following statements are true: 
33205   **
33206   **   (a) Exactly one of the READWRITE and READONLY flags must be set, and 
33207   **   (b) if CREATE is set, then READWRITE must also be set, and
33208   **   (c) if EXCLUSIVE is set, then CREATE must also be set.
33209   **   (d) if DELETEONCLOSE is set, then CREATE must also be set.
33210   */
33211   assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
33212   assert(isCreate==0 || isReadWrite);
33213   assert(isExclusive==0 || isCreate);
33214   assert(isDelete==0 || isCreate);
33215
33216   /* The main DB, main journal, WAL file and master journal are never 
33217   ** automatically deleted. Nor are they ever temporary files.  */
33218   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
33219   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
33220   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
33221   assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
33222
33223   /* Assert that the upper layer has set one of the "file-type" flags. */
33224   assert( eType==SQLITE_OPEN_MAIN_DB      || eType==SQLITE_OPEN_TEMP_DB 
33225        || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL 
33226        || eType==SQLITE_OPEN_SUBJOURNAL   || eType==SQLITE_OPEN_MASTER_JOURNAL 
33227        || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
33228   );
33229
33230   assert( id!=0 );
33231   UNUSED_PARAMETER(pVfs);
33232
33233   pFile->h = INVALID_HANDLE_VALUE;
33234
33235   /* If the second argument to this function is NULL, generate a 
33236   ** temporary file name to use 
33237   */
33238   if( !zUtf8Name ){
33239     assert(isDelete && !isOpenJournal);
33240     rc = getTempname(MAX_PATH+1, zTmpname);
33241     if( rc!=SQLITE_OK ){
33242       return rc;
33243     }
33244     zUtf8Name = zTmpname;
33245   }
33246
33247   /* Convert the filename to the system encoding. */
33248   zConverted = convertUtf8Filename(zUtf8Name);
33249   if( zConverted==0 ){
33250     return SQLITE_NOMEM;
33251   }
33252
33253   if( isReadWrite ){
33254     dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
33255   }else{
33256     dwDesiredAccess = GENERIC_READ;
33257   }
33258
33259   /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is 
33260   ** created. SQLite doesn't use it to indicate "exclusive access" 
33261   ** as it is usually understood.
33262   */
33263   if( isExclusive ){
33264     /* Creates a new file, only if it does not already exist. */
33265     /* If the file exists, it fails. */
33266     dwCreationDisposition = CREATE_NEW;
33267   }else if( isCreate ){
33268     /* Open existing file, or create if it doesn't exist */
33269     dwCreationDisposition = OPEN_ALWAYS;
33270   }else{
33271     /* Opens a file, only if it exists. */
33272     dwCreationDisposition = OPEN_EXISTING;
33273   }
33274
33275   dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
33276
33277   if( isDelete ){
33278 #if SQLITE_OS_WINCE
33279     dwFlagsAndAttributes = FILE_ATTRIBUTE_HIDDEN;
33280     isTemp = 1;
33281 #else
33282     dwFlagsAndAttributes = FILE_ATTRIBUTE_TEMPORARY
33283                                | FILE_ATTRIBUTE_HIDDEN
33284                                | FILE_FLAG_DELETE_ON_CLOSE;
33285 #endif
33286   }else{
33287     dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL;
33288   }
33289   /* Reports from the internet are that performance is always
33290   ** better if FILE_FLAG_RANDOM_ACCESS is used.  Ticket #2699. */
33291 #if SQLITE_OS_WINCE
33292   dwFlagsAndAttributes |= FILE_FLAG_RANDOM_ACCESS;
33293 #endif
33294
33295   if( isNT() ){
33296     h = CreateFileW((WCHAR*)zConverted,
33297        dwDesiredAccess,
33298        dwShareMode,
33299        NULL,
33300        dwCreationDisposition,
33301        dwFlagsAndAttributes,
33302        NULL
33303     );
33304 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
33305 ** Since the ASCII version of these Windows API do not exist for WINCE,
33306 ** it's important to not reference them for WINCE builds.
33307 */
33308 #if SQLITE_OS_WINCE==0
33309   }else{
33310     h = CreateFileA((char*)zConverted,
33311        dwDesiredAccess,
33312        dwShareMode,
33313        NULL,
33314        dwCreationDisposition,
33315        dwFlagsAndAttributes,
33316        NULL
33317     );
33318 #endif
33319   }
33320
33321   OSTRACE(("OPEN %d %s 0x%lx %s\n", 
33322            h, zName, dwDesiredAccess, 
33323            h==INVALID_HANDLE_VALUE ? "failed" : "ok"));
33324
33325   if( h==INVALID_HANDLE_VALUE ){
33326     pFile->lastErrno = GetLastError();
33327     free(zConverted);
33328     if( isReadWrite ){
33329       return winOpen(pVfs, zName, id, 
33330              ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)), pOutFlags);
33331     }else{
33332       return SQLITE_CANTOPEN_BKPT;
33333     }
33334   }
33335
33336   if( pOutFlags ){
33337     if( isReadWrite ){
33338       *pOutFlags = SQLITE_OPEN_READWRITE;
33339     }else{
33340       *pOutFlags = SQLITE_OPEN_READONLY;
33341     }
33342   }
33343
33344   memset(pFile, 0, sizeof(*pFile));
33345   pFile->pMethod = &winIoMethod;
33346   pFile->h = h;
33347   pFile->lastErrno = NO_ERROR;
33348   pFile->pVfs = pVfs;
33349   pFile->pShm = 0;
33350   pFile->zPath = zName;
33351   pFile->sectorSize = getSectorSize(pVfs, zUtf8Name);
33352
33353 #if SQLITE_OS_WINCE
33354   if( isReadWrite && eType==SQLITE_OPEN_MAIN_DB
33355        && !winceCreateLock(zName, pFile)
33356   ){
33357     CloseHandle(h);
33358     free(zConverted);
33359     return SQLITE_CANTOPEN_BKPT;
33360   }
33361   if( isTemp ){
33362     pFile->zDeleteOnClose = zConverted;
33363   }else
33364 #endif
33365   {
33366     free(zConverted);
33367   }
33368
33369   OpenCounter(+1);
33370   return rc;
33371 }
33372
33373 /*
33374 ** Delete the named file.
33375 **
33376 ** Note that windows does not allow a file to be deleted if some other
33377 ** process has it open.  Sometimes a virus scanner or indexing program
33378 ** will open a journal file shortly after it is created in order to do
33379 ** whatever it does.  While this other process is holding the
33380 ** file open, we will be unable to delete it.  To work around this
33381 ** problem, we delay 100 milliseconds and try to delete again.  Up
33382 ** to MX_DELETION_ATTEMPTs deletion attempts are run before giving
33383 ** up and returning an error.
33384 */
33385 #define MX_DELETION_ATTEMPTS 5
33386 static int winDelete(
33387   sqlite3_vfs *pVfs,          /* Not used on win32 */
33388   const char *zFilename,      /* Name of file to delete */
33389   int syncDir                 /* Not used on win32 */
33390 ){
33391   int cnt = 0;
33392   DWORD rc;
33393   DWORD error = 0;
33394   void *zConverted;
33395   UNUSED_PARAMETER(pVfs);
33396   UNUSED_PARAMETER(syncDir);
33397
33398   SimulateIOError(return SQLITE_IOERR_DELETE);
33399   zConverted = convertUtf8Filename(zFilename);
33400   if( zConverted==0 ){
33401     return SQLITE_NOMEM;
33402   }
33403   if( isNT() ){
33404     do{
33405       DeleteFileW(zConverted);
33406     }while(   (   ((rc = GetFileAttributesW(zConverted)) != INVALID_FILE_ATTRIBUTES)
33407                || ((error = GetLastError()) == ERROR_ACCESS_DENIED))
33408            && (++cnt < MX_DELETION_ATTEMPTS)
33409            && (Sleep(100), 1) );
33410 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
33411 ** Since the ASCII version of these Windows API do not exist for WINCE,
33412 ** it's important to not reference them for WINCE builds.
33413 */
33414 #if SQLITE_OS_WINCE==0
33415   }else{
33416     do{
33417       DeleteFileA(zConverted);
33418     }while(   (   ((rc = GetFileAttributesA(zConverted)) != INVALID_FILE_ATTRIBUTES)
33419                || ((error = GetLastError()) == ERROR_ACCESS_DENIED))
33420            && (++cnt < MX_DELETION_ATTEMPTS)
33421            && (Sleep(100), 1) );
33422 #endif
33423   }
33424   free(zConverted);
33425   OSTRACE(("DELETE \"%s\" %s\n", zFilename,
33426        ( (rc==INVALID_FILE_ATTRIBUTES) && (error==ERROR_FILE_NOT_FOUND)) ?
33427          "ok" : "failed" ));
33428  
33429   return (   (rc == INVALID_FILE_ATTRIBUTES) 
33430           && (error == ERROR_FILE_NOT_FOUND)) ? SQLITE_OK : SQLITE_IOERR_DELETE;
33431 }
33432
33433 /*
33434 ** Check the existance and status of a file.
33435 */
33436 static int winAccess(
33437   sqlite3_vfs *pVfs,         /* Not used on win32 */
33438   const char *zFilename,     /* Name of file to check */
33439   int flags,                 /* Type of test to make on this file */
33440   int *pResOut               /* OUT: Result */
33441 ){
33442   DWORD attr;
33443   int rc = 0;
33444   void *zConverted;
33445   UNUSED_PARAMETER(pVfs);
33446
33447   SimulateIOError( return SQLITE_IOERR_ACCESS; );
33448   zConverted = convertUtf8Filename(zFilename);
33449   if( zConverted==0 ){
33450     return SQLITE_NOMEM;
33451   }
33452   if( isNT() ){
33453     WIN32_FILE_ATTRIBUTE_DATA sAttrData;
33454     memset(&sAttrData, 0, sizeof(sAttrData));
33455     if( GetFileAttributesExW((WCHAR*)zConverted,
33456                              GetFileExInfoStandard, 
33457                              &sAttrData) ){
33458       /* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file
33459       ** as if it does not exist.
33460       */
33461       if(    flags==SQLITE_ACCESS_EXISTS
33462           && sAttrData.nFileSizeHigh==0 
33463           && sAttrData.nFileSizeLow==0 ){
33464         attr = INVALID_FILE_ATTRIBUTES;
33465       }else{
33466         attr = sAttrData.dwFileAttributes;
33467       }
33468     }else{
33469       if( GetLastError()!=ERROR_FILE_NOT_FOUND ){
33470         free(zConverted);
33471         return SQLITE_IOERR_ACCESS;
33472       }else{
33473         attr = INVALID_FILE_ATTRIBUTES;
33474       }
33475     }
33476 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
33477 ** Since the ASCII version of these Windows API do not exist for WINCE,
33478 ** it's important to not reference them for WINCE builds.
33479 */
33480 #if SQLITE_OS_WINCE==0
33481   }else{
33482     attr = GetFileAttributesA((char*)zConverted);
33483 #endif
33484   }
33485   free(zConverted);
33486   switch( flags ){
33487     case SQLITE_ACCESS_READ:
33488     case SQLITE_ACCESS_EXISTS:
33489       rc = attr!=INVALID_FILE_ATTRIBUTES;
33490       break;
33491     case SQLITE_ACCESS_READWRITE:
33492       rc = (attr & FILE_ATTRIBUTE_READONLY)==0;
33493       break;
33494     default:
33495       assert(!"Invalid flags argument");
33496   }
33497   *pResOut = rc;
33498   return SQLITE_OK;
33499 }
33500
33501
33502 /*
33503 ** Turn a relative pathname into a full pathname.  Write the full
33504 ** pathname into zOut[].  zOut[] will be at least pVfs->mxPathname
33505 ** bytes in size.
33506 */
33507 static int winFullPathname(
33508   sqlite3_vfs *pVfs,            /* Pointer to vfs object */
33509   const char *zRelative,        /* Possibly relative input path */
33510   int nFull,                    /* Size of output buffer in bytes */
33511   char *zFull                   /* Output buffer */
33512 ){
33513   
33514 #if defined(__CYGWIN__)
33515   SimulateIOError( return SQLITE_ERROR );
33516   UNUSED_PARAMETER(nFull);
33517   cygwin_conv_to_full_win32_path(zRelative, zFull);
33518   return SQLITE_OK;
33519 #endif
33520
33521 #if SQLITE_OS_WINCE
33522   SimulateIOError( return SQLITE_ERROR );
33523   UNUSED_PARAMETER(nFull);
33524   /* WinCE has no concept of a relative pathname, or so I am told. */
33525   sqlite3_snprintf(pVfs->mxPathname, zFull, "%s", zRelative);
33526   return SQLITE_OK;
33527 #endif
33528
33529 #if !SQLITE_OS_WINCE && !defined(__CYGWIN__)
33530   int nByte;
33531   void *zConverted;
33532   char *zOut;
33533
33534   /* It's odd to simulate an io-error here, but really this is just
33535   ** using the io-error infrastructure to test that SQLite handles this
33536   ** function failing. This function could fail if, for example, the
33537   ** current working directory has been unlinked.
33538   */
33539   SimulateIOError( return SQLITE_ERROR );
33540   UNUSED_PARAMETER(nFull);
33541   zConverted = convertUtf8Filename(zRelative);
33542   if( isNT() ){
33543     WCHAR *zTemp;
33544     nByte = GetFullPathNameW((WCHAR*)zConverted, 0, 0, 0) + 3;
33545     zTemp = malloc( nByte*sizeof(zTemp[0]) );
33546     if( zTemp==0 ){
33547       free(zConverted);
33548       return SQLITE_NOMEM;
33549     }
33550     GetFullPathNameW((WCHAR*)zConverted, nByte, zTemp, 0);
33551     free(zConverted);
33552     zOut = unicodeToUtf8(zTemp);
33553     free(zTemp);
33554 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
33555 ** Since the ASCII version of these Windows API do not exist for WINCE,
33556 ** it's important to not reference them for WINCE builds.
33557 */
33558 #if SQLITE_OS_WINCE==0
33559   }else{
33560     char *zTemp;
33561     nByte = GetFullPathNameA((char*)zConverted, 0, 0, 0) + 3;
33562     zTemp = malloc( nByte*sizeof(zTemp[0]) );
33563     if( zTemp==0 ){
33564       free(zConverted);
33565       return SQLITE_NOMEM;
33566     }
33567     GetFullPathNameA((char*)zConverted, nByte, zTemp, 0);
33568     free(zConverted);
33569     zOut = sqlite3_win32_mbcs_to_utf8(zTemp);
33570     free(zTemp);
33571 #endif
33572   }
33573   if( zOut ){
33574     sqlite3_snprintf(pVfs->mxPathname, zFull, "%s", zOut);
33575     free(zOut);
33576     return SQLITE_OK;
33577   }else{
33578     return SQLITE_NOMEM;
33579   }
33580 #endif
33581 }
33582
33583 /*
33584 ** Get the sector size of the device used to store
33585 ** file.
33586 */
33587 static int getSectorSize(
33588     sqlite3_vfs *pVfs,
33589     const char *zRelative     /* UTF-8 file name */
33590 ){
33591   DWORD bytesPerSector = SQLITE_DEFAULT_SECTOR_SIZE;
33592   /* GetDiskFreeSpace is not supported under WINCE */
33593 #if SQLITE_OS_WINCE
33594   UNUSED_PARAMETER(pVfs);
33595   UNUSED_PARAMETER(zRelative);
33596 #else
33597   char zFullpath[MAX_PATH+1];
33598   int rc;
33599   DWORD dwRet = 0;
33600   DWORD dwDummy;
33601
33602   /*
33603   ** We need to get the full path name of the file
33604   ** to get the drive letter to look up the sector
33605   ** size.
33606   */
33607   SimulateIOErrorBenign(1);
33608   rc = winFullPathname(pVfs, zRelative, MAX_PATH, zFullpath);
33609   SimulateIOErrorBenign(0);
33610   if( rc == SQLITE_OK )
33611   {
33612     void *zConverted = convertUtf8Filename(zFullpath);
33613     if( zConverted ){
33614       if( isNT() ){
33615         /* trim path to just drive reference */
33616         WCHAR *p = zConverted;
33617         for(;*p;p++){
33618           if( *p == '\\' ){
33619             *p = '\0';
33620             break;
33621           }
33622         }
33623         dwRet = GetDiskFreeSpaceW((WCHAR*)zConverted,
33624                                   &dwDummy,
33625                                   &bytesPerSector,
33626                                   &dwDummy,
33627                                   &dwDummy);
33628       }else{
33629         /* trim path to just drive reference */
33630         char *p = (char *)zConverted;
33631         for(;*p;p++){
33632           if( *p == '\\' ){
33633             *p = '\0';
33634             break;
33635           }
33636         }
33637         dwRet = GetDiskFreeSpaceA((char*)zConverted,
33638                                   &dwDummy,
33639                                   &bytesPerSector,
33640                                   &dwDummy,
33641                                   &dwDummy);
33642       }
33643       free(zConverted);
33644     }
33645     if( !dwRet ){
33646       bytesPerSector = SQLITE_DEFAULT_SECTOR_SIZE;
33647     }
33648   }
33649 #endif
33650   return (int) bytesPerSector; 
33651 }
33652
33653 #ifndef SQLITE_OMIT_LOAD_EXTENSION
33654 /*
33655 ** Interfaces for opening a shared library, finding entry points
33656 ** within the shared library, and closing the shared library.
33657 */
33658 /*
33659 ** Interfaces for opening a shared library, finding entry points
33660 ** within the shared library, and closing the shared library.
33661 */
33662 static void *winDlOpen(sqlite3_vfs *pVfs, const char *zFilename){
33663   HANDLE h;
33664   void *zConverted = convertUtf8Filename(zFilename);
33665   UNUSED_PARAMETER(pVfs);
33666   if( zConverted==0 ){
33667     return 0;
33668   }
33669   if( isNT() ){
33670     h = LoadLibraryW((WCHAR*)zConverted);
33671 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed. 
33672 ** Since the ASCII version of these Windows API do not exist for WINCE,
33673 ** it's important to not reference them for WINCE builds.
33674 */
33675 #if SQLITE_OS_WINCE==0
33676   }else{
33677     h = LoadLibraryA((char*)zConverted);
33678 #endif
33679   }
33680   free(zConverted);
33681   return (void*)h;
33682 }
33683 static void winDlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){
33684   UNUSED_PARAMETER(pVfs);
33685   getLastErrorMsg(nBuf, zBufOut);
33686 }
33687 void (*winDlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){
33688   UNUSED_PARAMETER(pVfs);
33689 #if SQLITE_OS_WINCE
33690   /* The GetProcAddressA() routine is only available on wince. */
33691   return (void(*)(void))GetProcAddressA((HANDLE)pHandle, zSymbol);
33692 #else
33693   /* All other windows platforms expect GetProcAddress() to take
33694   ** an Ansi string regardless of the _UNICODE setting */
33695   return (void(*)(void))GetProcAddress((HANDLE)pHandle, zSymbol);
33696 #endif
33697 }
33698 void winDlClose(sqlite3_vfs *pVfs, void *pHandle){
33699   UNUSED_PARAMETER(pVfs);
33700   FreeLibrary((HANDLE)pHandle);
33701 }
33702 #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */
33703   #define winDlOpen  0
33704   #define winDlError 0
33705   #define winDlSym   0
33706   #define winDlClose 0
33707 #endif
33708
33709
33710 /*
33711 ** Write up to nBuf bytes of randomness into zBuf.
33712 */
33713 static int winRandomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
33714   int n = 0;
33715   UNUSED_PARAMETER(pVfs);
33716 #if defined(SQLITE_TEST)
33717   n = nBuf;
33718   memset(zBuf, 0, nBuf);
33719 #else
33720   if( sizeof(SYSTEMTIME)<=nBuf-n ){
33721     SYSTEMTIME x;
33722     GetSystemTime(&x);
33723     memcpy(&zBuf[n], &x, sizeof(x));
33724     n += sizeof(x);
33725   }
33726   if( sizeof(DWORD)<=nBuf-n ){
33727     DWORD pid = GetCurrentProcessId();
33728     memcpy(&zBuf[n], &pid, sizeof(pid));
33729     n += sizeof(pid);
33730   }
33731   if( sizeof(DWORD)<=nBuf-n ){
33732     DWORD cnt = GetTickCount();
33733     memcpy(&zBuf[n], &cnt, sizeof(cnt));
33734     n += sizeof(cnt);
33735   }
33736   if( sizeof(LARGE_INTEGER)<=nBuf-n ){
33737     LARGE_INTEGER i;
33738     QueryPerformanceCounter(&i);
33739     memcpy(&zBuf[n], &i, sizeof(i));
33740     n += sizeof(i);
33741   }
33742 #endif
33743   return n;
33744 }
33745
33746
33747 /*
33748 ** Sleep for a little while.  Return the amount of time slept.
33749 */
33750 static int winSleep(sqlite3_vfs *pVfs, int microsec){
33751   Sleep((microsec+999)/1000);
33752   UNUSED_PARAMETER(pVfs);
33753   return ((microsec+999)/1000)*1000;
33754 }
33755
33756 /*
33757 ** The following variable, if set to a non-zero value, is interpreted as
33758 ** the number of seconds since 1970 and is used to set the result of
33759 ** sqlite3OsCurrentTime() during testing.
33760 */
33761 #ifdef SQLITE_TEST
33762 SQLITE_API int sqlite3_current_time = 0;  /* Fake system time in seconds since 1970. */
33763 #endif
33764
33765 /*
33766 ** Find the current time (in Universal Coordinated Time).  Write into *piNow
33767 ** the current time and date as a Julian Day number times 86_400_000.  In
33768 ** other words, write into *piNow the number of milliseconds since the Julian
33769 ** epoch of noon in Greenwich on November 24, 4714 B.C according to the
33770 ** proleptic Gregorian calendar.
33771 **
33772 ** On success, return 0.  Return 1 if the time and date cannot be found.
33773 */
33774 static int winCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *piNow){
33775   /* FILETIME structure is a 64-bit value representing the number of 
33776      100-nanosecond intervals since January 1, 1601 (= JD 2305813.5). 
33777   */
33778   FILETIME ft;
33779   static const sqlite3_int64 winFiletimeEpoch = 23058135*(sqlite3_int64)8640000;
33780 #ifdef SQLITE_TEST
33781   static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
33782 #endif
33783   /* 2^32 - to avoid use of LL and warnings in gcc */
33784   static const sqlite3_int64 max32BitValue = 
33785       (sqlite3_int64)2000000000 + (sqlite3_int64)2000000000 + (sqlite3_int64)294967296;
33786
33787 #if SQLITE_OS_WINCE
33788   SYSTEMTIME time;
33789   GetSystemTime(&time);
33790   /* if SystemTimeToFileTime() fails, it returns zero. */
33791   if (!SystemTimeToFileTime(&time,&ft)){
33792     return 1;
33793   }
33794 #else
33795   GetSystemTimeAsFileTime( &ft );
33796 #endif
33797
33798   *piNow = winFiletimeEpoch +
33799             ((((sqlite3_int64)ft.dwHighDateTime)*max32BitValue) + 
33800                (sqlite3_int64)ft.dwLowDateTime)/(sqlite3_int64)10000;
33801
33802 #ifdef SQLITE_TEST
33803   if( sqlite3_current_time ){
33804     *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
33805   }
33806 #endif
33807   UNUSED_PARAMETER(pVfs);
33808   return 0;
33809 }
33810
33811 /*
33812 ** Find the current time (in Universal Coordinated Time).  Write the
33813 ** current time and date as a Julian Day number into *prNow and
33814 ** return 0.  Return 1 if the time and date cannot be found.
33815 */
33816 int winCurrentTime(sqlite3_vfs *pVfs, double *prNow){
33817   int rc;
33818   sqlite3_int64 i;
33819   rc = winCurrentTimeInt64(pVfs, &i);
33820   if( !rc ){
33821     *prNow = i/86400000.0;
33822   }
33823   return rc;
33824 }
33825
33826 /*
33827 ** The idea is that this function works like a combination of
33828 ** GetLastError() and FormatMessage() on windows (or errno and
33829 ** strerror_r() on unix). After an error is returned by an OS
33830 ** function, SQLite calls this function with zBuf pointing to
33831 ** a buffer of nBuf bytes. The OS layer should populate the
33832 ** buffer with a nul-terminated UTF-8 encoded error message
33833 ** describing the last IO error to have occurred within the calling
33834 ** thread.
33835 **
33836 ** If the error message is too large for the supplied buffer,
33837 ** it should be truncated. The return value of xGetLastError
33838 ** is zero if the error message fits in the buffer, or non-zero
33839 ** otherwise (if the message was truncated). If non-zero is returned,
33840 ** then it is not necessary to include the nul-terminator character
33841 ** in the output buffer.
33842 **
33843 ** Not supplying an error message will have no adverse effect
33844 ** on SQLite. It is fine to have an implementation that never
33845 ** returns an error message:
33846 **
33847 **   int xGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
33848 **     assert(zBuf[0]=='\0');
33849 **     return 0;
33850 **   }
33851 **
33852 ** However if an error message is supplied, it will be incorporated
33853 ** by sqlite into the error message available to the user using
33854 ** sqlite3_errmsg(), possibly making IO errors easier to debug.
33855 */
33856 static int winGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
33857   UNUSED_PARAMETER(pVfs);
33858   return getLastErrorMsg(nBuf, zBuf);
33859 }
33860
33861
33862
33863 /*
33864 ** Initialize and deinitialize the operating system interface.
33865 */
33866 SQLITE_API int sqlite3_os_init(void){
33867   static sqlite3_vfs winVfs = {
33868     3,                   /* iVersion */
33869     sizeof(winFile),     /* szOsFile */
33870     MAX_PATH,            /* mxPathname */
33871     0,                   /* pNext */
33872     "win32",             /* zName */
33873     0,                   /* pAppData */
33874     winOpen,             /* xOpen */
33875     winDelete,           /* xDelete */
33876     winAccess,           /* xAccess */
33877     winFullPathname,     /* xFullPathname */
33878     winDlOpen,           /* xDlOpen */
33879     winDlError,          /* xDlError */
33880     winDlSym,            /* xDlSym */
33881     winDlClose,          /* xDlClose */
33882     winRandomness,       /* xRandomness */
33883     winSleep,            /* xSleep */
33884     winCurrentTime,      /* xCurrentTime */
33885     winGetLastError,     /* xGetLastError */
33886     winCurrentTimeInt64, /* xCurrentTimeInt64 */
33887     0,                   /* xSetSystemCall */
33888     0,                   /* xGetSystemCall */
33889     0,                   /* xNextSystemCall */
33890   };
33891
33892 #ifndef SQLITE_OMIT_WAL
33893   /* get memory map allocation granularity */
33894   memset(&winSysInfo, 0, sizeof(SYSTEM_INFO));
33895   GetSystemInfo(&winSysInfo);
33896   assert(winSysInfo.dwAllocationGranularity > 0);
33897 #endif
33898
33899   sqlite3_vfs_register(&winVfs, 1);
33900   return SQLITE_OK; 
33901 }
33902 SQLITE_API int sqlite3_os_end(void){ 
33903   return SQLITE_OK;
33904 }
33905
33906 void chromium_sqlite3_initialize_win_sqlite3_file(sqlite3_file* file, HANDLE handle) {
33907   winFile* winSQLite3File = (winFile*)file;
33908   memset(file, 0, sizeof(*file));
33909   winSQLite3File->pMethod = &winIoMethod;
33910   winSQLite3File->h = handle;
33911 }
33912
33913 #endif /* SQLITE_OS_WIN */
33914
33915 /************** End of os_win.c **********************************************/
33916 /************** Begin file bitvec.c ******************************************/
33917 /*
33918 ** 2008 February 16
33919 **
33920 ** The author disclaims copyright to this source code.  In place of
33921 ** a legal notice, here is a blessing:
33922 **
33923 **    May you do good and not evil.
33924 **    May you find forgiveness for yourself and forgive others.
33925 **    May you share freely, never taking more than you give.
33926 **
33927 *************************************************************************
33928 ** This file implements an object that represents a fixed-length
33929 ** bitmap.  Bits are numbered starting with 1.
33930 **
33931 ** A bitmap is used to record which pages of a database file have been
33932 ** journalled during a transaction, or which pages have the "dont-write"
33933 ** property.  Usually only a few pages are meet either condition.
33934 ** So the bitmap is usually sparse and has low cardinality.
33935 ** But sometimes (for example when during a DROP of a large table) most
33936 ** or all of the pages in a database can get journalled.  In those cases, 
33937 ** the bitmap becomes dense with high cardinality.  The algorithm needs 
33938 ** to handle both cases well.
33939 **
33940 ** The size of the bitmap is fixed when the object is created.
33941 **
33942 ** All bits are clear when the bitmap is created.  Individual bits
33943 ** may be set or cleared one at a time.
33944 **
33945 ** Test operations are about 100 times more common that set operations.
33946 ** Clear operations are exceedingly rare.  There are usually between
33947 ** 5 and 500 set operations per Bitvec object, though the number of sets can
33948 ** sometimes grow into tens of thousands or larger.  The size of the
33949 ** Bitvec object is the number of pages in the database file at the
33950 ** start of a transaction, and is thus usually less than a few thousand,
33951 ** but can be as large as 2 billion for a really big database.
33952 */
33953
33954 /* Size of the Bitvec structure in bytes. */
33955 #define BITVEC_SZ        512
33956
33957 /* Round the union size down to the nearest pointer boundary, since that's how 
33958 ** it will be aligned within the Bitvec struct. */
33959 #define BITVEC_USIZE     (((BITVEC_SZ-(3*sizeof(u32)))/sizeof(Bitvec*))*sizeof(Bitvec*))
33960
33961 /* Type of the array "element" for the bitmap representation. 
33962 ** Should be a power of 2, and ideally, evenly divide into BITVEC_USIZE. 
33963 ** Setting this to the "natural word" size of your CPU may improve
33964 ** performance. */
33965 #define BITVEC_TELEM     u8
33966 /* Size, in bits, of the bitmap element. */
33967 #define BITVEC_SZELEM    8
33968 /* Number of elements in a bitmap array. */
33969 #define BITVEC_NELEM     (BITVEC_USIZE/sizeof(BITVEC_TELEM))
33970 /* Number of bits in the bitmap array. */
33971 #define BITVEC_NBIT      (BITVEC_NELEM*BITVEC_SZELEM)
33972
33973 /* Number of u32 values in hash table. */
33974 #define BITVEC_NINT      (BITVEC_USIZE/sizeof(u32))
33975 /* Maximum number of entries in hash table before 
33976 ** sub-dividing and re-hashing. */
33977 #define BITVEC_MXHASH    (BITVEC_NINT/2)
33978 /* Hashing function for the aHash representation.
33979 ** Empirical testing showed that the *37 multiplier 
33980 ** (an arbitrary prime)in the hash function provided 
33981 ** no fewer collisions than the no-op *1. */
33982 #define BITVEC_HASH(X)   (((X)*1)%BITVEC_NINT)
33983
33984 #define BITVEC_NPTR      (BITVEC_USIZE/sizeof(Bitvec *))
33985
33986
33987 /*
33988 ** A bitmap is an instance of the following structure.
33989 **
33990 ** This bitmap records the existance of zero or more bits
33991 ** with values between 1 and iSize, inclusive.
33992 **
33993 ** There are three possible representations of the bitmap.
33994 ** If iSize<=BITVEC_NBIT, then Bitvec.u.aBitmap[] is a straight
33995 ** bitmap.  The least significant bit is bit 1.
33996 **
33997 ** If iSize>BITVEC_NBIT and iDivisor==0 then Bitvec.u.aHash[] is
33998 ** a hash table that will hold up to BITVEC_MXHASH distinct values.
33999 **
34000 ** Otherwise, the value i is redirected into one of BITVEC_NPTR
34001 ** sub-bitmaps pointed to by Bitvec.u.apSub[].  Each subbitmap
34002 ** handles up to iDivisor separate values of i.  apSub[0] holds
34003 ** values between 1 and iDivisor.  apSub[1] holds values between
34004 ** iDivisor+1 and 2*iDivisor.  apSub[N] holds values between
34005 ** N*iDivisor+1 and (N+1)*iDivisor.  Each subbitmap is normalized
34006 ** to hold deal with values between 1 and iDivisor.
34007 */
34008 struct Bitvec {
34009   u32 iSize;      /* Maximum bit index.  Max iSize is 4,294,967,296. */
34010   u32 nSet;       /* Number of bits that are set - only valid for aHash
34011                   ** element.  Max is BITVEC_NINT.  For BITVEC_SZ of 512,
34012                   ** this would be 125. */
34013   u32 iDivisor;   /* Number of bits handled by each apSub[] entry. */
34014                   /* Should >=0 for apSub element. */
34015                   /* Max iDivisor is max(u32) / BITVEC_NPTR + 1.  */
34016                   /* For a BITVEC_SZ of 512, this would be 34,359,739. */
34017   union {
34018     BITVEC_TELEM aBitmap[BITVEC_NELEM];    /* Bitmap representation */
34019     u32 aHash[BITVEC_NINT];      /* Hash table representation */
34020     Bitvec *apSub[BITVEC_NPTR];  /* Recursive representation */
34021   } u;
34022 };
34023
34024 /*
34025 ** Create a new bitmap object able to handle bits between 0 and iSize,
34026 ** inclusive.  Return a pointer to the new object.  Return NULL if 
34027 ** malloc fails.
34028 */
34029 SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32 iSize){
34030   Bitvec *p;
34031   assert( sizeof(*p)==BITVEC_SZ );
34032   p = sqlite3MallocZero( sizeof(*p) );
34033   if( p ){
34034     p->iSize = iSize;
34035   }
34036   return p;
34037 }
34038
34039 /*
34040 ** Check to see if the i-th bit is set.  Return true or false.
34041 ** If p is NULL (if the bitmap has not been created) or if
34042 ** i is out of range, then return false.
34043 */
34044 SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec *p, u32 i){
34045   if( p==0 ) return 0;
34046   if( i>p->iSize || i==0 ) return 0;
34047   i--;
34048   while( p->iDivisor ){
34049     u32 bin = i/p->iDivisor;
34050     i = i%p->iDivisor;
34051     p = p->u.apSub[bin];
34052     if (!p) {
34053       return 0;
34054     }
34055   }
34056   if( p->iSize<=BITVEC_NBIT ){
34057     return (p->u.aBitmap[i/BITVEC_SZELEM] & (1<<(i&(BITVEC_SZELEM-1))))!=0;
34058   } else{
34059     u32 h = BITVEC_HASH(i++);
34060     while( p->u.aHash[h] ){
34061       if( p->u.aHash[h]==i ) return 1;
34062       h = (h+1) % BITVEC_NINT;
34063     }
34064     return 0;
34065   }
34066 }
34067
34068 /*
34069 ** Set the i-th bit.  Return 0 on success and an error code if
34070 ** anything goes wrong.
34071 **
34072 ** This routine might cause sub-bitmaps to be allocated.  Failing
34073 ** to get the memory needed to hold the sub-bitmap is the only
34074 ** that can go wrong with an insert, assuming p and i are valid.
34075 **
34076 ** The calling function must ensure that p is a valid Bitvec object
34077 ** and that the value for "i" is within range of the Bitvec object.
34078 ** Otherwise the behavior is undefined.
34079 */
34080 SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec *p, u32 i){
34081   u32 h;
34082   if( p==0 ) return SQLITE_OK;
34083   assert( i>0 );
34084   assert( i<=p->iSize );
34085   i--;
34086   while((p->iSize > BITVEC_NBIT) && p->iDivisor) {
34087     u32 bin = i/p->iDivisor;
34088     i = i%p->iDivisor;
34089     if( p->u.apSub[bin]==0 ){
34090       p->u.apSub[bin] = sqlite3BitvecCreate( p->iDivisor );
34091       if( p->u.apSub[bin]==0 ) return SQLITE_NOMEM;
34092     }
34093     p = p->u.apSub[bin];
34094   }
34095   if( p->iSize<=BITVEC_NBIT ){
34096     p->u.aBitmap[i/BITVEC_SZELEM] |= 1 << (i&(BITVEC_SZELEM-1));
34097     return SQLITE_OK;
34098   }
34099   h = BITVEC_HASH(i++);
34100   /* if there wasn't a hash collision, and this doesn't */
34101   /* completely fill the hash, then just add it without */
34102   /* worring about sub-dividing and re-hashing. */
34103   if( !p->u.aHash[h] ){
34104     if (p->nSet<(BITVEC_NINT-1)) {
34105       goto bitvec_set_end;
34106     } else {
34107       goto bitvec_set_rehash;
34108     }
34109   }
34110   /* there was a collision, check to see if it's already */
34111   /* in hash, if not, try to find a spot for it */
34112   do {
34113     if( p->u.aHash[h]==i ) return SQLITE_OK;
34114     h++;
34115     if( h>=BITVEC_NINT ) h = 0;
34116   } while( p->u.aHash[h] );
34117   /* we didn't find it in the hash.  h points to the first */
34118   /* available free spot. check to see if this is going to */
34119   /* make our hash too "full".  */
34120 bitvec_set_rehash:
34121   if( p->nSet>=BITVEC_MXHASH ){
34122     unsigned int j;
34123     int rc;
34124     u32 *aiValues = sqlite3StackAllocRaw(0, sizeof(p->u.aHash));
34125     if( aiValues==0 ){
34126       return SQLITE_NOMEM;
34127     }else{
34128       memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash));
34129       memset(p->u.apSub, 0, sizeof(p->u.apSub));
34130       p->iDivisor = (p->iSize + BITVEC_NPTR - 1)/BITVEC_NPTR;
34131       rc = sqlite3BitvecSet(p, i);
34132       for(j=0; j<BITVEC_NINT; j++){
34133         if( aiValues[j] ) rc |= sqlite3BitvecSet(p, aiValues[j]);
34134       }
34135       sqlite3StackFree(0, aiValues);
34136       return rc;
34137     }
34138   }
34139 bitvec_set_end:
34140   p->nSet++;
34141   p->u.aHash[h] = i;
34142   return SQLITE_OK;
34143 }
34144
34145 /*
34146 ** Clear the i-th bit.
34147 **
34148 ** pBuf must be a pointer to at least BITVEC_SZ bytes of temporary storage
34149 ** that BitvecClear can use to rebuilt its hash table.
34150 */
34151 SQLITE_PRIVATE void sqlite3BitvecClear(Bitvec *p, u32 i, void *pBuf){
34152   if( p==0 ) return;
34153   assert( i>0 );
34154   i--;
34155   while( p->iDivisor ){
34156     u32 bin = i/p->iDivisor;
34157     i = i%p->iDivisor;
34158     p = p->u.apSub[bin];
34159     if (!p) {
34160       return;
34161     }
34162   }
34163   if( p->iSize<=BITVEC_NBIT ){
34164     p->u.aBitmap[i/BITVEC_SZELEM] &= ~(1 << (i&(BITVEC_SZELEM-1)));
34165   }else{
34166     unsigned int j;
34167     u32 *aiValues = pBuf;
34168     memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash));
34169     memset(p->u.aHash, 0, sizeof(p->u.aHash));
34170     p->nSet = 0;
34171     for(j=0; j<BITVEC_NINT; j++){
34172       if( aiValues[j] && aiValues[j]!=(i+1) ){
34173         u32 h = BITVEC_HASH(aiValues[j]-1);
34174         p->nSet++;
34175         while( p->u.aHash[h] ){
34176           h++;
34177           if( h>=BITVEC_NINT ) h = 0;
34178         }
34179         p->u.aHash[h] = aiValues[j];
34180       }
34181     }
34182   }
34183 }
34184
34185 /*
34186 ** Destroy a bitmap object.  Reclaim all memory used.
34187 */
34188 SQLITE_PRIVATE void sqlite3BitvecDestroy(Bitvec *p){
34189   if( p==0 ) return;
34190   if( p->iDivisor ){
34191     unsigned int i;
34192     for(i=0; i<BITVEC_NPTR; i++){
34193       sqlite3BitvecDestroy(p->u.apSub[i]);
34194     }
34195   }
34196   sqlite3_free(p);
34197 }
34198
34199 /*
34200 ** Return the value of the iSize parameter specified when Bitvec *p
34201 ** was created.
34202 */
34203 SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec *p){
34204   return p->iSize;
34205 }
34206
34207 #ifndef SQLITE_OMIT_BUILTIN_TEST
34208 /*
34209 ** Let V[] be an array of unsigned characters sufficient to hold
34210 ** up to N bits.  Let I be an integer between 0 and N.  0<=I<N.
34211 ** Then the following macros can be used to set, clear, or test
34212 ** individual bits within V.
34213 */
34214 #define SETBIT(V,I)      V[I>>3] |= (1<<(I&7))
34215 #define CLEARBIT(V,I)    V[I>>3] &= ~(1<<(I&7))
34216 #define TESTBIT(V,I)     (V[I>>3]&(1<<(I&7)))!=0
34217
34218 /*
34219 ** This routine runs an extensive test of the Bitvec code.
34220 **
34221 ** The input is an array of integers that acts as a program
34222 ** to test the Bitvec.  The integers are opcodes followed
34223 ** by 0, 1, or 3 operands, depending on the opcode.  Another
34224 ** opcode follows immediately after the last operand.
34225 **
34226 ** There are 6 opcodes numbered from 0 through 5.  0 is the
34227 ** "halt" opcode and causes the test to end.
34228 **
34229 **    0          Halt and return the number of errors
34230 **    1 N S X    Set N bits beginning with S and incrementing by X
34231 **    2 N S X    Clear N bits beginning with S and incrementing by X
34232 **    3 N        Set N randomly chosen bits
34233 **    4 N        Clear N randomly chosen bits
34234 **    5 N S X    Set N bits from S increment X in array only, not in bitvec
34235 **
34236 ** The opcodes 1 through 4 perform set and clear operations are performed
34237 ** on both a Bitvec object and on a linear array of bits obtained from malloc.
34238 ** Opcode 5 works on the linear array only, not on the Bitvec.
34239 ** Opcode 5 is used to deliberately induce a fault in order to
34240 ** confirm that error detection works.
34241 **
34242 ** At the conclusion of the test the linear array is compared
34243 ** against the Bitvec object.  If there are any differences,
34244 ** an error is returned.  If they are the same, zero is returned.
34245 **
34246 ** If a memory allocation error occurs, return -1.
34247 */
34248 SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){
34249   Bitvec *pBitvec = 0;
34250   unsigned char *pV = 0;
34251   int rc = -1;
34252   int i, nx, pc, op;
34253   void *pTmpSpace;
34254
34255   /* Allocate the Bitvec to be tested and a linear array of
34256   ** bits to act as the reference */
34257   pBitvec = sqlite3BitvecCreate( sz );
34258   pV = sqlite3_malloc( (sz+7)/8 + 1 );
34259   pTmpSpace = sqlite3_malloc(BITVEC_SZ);
34260   if( pBitvec==0 || pV==0 || pTmpSpace==0  ) goto bitvec_end;
34261   memset(pV, 0, (sz+7)/8 + 1);
34262
34263   /* NULL pBitvec tests */
34264   sqlite3BitvecSet(0, 1);
34265   sqlite3BitvecClear(0, 1, pTmpSpace);
34266
34267   /* Run the program */
34268   pc = 0;
34269   while( (op = aOp[pc])!=0 ){
34270     switch( op ){
34271       case 1:
34272       case 2:
34273       case 5: {
34274         nx = 4;
34275         i = aOp[pc+2] - 1;
34276         aOp[pc+2] += aOp[pc+3];
34277         break;
34278       }
34279       case 3:
34280       case 4: 
34281       default: {
34282         nx = 2;
34283         sqlite3_randomness(sizeof(i), &i);
34284         break;
34285       }
34286     }
34287     if( (--aOp[pc+1]) > 0 ) nx = 0;
34288     pc += nx;
34289     i = (i & 0x7fffffff)%sz;
34290     if( (op & 1)!=0 ){
34291       SETBIT(pV, (i+1));
34292       if( op!=5 ){
34293         if( sqlite3BitvecSet(pBitvec, i+1) ) goto bitvec_end;
34294       }
34295     }else{
34296       CLEARBIT(pV, (i+1));
34297       sqlite3BitvecClear(pBitvec, i+1, pTmpSpace);
34298     }
34299   }
34300
34301   /* Test to make sure the linear array exactly matches the
34302   ** Bitvec object.  Start with the assumption that they do
34303   ** match (rc==0).  Change rc to non-zero if a discrepancy
34304   ** is found.
34305   */
34306   rc = sqlite3BitvecTest(0,0) + sqlite3BitvecTest(pBitvec, sz+1)
34307           + sqlite3BitvecTest(pBitvec, 0)
34308           + (sqlite3BitvecSize(pBitvec) - sz);
34309   for(i=1; i<=sz; i++){
34310     if(  (TESTBIT(pV,i))!=sqlite3BitvecTest(pBitvec,i) ){
34311       rc = i;
34312       break;
34313     }
34314   }
34315
34316   /* Free allocated structure */
34317 bitvec_end:
34318   sqlite3_free(pTmpSpace);
34319   sqlite3_free(pV);
34320   sqlite3BitvecDestroy(pBitvec);
34321   return rc;
34322 }
34323 #endif /* SQLITE_OMIT_BUILTIN_TEST */
34324
34325 /************** End of bitvec.c **********************************************/
34326 /************** Begin file pcache.c ******************************************/
34327 /*
34328 ** 2008 August 05
34329 **
34330 ** The author disclaims copyright to this source code.  In place of
34331 ** a legal notice, here is a blessing:
34332 **
34333 **    May you do good and not evil.
34334 **    May you find forgiveness for yourself and forgive others.
34335 **    May you share freely, never taking more than you give.
34336 **
34337 *************************************************************************
34338 ** This file implements that page cache.
34339 */
34340
34341 /*
34342 ** A complete page cache is an instance of this structure.
34343 */
34344 struct PCache {
34345   PgHdr *pDirty, *pDirtyTail;         /* List of dirty pages in LRU order */
34346   PgHdr *pSynced;                     /* Last synced page in dirty page list */
34347   int nRef;                           /* Number of referenced pages */
34348   int nMax;                           /* Configured cache size */
34349   int szPage;                         /* Size of every page in this cache */
34350   int szExtra;                        /* Size of extra space for each page */
34351   int bPurgeable;                     /* True if pages are on backing store */
34352   int (*xStress)(void*,PgHdr*);       /* Call to try make a page clean */
34353   void *pStress;                      /* Argument to xStress */
34354   sqlite3_pcache *pCache;             /* Pluggable cache module */
34355   PgHdr *pPage1;                      /* Reference to page 1 */
34356 };
34357
34358 /*
34359 ** Some of the assert() macros in this code are too expensive to run
34360 ** even during normal debugging.  Use them only rarely on long-running
34361 ** tests.  Enable the expensive asserts using the
34362 ** -DSQLITE_ENABLE_EXPENSIVE_ASSERT=1 compile-time option.
34363 */
34364 #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
34365 # define expensive_assert(X)  assert(X)
34366 #else
34367 # define expensive_assert(X)
34368 #endif
34369
34370 /********************************** Linked List Management ********************/
34371
34372 #if !defined(NDEBUG) && defined(SQLITE_ENABLE_EXPENSIVE_ASSERT)
34373 /*
34374 ** Check that the pCache->pSynced variable is set correctly. If it
34375 ** is not, either fail an assert or return zero. Otherwise, return
34376 ** non-zero. This is only used in debugging builds, as follows:
34377 **
34378 **   expensive_assert( pcacheCheckSynced(pCache) );
34379 */
34380 static int pcacheCheckSynced(PCache *pCache){
34381   PgHdr *p;
34382   for(p=pCache->pDirtyTail; p!=pCache->pSynced; p=p->pDirtyPrev){
34383     assert( p->nRef || (p->flags&PGHDR_NEED_SYNC) );
34384   }
34385   return (p==0 || p->nRef || (p->flags&PGHDR_NEED_SYNC)==0);
34386 }
34387 #endif /* !NDEBUG && SQLITE_ENABLE_EXPENSIVE_ASSERT */
34388
34389 /*
34390 ** Remove page pPage from the list of dirty pages.
34391 */
34392 static void pcacheRemoveFromDirtyList(PgHdr *pPage){
34393   PCache *p = pPage->pCache;
34394
34395   assert( pPage->pDirtyNext || pPage==p->pDirtyTail );
34396   assert( pPage->pDirtyPrev || pPage==p->pDirty );
34397
34398   /* Update the PCache1.pSynced variable if necessary. */
34399   if( p->pSynced==pPage ){
34400     PgHdr *pSynced = pPage->pDirtyPrev;
34401     while( pSynced && (pSynced->flags&PGHDR_NEED_SYNC) ){
34402       pSynced = pSynced->pDirtyPrev;
34403     }
34404     p->pSynced = pSynced;
34405   }
34406
34407   if( pPage->pDirtyNext ){
34408     pPage->pDirtyNext->pDirtyPrev = pPage->pDirtyPrev;
34409   }else{
34410     assert( pPage==p->pDirtyTail );
34411     p->pDirtyTail = pPage->pDirtyPrev;
34412   }
34413   if( pPage->pDirtyPrev ){
34414     pPage->pDirtyPrev->pDirtyNext = pPage->pDirtyNext;
34415   }else{
34416     assert( pPage==p->pDirty );
34417     p->pDirty = pPage->pDirtyNext;
34418   }
34419   pPage->pDirtyNext = 0;
34420   pPage->pDirtyPrev = 0;
34421
34422   expensive_assert( pcacheCheckSynced(p) );
34423 }
34424
34425 /*
34426 ** Add page pPage to the head of the dirty list (PCache1.pDirty is set to
34427 ** pPage).
34428 */
34429 static void pcacheAddToDirtyList(PgHdr *pPage){
34430   PCache *p = pPage->pCache;
34431
34432   assert( pPage->pDirtyNext==0 && pPage->pDirtyPrev==0 && p->pDirty!=pPage );
34433
34434   pPage->pDirtyNext = p->pDirty;
34435   if( pPage->pDirtyNext ){
34436     assert( pPage->pDirtyNext->pDirtyPrev==0 );
34437     pPage->pDirtyNext->pDirtyPrev = pPage;
34438   }
34439   p->pDirty = pPage;
34440   if( !p->pDirtyTail ){
34441     p->pDirtyTail = pPage;
34442   }
34443   if( !p->pSynced && 0==(pPage->flags&PGHDR_NEED_SYNC) ){
34444     p->pSynced = pPage;
34445   }
34446   expensive_assert( pcacheCheckSynced(p) );
34447 }
34448
34449 /*
34450 ** Wrapper around the pluggable caches xUnpin method. If the cache is
34451 ** being used for an in-memory database, this function is a no-op.
34452 */
34453 static void pcacheUnpin(PgHdr *p){
34454   PCache *pCache = p->pCache;
34455   if( pCache->bPurgeable ){
34456     if( p->pgno==1 ){
34457       pCache->pPage1 = 0;
34458     }
34459     sqlite3GlobalConfig.pcache.xUnpin(pCache->pCache, p, 0);
34460   }
34461 }
34462
34463 /*************************************************** General Interfaces ******
34464 **
34465 ** Initialize and shutdown the page cache subsystem. Neither of these 
34466 ** functions are threadsafe.
34467 */
34468 SQLITE_PRIVATE int sqlite3PcacheInitialize(void){
34469   if( sqlite3GlobalConfig.pcache.xInit==0 ){
34470     /* IMPLEMENTATION-OF: R-26801-64137 If the xInit() method is NULL, then the
34471     ** built-in default page cache is used instead of the application defined
34472     ** page cache. */
34473     sqlite3PCacheSetDefault();
34474   }
34475   return sqlite3GlobalConfig.pcache.xInit(sqlite3GlobalConfig.pcache.pArg);
34476 }
34477 SQLITE_PRIVATE void sqlite3PcacheShutdown(void){
34478   if( sqlite3GlobalConfig.pcache.xShutdown ){
34479     /* IMPLEMENTATION-OF: R-26000-56589 The xShutdown() method may be NULL. */
34480     sqlite3GlobalConfig.pcache.xShutdown(sqlite3GlobalConfig.pcache.pArg);
34481   }
34482 }
34483
34484 /*
34485 ** Return the size in bytes of a PCache object.
34486 */
34487 SQLITE_PRIVATE int sqlite3PcacheSize(void){ return sizeof(PCache); }
34488
34489 /*
34490 ** Create a new PCache object. Storage space to hold the object
34491 ** has already been allocated and is passed in as the p pointer. 
34492 ** The caller discovers how much space needs to be allocated by 
34493 ** calling sqlite3PcacheSize().
34494 */
34495 SQLITE_PRIVATE void sqlite3PcacheOpen(
34496   int szPage,                  /* Size of every page */
34497   int szExtra,                 /* Extra space associated with each page */
34498   int bPurgeable,              /* True if pages are on backing store */
34499   int (*xStress)(void*,PgHdr*),/* Call to try to make pages clean */
34500   void *pStress,               /* Argument to xStress */
34501   PCache *p                    /* Preallocated space for the PCache */
34502 ){
34503   memset(p, 0, sizeof(PCache));
34504   p->szPage = szPage;
34505   p->szExtra = szExtra;
34506   p->bPurgeable = bPurgeable;
34507   p->xStress = xStress;
34508   p->pStress = pStress;
34509   p->nMax = 100;
34510 }
34511
34512 /*
34513 ** Change the page size for PCache object. The caller must ensure that there
34514 ** are no outstanding page references when this function is called.
34515 */
34516 SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *pCache, int szPage){
34517   assert( pCache->nRef==0 && pCache->pDirty==0 );
34518   if( pCache->pCache ){
34519     sqlite3GlobalConfig.pcache.xDestroy(pCache->pCache);
34520     pCache->pCache = 0;
34521     pCache->pPage1 = 0;
34522   }
34523   pCache->szPage = szPage;
34524 }
34525
34526 /*
34527 ** Try to obtain a page from the cache.
34528 */
34529 SQLITE_PRIVATE int sqlite3PcacheFetch(
34530   PCache *pCache,       /* Obtain the page from this cache */
34531   Pgno pgno,            /* Page number to obtain */
34532   int createFlag,       /* If true, create page if it does not exist already */
34533   PgHdr **ppPage        /* Write the page here */
34534 ){
34535   PgHdr *pPage = 0;
34536   int eCreate;
34537
34538   assert( pCache!=0 );
34539   assert( createFlag==1 || createFlag==0 );
34540   assert( pgno>0 );
34541
34542   /* If the pluggable cache (sqlite3_pcache*) has not been allocated,
34543   ** allocate it now.
34544   */
34545   if( !pCache->pCache && createFlag ){
34546     sqlite3_pcache *p;
34547     int nByte;
34548     nByte = pCache->szPage + pCache->szExtra + sizeof(PgHdr);
34549     p = sqlite3GlobalConfig.pcache.xCreate(nByte, pCache->bPurgeable);
34550     if( !p ){
34551       return SQLITE_NOMEM;
34552     }
34553     sqlite3GlobalConfig.pcache.xCachesize(p, pCache->nMax);
34554     pCache->pCache = p;
34555   }
34556
34557   eCreate = createFlag * (1 + (!pCache->bPurgeable || !pCache->pDirty));
34558   if( pCache->pCache ){
34559     pPage = sqlite3GlobalConfig.pcache.xFetch(pCache->pCache, pgno, eCreate);
34560   }
34561
34562   if( !pPage && eCreate==1 ){
34563     PgHdr *pPg;
34564
34565     /* Find a dirty page to write-out and recycle. First try to find a 
34566     ** page that does not require a journal-sync (one with PGHDR_NEED_SYNC
34567     ** cleared), but if that is not possible settle for any other 
34568     ** unreferenced dirty page.
34569     */
34570     expensive_assert( pcacheCheckSynced(pCache) );
34571     for(pPg=pCache->pSynced; 
34572         pPg && (pPg->nRef || (pPg->flags&PGHDR_NEED_SYNC)); 
34573         pPg=pPg->pDirtyPrev
34574     );
34575     pCache->pSynced = pPg;
34576     if( !pPg ){
34577       for(pPg=pCache->pDirtyTail; pPg && pPg->nRef; pPg=pPg->pDirtyPrev);
34578     }
34579     if( pPg ){
34580       int rc;
34581       rc = pCache->xStress(pCache->pStress, pPg);
34582       if( rc!=SQLITE_OK && rc!=SQLITE_BUSY ){
34583         return rc;
34584       }
34585     }
34586
34587     pPage = sqlite3GlobalConfig.pcache.xFetch(pCache->pCache, pgno, 2);
34588   }
34589
34590   if( pPage ){
34591     if( !pPage->pData ){
34592       memset(pPage, 0, sizeof(PgHdr));
34593       pPage->pData = (void *)&pPage[1];
34594       pPage->pExtra = (void*)&((char *)pPage->pData)[pCache->szPage];
34595       memset(pPage->pExtra, 0, pCache->szExtra);
34596       pPage->pCache = pCache;
34597       pPage->pgno = pgno;
34598     }
34599     assert( pPage->pCache==pCache );
34600     assert( pPage->pgno==pgno );
34601     assert( pPage->pData==(void *)&pPage[1] );
34602     assert( pPage->pExtra==(void *)&((char *)&pPage[1])[pCache->szPage] );
34603
34604     if( 0==pPage->nRef ){
34605       pCache->nRef++;
34606     }
34607     pPage->nRef++;
34608     if( pgno==1 ){
34609       pCache->pPage1 = pPage;
34610     }
34611   }
34612   *ppPage = pPage;
34613   return (pPage==0 && eCreate) ? SQLITE_NOMEM : SQLITE_OK;
34614 }
34615
34616 /*
34617 ** Decrement the reference count on a page. If the page is clean and the
34618 ** reference count drops to 0, then it is made elible for recycling.
34619 */
34620 SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr *p){
34621   assert( p->nRef>0 );
34622   p->nRef--;
34623   if( p->nRef==0 ){
34624     PCache *pCache = p->pCache;
34625     pCache->nRef--;
34626     if( (p->flags&PGHDR_DIRTY)==0 ){
34627       pcacheUnpin(p);
34628     }else{
34629       /* Move the page to the head of the dirty list. */
34630       pcacheRemoveFromDirtyList(p);
34631       pcacheAddToDirtyList(p);
34632     }
34633   }
34634 }
34635
34636 /*
34637 ** Increase the reference count of a supplied page by 1.
34638 */
34639 SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr *p){
34640   assert(p->nRef>0);
34641   p->nRef++;
34642 }
34643
34644 /*
34645 ** Drop a page from the cache. There must be exactly one reference to the
34646 ** page. This function deletes that reference, so after it returns the
34647 ** page pointed to by p is invalid.
34648 */
34649 SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr *p){
34650   PCache *pCache;
34651   assert( p->nRef==1 );
34652   if( p->flags&PGHDR_DIRTY ){
34653     pcacheRemoveFromDirtyList(p);
34654   }
34655   pCache = p->pCache;
34656   pCache->nRef--;
34657   if( p->pgno==1 ){
34658     pCache->pPage1 = 0;
34659   }
34660   sqlite3GlobalConfig.pcache.xUnpin(pCache->pCache, p, 1);
34661 }
34662
34663 /*
34664 ** Make sure the page is marked as dirty. If it isn't dirty already,
34665 ** make it so.
34666 */
34667 SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr *p){
34668   p->flags &= ~PGHDR_DONT_WRITE;
34669   assert( p->nRef>0 );
34670   if( 0==(p->flags & PGHDR_DIRTY) ){
34671     p->flags |= PGHDR_DIRTY;
34672     pcacheAddToDirtyList( p);
34673   }
34674 }
34675
34676 /*
34677 ** Make sure the page is marked as clean. If it isn't clean already,
34678 ** make it so.
34679 */
34680 SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr *p){
34681   if( (p->flags & PGHDR_DIRTY) ){
34682     pcacheRemoveFromDirtyList(p);
34683     p->flags &= ~(PGHDR_DIRTY|PGHDR_NEED_SYNC);
34684     if( p->nRef==0 ){
34685       pcacheUnpin(p);
34686     }
34687   }
34688 }
34689
34690 /*
34691 ** Make every page in the cache clean.
34692 */
34693 SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache *pCache){
34694   PgHdr *p;
34695   while( (p = pCache->pDirty)!=0 ){
34696     sqlite3PcacheMakeClean(p);
34697   }
34698 }
34699
34700 /*
34701 ** Clear the PGHDR_NEED_SYNC flag from all dirty pages.
34702 */
34703 SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *pCache){
34704   PgHdr *p;
34705   for(p=pCache->pDirty; p; p=p->pDirtyNext){
34706     p->flags &= ~PGHDR_NEED_SYNC;
34707   }
34708   pCache->pSynced = pCache->pDirtyTail;
34709 }
34710
34711 /*
34712 ** Change the page number of page p to newPgno. 
34713 */
34714 SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){
34715   PCache *pCache = p->pCache;
34716   assert( p->nRef>0 );
34717   assert( newPgno>0 );
34718   sqlite3GlobalConfig.pcache.xRekey(pCache->pCache, p, p->pgno, newPgno);
34719   p->pgno = newPgno;
34720   if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){
34721     pcacheRemoveFromDirtyList(p);
34722     pcacheAddToDirtyList(p);
34723   }
34724 }
34725
34726 /*
34727 ** Drop every cache entry whose page number is greater than "pgno". The
34728 ** caller must ensure that there are no outstanding references to any pages
34729 ** other than page 1 with a page number greater than pgno.
34730 **
34731 ** If there is a reference to page 1 and the pgno parameter passed to this
34732 ** function is 0, then the data area associated with page 1 is zeroed, but
34733 ** the page object is not dropped.
34734 */
34735 SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache *pCache, Pgno pgno){
34736   if( pCache->pCache ){
34737     PgHdr *p;
34738     PgHdr *pNext;
34739     for(p=pCache->pDirty; p; p=pNext){
34740       pNext = p->pDirtyNext;
34741       /* This routine never gets call with a positive pgno except right
34742       ** after sqlite3PcacheCleanAll().  So if there are dirty pages,
34743       ** it must be that pgno==0.
34744       */
34745       assert( p->pgno>0 );
34746       if( ALWAYS(p->pgno>pgno) ){
34747         assert( p->flags&PGHDR_DIRTY );
34748         sqlite3PcacheMakeClean(p);
34749       }
34750     }
34751     if( pgno==0 && pCache->pPage1 ){
34752       memset(pCache->pPage1->pData, 0, pCache->szPage);
34753       pgno = 1;
34754     }
34755     sqlite3GlobalConfig.pcache.xTruncate(pCache->pCache, pgno+1);
34756   }
34757 }
34758
34759 /*
34760 ** Close a cache.
34761 */
34762 SQLITE_PRIVATE void sqlite3PcacheClose(PCache *pCache){
34763   if( pCache->pCache ){
34764     sqlite3GlobalConfig.pcache.xDestroy(pCache->pCache);
34765   }
34766 }
34767
34768 /* 
34769 ** Discard the contents of the cache.
34770 */
34771 SQLITE_PRIVATE void sqlite3PcacheClear(PCache *pCache){
34772   sqlite3PcacheTruncate(pCache, 0);
34773 }
34774
34775 /*
34776 ** Merge two lists of pages connected by pDirty and in pgno order.
34777 ** Do not both fixing the pDirtyPrev pointers.
34778 */
34779 static PgHdr *pcacheMergeDirtyList(PgHdr *pA, PgHdr *pB){
34780   PgHdr result, *pTail;
34781   pTail = &result;
34782   while( pA && pB ){
34783     if( pA->pgno<pB->pgno ){
34784       pTail->pDirty = pA;
34785       pTail = pA;
34786       pA = pA->pDirty;
34787     }else{
34788       pTail->pDirty = pB;
34789       pTail = pB;
34790       pB = pB->pDirty;
34791     }
34792   }
34793   if( pA ){
34794     pTail->pDirty = pA;
34795   }else if( pB ){
34796     pTail->pDirty = pB;
34797   }else{
34798     pTail->pDirty = 0;
34799   }
34800   return result.pDirty;
34801 }
34802
34803 /*
34804 ** Sort the list of pages in accending order by pgno.  Pages are
34805 ** connected by pDirty pointers.  The pDirtyPrev pointers are
34806 ** corrupted by this sort.
34807 **
34808 ** Since there cannot be more than 2^31 distinct pages in a database,
34809 ** there cannot be more than 31 buckets required by the merge sorter.
34810 ** One extra bucket is added to catch overflow in case something
34811 ** ever changes to make the previous sentence incorrect.
34812 */
34813 #define N_SORT_BUCKET  32
34814 static PgHdr *pcacheSortDirtyList(PgHdr *pIn){
34815   PgHdr *a[N_SORT_BUCKET], *p;
34816   int i;
34817   memset(a, 0, sizeof(a));
34818   while( pIn ){
34819     p = pIn;
34820     pIn = p->pDirty;
34821     p->pDirty = 0;
34822     for(i=0; ALWAYS(i<N_SORT_BUCKET-1); i++){
34823       if( a[i]==0 ){
34824         a[i] = p;
34825         break;
34826       }else{
34827         p = pcacheMergeDirtyList(a[i], p);
34828         a[i] = 0;
34829       }
34830     }
34831     if( NEVER(i==N_SORT_BUCKET-1) ){
34832       /* To get here, there need to be 2^(N_SORT_BUCKET) elements in
34833       ** the input list.  But that is impossible.
34834       */
34835       a[i] = pcacheMergeDirtyList(a[i], p);
34836     }
34837   }
34838   p = a[0];
34839   for(i=1; i<N_SORT_BUCKET; i++){
34840     p = pcacheMergeDirtyList(p, a[i]);
34841   }
34842   return p;
34843 }
34844
34845 /*
34846 ** Return a list of all dirty pages in the cache, sorted by page number.
34847 */
34848 SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache *pCache){
34849   PgHdr *p;
34850   for(p=pCache->pDirty; p; p=p->pDirtyNext){
34851     p->pDirty = p->pDirtyNext;
34852   }
34853   return pcacheSortDirtyList(pCache->pDirty);
34854 }
34855
34856 /* 
34857 ** Return the total number of referenced pages held by the cache.
34858 */
34859 SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache *pCache){
34860   return pCache->nRef;
34861 }
34862
34863 /*
34864 ** Return the number of references to the page supplied as an argument.
34865 */
34866 SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr *p){
34867   return p->nRef;
34868 }
34869
34870 /* 
34871 ** Return the total number of pages in the cache.
34872 */
34873 SQLITE_PRIVATE int sqlite3PcachePagecount(PCache *pCache){
34874   int nPage = 0;
34875   if( pCache->pCache ){
34876     nPage = sqlite3GlobalConfig.pcache.xPagecount(pCache->pCache);
34877   }
34878   return nPage;
34879 }
34880
34881 #ifdef SQLITE_TEST
34882 /*
34883 ** Get the suggested cache-size value.
34884 */
34885 SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *pCache){
34886   return pCache->nMax;
34887 }
34888 #endif
34889
34890 /*
34891 ** Set the suggested cache-size value.
34892 */
34893 SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *pCache, int mxPage){
34894   pCache->nMax = mxPage;
34895   if( pCache->pCache ){
34896     sqlite3GlobalConfig.pcache.xCachesize(pCache->pCache, mxPage);
34897   }
34898 }
34899
34900 #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
34901 /*
34902 ** For all dirty pages currently in the cache, invoke the specified
34903 ** callback. This is only used if the SQLITE_CHECK_PAGES macro is
34904 ** defined.
34905 */
34906 SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *)){
34907   PgHdr *pDirty;
34908   for(pDirty=pCache->pDirty; pDirty; pDirty=pDirty->pDirtyNext){
34909     xIter(pDirty);
34910   }
34911 }
34912 #endif
34913
34914 /************** End of pcache.c **********************************************/
34915 /************** Begin file pcache1.c *****************************************/
34916 /*
34917 ** 2008 November 05
34918 **
34919 ** The author disclaims copyright to this source code.  In place of
34920 ** a legal notice, here is a blessing:
34921 **
34922 **    May you do good and not evil.
34923 **    May you find forgiveness for yourself and forgive others.
34924 **    May you share freely, never taking more than you give.
34925 **
34926 *************************************************************************
34927 **
34928 ** This file implements the default page cache implementation (the
34929 ** sqlite3_pcache interface). It also contains part of the implementation
34930 ** of the SQLITE_CONFIG_PAGECACHE and sqlite3_release_memory() features.
34931 ** If the default page cache implementation is overriden, then neither of
34932 ** these two features are available.
34933 */
34934
34935
34936 typedef struct PCache1 PCache1;
34937 typedef struct PgHdr1 PgHdr1;
34938 typedef struct PgFreeslot PgFreeslot;
34939 typedef struct PGroup PGroup;
34940
34941 /* Each page cache (or PCache) belongs to a PGroup.  A PGroup is a set 
34942 ** of one or more PCaches that are able to recycle each others unpinned
34943 ** pages when they are under memory pressure.  A PGroup is an instance of
34944 ** the following object.
34945 **
34946 ** This page cache implementation works in one of two modes:
34947 **
34948 **   (1)  Every PCache is the sole member of its own PGroup.  There is
34949 **        one PGroup per PCache.
34950 **
34951 **   (2)  There is a single global PGroup that all PCaches are a member
34952 **        of.
34953 **
34954 ** Mode 1 uses more memory (since PCache instances are not able to rob
34955 ** unused pages from other PCaches) but it also operates without a mutex,
34956 ** and is therefore often faster.  Mode 2 requires a mutex in order to be
34957 ** threadsafe, but is able recycle pages more efficient.
34958 **
34959 ** For mode (1), PGroup.mutex is NULL.  For mode (2) there is only a single
34960 ** PGroup which is the pcache1.grp global variable and its mutex is
34961 ** SQLITE_MUTEX_STATIC_LRU.
34962 */
34963 struct PGroup {
34964   sqlite3_mutex *mutex;          /* MUTEX_STATIC_LRU or NULL */
34965   int nMaxPage;                  /* Sum of nMax for purgeable caches */
34966   int nMinPage;                  /* Sum of nMin for purgeable caches */
34967   int mxPinned;                  /* nMaxpage + 10 - nMinPage */
34968   int nCurrentPage;              /* Number of purgeable pages allocated */
34969   PgHdr1 *pLruHead, *pLruTail;   /* LRU list of unpinned pages */
34970 };
34971
34972 /* Each page cache is an instance of the following object.  Every
34973 ** open database file (including each in-memory database and each
34974 ** temporary or transient database) has a single page cache which
34975 ** is an instance of this object.
34976 **
34977 ** Pointers to structures of this type are cast and returned as 
34978 ** opaque sqlite3_pcache* handles.
34979 */
34980 struct PCache1 {
34981   /* Cache configuration parameters. Page size (szPage) and the purgeable
34982   ** flag (bPurgeable) are set when the cache is created. nMax may be 
34983   ** modified at any time by a call to the pcache1CacheSize() method.
34984   ** The PGroup mutex must be held when accessing nMax.
34985   */
34986   PGroup *pGroup;                     /* PGroup this cache belongs to */
34987   int szPage;                         /* Size of allocated pages in bytes */
34988   int bPurgeable;                     /* True if cache is purgeable */
34989   unsigned int nMin;                  /* Minimum number of pages reserved */
34990   unsigned int nMax;                  /* Configured "cache_size" value */
34991   unsigned int n90pct;                /* nMax*9/10 */
34992
34993   /* Hash table of all pages. The following variables may only be accessed
34994   ** when the accessor is holding the PGroup mutex.
34995   */
34996   unsigned int nRecyclable;           /* Number of pages in the LRU list */
34997   unsigned int nPage;                 /* Total number of pages in apHash */
34998   unsigned int nHash;                 /* Number of slots in apHash[] */
34999   PgHdr1 **apHash;                    /* Hash table for fast lookup by key */
35000
35001   unsigned int iMaxKey;               /* Largest key seen since xTruncate() */
35002 };
35003
35004 /*
35005 ** Each cache entry is represented by an instance of the following 
35006 ** structure. A buffer of PgHdr1.pCache->szPage bytes is allocated 
35007 ** directly before this structure in memory (see the PGHDR1_TO_PAGE() 
35008 ** macro below).
35009 */
35010 struct PgHdr1 {
35011   unsigned int iKey;             /* Key value (page number) */
35012   PgHdr1 *pNext;                 /* Next in hash table chain */
35013   PCache1 *pCache;               /* Cache that currently owns this page */
35014   PgHdr1 *pLruNext;              /* Next in LRU list of unpinned pages */
35015   PgHdr1 *pLruPrev;              /* Previous in LRU list of unpinned pages */
35016 };
35017
35018 /*
35019 ** Free slots in the allocator used to divide up the buffer provided using
35020 ** the SQLITE_CONFIG_PAGECACHE mechanism.
35021 */
35022 struct PgFreeslot {
35023   PgFreeslot *pNext;  /* Next free slot */
35024 };
35025
35026 /*
35027 ** Global data used by this cache.
35028 */
35029 static SQLITE_WSD struct PCacheGlobal {
35030   PGroup grp;                    /* The global PGroup for mode (2) */
35031
35032   /* Variables related to SQLITE_CONFIG_PAGECACHE settings.  The
35033   ** szSlot, nSlot, pStart, pEnd, nReserve, and isInit values are all
35034   ** fixed at sqlite3_initialize() time and do not require mutex protection.
35035   ** The nFreeSlot and pFree values do require mutex protection.
35036   */
35037   int isInit;                    /* True if initialized */
35038   int szSlot;                    /* Size of each free slot */
35039   int nSlot;                     /* The number of pcache slots */
35040   int nReserve;                  /* Try to keep nFreeSlot above this */
35041   void *pStart, *pEnd;           /* Bounds of pagecache malloc range */
35042   /* Above requires no mutex.  Use mutex below for variable that follow. */
35043   sqlite3_mutex *mutex;          /* Mutex for accessing the following: */
35044   int nFreeSlot;                 /* Number of unused pcache slots */
35045   PgFreeslot *pFree;             /* Free page blocks */
35046   /* The following value requires a mutex to change.  We skip the mutex on
35047   ** reading because (1) most platforms read a 32-bit integer atomically and
35048   ** (2) even if an incorrect value is read, no great harm is done since this
35049   ** is really just an optimization. */
35050   int bUnderPressure;            /* True if low on PAGECACHE memory */
35051 } pcache1_g;
35052
35053 /*
35054 ** All code in this file should access the global structure above via the
35055 ** alias "pcache1". This ensures that the WSD emulation is used when
35056 ** compiling for systems that do not support real WSD.
35057 */
35058 #define pcache1 (GLOBAL(struct PCacheGlobal, pcache1_g))
35059
35060 /*
35061 ** When a PgHdr1 structure is allocated, the associated PCache1.szPage
35062 ** bytes of data are located directly before it in memory (i.e. the total
35063 ** size of the allocation is sizeof(PgHdr1)+PCache1.szPage byte). The
35064 ** PGHDR1_TO_PAGE() macro takes a pointer to a PgHdr1 structure as
35065 ** an argument and returns a pointer to the associated block of szPage
35066 ** bytes. The PAGE_TO_PGHDR1() macro does the opposite: its argument is
35067 ** a pointer to a block of szPage bytes of data and the return value is
35068 ** a pointer to the associated PgHdr1 structure.
35069 **
35070 **   assert( PGHDR1_TO_PAGE(PAGE_TO_PGHDR1(pCache, X))==X );
35071 */
35072 #define PGHDR1_TO_PAGE(p)    (void*)(((char*)p) - p->pCache->szPage)
35073 #define PAGE_TO_PGHDR1(c, p) (PgHdr1*)(((char*)p) + c->szPage)
35074
35075 /*
35076 ** Macros to enter and leave the PCache LRU mutex.
35077 */
35078 #define pcache1EnterMutex(X) sqlite3_mutex_enter((X)->mutex)
35079 #define pcache1LeaveMutex(X) sqlite3_mutex_leave((X)->mutex)
35080
35081 /******************************************************************************/
35082 /******** Page Allocation/SQLITE_CONFIG_PCACHE Related Functions **************/
35083
35084 /*
35085 ** This function is called during initialization if a static buffer is 
35086 ** supplied to use for the page-cache by passing the SQLITE_CONFIG_PAGECACHE
35087 ** verb to sqlite3_config(). Parameter pBuf points to an allocation large
35088 ** enough to contain 'n' buffers of 'sz' bytes each.
35089 **
35090 ** This routine is called from sqlite3_initialize() and so it is guaranteed
35091 ** to be serialized already.  There is no need for further mutexing.
35092 */
35093 SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *pBuf, int sz, int n){
35094   if( pcache1.isInit ){
35095     PgFreeslot *p;
35096     sz = ROUNDDOWN8(sz);
35097     pcache1.szSlot = sz;
35098     pcache1.nSlot = pcache1.nFreeSlot = n;
35099     pcache1.nReserve = n>90 ? 10 : (n/10 + 1);
35100     pcache1.pStart = pBuf;
35101     pcache1.pFree = 0;
35102     pcache1.bUnderPressure = 0;
35103     while( n-- ){
35104       p = (PgFreeslot*)pBuf;
35105       p->pNext = pcache1.pFree;
35106       pcache1.pFree = p;
35107       pBuf = (void*)&((char*)pBuf)[sz];
35108     }
35109     pcache1.pEnd = pBuf;
35110   }
35111 }
35112
35113 /*
35114 ** Malloc function used within this file to allocate space from the buffer
35115 ** configured using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no 
35116 ** such buffer exists or there is no space left in it, this function falls 
35117 ** back to sqlite3Malloc().
35118 **
35119 ** Multiple threads can run this routine at the same time.  Global variables
35120 ** in pcache1 need to be protected via mutex.
35121 */
35122 static void *pcache1Alloc(int nByte){
35123   void *p = 0;
35124   assert( sqlite3_mutex_notheld(pcache1.grp.mutex) );
35125   sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, nByte);
35126   if( nByte<=pcache1.szSlot ){
35127     sqlite3_mutex_enter(pcache1.mutex);
35128     p = (PgHdr1 *)pcache1.pFree;
35129     if( p ){
35130       pcache1.pFree = pcache1.pFree->pNext;
35131       pcache1.nFreeSlot--;
35132       pcache1.bUnderPressure = pcache1.nFreeSlot<pcache1.nReserve;
35133       assert( pcache1.nFreeSlot>=0 );
35134       sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, 1);
35135     }
35136     sqlite3_mutex_leave(pcache1.mutex);
35137   }
35138   if( p==0 ){
35139     /* Memory is not available in the SQLITE_CONFIG_PAGECACHE pool.  Get
35140     ** it from sqlite3Malloc instead.
35141     */
35142     p = sqlite3Malloc(nByte);
35143     if( p ){
35144       int sz = sqlite3MallocSize(p);
35145       sqlite3_mutex_enter(pcache1.mutex);
35146       sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, sz);
35147       sqlite3_mutex_leave(pcache1.mutex);
35148     }
35149     sqlite3MemdebugSetType(p, MEMTYPE_PCACHE);
35150   }
35151   return p;
35152 }
35153
35154 /*
35155 ** Free an allocated buffer obtained from pcache1Alloc().
35156 */
35157 static void pcache1Free(void *p){
35158   if( p==0 ) return;
35159   if( p>=pcache1.pStart && p<pcache1.pEnd ){
35160     PgFreeslot *pSlot;
35161     sqlite3_mutex_enter(pcache1.mutex);
35162     sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, -1);
35163     pSlot = (PgFreeslot*)p;
35164     pSlot->pNext = pcache1.pFree;
35165     pcache1.pFree = pSlot;
35166     pcache1.nFreeSlot++;
35167     pcache1.bUnderPressure = pcache1.nFreeSlot<pcache1.nReserve;
35168     assert( pcache1.nFreeSlot<=pcache1.nSlot );
35169     sqlite3_mutex_leave(pcache1.mutex);
35170   }else{
35171     int iSize;
35172     assert( sqlite3MemdebugHasType(p, MEMTYPE_PCACHE) );
35173     sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
35174     iSize = sqlite3MallocSize(p);
35175     sqlite3_mutex_enter(pcache1.mutex);
35176     sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, -iSize);
35177     sqlite3_mutex_leave(pcache1.mutex);
35178     sqlite3_free(p);
35179   }
35180 }
35181
35182 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
35183 /*
35184 ** Return the size of a pcache allocation
35185 */
35186 static int pcache1MemSize(void *p){
35187   if( p>=pcache1.pStart && p<pcache1.pEnd ){
35188     return pcache1.szSlot;
35189   }else{
35190     int iSize;
35191     assert( sqlite3MemdebugHasType(p, MEMTYPE_PCACHE) );
35192     sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
35193     iSize = sqlite3MallocSize(p);
35194     sqlite3MemdebugSetType(p, MEMTYPE_PCACHE);
35195     return iSize;
35196   }
35197 }
35198 #endif /* SQLITE_ENABLE_MEMORY_MANAGEMENT */
35199
35200 /*
35201 ** Allocate a new page object initially associated with cache pCache.
35202 */
35203 static PgHdr1 *pcache1AllocPage(PCache1 *pCache){
35204   int nByte = sizeof(PgHdr1) + pCache->szPage;
35205   void *pPg = pcache1Alloc(nByte);
35206   PgHdr1 *p;
35207   if( pPg ){
35208     p = PAGE_TO_PGHDR1(pCache, pPg);
35209     if( pCache->bPurgeable ){
35210       pCache->pGroup->nCurrentPage++;
35211     }
35212   }else{
35213     p = 0;
35214   }
35215   return p;
35216 }
35217
35218 /*
35219 ** Free a page object allocated by pcache1AllocPage().
35220 **
35221 ** The pointer is allowed to be NULL, which is prudent.  But it turns out
35222 ** that the current implementation happens to never call this routine
35223 ** with a NULL pointer, so we mark the NULL test with ALWAYS().
35224 */
35225 static void pcache1FreePage(PgHdr1 *p){
35226   if( ALWAYS(p) ){
35227     PCache1 *pCache = p->pCache;
35228     if( pCache->bPurgeable ){
35229       pCache->pGroup->nCurrentPage--;
35230     }
35231     pcache1Free(PGHDR1_TO_PAGE(p));
35232   }
35233 }
35234
35235 /*
35236 ** Malloc function used by SQLite to obtain space from the buffer configured
35237 ** using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no such buffer
35238 ** exists, this function falls back to sqlite3Malloc().
35239 */
35240 SQLITE_PRIVATE void *sqlite3PageMalloc(int sz){
35241   return pcache1Alloc(sz);
35242 }
35243
35244 /*
35245 ** Free an allocated buffer obtained from sqlite3PageMalloc().
35246 */
35247 SQLITE_PRIVATE void sqlite3PageFree(void *p){
35248   pcache1Free(p);
35249 }
35250
35251
35252 /*
35253 ** Return true if it desirable to avoid allocating a new page cache
35254 ** entry.
35255 **
35256 ** If memory was allocated specifically to the page cache using
35257 ** SQLITE_CONFIG_PAGECACHE but that memory has all been used, then
35258 ** it is desirable to avoid allocating a new page cache entry because
35259 ** presumably SQLITE_CONFIG_PAGECACHE was suppose to be sufficient
35260 ** for all page cache needs and we should not need to spill the
35261 ** allocation onto the heap.
35262 **
35263 ** Or, the heap is used for all page cache memory put the heap is
35264 ** under memory pressure, then again it is desirable to avoid
35265 ** allocating a new page cache entry in order to avoid stressing
35266 ** the heap even further.
35267 */
35268 static int pcache1UnderMemoryPressure(PCache1 *pCache){
35269   if( pcache1.nSlot && pCache->szPage<=pcache1.szSlot ){
35270     return pcache1.bUnderPressure;
35271   }else{
35272     return sqlite3HeapNearlyFull();
35273   }
35274 }
35275
35276 /******************************************************************************/
35277 /******** General Implementation Functions ************************************/
35278
35279 /*
35280 ** This function is used to resize the hash table used by the cache passed
35281 ** as the first argument.
35282 **
35283 ** The PCache mutex must be held when this function is called.
35284 */
35285 static int pcache1ResizeHash(PCache1 *p){
35286   PgHdr1 **apNew;
35287   unsigned int nNew;
35288   unsigned int i;
35289
35290   assert( sqlite3_mutex_held(p->pGroup->mutex) );
35291
35292   nNew = p->nHash*2;
35293   if( nNew<256 ){
35294     nNew = 256;
35295   }
35296
35297   pcache1LeaveMutex(p->pGroup);
35298   if( p->nHash ){ sqlite3BeginBenignMalloc(); }
35299   apNew = (PgHdr1 **)sqlite3_malloc(sizeof(PgHdr1 *)*nNew);
35300   if( p->nHash ){ sqlite3EndBenignMalloc(); }
35301   pcache1EnterMutex(p->pGroup);
35302   if( apNew ){
35303     memset(apNew, 0, sizeof(PgHdr1 *)*nNew);
35304     for(i=0; i<p->nHash; i++){
35305       PgHdr1 *pPage;
35306       PgHdr1 *pNext = p->apHash[i];
35307       while( (pPage = pNext)!=0 ){
35308         unsigned int h = pPage->iKey % nNew;
35309         pNext = pPage->pNext;
35310         pPage->pNext = apNew[h];
35311         apNew[h] = pPage;
35312       }
35313     }
35314     sqlite3_free(p->apHash);
35315     p->apHash = apNew;
35316     p->nHash = nNew;
35317   }
35318
35319   return (p->apHash ? SQLITE_OK : SQLITE_NOMEM);
35320 }
35321
35322 /*
35323 ** This function is used internally to remove the page pPage from the 
35324 ** PGroup LRU list, if is part of it. If pPage is not part of the PGroup
35325 ** LRU list, then this function is a no-op.
35326 **
35327 ** The PGroup mutex must be held when this function is called.
35328 **
35329 ** If pPage is NULL then this routine is a no-op.
35330 */
35331 static void pcache1PinPage(PgHdr1 *pPage){
35332   PCache1 *pCache;
35333   PGroup *pGroup;
35334
35335   if( pPage==0 ) return;
35336   pCache = pPage->pCache;
35337   pGroup = pCache->pGroup;
35338   assert( sqlite3_mutex_held(pGroup->mutex) );
35339   if( pPage->pLruNext || pPage==pGroup->pLruTail ){
35340     if( pPage->pLruPrev ){
35341       pPage->pLruPrev->pLruNext = pPage->pLruNext;
35342     }
35343     if( pPage->pLruNext ){
35344       pPage->pLruNext->pLruPrev = pPage->pLruPrev;
35345     }
35346     if( pGroup->pLruHead==pPage ){
35347       pGroup->pLruHead = pPage->pLruNext;
35348     }
35349     if( pGroup->pLruTail==pPage ){
35350       pGroup->pLruTail = pPage->pLruPrev;
35351     }
35352     pPage->pLruNext = 0;
35353     pPage->pLruPrev = 0;
35354     pPage->pCache->nRecyclable--;
35355   }
35356 }
35357
35358
35359 /*
35360 ** Remove the page supplied as an argument from the hash table 
35361 ** (PCache1.apHash structure) that it is currently stored in.
35362 **
35363 ** The PGroup mutex must be held when this function is called.
35364 */
35365 static void pcache1RemoveFromHash(PgHdr1 *pPage){
35366   unsigned int h;
35367   PCache1 *pCache = pPage->pCache;
35368   PgHdr1 **pp;
35369
35370   assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
35371   h = pPage->iKey % pCache->nHash;
35372   for(pp=&pCache->apHash[h]; (*pp)!=pPage; pp=&(*pp)->pNext);
35373   *pp = (*pp)->pNext;
35374
35375   pCache->nPage--;
35376 }
35377
35378 /*
35379 ** If there are currently more than nMaxPage pages allocated, try
35380 ** to recycle pages to reduce the number allocated to nMaxPage.
35381 */
35382 static void pcache1EnforceMaxPage(PGroup *pGroup){
35383   assert( sqlite3_mutex_held(pGroup->mutex) );
35384   while( pGroup->nCurrentPage>pGroup->nMaxPage && pGroup->pLruTail ){
35385     PgHdr1 *p = pGroup->pLruTail;
35386     assert( p->pCache->pGroup==pGroup );
35387     pcache1PinPage(p);
35388     pcache1RemoveFromHash(p);
35389     pcache1FreePage(p);
35390   }
35391 }
35392
35393 /*
35394 ** Discard all pages from cache pCache with a page number (key value) 
35395 ** greater than or equal to iLimit. Any pinned pages that meet this 
35396 ** criteria are unpinned before they are discarded.
35397 **
35398 ** The PCache mutex must be held when this function is called.
35399 */
35400 static void pcache1TruncateUnsafe(
35401   PCache1 *pCache,             /* The cache to truncate */
35402   unsigned int iLimit          /* Drop pages with this pgno or larger */
35403 ){
35404   TESTONLY( unsigned int nPage = 0; )  /* To assert pCache->nPage is correct */
35405   unsigned int h;
35406   assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
35407   for(h=0; h<pCache->nHash; h++){
35408     PgHdr1 **pp = &pCache->apHash[h]; 
35409     PgHdr1 *pPage;
35410     while( (pPage = *pp)!=0 ){
35411       if( pPage->iKey>=iLimit ){
35412         pCache->nPage--;
35413         *pp = pPage->pNext;
35414         pcache1PinPage(pPage);
35415         pcache1FreePage(pPage);
35416       }else{
35417         pp = &pPage->pNext;
35418         TESTONLY( nPage++; )
35419       }
35420     }
35421   }
35422   assert( pCache->nPage==nPage );
35423 }
35424
35425 /******************************************************************************/
35426 /******** sqlite3_pcache Methods **********************************************/
35427
35428 /*
35429 ** Implementation of the sqlite3_pcache.xInit method.
35430 */
35431 static int pcache1Init(void *NotUsed){
35432   UNUSED_PARAMETER(NotUsed);
35433   assert( pcache1.isInit==0 );
35434   memset(&pcache1, 0, sizeof(pcache1));
35435   if( sqlite3GlobalConfig.bCoreMutex ){
35436     pcache1.grp.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU);
35437     pcache1.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_PMEM);
35438   }
35439   pcache1.grp.mxPinned = 10;
35440   pcache1.isInit = 1;
35441   return SQLITE_OK;
35442 }
35443
35444 /*
35445 ** Implementation of the sqlite3_pcache.xShutdown method.
35446 ** Note that the static mutex allocated in xInit does 
35447 ** not need to be freed.
35448 */
35449 static void pcache1Shutdown(void *NotUsed){
35450   UNUSED_PARAMETER(NotUsed);
35451   assert( pcache1.isInit!=0 );
35452   memset(&pcache1, 0, sizeof(pcache1));
35453 }
35454
35455 /*
35456 ** Implementation of the sqlite3_pcache.xCreate method.
35457 **
35458 ** Allocate a new cache.
35459 */
35460 static sqlite3_pcache *pcache1Create(int szPage, int bPurgeable){
35461   PCache1 *pCache;      /* The newly created page cache */
35462   PGroup *pGroup;       /* The group the new page cache will belong to */
35463   int sz;               /* Bytes of memory required to allocate the new cache */
35464
35465   /*
35466   ** The separateCache variable is true if each PCache has its own private
35467   ** PGroup.  In other words, separateCache is true for mode (1) where no
35468   ** mutexing is required.
35469   **
35470   **   *  Always use separate caches (mode-1) if SQLITE_SEPARATE_CACHE_POOLS
35471   **
35472   **   *  Always use a unified cache (mode-2) if ENABLE_MEMORY_MANAGEMENT
35473   **
35474   **   *  Always use a unified cache in single-threaded applications
35475   **
35476   **   *  Otherwise (if multi-threaded and ENABLE_MEMORY_MANAGEMENT is off)
35477   **      use separate caches (mode-1)
35478   */
35479 #ifdef SQLITE_SEPARATE_CACHE_POOLS
35480   const int separateCache = 1;
35481 #elif defined(SQLITE_ENABLE_MEMORY_MANAGEMENT) || SQLITE_THREADSAFE==0
35482   const int separateCache = 0;
35483 #else
35484   int separateCache = sqlite3GlobalConfig.bCoreMutex>0;
35485 #endif
35486
35487   sz = sizeof(PCache1) + sizeof(PGroup)*separateCache;
35488   pCache = (PCache1 *)sqlite3_malloc(sz);
35489   if( pCache ){
35490     memset(pCache, 0, sz);
35491     if( separateCache ){
35492       pGroup = (PGroup*)&pCache[1];
35493       pGroup->mxPinned = 10;
35494     }else{
35495       pGroup = &pcache1_g.grp;
35496     }
35497     pCache->pGroup = pGroup;
35498     pCache->szPage = szPage;
35499     pCache->bPurgeable = (bPurgeable ? 1 : 0);
35500     if( bPurgeable ){
35501       pCache->nMin = 10;
35502       pcache1EnterMutex(pGroup);
35503       pGroup->nMinPage += pCache->nMin;
35504       pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
35505       pcache1LeaveMutex(pGroup);
35506     }
35507   }
35508   return (sqlite3_pcache *)pCache;
35509 }
35510
35511 /*
35512 ** Implementation of the sqlite3_pcache.xCachesize method. 
35513 **
35514 ** Configure the cache_size limit for a cache.
35515 */
35516 static void pcache1Cachesize(sqlite3_pcache *p, int nMax){
35517   PCache1 *pCache = (PCache1 *)p;
35518   if( pCache->bPurgeable ){
35519     PGroup *pGroup = pCache->pGroup;
35520     pcache1EnterMutex(pGroup);
35521     pGroup->nMaxPage += (nMax - pCache->nMax);
35522     pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
35523     pCache->nMax = nMax;
35524     pCache->n90pct = pCache->nMax*9/10;
35525     pcache1EnforceMaxPage(pGroup);
35526     pcache1LeaveMutex(pGroup);
35527   }
35528 }
35529
35530 /*
35531 ** Implementation of the sqlite3_pcache.xPagecount method. 
35532 */
35533 static int pcache1Pagecount(sqlite3_pcache *p){
35534   int n;
35535   PCache1 *pCache = (PCache1*)p;
35536   pcache1EnterMutex(pCache->pGroup);
35537   n = pCache->nPage;
35538   pcache1LeaveMutex(pCache->pGroup);
35539   return n;
35540 }
35541
35542 /*
35543 ** Implementation of the sqlite3_pcache.xFetch method. 
35544 **
35545 ** Fetch a page by key value.
35546 **
35547 ** Whether or not a new page may be allocated by this function depends on
35548 ** the value of the createFlag argument.  0 means do not allocate a new
35549 ** page.  1 means allocate a new page if space is easily available.  2 
35550 ** means to try really hard to allocate a new page.
35551 **
35552 ** For a non-purgeable cache (a cache used as the storage for an in-memory
35553 ** database) there is really no difference between createFlag 1 and 2.  So
35554 ** the calling function (pcache.c) will never have a createFlag of 1 on
35555 ** a non-purgable cache.
35556 **
35557 ** There are three different approaches to obtaining space for a page,
35558 ** depending on the value of parameter createFlag (which may be 0, 1 or 2).
35559 **
35560 **   1. Regardless of the value of createFlag, the cache is searched for a 
35561 **      copy of the requested page. If one is found, it is returned.
35562 **
35563 **   2. If createFlag==0 and the page is not already in the cache, NULL is
35564 **      returned.
35565 **
35566 **   3. If createFlag is 1, and the page is not already in the cache, then
35567 **      return NULL (do not allocate a new page) if any of the following
35568 **      conditions are true:
35569 **
35570 **       (a) the number of pages pinned by the cache is greater than
35571 **           PCache1.nMax, or
35572 **
35573 **       (b) the number of pages pinned by the cache is greater than
35574 **           the sum of nMax for all purgeable caches, less the sum of 
35575 **           nMin for all other purgeable caches, or
35576 **
35577 **   4. If none of the first three conditions apply and the cache is marked
35578 **      as purgeable, and if one of the following is true:
35579 **
35580 **       (a) The number of pages allocated for the cache is already 
35581 **           PCache1.nMax, or
35582 **
35583 **       (b) The number of pages allocated for all purgeable caches is
35584 **           already equal to or greater than the sum of nMax for all
35585 **           purgeable caches,
35586 **
35587 **       (c) The system is under memory pressure and wants to avoid
35588 **           unnecessary pages cache entry allocations
35589 **
35590 **      then attempt to recycle a page from the LRU list. If it is the right
35591 **      size, return the recycled buffer. Otherwise, free the buffer and
35592 **      proceed to step 5. 
35593 **
35594 **   5. Otherwise, allocate and return a new page buffer.
35595 */
35596 static void *pcache1Fetch(sqlite3_pcache *p, unsigned int iKey, int createFlag){
35597   int nPinned;
35598   PCache1 *pCache = (PCache1 *)p;
35599   PGroup *pGroup;
35600   PgHdr1 *pPage = 0;
35601
35602   assert( pCache->bPurgeable || createFlag!=1 );
35603   assert( pCache->bPurgeable || pCache->nMin==0 );
35604   assert( pCache->bPurgeable==0 || pCache->nMin==10 );
35605   assert( pCache->nMin==0 || pCache->bPurgeable );
35606   pcache1EnterMutex(pGroup = pCache->pGroup);
35607
35608   /* Step 1: Search the hash table for an existing entry. */
35609   if( pCache->nHash>0 ){
35610     unsigned int h = iKey % pCache->nHash;
35611     for(pPage=pCache->apHash[h]; pPage&&pPage->iKey!=iKey; pPage=pPage->pNext);
35612   }
35613
35614   /* Step 2: Abort if no existing page is found and createFlag is 0 */
35615   if( pPage || createFlag==0 ){
35616     pcache1PinPage(pPage);
35617     goto fetch_out;
35618   }
35619
35620   /* The pGroup local variable will normally be initialized by the
35621   ** pcache1EnterMutex() macro above.  But if SQLITE_MUTEX_OMIT is defined,
35622   ** then pcache1EnterMutex() is a no-op, so we have to initialize the
35623   ** local variable here.  Delaying the initialization of pGroup is an
35624   ** optimization:  The common case is to exit the module before reaching
35625   ** this point.
35626   */
35627 #ifdef SQLITE_MUTEX_OMIT
35628   pGroup = pCache->pGroup;
35629 #endif
35630
35631
35632   /* Step 3: Abort if createFlag is 1 but the cache is nearly full */
35633   nPinned = pCache->nPage - pCache->nRecyclable;
35634   assert( nPinned>=0 );
35635   assert( pGroup->mxPinned == pGroup->nMaxPage + 10 - pGroup->nMinPage );
35636   assert( pCache->n90pct == pCache->nMax*9/10 );
35637   if( createFlag==1 && (
35638         nPinned>=pGroup->mxPinned
35639      || nPinned>=(int)pCache->n90pct
35640      || pcache1UnderMemoryPressure(pCache)
35641   )){
35642     goto fetch_out;
35643   }
35644
35645   if( pCache->nPage>=pCache->nHash && pcache1ResizeHash(pCache) ){
35646     goto fetch_out;
35647   }
35648
35649   /* Step 4. Try to recycle a page. */
35650   if( pCache->bPurgeable && pGroup->pLruTail && (
35651          (pCache->nPage+1>=pCache->nMax)
35652       || pGroup->nCurrentPage>=pGroup->nMaxPage
35653       || pcache1UnderMemoryPressure(pCache)
35654   )){
35655     PCache1 *pOtherCache;
35656     pPage = pGroup->pLruTail;
35657     pcache1RemoveFromHash(pPage);
35658     pcache1PinPage(pPage);
35659     if( (pOtherCache = pPage->pCache)->szPage!=pCache->szPage ){
35660       pcache1FreePage(pPage);
35661       pPage = 0;
35662     }else{
35663       pGroup->nCurrentPage -= 
35664                (pOtherCache->bPurgeable - pCache->bPurgeable);
35665     }
35666   }
35667
35668   /* Step 5. If a usable page buffer has still not been found, 
35669   ** attempt to allocate a new one. 
35670   */
35671   if( !pPage ){
35672     if( createFlag==1 ) sqlite3BeginBenignMalloc();
35673     pcache1LeaveMutex(pGroup);
35674     pPage = pcache1AllocPage(pCache);
35675     pcache1EnterMutex(pGroup);
35676     if( createFlag==1 ) sqlite3EndBenignMalloc();
35677   }
35678
35679   if( pPage ){
35680     unsigned int h = iKey % pCache->nHash;
35681     pCache->nPage++;
35682     pPage->iKey = iKey;
35683     pPage->pNext = pCache->apHash[h];
35684     pPage->pCache = pCache;
35685     pPage->pLruPrev = 0;
35686     pPage->pLruNext = 0;
35687     *(void **)(PGHDR1_TO_PAGE(pPage)) = 0;
35688     pCache->apHash[h] = pPage;
35689   }
35690
35691 fetch_out:
35692   if( pPage && iKey>pCache->iMaxKey ){
35693     pCache->iMaxKey = iKey;
35694   }
35695   pcache1LeaveMutex(pGroup);
35696   return (pPage ? PGHDR1_TO_PAGE(pPage) : 0);
35697 }
35698
35699
35700 /*
35701 ** Implementation of the sqlite3_pcache.xUnpin method.
35702 **
35703 ** Mark a page as unpinned (eligible for asynchronous recycling).
35704 */
35705 static void pcache1Unpin(sqlite3_pcache *p, void *pPg, int reuseUnlikely){
35706   PCache1 *pCache = (PCache1 *)p;
35707   PgHdr1 *pPage = PAGE_TO_PGHDR1(pCache, pPg);
35708   PGroup *pGroup = pCache->pGroup;
35709  
35710   assert( pPage->pCache==pCache );
35711   pcache1EnterMutex(pGroup);
35712
35713   /* It is an error to call this function if the page is already 
35714   ** part of the PGroup LRU list.
35715   */
35716   assert( pPage->pLruPrev==0 && pPage->pLruNext==0 );
35717   assert( pGroup->pLruHead!=pPage && pGroup->pLruTail!=pPage );
35718
35719   if( reuseUnlikely || pGroup->nCurrentPage>pGroup->nMaxPage ){
35720     pcache1RemoveFromHash(pPage);
35721     pcache1FreePage(pPage);
35722   }else{
35723     /* Add the page to the PGroup LRU list. */
35724     if( pGroup->pLruHead ){
35725       pGroup->pLruHead->pLruPrev = pPage;
35726       pPage->pLruNext = pGroup->pLruHead;
35727       pGroup->pLruHead = pPage;
35728     }else{
35729       pGroup->pLruTail = pPage;
35730       pGroup->pLruHead = pPage;
35731     }
35732     pCache->nRecyclable++;
35733   }
35734
35735   pcache1LeaveMutex(pCache->pGroup);
35736 }
35737
35738 /*
35739 ** Implementation of the sqlite3_pcache.xRekey method. 
35740 */
35741 static void pcache1Rekey(
35742   sqlite3_pcache *p,
35743   void *pPg,
35744   unsigned int iOld,
35745   unsigned int iNew
35746 ){
35747   PCache1 *pCache = (PCache1 *)p;
35748   PgHdr1 *pPage = PAGE_TO_PGHDR1(pCache, pPg);
35749   PgHdr1 **pp;
35750   unsigned int h; 
35751   assert( pPage->iKey==iOld );
35752   assert( pPage->pCache==pCache );
35753
35754   pcache1EnterMutex(pCache->pGroup);
35755
35756   h = iOld%pCache->nHash;
35757   pp = &pCache->apHash[h];
35758   while( (*pp)!=pPage ){
35759     pp = &(*pp)->pNext;
35760   }
35761   *pp = pPage->pNext;
35762
35763   h = iNew%pCache->nHash;
35764   pPage->iKey = iNew;
35765   pPage->pNext = pCache->apHash[h];
35766   pCache->apHash[h] = pPage;
35767   if( iNew>pCache->iMaxKey ){
35768     pCache->iMaxKey = iNew;
35769   }
35770
35771   pcache1LeaveMutex(pCache->pGroup);
35772 }
35773
35774 /*
35775 ** Implementation of the sqlite3_pcache.xTruncate method. 
35776 **
35777 ** Discard all unpinned pages in the cache with a page number equal to
35778 ** or greater than parameter iLimit. Any pinned pages with a page number
35779 ** equal to or greater than iLimit are implicitly unpinned.
35780 */
35781 static void pcache1Truncate(sqlite3_pcache *p, unsigned int iLimit){
35782   PCache1 *pCache = (PCache1 *)p;
35783   pcache1EnterMutex(pCache->pGroup);
35784   if( iLimit<=pCache->iMaxKey ){
35785     pcache1TruncateUnsafe(pCache, iLimit);
35786     pCache->iMaxKey = iLimit-1;
35787   }
35788   pcache1LeaveMutex(pCache->pGroup);
35789 }
35790
35791 /*
35792 ** Implementation of the sqlite3_pcache.xDestroy method. 
35793 **
35794 ** Destroy a cache allocated using pcache1Create().
35795 */
35796 static void pcache1Destroy(sqlite3_pcache *p){
35797   PCache1 *pCache = (PCache1 *)p;
35798   PGroup *pGroup = pCache->pGroup;
35799   assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) );
35800   pcache1EnterMutex(pGroup);
35801   pcache1TruncateUnsafe(pCache, 0);
35802   pGroup->nMaxPage -= pCache->nMax;
35803   pGroup->nMinPage -= pCache->nMin;
35804   pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
35805   pcache1EnforceMaxPage(pGroup);
35806   pcache1LeaveMutex(pGroup);
35807   sqlite3_free(pCache->apHash);
35808   sqlite3_free(pCache);
35809 }
35810
35811 /*
35812 ** This function is called during initialization (sqlite3_initialize()) to
35813 ** install the default pluggable cache module, assuming the user has not
35814 ** already provided an alternative.
35815 */
35816 SQLITE_PRIVATE void sqlite3PCacheSetDefault(void){
35817   static const sqlite3_pcache_methods defaultMethods = {
35818     0,                       /* pArg */
35819     pcache1Init,             /* xInit */
35820     pcache1Shutdown,         /* xShutdown */
35821     pcache1Create,           /* xCreate */
35822     pcache1Cachesize,        /* xCachesize */
35823     pcache1Pagecount,        /* xPagecount */
35824     pcache1Fetch,            /* xFetch */
35825     pcache1Unpin,            /* xUnpin */
35826     pcache1Rekey,            /* xRekey */
35827     pcache1Truncate,         /* xTruncate */
35828     pcache1Destroy           /* xDestroy */
35829   };
35830   sqlite3_config(SQLITE_CONFIG_PCACHE, &defaultMethods);
35831 }
35832
35833 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
35834 /*
35835 ** This function is called to free superfluous dynamically allocated memory
35836 ** held by the pager system. Memory in use by any SQLite pager allocated
35837 ** by the current thread may be sqlite3_free()ed.
35838 **
35839 ** nReq is the number of bytes of memory required. Once this much has
35840 ** been released, the function returns. The return value is the total number 
35841 ** of bytes of memory released.
35842 */
35843 SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){
35844   int nFree = 0;
35845   assert( sqlite3_mutex_notheld(pcache1.grp.mutex) );
35846   assert( sqlite3_mutex_notheld(pcache1.mutex) );
35847   if( pcache1.pStart==0 ){
35848     PgHdr1 *p;
35849     pcache1EnterMutex(&pcache1.grp);
35850     while( (nReq<0 || nFree<nReq) && ((p=pcache1.grp.pLruTail)!=0) ){
35851       nFree += pcache1MemSize(PGHDR1_TO_PAGE(p));
35852       pcache1PinPage(p);
35853       pcache1RemoveFromHash(p);
35854       pcache1FreePage(p);
35855     }
35856     pcache1LeaveMutex(&pcache1.grp);
35857   }
35858   return nFree;
35859 }
35860 #endif /* SQLITE_ENABLE_MEMORY_MANAGEMENT */
35861
35862 #ifdef SQLITE_TEST
35863 /*
35864 ** This function is used by test procedures to inspect the internal state
35865 ** of the global cache.
35866 */
35867 SQLITE_PRIVATE void sqlite3PcacheStats(
35868   int *pnCurrent,      /* OUT: Total number of pages cached */
35869   int *pnMax,          /* OUT: Global maximum cache size */
35870   int *pnMin,          /* OUT: Sum of PCache1.nMin for purgeable caches */
35871   int *pnRecyclable    /* OUT: Total number of pages available for recycling */
35872 ){
35873   PgHdr1 *p;
35874   int nRecyclable = 0;
35875   for(p=pcache1.grp.pLruHead; p; p=p->pLruNext){
35876     nRecyclable++;
35877   }
35878   *pnCurrent = pcache1.grp.nCurrentPage;
35879   *pnMax = pcache1.grp.nMaxPage;
35880   *pnMin = pcache1.grp.nMinPage;
35881   *pnRecyclable = nRecyclable;
35882 }
35883 #endif
35884
35885 /************** End of pcache1.c *********************************************/
35886 /************** Begin file rowset.c ******************************************/
35887 /*
35888 ** 2008 December 3
35889 **
35890 ** The author disclaims copyright to this source code.  In place of
35891 ** a legal notice, here is a blessing:
35892 **
35893 **    May you do good and not evil.
35894 **    May you find forgiveness for yourself and forgive others.
35895 **    May you share freely, never taking more than you give.
35896 **
35897 *************************************************************************
35898 **
35899 ** This module implements an object we call a "RowSet".
35900 **
35901 ** The RowSet object is a collection of rowids.  Rowids
35902 ** are inserted into the RowSet in an arbitrary order.  Inserts
35903 ** can be intermixed with tests to see if a given rowid has been
35904 ** previously inserted into the RowSet.
35905 **
35906 ** After all inserts are finished, it is possible to extract the
35907 ** elements of the RowSet in sorted order.  Once this extraction
35908 ** process has started, no new elements may be inserted.
35909 **
35910 ** Hence, the primitive operations for a RowSet are:
35911 **
35912 **    CREATE
35913 **    INSERT
35914 **    TEST
35915 **    SMALLEST
35916 **    DESTROY
35917 **
35918 ** The CREATE and DESTROY primitives are the constructor and destructor,
35919 ** obviously.  The INSERT primitive adds a new element to the RowSet.
35920 ** TEST checks to see if an element is already in the RowSet.  SMALLEST
35921 ** extracts the least value from the RowSet.
35922 **
35923 ** The INSERT primitive might allocate additional memory.  Memory is
35924 ** allocated in chunks so most INSERTs do no allocation.  There is an 
35925 ** upper bound on the size of allocated memory.  No memory is freed
35926 ** until DESTROY.
35927 **
35928 ** The TEST primitive includes a "batch" number.  The TEST primitive
35929 ** will only see elements that were inserted before the last change
35930 ** in the batch number.  In other words, if an INSERT occurs between
35931 ** two TESTs where the TESTs have the same batch nubmer, then the
35932 ** value added by the INSERT will not be visible to the second TEST.
35933 ** The initial batch number is zero, so if the very first TEST contains
35934 ** a non-zero batch number, it will see all prior INSERTs.
35935 **
35936 ** No INSERTs may occurs after a SMALLEST.  An assertion will fail if
35937 ** that is attempted.
35938 **
35939 ** The cost of an INSERT is roughly constant.  (Sometime new memory
35940 ** has to be allocated on an INSERT.)  The cost of a TEST with a new
35941 ** batch number is O(NlogN) where N is the number of elements in the RowSet.
35942 ** The cost of a TEST using the same batch number is O(logN).  The cost
35943 ** of the first SMALLEST is O(NlogN).  Second and subsequent SMALLEST
35944 ** primitives are constant time.  The cost of DESTROY is O(N).
35945 **
35946 ** There is an added cost of O(N) when switching between TEST and
35947 ** SMALLEST primitives.
35948 */
35949
35950
35951 /*
35952 ** Target size for allocation chunks.
35953 */
35954 #define ROWSET_ALLOCATION_SIZE 1024
35955
35956 /*
35957 ** The number of rowset entries per allocation chunk.
35958 */
35959 #define ROWSET_ENTRY_PER_CHUNK  \
35960                        ((ROWSET_ALLOCATION_SIZE-8)/sizeof(struct RowSetEntry))
35961
35962 /*
35963 ** Each entry in a RowSet is an instance of the following object.
35964 */
35965 struct RowSetEntry {            
35966   i64 v;                        /* ROWID value for this entry */
35967   struct RowSetEntry *pRight;   /* Right subtree (larger entries) or list */
35968   struct RowSetEntry *pLeft;    /* Left subtree (smaller entries) */
35969 };
35970
35971 /*
35972 ** RowSetEntry objects are allocated in large chunks (instances of the
35973 ** following structure) to reduce memory allocation overhead.  The
35974 ** chunks are kept on a linked list so that they can be deallocated
35975 ** when the RowSet is destroyed.
35976 */
35977 struct RowSetChunk {
35978   struct RowSetChunk *pNextChunk;        /* Next chunk on list of them all */
35979   struct RowSetEntry aEntry[ROWSET_ENTRY_PER_CHUNK]; /* Allocated entries */
35980 };
35981
35982 /*
35983 ** A RowSet in an instance of the following structure.
35984 **
35985 ** A typedef of this structure if found in sqliteInt.h.
35986 */
35987 struct RowSet {
35988   struct RowSetChunk *pChunk;    /* List of all chunk allocations */
35989   sqlite3 *db;                   /* The database connection */
35990   struct RowSetEntry *pEntry;    /* List of entries using pRight */
35991   struct RowSetEntry *pLast;     /* Last entry on the pEntry list */
35992   struct RowSetEntry *pFresh;    /* Source of new entry objects */
35993   struct RowSetEntry *pTree;     /* Binary tree of entries */
35994   u16 nFresh;                    /* Number of objects on pFresh */
35995   u8 isSorted;                   /* True if pEntry is sorted */
35996   u8 iBatch;                     /* Current insert batch */
35997 };
35998
35999 /*
36000 ** Turn bulk memory into a RowSet object.  N bytes of memory
36001 ** are available at pSpace.  The db pointer is used as a memory context
36002 ** for any subsequent allocations that need to occur.
36003 ** Return a pointer to the new RowSet object.
36004 **
36005 ** It must be the case that N is sufficient to make a Rowset.  If not
36006 ** an assertion fault occurs.
36007 ** 
36008 ** If N is larger than the minimum, use the surplus as an initial
36009 ** allocation of entries available to be filled.
36010 */
36011 SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3 *db, void *pSpace, unsigned int N){
36012   RowSet *p;
36013   assert( N >= ROUND8(sizeof(*p)) );
36014   p = pSpace;
36015   p->pChunk = 0;
36016   p->db = db;
36017   p->pEntry = 0;
36018   p->pLast = 0;
36019   p->pTree = 0;
36020   p->pFresh = (struct RowSetEntry*)(ROUND8(sizeof(*p)) + (char*)p);
36021   p->nFresh = (u16)((N - ROUND8(sizeof(*p)))/sizeof(struct RowSetEntry));
36022   p->isSorted = 1;
36023   p->iBatch = 0;
36024   return p;
36025 }
36026
36027 /*
36028 ** Deallocate all chunks from a RowSet.  This frees all memory that
36029 ** the RowSet has allocated over its lifetime.  This routine is
36030 ** the destructor for the RowSet.
36031 */
36032 SQLITE_PRIVATE void sqlite3RowSetClear(RowSet *p){
36033   struct RowSetChunk *pChunk, *pNextChunk;
36034   for(pChunk=p->pChunk; pChunk; pChunk = pNextChunk){
36035     pNextChunk = pChunk->pNextChunk;
36036     sqlite3DbFree(p->db, pChunk);
36037   }
36038   p->pChunk = 0;
36039   p->nFresh = 0;
36040   p->pEntry = 0;
36041   p->pLast = 0;
36042   p->pTree = 0;
36043   p->isSorted = 1;
36044 }
36045
36046 /*
36047 ** Insert a new value into a RowSet.
36048 **
36049 ** The mallocFailed flag of the database connection is set if a
36050 ** memory allocation fails.
36051 */
36052 SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet *p, i64 rowid){
36053   struct RowSetEntry *pEntry;  /* The new entry */
36054   struct RowSetEntry *pLast;   /* The last prior entry */
36055   assert( p!=0 );
36056   if( p->nFresh==0 ){
36057     struct RowSetChunk *pNew;
36058     pNew = sqlite3DbMallocRaw(p->db, sizeof(*pNew));
36059     if( pNew==0 ){
36060       return;
36061     }
36062     pNew->pNextChunk = p->pChunk;
36063     p->pChunk = pNew;
36064     p->pFresh = pNew->aEntry;
36065     p->nFresh = ROWSET_ENTRY_PER_CHUNK;
36066   }
36067   pEntry = p->pFresh++;
36068   p->nFresh--;
36069   pEntry->v = rowid;
36070   pEntry->pRight = 0;
36071   pLast = p->pLast;
36072   if( pLast ){
36073     if( p->isSorted && rowid<=pLast->v ){
36074       p->isSorted = 0;
36075     }
36076     pLast->pRight = pEntry;
36077   }else{
36078     assert( p->pEntry==0 ); /* Fires if INSERT after SMALLEST */
36079     p->pEntry = pEntry;
36080   }
36081   p->pLast = pEntry;
36082 }
36083
36084 /*
36085 ** Merge two lists of RowSetEntry objects.  Remove duplicates.
36086 **
36087 ** The input lists are connected via pRight pointers and are 
36088 ** assumed to each already be in sorted order.
36089 */
36090 static struct RowSetEntry *rowSetMerge(
36091   struct RowSetEntry *pA,    /* First sorted list to be merged */
36092   struct RowSetEntry *pB     /* Second sorted list to be merged */
36093 ){
36094   struct RowSetEntry head;
36095   struct RowSetEntry *pTail;
36096
36097   pTail = &head;
36098   while( pA && pB ){
36099     assert( pA->pRight==0 || pA->v<=pA->pRight->v );
36100     assert( pB->pRight==0 || pB->v<=pB->pRight->v );
36101     if( pA->v<pB->v ){
36102       pTail->pRight = pA;
36103       pA = pA->pRight;
36104       pTail = pTail->pRight;
36105     }else if( pB->v<pA->v ){
36106       pTail->pRight = pB;
36107       pB = pB->pRight;
36108       pTail = pTail->pRight;
36109     }else{
36110       pA = pA->pRight;
36111     }
36112   }
36113   if( pA ){
36114     assert( pA->pRight==0 || pA->v<=pA->pRight->v );
36115     pTail->pRight = pA;
36116   }else{
36117     assert( pB==0 || pB->pRight==0 || pB->v<=pB->pRight->v );
36118     pTail->pRight = pB;
36119   }
36120   return head.pRight;
36121 }
36122
36123 /*
36124 ** Sort all elements on the pEntry list of the RowSet into ascending order.
36125 */ 
36126 static void rowSetSort(RowSet *p){
36127   unsigned int i;
36128   struct RowSetEntry *pEntry;
36129   struct RowSetEntry *aBucket[40];
36130
36131   assert( p->isSorted==0 );
36132   memset(aBucket, 0, sizeof(aBucket));
36133   while( p->pEntry ){
36134     pEntry = p->pEntry;
36135     p->pEntry = pEntry->pRight;
36136     pEntry->pRight = 0;
36137     for(i=0; aBucket[i]; i++){
36138       pEntry = rowSetMerge(aBucket[i], pEntry);
36139       aBucket[i] = 0;
36140     }
36141     aBucket[i] = pEntry;
36142   }
36143   pEntry = 0;
36144   for(i=0; i<sizeof(aBucket)/sizeof(aBucket[0]); i++){
36145     pEntry = rowSetMerge(pEntry, aBucket[i]);
36146   }
36147   p->pEntry = pEntry;
36148   p->pLast = 0;
36149   p->isSorted = 1;
36150 }
36151
36152
36153 /*
36154 ** The input, pIn, is a binary tree (or subtree) of RowSetEntry objects.
36155 ** Convert this tree into a linked list connected by the pRight pointers
36156 ** and return pointers to the first and last elements of the new list.
36157 */
36158 static void rowSetTreeToList(
36159   struct RowSetEntry *pIn,         /* Root of the input tree */
36160   struct RowSetEntry **ppFirst,    /* Write head of the output list here */
36161   struct RowSetEntry **ppLast      /* Write tail of the output list here */
36162 ){
36163   assert( pIn!=0 );
36164   if( pIn->pLeft ){
36165     struct RowSetEntry *p;
36166     rowSetTreeToList(pIn->pLeft, ppFirst, &p);
36167     p->pRight = pIn;
36168   }else{
36169     *ppFirst = pIn;
36170   }
36171   if( pIn->pRight ){
36172     rowSetTreeToList(pIn->pRight, &pIn->pRight, ppLast);
36173   }else{
36174     *ppLast = pIn;
36175   }
36176   assert( (*ppLast)->pRight==0 );
36177 }
36178
36179
36180 /*
36181 ** Convert a sorted list of elements (connected by pRight) into a binary
36182 ** tree with depth of iDepth.  A depth of 1 means the tree contains a single
36183 ** node taken from the head of *ppList.  A depth of 2 means a tree with
36184 ** three nodes.  And so forth.
36185 **
36186 ** Use as many entries from the input list as required and update the
36187 ** *ppList to point to the unused elements of the list.  If the input
36188 ** list contains too few elements, then construct an incomplete tree
36189 ** and leave *ppList set to NULL.
36190 **
36191 ** Return a pointer to the root of the constructed binary tree.
36192 */
36193 static struct RowSetEntry *rowSetNDeepTree(
36194   struct RowSetEntry **ppList,
36195   int iDepth
36196 ){
36197   struct RowSetEntry *p;         /* Root of the new tree */
36198   struct RowSetEntry *pLeft;     /* Left subtree */
36199   if( *ppList==0 ){
36200     return 0;
36201   }
36202   if( iDepth==1 ){
36203     p = *ppList;
36204     *ppList = p->pRight;
36205     p->pLeft = p->pRight = 0;
36206     return p;
36207   }
36208   pLeft = rowSetNDeepTree(ppList, iDepth-1);
36209   p = *ppList;
36210   if( p==0 ){
36211     return pLeft;
36212   }
36213   p->pLeft = pLeft;
36214   *ppList = p->pRight;
36215   p->pRight = rowSetNDeepTree(ppList, iDepth-1);
36216   return p;
36217 }
36218
36219 /*
36220 ** Convert a sorted list of elements into a binary tree. Make the tree
36221 ** as deep as it needs to be in order to contain the entire list.
36222 */
36223 static struct RowSetEntry *rowSetListToTree(struct RowSetEntry *pList){
36224   int iDepth;           /* Depth of the tree so far */
36225   struct RowSetEntry *p;       /* Current tree root */
36226   struct RowSetEntry *pLeft;   /* Left subtree */
36227
36228   assert( pList!=0 );
36229   p = pList;
36230   pList = p->pRight;
36231   p->pLeft = p->pRight = 0;
36232   for(iDepth=1; pList; iDepth++){
36233     pLeft = p;
36234     p = pList;
36235     pList = p->pRight;
36236     p->pLeft = pLeft;
36237     p->pRight = rowSetNDeepTree(&pList, iDepth);
36238   }
36239   return p;
36240 }
36241
36242 /*
36243 ** Convert the list in p->pEntry into a sorted list if it is not
36244 ** sorted already.  If there is a binary tree on p->pTree, then
36245 ** convert it into a list too and merge it into the p->pEntry list.
36246 */
36247 static void rowSetToList(RowSet *p){
36248   if( !p->isSorted ){
36249     rowSetSort(p);
36250   }
36251   if( p->pTree ){
36252     struct RowSetEntry *pHead, *pTail;
36253     rowSetTreeToList(p->pTree, &pHead, &pTail);
36254     p->pTree = 0;
36255     p->pEntry = rowSetMerge(p->pEntry, pHead);
36256   }
36257 }
36258
36259 /*
36260 ** Extract the smallest element from the RowSet.
36261 ** Write the element into *pRowid.  Return 1 on success.  Return
36262 ** 0 if the RowSet is already empty.
36263 **
36264 ** After this routine has been called, the sqlite3RowSetInsert()
36265 ** routine may not be called again.  
36266 */
36267 SQLITE_PRIVATE int sqlite3RowSetNext(RowSet *p, i64 *pRowid){
36268   rowSetToList(p);
36269   if( p->pEntry ){
36270     *pRowid = p->pEntry->v;
36271     p->pEntry = p->pEntry->pRight;
36272     if( p->pEntry==0 ){
36273       sqlite3RowSetClear(p);
36274     }
36275     return 1;
36276   }else{
36277     return 0;
36278   }
36279 }
36280
36281 /*
36282 ** Check to see if element iRowid was inserted into the the rowset as
36283 ** part of any insert batch prior to iBatch.  Return 1 or 0.
36284 */
36285 SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, u8 iBatch, sqlite3_int64 iRowid){
36286   struct RowSetEntry *p;
36287   if( iBatch!=pRowSet->iBatch ){
36288     if( pRowSet->pEntry ){
36289       rowSetToList(pRowSet);
36290       pRowSet->pTree = rowSetListToTree(pRowSet->pEntry);
36291       pRowSet->pEntry = 0;
36292       pRowSet->pLast = 0;
36293     }
36294     pRowSet->iBatch = iBatch;
36295   }
36296   p = pRowSet->pTree;
36297   while( p ){
36298     if( p->v<iRowid ){
36299       p = p->pRight;
36300     }else if( p->v>iRowid ){
36301       p = p->pLeft;
36302     }else{
36303       return 1;
36304     }
36305   }
36306   return 0;
36307 }
36308
36309 /************** End of rowset.c **********************************************/
36310 /************** Begin file pager.c *******************************************/
36311 /*
36312 ** 2001 September 15
36313 **
36314 ** The author disclaims copyright to this source code.  In place of
36315 ** a legal notice, here is a blessing:
36316 **
36317 **    May you do good and not evil.
36318 **    May you find forgiveness for yourself and forgive others.
36319 **    May you share freely, never taking more than you give.
36320 **
36321 *************************************************************************
36322 ** This is the implementation of the page cache subsystem or "pager".
36323 ** 
36324 ** The pager is used to access a database disk file.  It implements
36325 ** atomic commit and rollback through the use of a journal file that
36326 ** is separate from the database file.  The pager also implements file
36327 ** locking to prevent two processes from writing the same database
36328 ** file simultaneously, or one process from reading the database while
36329 ** another is writing.
36330 */
36331 #ifndef SQLITE_OMIT_DISKIO
36332 /************** Include wal.h in the middle of pager.c ***********************/
36333 /************** Begin file wal.h *********************************************/
36334 /*
36335 ** 2010 February 1
36336 **
36337 ** The author disclaims copyright to this source code.  In place of
36338 ** a legal notice, here is a blessing:
36339 **
36340 **    May you do good and not evil.
36341 **    May you find forgiveness for yourself and forgive others.
36342 **    May you share freely, never taking more than you give.
36343 **
36344 *************************************************************************
36345 ** This header file defines the interface to the write-ahead logging 
36346 ** system. Refer to the comments below and the header comment attached to 
36347 ** the implementation of each function in log.c for further details.
36348 */
36349
36350 #ifndef _WAL_H_
36351 #define _WAL_H_
36352
36353
36354 #ifdef SQLITE_OMIT_WAL
36355 # define sqlite3WalOpen(x,y,z)                   0
36356 # define sqlite3WalClose(w,x,y,z)                0
36357 # define sqlite3WalBeginReadTransaction(y,z)     0
36358 # define sqlite3WalEndReadTransaction(z)
36359 # define sqlite3WalRead(v,w,x,y,z)               0
36360 # define sqlite3WalDbsize(y)                     0
36361 # define sqlite3WalBeginWriteTransaction(y)      0
36362 # define sqlite3WalEndWriteTransaction(x)        0
36363 # define sqlite3WalUndo(x,y,z)                   0
36364 # define sqlite3WalSavepoint(y,z)
36365 # define sqlite3WalSavepointUndo(y,z)            0
36366 # define sqlite3WalFrames(u,v,w,x,y,z)           0
36367 # define sqlite3WalCheckpoint(r,s,t,u,v,w,x,y,z) 0
36368 # define sqlite3WalCallback(z)                   0
36369 # define sqlite3WalExclusiveMode(y,z)            0
36370 # define sqlite3WalHeapMemory(z)                 0
36371 #else
36372
36373 #define WAL_SAVEPOINT_NDATA 4
36374
36375 /* Connection to a write-ahead log (WAL) file. 
36376 ** There is one object of this type for each pager. 
36377 */
36378 typedef struct Wal Wal;
36379
36380 /* Open and close a connection to a write-ahead log. */
36381 SQLITE_PRIVATE int sqlite3WalOpen(sqlite3_vfs*, sqlite3_file*, const char *zName, int, Wal**);
36382 SQLITE_PRIVATE int sqlite3WalClose(Wal *pWal, int sync_flags, int, u8 *);
36383
36384 /* Used by readers to open (lock) and close (unlock) a snapshot.  A 
36385 ** snapshot is like a read-transaction.  It is the state of the database
36386 ** at an instant in time.  sqlite3WalOpenSnapshot gets a read lock and
36387 ** preserves the current state even if the other threads or processes
36388 ** write to or checkpoint the WAL.  sqlite3WalCloseSnapshot() closes the
36389 ** transaction and releases the lock.
36390 */
36391 SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *);
36392 SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal);
36393
36394 /* Read a page from the write-ahead log, if it is present. */
36395 SQLITE_PRIVATE int sqlite3WalRead(Wal *pWal, Pgno pgno, int *pInWal, int nOut, u8 *pOut);
36396
36397 /* If the WAL is not empty, return the size of the database. */
36398 SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal);
36399
36400 /* Obtain or release the WRITER lock. */
36401 SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal);
36402 SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal);
36403
36404 /* Undo any frames written (but not committed) to the log */
36405 SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx);
36406
36407 /* Return an integer that records the current (uncommitted) write
36408 ** position in the WAL */
36409 SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData);
36410
36411 /* Move the write position of the WAL back to iFrame.  Called in
36412 ** response to a ROLLBACK TO command. */
36413 SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData);
36414
36415 /* Write a frame or frames to the log. */
36416 SQLITE_PRIVATE int sqlite3WalFrames(Wal *pWal, int, PgHdr *, Pgno, int, int);
36417
36418 /* Copy pages from the log to the database file */ 
36419 SQLITE_PRIVATE int sqlite3WalCheckpoint(
36420   Wal *pWal,                      /* Write-ahead log connection */
36421   int eMode,                      /* One of PASSIVE, FULL and RESTART */
36422   int (*xBusy)(void*),            /* Function to call when busy */
36423   void *pBusyArg,                 /* Context argument for xBusyHandler */
36424   int sync_flags,                 /* Flags to sync db file with (or 0) */
36425   int nBuf,                       /* Size of buffer nBuf */
36426   u8 *zBuf,                       /* Temporary buffer to use */
36427   int *pnLog,                     /* OUT: Number of frames in WAL */
36428   int *pnCkpt                     /* OUT: Number of backfilled frames in WAL */
36429 );
36430
36431 /* Return the value to pass to a sqlite3_wal_hook callback, the
36432 ** number of frames in the WAL at the point of the last commit since
36433 ** sqlite3WalCallback() was called.  If no commits have occurred since
36434 ** the last call, then return 0.
36435 */
36436 SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal);
36437
36438 /* Tell the wal layer that an EXCLUSIVE lock has been obtained (or released)
36439 ** by the pager layer on the database file.
36440 */
36441 SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op);
36442
36443 /* Return true if the argument is non-NULL and the WAL module is using
36444 ** heap-memory for the wal-index. Otherwise, if the argument is NULL or the
36445 ** WAL module is using shared-memory, return false. 
36446 */
36447 SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal);
36448
36449 #endif /* ifndef SQLITE_OMIT_WAL */
36450 #endif /* _WAL_H_ */
36451
36452 /************** End of wal.h *************************************************/
36453 /************** Continuing where we left off in pager.c **********************/
36454
36455
36456 /******************* NOTES ON THE DESIGN OF THE PAGER ************************
36457 **
36458 ** This comment block describes invariants that hold when using a rollback
36459 ** journal.  These invariants do not apply for journal_mode=WAL,
36460 ** journal_mode=MEMORY, or journal_mode=OFF.
36461 **
36462 ** Within this comment block, a page is deemed to have been synced
36463 ** automatically as soon as it is written when PRAGMA synchronous=OFF.
36464 ** Otherwise, the page is not synced until the xSync method of the VFS
36465 ** is called successfully on the file containing the page.
36466 **
36467 ** Definition:  A page of the database file is said to be "overwriteable" if
36468 ** one or more of the following are true about the page:
36469 ** 
36470 **     (a)  The original content of the page as it was at the beginning of
36471 **          the transaction has been written into the rollback journal and
36472 **          synced.
36473 ** 
36474 **     (b)  The page was a freelist leaf page at the start of the transaction.
36475 ** 
36476 **     (c)  The page number is greater than the largest page that existed in
36477 **          the database file at the start of the transaction.
36478 ** 
36479 ** (1) A page of the database file is never overwritten unless one of the
36480 **     following are true:
36481 ** 
36482 **     (a) The page and all other pages on the same sector are overwriteable.
36483 ** 
36484 **     (b) The atomic page write optimization is enabled, and the entire
36485 **         transaction other than the update of the transaction sequence
36486 **         number consists of a single page change.
36487 ** 
36488 ** (2) The content of a page written into the rollback journal exactly matches
36489 **     both the content in the database when the rollback journal was written
36490 **     and the content in the database at the beginning of the current
36491 **     transaction.
36492 ** 
36493 ** (3) Writes to the database file are an integer multiple of the page size
36494 **     in length and are aligned on a page boundary.
36495 ** 
36496 ** (4) Reads from the database file are either aligned on a page boundary and
36497 **     an integer multiple of the page size in length or are taken from the
36498 **     first 100 bytes of the database file.
36499 ** 
36500 ** (5) All writes to the database file are synced prior to the rollback journal
36501 **     being deleted, truncated, or zeroed.
36502 ** 
36503 ** (6) If a master journal file is used, then all writes to the database file
36504 **     are synced prior to the master journal being deleted.
36505 ** 
36506 ** Definition: Two databases (or the same database at two points it time)
36507 ** are said to be "logically equivalent" if they give the same answer to
36508 ** all queries.  Note in particular the the content of freelist leaf
36509 ** pages can be changed arbitarily without effecting the logical equivalence
36510 ** of the database.
36511 ** 
36512 ** (7) At any time, if any subset, including the empty set and the total set,
36513 **     of the unsynced changes to a rollback journal are removed and the 
36514 **     journal is rolled back, the resulting database file will be logical
36515 **     equivalent to the database file at the beginning of the transaction.
36516 ** 
36517 ** (8) When a transaction is rolled back, the xTruncate method of the VFS
36518 **     is called to restore the database file to the same size it was at
36519 **     the beginning of the transaction.  (In some VFSes, the xTruncate
36520 **     method is a no-op, but that does not change the fact the SQLite will
36521 **     invoke it.)
36522 ** 
36523 ** (9) Whenever the database file is modified, at least one bit in the range
36524 **     of bytes from 24 through 39 inclusive will be changed prior to releasing
36525 **     the EXCLUSIVE lock, thus signaling other connections on the same
36526 **     database to flush their caches.
36527 **
36528 ** (10) The pattern of bits in bytes 24 through 39 shall not repeat in less
36529 **      than one billion transactions.
36530 **
36531 ** (11) A database file is well-formed at the beginning and at the conclusion
36532 **      of every transaction.
36533 **
36534 ** (12) An EXCLUSIVE lock is held on the database file when writing to
36535 **      the database file.
36536 **
36537 ** (13) A SHARED lock is held on the database file while reading any
36538 **      content out of the database file.
36539 **
36540 ******************************************************************************/
36541
36542 /*
36543 ** Macros for troubleshooting.  Normally turned off
36544 */
36545 #if 0
36546 int sqlite3PagerTrace=1;  /* True to enable tracing */
36547 #define sqlite3DebugPrintf printf
36548 #define PAGERTRACE(X)     if( sqlite3PagerTrace ){ sqlite3DebugPrintf X; }
36549 #else
36550 #define PAGERTRACE(X)
36551 #endif
36552
36553 /*
36554 ** The following two macros are used within the PAGERTRACE() macros above
36555 ** to print out file-descriptors. 
36556 **
36557 ** PAGERID() takes a pointer to a Pager struct as its argument. The
36558 ** associated file-descriptor is returned. FILEHANDLEID() takes an sqlite3_file
36559 ** struct as its argument.
36560 */
36561 #define PAGERID(p) ((int)(p->fd))
36562 #define FILEHANDLEID(fd) ((int)fd)
36563
36564 /*
36565 ** The Pager.eState variable stores the current 'state' of a pager. A
36566 ** pager may be in any one of the seven states shown in the following
36567 ** state diagram.
36568 **
36569 **                            OPEN <------+------+
36570 **                              |         |      |
36571 **                              V         |      |
36572 **               +---------> READER-------+      |
36573 **               |              |                |
36574 **               |              V                |
36575 **               |<-------WRITER_LOCKED------> ERROR
36576 **               |              |                ^  
36577 **               |              V                |
36578 **               |<------WRITER_CACHEMOD-------->|
36579 **               |              |                |
36580 **               |              V                |
36581 **               |<-------WRITER_DBMOD---------->|
36582 **               |              |                |
36583 **               |              V                |
36584 **               +<------WRITER_FINISHED-------->+
36585 **
36586 **
36587 ** List of state transitions and the C [function] that performs each:
36588 ** 
36589 **   OPEN              -> READER              [sqlite3PagerSharedLock]
36590 **   READER            -> OPEN                [pager_unlock]
36591 **
36592 **   READER            -> WRITER_LOCKED       [sqlite3PagerBegin]
36593 **   WRITER_LOCKED     -> WRITER_CACHEMOD     [pager_open_journal]
36594 **   WRITER_CACHEMOD   -> WRITER_DBMOD        [syncJournal]
36595 **   WRITER_DBMOD      -> WRITER_FINISHED     [sqlite3PagerCommitPhaseOne]
36596 **   WRITER_***        -> READER              [pager_end_transaction]
36597 **
36598 **   WRITER_***        -> ERROR               [pager_error]
36599 **   ERROR             -> OPEN                [pager_unlock]
36600 ** 
36601 **
36602 **  OPEN:
36603 **
36604 **    The pager starts up in this state. Nothing is guaranteed in this
36605 **    state - the file may or may not be locked and the database size is
36606 **    unknown. The database may not be read or written.
36607 **
36608 **    * No read or write transaction is active.
36609 **    * Any lock, or no lock at all, may be held on the database file.
36610 **    * The dbSize, dbOrigSize and dbFileSize variables may not be trusted.
36611 **
36612 **  READER:
36613 **
36614 **    In this state all the requirements for reading the database in 
36615 **    rollback (non-WAL) mode are met. Unless the pager is (or recently
36616 **    was) in exclusive-locking mode, a user-level read transaction is 
36617 **    open. The database size is known in this state.
36618 **
36619 **    A connection running with locking_mode=normal enters this state when
36620 **    it opens a read-transaction on the database and returns to state
36621 **    OPEN after the read-transaction is completed. However a connection
36622 **    running in locking_mode=exclusive (including temp databases) remains in
36623 **    this state even after the read-transaction is closed. The only way
36624 **    a locking_mode=exclusive connection can transition from READER to OPEN
36625 **    is via the ERROR state (see below).
36626 ** 
36627 **    * A read transaction may be active (but a write-transaction cannot).
36628 **    * A SHARED or greater lock is held on the database file.
36629 **    * The dbSize variable may be trusted (even if a user-level read 
36630 **      transaction is not active). The dbOrigSize and dbFileSize variables
36631 **      may not be trusted at this point.
36632 **    * If the database is a WAL database, then the WAL connection is open.
36633 **    * Even if a read-transaction is not open, it is guaranteed that 
36634 **      there is no hot-journal in the file-system.
36635 **
36636 **  WRITER_LOCKED:
36637 **
36638 **    The pager moves to this state from READER when a write-transaction
36639 **    is first opened on the database. In WRITER_LOCKED state, all locks 
36640 **    required to start a write-transaction are held, but no actual 
36641 **    modifications to the cache or database have taken place.
36642 **
36643 **    In rollback mode, a RESERVED or (if the transaction was opened with 
36644 **    BEGIN EXCLUSIVE) EXCLUSIVE lock is obtained on the database file when
36645 **    moving to this state, but the journal file is not written to or opened 
36646 **    to in this state. If the transaction is committed or rolled back while 
36647 **    in WRITER_LOCKED state, all that is required is to unlock the database 
36648 **    file.
36649 **
36650 **    IN WAL mode, WalBeginWriteTransaction() is called to lock the log file.
36651 **    If the connection is running with locking_mode=exclusive, an attempt
36652 **    is made to obtain an EXCLUSIVE lock on the database file.
36653 **
36654 **    * A write transaction is active.
36655 **    * If the connection is open in rollback-mode, a RESERVED or greater 
36656 **      lock is held on the database file.
36657 **    * If the connection is open in WAL-mode, a WAL write transaction
36658 **      is open (i.e. sqlite3WalBeginWriteTransaction() has been successfully
36659 **      called).
36660 **    * The dbSize, dbOrigSize and dbFileSize variables are all valid.
36661 **    * The contents of the pager cache have not been modified.
36662 **    * The journal file may or may not be open.
36663 **    * Nothing (not even the first header) has been written to the journal.
36664 **
36665 **  WRITER_CACHEMOD:
36666 **
36667 **    A pager moves from WRITER_LOCKED state to this state when a page is
36668 **    first modified by the upper layer. In rollback mode the journal file
36669 **    is opened (if it is not already open) and a header written to the
36670 **    start of it. The database file on disk has not been modified.
36671 **
36672 **    * A write transaction is active.
36673 **    * A RESERVED or greater lock is held on the database file.
36674 **    * The journal file is open and the first header has been written 
36675 **      to it, but the header has not been synced to disk.
36676 **    * The contents of the page cache have been modified.
36677 **
36678 **  WRITER_DBMOD:
36679 **
36680 **    The pager transitions from WRITER_CACHEMOD into WRITER_DBMOD state
36681 **    when it modifies the contents of the database file. WAL connections
36682 **    never enter this state (since they do not modify the database file,
36683 **    just the log file).
36684 **
36685 **    * A write transaction is active.
36686 **    * An EXCLUSIVE or greater lock is held on the database file.
36687 **    * The journal file is open and the first header has been written 
36688 **      and synced to disk.
36689 **    * The contents of the page cache have been modified (and possibly
36690 **      written to disk).
36691 **
36692 **  WRITER_FINISHED:
36693 **
36694 **    It is not possible for a WAL connection to enter this state.
36695 **
36696 **    A rollback-mode pager changes to WRITER_FINISHED state from WRITER_DBMOD
36697 **    state after the entire transaction has been successfully written into the
36698 **    database file. In this state the transaction may be committed simply
36699 **    by finalizing the journal file. Once in WRITER_FINISHED state, it is 
36700 **    not possible to modify the database further. At this point, the upper 
36701 **    layer must either commit or rollback the transaction.
36702 **
36703 **    * A write transaction is active.
36704 **    * An EXCLUSIVE or greater lock is held on the database file.
36705 **    * All writing and syncing of journal and database data has finished.
36706 **      If no error occured, all that remains is to finalize the journal to
36707 **      commit the transaction. If an error did occur, the caller will need
36708 **      to rollback the transaction. 
36709 **
36710 **  ERROR:
36711 **
36712 **    The ERROR state is entered when an IO or disk-full error (including
36713 **    SQLITE_IOERR_NOMEM) occurs at a point in the code that makes it 
36714 **    difficult to be sure that the in-memory pager state (cache contents, 
36715 **    db size etc.) are consistent with the contents of the file-system.
36716 **
36717 **    Temporary pager files may enter the ERROR state, but in-memory pagers
36718 **    cannot.
36719 **
36720 **    For example, if an IO error occurs while performing a rollback, 
36721 **    the contents of the page-cache may be left in an inconsistent state.
36722 **    At this point it would be dangerous to change back to READER state
36723 **    (as usually happens after a rollback). Any subsequent readers might
36724 **    report database corruption (due to the inconsistent cache), and if
36725 **    they upgrade to writers, they may inadvertently corrupt the database
36726 **    file. To avoid this hazard, the pager switches into the ERROR state
36727 **    instead of READER following such an error.
36728 **
36729 **    Once it has entered the ERROR state, any attempt to use the pager
36730 **    to read or write data returns an error. Eventually, once all 
36731 **    outstanding transactions have been abandoned, the pager is able to
36732 **    transition back to OPEN state, discarding the contents of the 
36733 **    page-cache and any other in-memory state at the same time. Everything
36734 **    is reloaded from disk (and, if necessary, hot-journal rollback peformed)
36735 **    when a read-transaction is next opened on the pager (transitioning
36736 **    the pager into READER state). At that point the system has recovered 
36737 **    from the error.
36738 **
36739 **    Specifically, the pager jumps into the ERROR state if:
36740 **
36741 **      1. An error occurs while attempting a rollback. This happens in
36742 **         function sqlite3PagerRollback().
36743 **
36744 **      2. An error occurs while attempting to finalize a journal file
36745 **         following a commit in function sqlite3PagerCommitPhaseTwo().
36746 **
36747 **      3. An error occurs while attempting to write to the journal or
36748 **         database file in function pagerStress() in order to free up
36749 **         memory.
36750 **
36751 **    In other cases, the error is returned to the b-tree layer. The b-tree
36752 **    layer then attempts a rollback operation. If the error condition 
36753 **    persists, the pager enters the ERROR state via condition (1) above.
36754 **
36755 **    Condition (3) is necessary because it can be triggered by a read-only
36756 **    statement executed within a transaction. In this case, if the error
36757 **    code were simply returned to the user, the b-tree layer would not
36758 **    automatically attempt a rollback, as it assumes that an error in a
36759 **    read-only statement cannot leave the pager in an internally inconsistent 
36760 **    state.
36761 **
36762 **    * The Pager.errCode variable is set to something other than SQLITE_OK.
36763 **    * There are one or more outstanding references to pages (after the
36764 **      last reference is dropped the pager should move back to OPEN state).
36765 **    * The pager is not an in-memory pager.
36766 **    
36767 **
36768 ** Notes:
36769 **
36770 **   * A pager is never in WRITER_DBMOD or WRITER_FINISHED state if the
36771 **     connection is open in WAL mode. A WAL connection is always in one
36772 **     of the first four states.
36773 **
36774 **   * Normally, a connection open in exclusive mode is never in PAGER_OPEN
36775 **     state. There are two exceptions: immediately after exclusive-mode has
36776 **     been turned on (and before any read or write transactions are 
36777 **     executed), and when the pager is leaving the "error state".
36778 **
36779 **   * See also: assert_pager_state().
36780 */
36781 #define PAGER_OPEN                  0
36782 #define PAGER_READER                1
36783 #define PAGER_WRITER_LOCKED         2
36784 #define PAGER_WRITER_CACHEMOD       3
36785 #define PAGER_WRITER_DBMOD          4
36786 #define PAGER_WRITER_FINISHED       5
36787 #define PAGER_ERROR                 6
36788
36789 /*
36790 ** The Pager.eLock variable is almost always set to one of the 
36791 ** following locking-states, according to the lock currently held on
36792 ** the database file: NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK.
36793 ** This variable is kept up to date as locks are taken and released by
36794 ** the pagerLockDb() and pagerUnlockDb() wrappers.
36795 **
36796 ** If the VFS xLock() or xUnlock() returns an error other than SQLITE_BUSY
36797 ** (i.e. one of the SQLITE_IOERR subtypes), it is not clear whether or not
36798 ** the operation was successful. In these circumstances pagerLockDb() and
36799 ** pagerUnlockDb() take a conservative approach - eLock is always updated
36800 ** when unlocking the file, and only updated when locking the file if the
36801 ** VFS call is successful. This way, the Pager.eLock variable may be set
36802 ** to a less exclusive (lower) value than the lock that is actually held
36803 ** at the system level, but it is never set to a more exclusive value.
36804 **
36805 ** This is usually safe. If an xUnlock fails or appears to fail, there may 
36806 ** be a few redundant xLock() calls or a lock may be held for longer than
36807 ** required, but nothing really goes wrong.
36808 **
36809 ** The exception is when the database file is unlocked as the pager moves
36810 ** from ERROR to OPEN state. At this point there may be a hot-journal file 
36811 ** in the file-system that needs to be rolled back (as part of a OPEN->SHARED
36812 ** transition, by the same pager or any other). If the call to xUnlock()
36813 ** fails at this point and the pager is left holding an EXCLUSIVE lock, this
36814 ** can confuse the call to xCheckReservedLock() call made later as part
36815 ** of hot-journal detection.
36816 **
36817 ** xCheckReservedLock() is defined as returning true "if there is a RESERVED 
36818 ** lock held by this process or any others". So xCheckReservedLock may 
36819 ** return true because the caller itself is holding an EXCLUSIVE lock (but
36820 ** doesn't know it because of a previous error in xUnlock). If this happens
36821 ** a hot-journal may be mistaken for a journal being created by an active
36822 ** transaction in another process, causing SQLite to read from the database
36823 ** without rolling it back.
36824 **
36825 ** To work around this, if a call to xUnlock() fails when unlocking the
36826 ** database in the ERROR state, Pager.eLock is set to UNKNOWN_LOCK. It
36827 ** is only changed back to a real locking state after a successful call
36828 ** to xLock(EXCLUSIVE). Also, the code to do the OPEN->SHARED state transition
36829 ** omits the check for a hot-journal if Pager.eLock is set to UNKNOWN_LOCK 
36830 ** lock. Instead, it assumes a hot-journal exists and obtains an EXCLUSIVE
36831 ** lock on the database file before attempting to roll it back. See function
36832 ** PagerSharedLock() for more detail.
36833 **
36834 ** Pager.eLock may only be set to UNKNOWN_LOCK when the pager is in 
36835 ** PAGER_OPEN state.
36836 */
36837 #define UNKNOWN_LOCK                (EXCLUSIVE_LOCK+1)
36838
36839 /*
36840 ** A macro used for invoking the codec if there is one
36841 */
36842 #ifdef SQLITE_HAS_CODEC
36843 # define CODEC1(P,D,N,X,E) \
36844     if( P->xCodec && P->xCodec(P->pCodec,D,N,X)==0 ){ E; }
36845 # define CODEC2(P,D,N,X,E,O) \
36846     if( P->xCodec==0 ){ O=(char*)D; }else \
36847     if( (O=(char*)(P->xCodec(P->pCodec,D,N,X)))==0 ){ E; }
36848 #else
36849 # define CODEC1(P,D,N,X,E)   /* NO-OP */
36850 # define CODEC2(P,D,N,X,E,O) O=(char*)D
36851 #endif
36852
36853 /*
36854 ** The maximum allowed sector size. 64KiB. If the xSectorsize() method 
36855 ** returns a value larger than this, then MAX_SECTOR_SIZE is used instead.
36856 ** This could conceivably cause corruption following a power failure on
36857 ** such a system. This is currently an undocumented limit.
36858 */
36859 #define MAX_SECTOR_SIZE 0x10000
36860
36861 /*
36862 ** An instance of the following structure is allocated for each active
36863 ** savepoint and statement transaction in the system. All such structures
36864 ** are stored in the Pager.aSavepoint[] array, which is allocated and
36865 ** resized using sqlite3Realloc().
36866 **
36867 ** When a savepoint is created, the PagerSavepoint.iHdrOffset field is
36868 ** set to 0. If a journal-header is written into the main journal while
36869 ** the savepoint is active, then iHdrOffset is set to the byte offset 
36870 ** immediately following the last journal record written into the main
36871 ** journal before the journal-header. This is required during savepoint
36872 ** rollback (see pagerPlaybackSavepoint()).
36873 */
36874 typedef struct PagerSavepoint PagerSavepoint;
36875 struct PagerSavepoint {
36876   i64 iOffset;                 /* Starting offset in main journal */
36877   i64 iHdrOffset;              /* See above */
36878   Bitvec *pInSavepoint;        /* Set of pages in this savepoint */
36879   Pgno nOrig;                  /* Original number of pages in file */
36880   Pgno iSubRec;                /* Index of first record in sub-journal */
36881 #ifndef SQLITE_OMIT_WAL
36882   u32 aWalData[WAL_SAVEPOINT_NDATA];        /* WAL savepoint context */
36883 #endif
36884 };
36885
36886 /*
36887 ** A open page cache is an instance of struct Pager. A description of
36888 ** some of the more important member variables follows:
36889 **
36890 ** eState
36891 **
36892 **   The current 'state' of the pager object. See the comment and state
36893 **   diagram above for a description of the pager state.
36894 **
36895 ** eLock
36896 **
36897 **   For a real on-disk database, the current lock held on the database file -
36898 **   NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK.
36899 **
36900 **   For a temporary or in-memory database (neither of which require any
36901 **   locks), this variable is always set to EXCLUSIVE_LOCK. Since such
36902 **   databases always have Pager.exclusiveMode==1, this tricks the pager
36903 **   logic into thinking that it already has all the locks it will ever
36904 **   need (and no reason to release them).
36905 **
36906 **   In some (obscure) circumstances, this variable may also be set to
36907 **   UNKNOWN_LOCK. See the comment above the #define of UNKNOWN_LOCK for
36908 **   details.
36909 **
36910 ** changeCountDone
36911 **
36912 **   This boolean variable is used to make sure that the change-counter 
36913 **   (the 4-byte header field at byte offset 24 of the database file) is 
36914 **   not updated more often than necessary. 
36915 **
36916 **   It is set to true when the change-counter field is updated, which 
36917 **   can only happen if an exclusive lock is held on the database file.
36918 **   It is cleared (set to false) whenever an exclusive lock is 
36919 **   relinquished on the database file. Each time a transaction is committed,
36920 **   The changeCountDone flag is inspected. If it is true, the work of
36921 **   updating the change-counter is omitted for the current transaction.
36922 **
36923 **   This mechanism means that when running in exclusive mode, a connection 
36924 **   need only update the change-counter once, for the first transaction
36925 **   committed.
36926 **
36927 ** setMaster
36928 **
36929 **   When PagerCommitPhaseOne() is called to commit a transaction, it may
36930 **   (or may not) specify a master-journal name to be written into the 
36931 **   journal file before it is synced to disk.
36932 **
36933 **   Whether or not a journal file contains a master-journal pointer affects 
36934 **   the way in which the journal file is finalized after the transaction is 
36935 **   committed or rolled back when running in "journal_mode=PERSIST" mode.
36936 **   If a journal file does not contain a master-journal pointer, it is
36937 **   finalized by overwriting the first journal header with zeroes. If
36938 **   it does contain a master-journal pointer the journal file is finalized 
36939 **   by truncating it to zero bytes, just as if the connection were 
36940 **   running in "journal_mode=truncate" mode.
36941 **
36942 **   Journal files that contain master journal pointers cannot be finalized
36943 **   simply by overwriting the first journal-header with zeroes, as the
36944 **   master journal pointer could interfere with hot-journal rollback of any
36945 **   subsequently interrupted transaction that reuses the journal file.
36946 **
36947 **   The flag is cleared as soon as the journal file is finalized (either
36948 **   by PagerCommitPhaseTwo or PagerRollback). If an IO error prevents the
36949 **   journal file from being successfully finalized, the setMaster flag
36950 **   is cleared anyway (and the pager will move to ERROR state).
36951 **
36952 ** doNotSpill, doNotSyncSpill
36953 **
36954 **   These two boolean variables control the behaviour of cache-spills
36955 **   (calls made by the pcache module to the pagerStress() routine to
36956 **   write cached data to the file-system in order to free up memory).
36957 **
36958 **   When doNotSpill is non-zero, writing to the database from pagerStress()
36959 **   is disabled altogether. This is done in a very obscure case that
36960 **   comes up during savepoint rollback that requires the pcache module
36961 **   to allocate a new page to prevent the journal file from being written
36962 **   while it is being traversed by code in pager_playback().
36963 ** 
36964 **   If doNotSyncSpill is non-zero, writing to the database from pagerStress()
36965 **   is permitted, but syncing the journal file is not. This flag is set
36966 **   by sqlite3PagerWrite() when the file-system sector-size is larger than
36967 **   the database page-size in order to prevent a journal sync from happening 
36968 **   in between the journalling of two pages on the same sector. 
36969 **
36970 ** subjInMemory
36971 **
36972 **   This is a boolean variable. If true, then any required sub-journal
36973 **   is opened as an in-memory journal file. If false, then in-memory
36974 **   sub-journals are only used for in-memory pager files.
36975 **
36976 **   This variable is updated by the upper layer each time a new 
36977 **   write-transaction is opened.
36978 **
36979 ** dbSize, dbOrigSize, dbFileSize
36980 **
36981 **   Variable dbSize is set to the number of pages in the database file.
36982 **   It is valid in PAGER_READER and higher states (all states except for
36983 **   OPEN and ERROR). 
36984 **
36985 **   dbSize is set based on the size of the database file, which may be 
36986 **   larger than the size of the database (the value stored at offset
36987 **   28 of the database header by the btree). If the size of the file
36988 **   is not an integer multiple of the page-size, the value stored in
36989 **   dbSize is rounded down (i.e. a 5KB file with 2K page-size has dbSize==2).
36990 **   Except, any file that is greater than 0 bytes in size is considered
36991 **   to have at least one page. (i.e. a 1KB file with 2K page-size leads
36992 **   to dbSize==1).
36993 **
36994 **   During a write-transaction, if pages with page-numbers greater than
36995 **   dbSize are modified in the cache, dbSize is updated accordingly.
36996 **   Similarly, if the database is truncated using PagerTruncateImage(), 
36997 **   dbSize is updated.
36998 **
36999 **   Variables dbOrigSize and dbFileSize are valid in states 
37000 **   PAGER_WRITER_LOCKED and higher. dbOrigSize is a copy of the dbSize
37001 **   variable at the start of the transaction. It is used during rollback,
37002 **   and to determine whether or not pages need to be journalled before
37003 **   being modified.
37004 **
37005 **   Throughout a write-transaction, dbFileSize contains the size of
37006 **   the file on disk in pages. It is set to a copy of dbSize when the
37007 **   write-transaction is first opened, and updated when VFS calls are made
37008 **   to write or truncate the database file on disk. 
37009 **
37010 **   The only reason the dbFileSize variable is required is to suppress 
37011 **   unnecessary calls to xTruncate() after committing a transaction. If, 
37012 **   when a transaction is committed, the dbFileSize variable indicates 
37013 **   that the database file is larger than the database image (Pager.dbSize), 
37014 **   pager_truncate() is called. The pager_truncate() call uses xFilesize()
37015 **   to measure the database file on disk, and then truncates it if required.
37016 **   dbFileSize is not used when rolling back a transaction. In this case
37017 **   pager_truncate() is called unconditionally (which means there may be
37018 **   a call to xFilesize() that is not strictly required). In either case,
37019 **   pager_truncate() may cause the file to become smaller or larger.
37020 **
37021 ** dbHintSize
37022 **
37023 **   The dbHintSize variable is used to limit the number of calls made to
37024 **   the VFS xFileControl(FCNTL_SIZE_HINT) method. 
37025 **
37026 **   dbHintSize is set to a copy of the dbSize variable when a
37027 **   write-transaction is opened (at the same time as dbFileSize and
37028 **   dbOrigSize). If the xFileControl(FCNTL_SIZE_HINT) method is called,
37029 **   dbHintSize is increased to the number of pages that correspond to the
37030 **   size-hint passed to the method call. See pager_write_pagelist() for 
37031 **   details.
37032 **
37033 ** errCode
37034 **
37035 **   The Pager.errCode variable is only ever used in PAGER_ERROR state. It
37036 **   is set to zero in all other states. In PAGER_ERROR state, Pager.errCode 
37037 **   is always set to SQLITE_FULL, SQLITE_IOERR or one of the SQLITE_IOERR_XXX 
37038 **   sub-codes.
37039 */
37040 struct Pager {
37041   sqlite3_vfs *pVfs;          /* OS functions to use for IO */
37042   u8 exclusiveMode;           /* Boolean. True if locking_mode==EXCLUSIVE */
37043   u8 journalMode;             /* One of the PAGER_JOURNALMODE_* values */
37044   u8 useJournal;              /* Use a rollback journal on this file */
37045   u8 noReadlock;              /* Do not bother to obtain readlocks */
37046   u8 noSync;                  /* Do not sync the journal if true */
37047   u8 fullSync;                /* Do extra syncs of the journal for robustness */
37048   u8 ckptSyncFlags;           /* SYNC_NORMAL or SYNC_FULL for checkpoint */
37049   u8 syncFlags;               /* SYNC_NORMAL or SYNC_FULL otherwise */
37050   u8 tempFile;                /* zFilename is a temporary file */
37051   u8 readOnly;                /* True for a read-only database */
37052   u8 memDb;                   /* True to inhibit all file I/O */
37053
37054   /**************************************************************************
37055   ** The following block contains those class members that change during
37056   ** routine opertion.  Class members not in this block are either fixed
37057   ** when the pager is first created or else only change when there is a
37058   ** significant mode change (such as changing the page_size, locking_mode,
37059   ** or the journal_mode).  From another view, these class members describe
37060   ** the "state" of the pager, while other class members describe the
37061   ** "configuration" of the pager.
37062   */
37063   u8 eState;                  /* Pager state (OPEN, READER, WRITER_LOCKED..) */
37064   u8 eLock;                   /* Current lock held on database file */
37065   u8 changeCountDone;         /* Set after incrementing the change-counter */
37066   u8 setMaster;               /* True if a m-j name has been written to jrnl */
37067   u8 doNotSpill;              /* Do not spill the cache when non-zero */
37068   u8 doNotSyncSpill;          /* Do not do a spill that requires jrnl sync */
37069   u8 subjInMemory;            /* True to use in-memory sub-journals */
37070   Pgno dbSize;                /* Number of pages in the database */
37071   Pgno dbOrigSize;            /* dbSize before the current transaction */
37072   Pgno dbFileSize;            /* Number of pages in the database file */
37073   Pgno dbHintSize;            /* Value passed to FCNTL_SIZE_HINT call */
37074   int errCode;                /* One of several kinds of errors */
37075   int nRec;                   /* Pages journalled since last j-header written */
37076   u32 cksumInit;              /* Quasi-random value added to every checksum */
37077   u32 nSubRec;                /* Number of records written to sub-journal */
37078   Bitvec *pInJournal;         /* One bit for each page in the database file */
37079   sqlite3_file *fd;           /* File descriptor for database */
37080   sqlite3_file *jfd;          /* File descriptor for main journal */
37081   sqlite3_file *sjfd;         /* File descriptor for sub-journal */
37082   i64 journalOff;             /* Current write offset in the journal file */
37083   i64 journalHdr;             /* Byte offset to previous journal header */
37084   sqlite3_backup *pBackup;    /* Pointer to list of ongoing backup processes */
37085   PagerSavepoint *aSavepoint; /* Array of active savepoints */
37086   int nSavepoint;             /* Number of elements in aSavepoint[] */
37087   char dbFileVers[16];        /* Changes whenever database file changes */
37088   /*
37089   ** End of the routinely-changing class members
37090   ***************************************************************************/
37091
37092   u16 nExtra;                 /* Add this many bytes to each in-memory page */
37093   i16 nReserve;               /* Number of unused bytes at end of each page */
37094   u32 vfsFlags;               /* Flags for sqlite3_vfs.xOpen() */
37095   u32 sectorSize;             /* Assumed sector size during rollback */
37096   int pageSize;               /* Number of bytes in a page */
37097   Pgno mxPgno;                /* Maximum allowed size of the database */
37098   i64 journalSizeLimit;       /* Size limit for persistent journal files */
37099   char *zFilename;            /* Name of the database file */
37100   char *zJournal;             /* Name of the journal file */
37101   int (*xBusyHandler)(void*); /* Function to call when busy */
37102   void *pBusyHandlerArg;      /* Context argument for xBusyHandler */
37103 #ifdef SQLITE_TEST
37104   int nHit, nMiss;            /* Cache hits and missing */
37105   int nRead, nWrite;          /* Database pages read/written */
37106 #endif
37107   void (*xReiniter)(DbPage*); /* Call this routine when reloading pages */
37108 #ifdef SQLITE_HAS_CODEC
37109   void *(*xCodec)(void*,void*,Pgno,int); /* Routine for en/decoding data */
37110   void (*xCodecSizeChng)(void*,int,int); /* Notify of page size changes */
37111   void (*xCodecFree)(void*);             /* Destructor for the codec */
37112   void *pCodec;               /* First argument to xCodec... methods */
37113 #endif
37114   char *pTmpSpace;            /* Pager.pageSize bytes of space for tmp use */
37115   PCache *pPCache;            /* Pointer to page cache object */
37116 #ifndef SQLITE_OMIT_WAL
37117   Wal *pWal;                  /* Write-ahead log used by "journal_mode=wal" */
37118   char *zWal;                 /* File name for write-ahead log */
37119 #endif
37120 };
37121
37122 /*
37123 ** The following global variables hold counters used for
37124 ** testing purposes only.  These variables do not exist in
37125 ** a non-testing build.  These variables are not thread-safe.
37126 */
37127 #ifdef SQLITE_TEST
37128 SQLITE_API int sqlite3_pager_readdb_count = 0;    /* Number of full pages read from DB */
37129 SQLITE_API int sqlite3_pager_writedb_count = 0;   /* Number of full pages written to DB */
37130 SQLITE_API int sqlite3_pager_writej_count = 0;    /* Number of pages written to journal */
37131 # define PAGER_INCR(v)  v++
37132 #else
37133 # define PAGER_INCR(v)
37134 #endif
37135
37136
37137
37138 /*
37139 ** Journal files begin with the following magic string.  The data
37140 ** was obtained from /dev/random.  It is used only as a sanity check.
37141 **
37142 ** Since version 2.8.0, the journal format contains additional sanity
37143 ** checking information.  If the power fails while the journal is being
37144 ** written, semi-random garbage data might appear in the journal
37145 ** file after power is restored.  If an attempt is then made
37146 ** to roll the journal back, the database could be corrupted.  The additional
37147 ** sanity checking data is an attempt to discover the garbage in the
37148 ** journal and ignore it.
37149 **
37150 ** The sanity checking information for the new journal format consists
37151 ** of a 32-bit checksum on each page of data.  The checksum covers both
37152 ** the page number and the pPager->pageSize bytes of data for the page.
37153 ** This cksum is initialized to a 32-bit random value that appears in the
37154 ** journal file right after the header.  The random initializer is important,
37155 ** because garbage data that appears at the end of a journal is likely
37156 ** data that was once in other files that have now been deleted.  If the
37157 ** garbage data came from an obsolete journal file, the checksums might
37158 ** be correct.  But by initializing the checksum to random value which
37159 ** is different for every journal, we minimize that risk.
37160 */
37161 static const unsigned char aJournalMagic[] = {
37162   0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd7,
37163 };
37164
37165 /*
37166 ** The size of the of each page record in the journal is given by
37167 ** the following macro.
37168 */
37169 #define JOURNAL_PG_SZ(pPager)  ((pPager->pageSize) + 8)
37170
37171 /*
37172 ** The journal header size for this pager. This is usually the same 
37173 ** size as a single disk sector. See also setSectorSize().
37174 */
37175 #define JOURNAL_HDR_SZ(pPager) (pPager->sectorSize)
37176
37177 /*
37178 ** The macro MEMDB is true if we are dealing with an in-memory database.
37179 ** We do this as a macro so that if the SQLITE_OMIT_MEMORYDB macro is set,
37180 ** the value of MEMDB will be a constant and the compiler will optimize
37181 ** out code that would never execute.
37182 */
37183 #ifdef SQLITE_OMIT_MEMORYDB
37184 # define MEMDB 0
37185 #else
37186 # define MEMDB pPager->memDb
37187 #endif
37188
37189 /*
37190 ** The maximum legal page number is (2^31 - 1).
37191 */
37192 #define PAGER_MAX_PGNO 2147483647
37193
37194 /*
37195 ** The argument to this macro is a file descriptor (type sqlite3_file*).
37196 ** Return 0 if it is not open, or non-zero (but not 1) if it is.
37197 **
37198 ** This is so that expressions can be written as:
37199 **
37200 **   if( isOpen(pPager->jfd) ){ ...
37201 **
37202 ** instead of
37203 **
37204 **   if( pPager->jfd->pMethods ){ ...
37205 */
37206 #define isOpen(pFd) ((pFd)->pMethods)
37207
37208 /*
37209 ** Return true if this pager uses a write-ahead log instead of the usual
37210 ** rollback journal. Otherwise false.
37211 */
37212 #ifndef SQLITE_OMIT_WAL
37213 static int pagerUseWal(Pager *pPager){
37214   return (pPager->pWal!=0);
37215 }
37216 #else
37217 # define pagerUseWal(x) 0
37218 # define pagerRollbackWal(x) 0
37219 # define pagerWalFrames(v,w,x,y,z) 0
37220 # define pagerOpenWalIfPresent(z) SQLITE_OK
37221 # define pagerBeginReadTransaction(z) SQLITE_OK
37222 #endif
37223
37224 #ifndef NDEBUG 
37225 /*
37226 ** Usage:
37227 **
37228 **   assert( assert_pager_state(pPager) );
37229 **
37230 ** This function runs many asserts to try to find inconsistencies in
37231 ** the internal state of the Pager object.
37232 */
37233 static int assert_pager_state(Pager *p){
37234   Pager *pPager = p;
37235
37236   /* State must be valid. */
37237   assert( p->eState==PAGER_OPEN
37238        || p->eState==PAGER_READER
37239        || p->eState==PAGER_WRITER_LOCKED
37240        || p->eState==PAGER_WRITER_CACHEMOD
37241        || p->eState==PAGER_WRITER_DBMOD
37242        || p->eState==PAGER_WRITER_FINISHED
37243        || p->eState==PAGER_ERROR
37244   );
37245
37246   /* Regardless of the current state, a temp-file connection always behaves
37247   ** as if it has an exclusive lock on the database file. It never updates
37248   ** the change-counter field, so the changeCountDone flag is always set.
37249   */
37250   assert( p->tempFile==0 || p->eLock==EXCLUSIVE_LOCK );
37251   assert( p->tempFile==0 || pPager->changeCountDone );
37252
37253   /* If the useJournal flag is clear, the journal-mode must be "OFF". 
37254   ** And if the journal-mode is "OFF", the journal file must not be open.
37255   */
37256   assert( p->journalMode==PAGER_JOURNALMODE_OFF || p->useJournal );
37257   assert( p->journalMode!=PAGER_JOURNALMODE_OFF || !isOpen(p->jfd) );
37258
37259   /* Check that MEMDB implies noSync. And an in-memory journal. Since 
37260   ** this means an in-memory pager performs no IO at all, it cannot encounter 
37261   ** either SQLITE_IOERR or SQLITE_FULL during rollback or while finalizing 
37262   ** a journal file. (although the in-memory journal implementation may 
37263   ** return SQLITE_IOERR_NOMEM while the journal file is being written). It 
37264   ** is therefore not possible for an in-memory pager to enter the ERROR 
37265   ** state.
37266   */
37267   if( MEMDB ){
37268     assert( p->noSync );
37269     assert( p->journalMode==PAGER_JOURNALMODE_OFF 
37270          || p->journalMode==PAGER_JOURNALMODE_MEMORY 
37271     );
37272     assert( p->eState!=PAGER_ERROR && p->eState!=PAGER_OPEN );
37273     assert( pagerUseWal(p)==0 );
37274   }
37275
37276   /* If changeCountDone is set, a RESERVED lock or greater must be held
37277   ** on the file.
37278   */
37279   assert( pPager->changeCountDone==0 || pPager->eLock>=RESERVED_LOCK );
37280   assert( p->eLock!=PENDING_LOCK );
37281
37282   switch( p->eState ){
37283     case PAGER_OPEN:
37284       assert( !MEMDB );
37285       assert( pPager->errCode==SQLITE_OK );
37286       assert( sqlite3PcacheRefCount(pPager->pPCache)==0 || pPager->tempFile );
37287       break;
37288
37289     case PAGER_READER:
37290       assert( pPager->errCode==SQLITE_OK );
37291       assert( p->eLock!=UNKNOWN_LOCK );
37292       assert( p->eLock>=SHARED_LOCK || p->noReadlock );
37293       break;
37294
37295     case PAGER_WRITER_LOCKED:
37296       assert( p->eLock!=UNKNOWN_LOCK );
37297       assert( pPager->errCode==SQLITE_OK );
37298       if( !pagerUseWal(pPager) ){
37299         assert( p->eLock>=RESERVED_LOCK );
37300       }
37301       assert( pPager->dbSize==pPager->dbOrigSize );
37302       assert( pPager->dbOrigSize==pPager->dbFileSize );
37303       assert( pPager->dbOrigSize==pPager->dbHintSize );
37304       assert( pPager->setMaster==0 );
37305       break;
37306
37307     case PAGER_WRITER_CACHEMOD:
37308       assert( p->eLock!=UNKNOWN_LOCK );
37309       assert( pPager->errCode==SQLITE_OK );
37310       if( !pagerUseWal(pPager) ){
37311         /* It is possible that if journal_mode=wal here that neither the
37312         ** journal file nor the WAL file are open. This happens during
37313         ** a rollback transaction that switches from journal_mode=off
37314         ** to journal_mode=wal.
37315         */
37316         assert( p->eLock>=RESERVED_LOCK );
37317         assert( isOpen(p->jfd) 
37318              || p->journalMode==PAGER_JOURNALMODE_OFF 
37319              || p->journalMode==PAGER_JOURNALMODE_WAL 
37320         );
37321       }
37322       assert( pPager->dbOrigSize==pPager->dbFileSize );
37323       assert( pPager->dbOrigSize==pPager->dbHintSize );
37324       break;
37325
37326     case PAGER_WRITER_DBMOD:
37327       assert( p->eLock==EXCLUSIVE_LOCK );
37328       assert( pPager->errCode==SQLITE_OK );
37329       assert( !pagerUseWal(pPager) );
37330       assert( p->eLock>=EXCLUSIVE_LOCK );
37331       assert( isOpen(p->jfd) 
37332            || p->journalMode==PAGER_JOURNALMODE_OFF 
37333            || p->journalMode==PAGER_JOURNALMODE_WAL 
37334       );
37335       assert( pPager->dbOrigSize<=pPager->dbHintSize );
37336       break;
37337
37338     case PAGER_WRITER_FINISHED:
37339       assert( p->eLock==EXCLUSIVE_LOCK );
37340       assert( pPager->errCode==SQLITE_OK );
37341       assert( !pagerUseWal(pPager) );
37342       assert( isOpen(p->jfd) 
37343            || p->journalMode==PAGER_JOURNALMODE_OFF 
37344            || p->journalMode==PAGER_JOURNALMODE_WAL 
37345       );
37346       break;
37347
37348     case PAGER_ERROR:
37349       /* There must be at least one outstanding reference to the pager if
37350       ** in ERROR state. Otherwise the pager should have already dropped
37351       ** back to OPEN state.
37352       */
37353       assert( pPager->errCode!=SQLITE_OK );
37354       assert( sqlite3PcacheRefCount(pPager->pPCache)>0 );
37355       break;
37356   }
37357
37358   return 1;
37359 }
37360 #endif /* ifndef NDEBUG */
37361
37362 #ifdef SQLITE_DEBUG 
37363 /*
37364 ** Return a pointer to a human readable string in a static buffer
37365 ** containing the state of the Pager object passed as an argument. This
37366 ** is intended to be used within debuggers. For example, as an alternative
37367 ** to "print *pPager" in gdb:
37368 **
37369 ** (gdb) printf "%s", print_pager_state(pPager)
37370 */
37371 static char *print_pager_state(Pager *p){
37372   static char zRet[1024];
37373
37374   sqlite3_snprintf(1024, zRet,
37375       "Filename:      %s\n"
37376       "State:         %s errCode=%d\n"
37377       "Lock:          %s\n"
37378       "Locking mode:  locking_mode=%s\n"
37379       "Journal mode:  journal_mode=%s\n"
37380       "Backing store: tempFile=%d memDb=%d useJournal=%d\n"
37381       "Journal:       journalOff=%lld journalHdr=%lld\n"
37382       "Size:          dbsize=%d dbOrigSize=%d dbFileSize=%d\n"
37383       , p->zFilename
37384       , p->eState==PAGER_OPEN            ? "OPEN" :
37385         p->eState==PAGER_READER          ? "READER" :
37386         p->eState==PAGER_WRITER_LOCKED   ? "WRITER_LOCKED" :
37387         p->eState==PAGER_WRITER_CACHEMOD ? "WRITER_CACHEMOD" :
37388         p->eState==PAGER_WRITER_DBMOD    ? "WRITER_DBMOD" :
37389         p->eState==PAGER_WRITER_FINISHED ? "WRITER_FINISHED" :
37390         p->eState==PAGER_ERROR           ? "ERROR" : "?error?"
37391       , (int)p->errCode
37392       , p->eLock==NO_LOCK         ? "NO_LOCK" :
37393         p->eLock==RESERVED_LOCK   ? "RESERVED" :
37394         p->eLock==EXCLUSIVE_LOCK  ? "EXCLUSIVE" :
37395         p->eLock==SHARED_LOCK     ? "SHARED" :
37396         p->eLock==UNKNOWN_LOCK    ? "UNKNOWN" : "?error?"
37397       , p->exclusiveMode ? "exclusive" : "normal"
37398       , p->journalMode==PAGER_JOURNALMODE_MEMORY   ? "memory" :
37399         p->journalMode==PAGER_JOURNALMODE_OFF      ? "off" :
37400         p->journalMode==PAGER_JOURNALMODE_DELETE   ? "delete" :
37401         p->journalMode==PAGER_JOURNALMODE_PERSIST  ? "persist" :
37402         p->journalMode==PAGER_JOURNALMODE_TRUNCATE ? "truncate" :
37403         p->journalMode==PAGER_JOURNALMODE_WAL      ? "wal" : "?error?"
37404       , (int)p->tempFile, (int)p->memDb, (int)p->useJournal
37405       , p->journalOff, p->journalHdr
37406       , (int)p->dbSize, (int)p->dbOrigSize, (int)p->dbFileSize
37407   );
37408
37409   return zRet;
37410 }
37411 #endif
37412
37413 /*
37414 ** Return true if it is necessary to write page *pPg into the sub-journal.
37415 ** A page needs to be written into the sub-journal if there exists one
37416 ** or more open savepoints for which:
37417 **
37418 **   * The page-number is less than or equal to PagerSavepoint.nOrig, and
37419 **   * The bit corresponding to the page-number is not set in
37420 **     PagerSavepoint.pInSavepoint.
37421 */
37422 static int subjRequiresPage(PgHdr *pPg){
37423   Pgno pgno = pPg->pgno;
37424   Pager *pPager = pPg->pPager;
37425   int i;
37426   for(i=0; i<pPager->nSavepoint; i++){
37427     PagerSavepoint *p = &pPager->aSavepoint[i];
37428     if( p->nOrig>=pgno && 0==sqlite3BitvecTest(p->pInSavepoint, pgno) ){
37429       return 1;
37430     }
37431   }
37432   return 0;
37433 }
37434
37435 /*
37436 ** Return true if the page is already in the journal file.
37437 */
37438 static int pageInJournal(PgHdr *pPg){
37439   return sqlite3BitvecTest(pPg->pPager->pInJournal, pPg->pgno);
37440 }
37441
37442 /*
37443 ** Read a 32-bit integer from the given file descriptor.  Store the integer
37444 ** that is read in *pRes.  Return SQLITE_OK if everything worked, or an
37445 ** error code is something goes wrong.
37446 **
37447 ** All values are stored on disk as big-endian.
37448 */
37449 static int read32bits(sqlite3_file *fd, i64 offset, u32 *pRes){
37450   unsigned char ac[4];
37451   int rc = sqlite3OsRead(fd, ac, sizeof(ac), offset);
37452   if( rc==SQLITE_OK ){
37453     *pRes = sqlite3Get4byte(ac);
37454   }
37455   return rc;
37456 }
37457
37458 /*
37459 ** Write a 32-bit integer into a string buffer in big-endian byte order.
37460 */
37461 #define put32bits(A,B)  sqlite3Put4byte((u8*)A,B)
37462
37463
37464 /*
37465 ** Write a 32-bit integer into the given file descriptor.  Return SQLITE_OK
37466 ** on success or an error code is something goes wrong.
37467 */
37468 static int write32bits(sqlite3_file *fd, i64 offset, u32 val){
37469   char ac[4];
37470   put32bits(ac, val);
37471   return sqlite3OsWrite(fd, ac, 4, offset);
37472 }
37473
37474 /*
37475 ** Unlock the database file to level eLock, which must be either NO_LOCK
37476 ** or SHARED_LOCK. Regardless of whether or not the call to xUnlock()
37477 ** succeeds, set the Pager.eLock variable to match the (attempted) new lock.
37478 **
37479 ** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is
37480 ** called, do not modify it. See the comment above the #define of 
37481 ** UNKNOWN_LOCK for an explanation of this.
37482 */
37483 static int pagerUnlockDb(Pager *pPager, int eLock){
37484   int rc = SQLITE_OK;
37485
37486   assert( !pPager->exclusiveMode || pPager->eLock==eLock );
37487   assert( eLock==NO_LOCK || eLock==SHARED_LOCK );
37488   assert( eLock!=NO_LOCK || pagerUseWal(pPager)==0 );
37489   if( isOpen(pPager->fd) ){
37490     assert( pPager->eLock>=eLock );
37491     rc = sqlite3OsUnlock(pPager->fd, eLock);
37492     if( pPager->eLock!=UNKNOWN_LOCK ){
37493       pPager->eLock = (u8)eLock;
37494     }
37495     IOTRACE(("UNLOCK %p %d\n", pPager, eLock))
37496   }
37497   return rc;
37498 }
37499
37500 /*
37501 ** Lock the database file to level eLock, which must be either SHARED_LOCK,
37502 ** RESERVED_LOCK or EXCLUSIVE_LOCK. If the caller is successful, set the
37503 ** Pager.eLock variable to the new locking state. 
37504 **
37505 ** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is 
37506 ** called, do not modify it unless the new locking state is EXCLUSIVE_LOCK. 
37507 ** See the comment above the #define of UNKNOWN_LOCK for an explanation 
37508 ** of this.
37509 */
37510 static int pagerLockDb(Pager *pPager, int eLock){
37511   int rc = SQLITE_OK;
37512
37513   assert( eLock==SHARED_LOCK || eLock==RESERVED_LOCK || eLock==EXCLUSIVE_LOCK );
37514   if( pPager->eLock<eLock || pPager->eLock==UNKNOWN_LOCK ){
37515     rc = sqlite3OsLock(pPager->fd, eLock);
37516     if( rc==SQLITE_OK && (pPager->eLock!=UNKNOWN_LOCK||eLock==EXCLUSIVE_LOCK) ){
37517       pPager->eLock = (u8)eLock;
37518       IOTRACE(("LOCK %p %d\n", pPager, eLock))
37519     }
37520   }
37521   return rc;
37522 }
37523
37524 /*
37525 ** This function determines whether or not the atomic-write optimization
37526 ** can be used with this pager. The optimization can be used if:
37527 **
37528 **  (a) the value returned by OsDeviceCharacteristics() indicates that
37529 **      a database page may be written atomically, and
37530 **  (b) the value returned by OsSectorSize() is less than or equal
37531 **      to the page size.
37532 **
37533 ** The optimization is also always enabled for temporary files. It is
37534 ** an error to call this function if pPager is opened on an in-memory
37535 ** database.
37536 **
37537 ** If the optimization cannot be used, 0 is returned. If it can be used,
37538 ** then the value returned is the size of the journal file when it
37539 ** contains rollback data for exactly one page.
37540 */
37541 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
37542 static int jrnlBufferSize(Pager *pPager){
37543   assert( !MEMDB );
37544   if( !pPager->tempFile ){
37545     int dc;                           /* Device characteristics */
37546     int nSector;                      /* Sector size */
37547     int szPage;                       /* Page size */
37548
37549     assert( isOpen(pPager->fd) );
37550     dc = sqlite3OsDeviceCharacteristics(pPager->fd);
37551     nSector = pPager->sectorSize;
37552     szPage = pPager->pageSize;
37553
37554     assert(SQLITE_IOCAP_ATOMIC512==(512>>8));
37555     assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));
37556     if( 0==(dc&(SQLITE_IOCAP_ATOMIC|(szPage>>8)) || nSector>szPage) ){
37557       return 0;
37558     }
37559   }
37560
37561   return JOURNAL_HDR_SZ(pPager) + JOURNAL_PG_SZ(pPager);
37562 }
37563 #endif
37564
37565 /*
37566 ** If SQLITE_CHECK_PAGES is defined then we do some sanity checking
37567 ** on the cache using a hash function.  This is used for testing
37568 ** and debugging only.
37569 */
37570 #ifdef SQLITE_CHECK_PAGES
37571 /*
37572 ** Return a 32-bit hash of the page data for pPage.
37573 */
37574 static u32 pager_datahash(int nByte, unsigned char *pData){
37575   u32 hash = 0;
37576   int i;
37577   for(i=0; i<nByte; i++){
37578     hash = (hash*1039) + pData[i];
37579   }
37580   return hash;
37581 }
37582 static u32 pager_pagehash(PgHdr *pPage){
37583   return pager_datahash(pPage->pPager->pageSize, (unsigned char *)pPage->pData);
37584 }
37585 static void pager_set_pagehash(PgHdr *pPage){
37586   pPage->pageHash = pager_pagehash(pPage);
37587 }
37588
37589 /*
37590 ** The CHECK_PAGE macro takes a PgHdr* as an argument. If SQLITE_CHECK_PAGES
37591 ** is defined, and NDEBUG is not defined, an assert() statement checks
37592 ** that the page is either dirty or still matches the calculated page-hash.
37593 */
37594 #define CHECK_PAGE(x) checkPage(x)
37595 static void checkPage(PgHdr *pPg){
37596   Pager *pPager = pPg->pPager;
37597   assert( pPager->eState!=PAGER_ERROR );
37598   assert( (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) );
37599 }
37600
37601 #else
37602 #define pager_datahash(X,Y)  0
37603 #define pager_pagehash(X)  0
37604 #define pager_set_pagehash(X)
37605 #define CHECK_PAGE(x)
37606 #endif  /* SQLITE_CHECK_PAGES */
37607
37608 /*
37609 ** When this is called the journal file for pager pPager must be open.
37610 ** This function attempts to read a master journal file name from the 
37611 ** end of the file and, if successful, copies it into memory supplied 
37612 ** by the caller. See comments above writeMasterJournal() for the format
37613 ** used to store a master journal file name at the end of a journal file.
37614 **
37615 ** zMaster must point to a buffer of at least nMaster bytes allocated by
37616 ** the caller. This should be sqlite3_vfs.mxPathname+1 (to ensure there is
37617 ** enough space to write the master journal name). If the master journal
37618 ** name in the journal is longer than nMaster bytes (including a
37619 ** nul-terminator), then this is handled as if no master journal name
37620 ** were present in the journal.
37621 **
37622 ** If a master journal file name is present at the end of the journal
37623 ** file, then it is copied into the buffer pointed to by zMaster. A
37624 ** nul-terminator byte is appended to the buffer following the master
37625 ** journal file name.
37626 **
37627 ** If it is determined that no master journal file name is present 
37628 ** zMaster[0] is set to 0 and SQLITE_OK returned.
37629 **
37630 ** If an error occurs while reading from the journal file, an SQLite
37631 ** error code is returned.
37632 */
37633 static int readMasterJournal(sqlite3_file *pJrnl, char *zMaster, u32 nMaster){
37634   int rc;                    /* Return code */
37635   u32 len;                   /* Length in bytes of master journal name */
37636   i64 szJ;                   /* Total size in bytes of journal file pJrnl */
37637   u32 cksum;                 /* MJ checksum value read from journal */
37638   u32 u;                     /* Unsigned loop counter */
37639   unsigned char aMagic[8];   /* A buffer to hold the magic header */
37640   zMaster[0] = '\0';
37641
37642   if( SQLITE_OK!=(rc = sqlite3OsFileSize(pJrnl, &szJ))
37643    || szJ<16
37644    || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-16, &len))
37645    || len>=nMaster 
37646    || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-12, &cksum))
37647    || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, aMagic, 8, szJ-8))
37648    || memcmp(aMagic, aJournalMagic, 8)
37649    || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, zMaster, len, szJ-16-len))
37650   ){
37651     return rc;
37652   }
37653
37654   /* See if the checksum matches the master journal name */
37655   for(u=0; u<len; u++){
37656     cksum -= zMaster[u];
37657   }
37658   if( cksum ){
37659     /* If the checksum doesn't add up, then one or more of the disk sectors
37660     ** containing the master journal filename is corrupted. This means
37661     ** definitely roll back, so just return SQLITE_OK and report a (nul)
37662     ** master-journal filename.
37663     */
37664     len = 0;
37665   }
37666   zMaster[len] = '\0';
37667    
37668   return SQLITE_OK;
37669 }
37670
37671 /*
37672 ** Return the offset of the sector boundary at or immediately 
37673 ** following the value in pPager->journalOff, assuming a sector 
37674 ** size of pPager->sectorSize bytes.
37675 **
37676 ** i.e for a sector size of 512:
37677 **
37678 **   Pager.journalOff          Return value
37679 **   ---------------------------------------
37680 **   0                         0
37681 **   512                       512
37682 **   100                       512
37683 **   2000                      2048
37684 ** 
37685 */
37686 static i64 journalHdrOffset(Pager *pPager){
37687   i64 offset = 0;
37688   i64 c = pPager->journalOff;
37689   if( c ){
37690     offset = ((c-1)/JOURNAL_HDR_SZ(pPager) + 1) * JOURNAL_HDR_SZ(pPager);
37691   }
37692   assert( offset%JOURNAL_HDR_SZ(pPager)==0 );
37693   assert( offset>=c );
37694   assert( (offset-c)<JOURNAL_HDR_SZ(pPager) );
37695   return offset;
37696 }
37697
37698 /*
37699 ** The journal file must be open when this function is called.
37700 **
37701 ** This function is a no-op if the journal file has not been written to
37702 ** within the current transaction (i.e. if Pager.journalOff==0).
37703 **
37704 ** If doTruncate is non-zero or the Pager.journalSizeLimit variable is
37705 ** set to 0, then truncate the journal file to zero bytes in size. Otherwise,
37706 ** zero the 28-byte header at the start of the journal file. In either case, 
37707 ** if the pager is not in no-sync mode, sync the journal file immediately 
37708 ** after writing or truncating it.
37709 **
37710 ** If Pager.journalSizeLimit is set to a positive, non-zero value, and
37711 ** following the truncation or zeroing described above the size of the 
37712 ** journal file in bytes is larger than this value, then truncate the
37713 ** journal file to Pager.journalSizeLimit bytes. The journal file does
37714 ** not need to be synced following this operation.
37715 **
37716 ** If an IO error occurs, abandon processing and return the IO error code.
37717 ** Otherwise, return SQLITE_OK.
37718 */
37719 static int zeroJournalHdr(Pager *pPager, int doTruncate){
37720   int rc = SQLITE_OK;                               /* Return code */
37721   assert( isOpen(pPager->jfd) );
37722   if( pPager->journalOff ){
37723     const i64 iLimit = pPager->journalSizeLimit;    /* Local cache of jsl */
37724
37725     IOTRACE(("JZEROHDR %p\n", pPager))
37726     if( doTruncate || iLimit==0 ){
37727       rc = sqlite3OsTruncate(pPager->jfd, 0);
37728     }else{
37729       static const char zeroHdr[28] = {0};
37730       rc = sqlite3OsWrite(pPager->jfd, zeroHdr, sizeof(zeroHdr), 0);
37731     }
37732     if( rc==SQLITE_OK && !pPager->noSync ){
37733       rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_DATAONLY|pPager->syncFlags);
37734     }
37735
37736     /* At this point the transaction is committed but the write lock 
37737     ** is still held on the file. If there is a size limit configured for 
37738     ** the persistent journal and the journal file currently consumes more
37739     ** space than that limit allows for, truncate it now. There is no need
37740     ** to sync the file following this operation.
37741     */
37742     if( rc==SQLITE_OK && iLimit>0 ){
37743       i64 sz;
37744       rc = sqlite3OsFileSize(pPager->jfd, &sz);
37745       if( rc==SQLITE_OK && sz>iLimit ){
37746         rc = sqlite3OsTruncate(pPager->jfd, iLimit);
37747       }
37748     }
37749   }
37750   return rc;
37751 }
37752
37753 /*
37754 ** The journal file must be open when this routine is called. A journal
37755 ** header (JOURNAL_HDR_SZ bytes) is written into the journal file at the
37756 ** current location.
37757 **
37758 ** The format for the journal header is as follows:
37759 ** - 8 bytes: Magic identifying journal format.
37760 ** - 4 bytes: Number of records in journal, or -1 no-sync mode is on.
37761 ** - 4 bytes: Random number used for page hash.
37762 ** - 4 bytes: Initial database page count.
37763 ** - 4 bytes: Sector size used by the process that wrote this journal.
37764 ** - 4 bytes: Database page size.
37765 ** 
37766 ** Followed by (JOURNAL_HDR_SZ - 28) bytes of unused space.
37767 */
37768 static int writeJournalHdr(Pager *pPager){
37769   int rc = SQLITE_OK;                 /* Return code */
37770   char *zHeader = pPager->pTmpSpace;  /* Temporary space used to build header */
37771   u32 nHeader = (u32)pPager->pageSize;/* Size of buffer pointed to by zHeader */
37772   u32 nWrite;                         /* Bytes of header sector written */
37773   int ii;                             /* Loop counter */
37774
37775   assert( isOpen(pPager->jfd) );      /* Journal file must be open. */
37776
37777   if( nHeader>JOURNAL_HDR_SZ(pPager) ){
37778     nHeader = JOURNAL_HDR_SZ(pPager);
37779   }
37780
37781   /* If there are active savepoints and any of them were created 
37782   ** since the most recent journal header was written, update the 
37783   ** PagerSavepoint.iHdrOffset fields now.
37784   */
37785   for(ii=0; ii<pPager->nSavepoint; ii++){
37786     if( pPager->aSavepoint[ii].iHdrOffset==0 ){
37787       pPager->aSavepoint[ii].iHdrOffset = pPager->journalOff;
37788     }
37789   }
37790
37791   pPager->journalHdr = pPager->journalOff = journalHdrOffset(pPager);
37792
37793   /* 
37794   ** Write the nRec Field - the number of page records that follow this
37795   ** journal header. Normally, zero is written to this value at this time.
37796   ** After the records are added to the journal (and the journal synced, 
37797   ** if in full-sync mode), the zero is overwritten with the true number
37798   ** of records (see syncJournal()).
37799   **
37800   ** A faster alternative is to write 0xFFFFFFFF to the nRec field. When
37801   ** reading the journal this value tells SQLite to assume that the
37802   ** rest of the journal file contains valid page records. This assumption
37803   ** is dangerous, as if a failure occurred whilst writing to the journal
37804   ** file it may contain some garbage data. There are two scenarios
37805   ** where this risk can be ignored:
37806   **
37807   **   * When the pager is in no-sync mode. Corruption can follow a
37808   **     power failure in this case anyway.
37809   **
37810   **   * When the SQLITE_IOCAP_SAFE_APPEND flag is set. This guarantees
37811   **     that garbage data is never appended to the journal file.
37812   */
37813   assert( isOpen(pPager->fd) || pPager->noSync );
37814   if( pPager->noSync || (pPager->journalMode==PAGER_JOURNALMODE_MEMORY)
37815    || (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_SAFE_APPEND) 
37816   ){
37817     memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));
37818     put32bits(&zHeader[sizeof(aJournalMagic)], 0xffffffff);
37819   }else{
37820     memset(zHeader, 0, sizeof(aJournalMagic)+4);
37821   }
37822
37823   /* The random check-hash initialiser */ 
37824   sqlite3_randomness(sizeof(pPager->cksumInit), &pPager->cksumInit);
37825   put32bits(&zHeader[sizeof(aJournalMagic)+4], pPager->cksumInit);
37826   /* The initial database size */
37827   put32bits(&zHeader[sizeof(aJournalMagic)+8], pPager->dbOrigSize);
37828   /* The assumed sector size for this process */
37829   put32bits(&zHeader[sizeof(aJournalMagic)+12], pPager->sectorSize);
37830
37831   /* The page size */
37832   put32bits(&zHeader[sizeof(aJournalMagic)+16], pPager->pageSize);
37833
37834   /* Initializing the tail of the buffer is not necessary.  Everything
37835   ** works find if the following memset() is omitted.  But initializing
37836   ** the memory prevents valgrind from complaining, so we are willing to
37837   ** take the performance hit.
37838   */
37839   memset(&zHeader[sizeof(aJournalMagic)+20], 0,
37840          nHeader-(sizeof(aJournalMagic)+20));
37841
37842   /* In theory, it is only necessary to write the 28 bytes that the 
37843   ** journal header consumes to the journal file here. Then increment the 
37844   ** Pager.journalOff variable by JOURNAL_HDR_SZ so that the next 
37845   ** record is written to the following sector (leaving a gap in the file
37846   ** that will be implicitly filled in by the OS).
37847   **
37848   ** However it has been discovered that on some systems this pattern can 
37849   ** be significantly slower than contiguously writing data to the file,
37850   ** even if that means explicitly writing data to the block of 
37851   ** (JOURNAL_HDR_SZ - 28) bytes that will not be used. So that is what
37852   ** is done. 
37853   **
37854   ** The loop is required here in case the sector-size is larger than the 
37855   ** database page size. Since the zHeader buffer is only Pager.pageSize
37856   ** bytes in size, more than one call to sqlite3OsWrite() may be required
37857   ** to populate the entire journal header sector.
37858   */ 
37859   for(nWrite=0; rc==SQLITE_OK&&nWrite<JOURNAL_HDR_SZ(pPager); nWrite+=nHeader){
37860     IOTRACE(("JHDR %p %lld %d\n", pPager, pPager->journalHdr, nHeader))
37861     rc = sqlite3OsWrite(pPager->jfd, zHeader, nHeader, pPager->journalOff);
37862     assert( pPager->journalHdr <= pPager->journalOff );
37863     pPager->journalOff += nHeader;
37864   }
37865
37866   return rc;
37867 }
37868
37869 /*
37870 ** The journal file must be open when this is called. A journal header file
37871 ** (JOURNAL_HDR_SZ bytes) is read from the current location in the journal
37872 ** file. The current location in the journal file is given by
37873 ** pPager->journalOff. See comments above function writeJournalHdr() for
37874 ** a description of the journal header format.
37875 **
37876 ** If the header is read successfully, *pNRec is set to the number of
37877 ** page records following this header and *pDbSize is set to the size of the
37878 ** database before the transaction began, in pages. Also, pPager->cksumInit
37879 ** is set to the value read from the journal header. SQLITE_OK is returned
37880 ** in this case.
37881 **
37882 ** If the journal header file appears to be corrupted, SQLITE_DONE is
37883 ** returned and *pNRec and *PDbSize are undefined.  If JOURNAL_HDR_SZ bytes
37884 ** cannot be read from the journal file an error code is returned.
37885 */
37886 static int readJournalHdr(
37887   Pager *pPager,               /* Pager object */
37888   int isHot,
37889   i64 journalSize,             /* Size of the open journal file in bytes */
37890   u32 *pNRec,                  /* OUT: Value read from the nRec field */
37891   u32 *pDbSize                 /* OUT: Value of original database size field */
37892 ){
37893   int rc;                      /* Return code */
37894   unsigned char aMagic[8];     /* A buffer to hold the magic header */
37895   i64 iHdrOff;                 /* Offset of journal header being read */
37896
37897   assert( isOpen(pPager->jfd) );      /* Journal file must be open. */
37898
37899   /* Advance Pager.journalOff to the start of the next sector. If the
37900   ** journal file is too small for there to be a header stored at this
37901   ** point, return SQLITE_DONE.
37902   */
37903   pPager->journalOff = journalHdrOffset(pPager);
37904   if( pPager->journalOff+JOURNAL_HDR_SZ(pPager) > journalSize ){
37905     return SQLITE_DONE;
37906   }
37907   iHdrOff = pPager->journalOff;
37908
37909   /* Read in the first 8 bytes of the journal header. If they do not match
37910   ** the  magic string found at the start of each journal header, return
37911   ** SQLITE_DONE. If an IO error occurs, return an error code. Otherwise,
37912   ** proceed.
37913   */
37914   if( isHot || iHdrOff!=pPager->journalHdr ){
37915     rc = sqlite3OsRead(pPager->jfd, aMagic, sizeof(aMagic), iHdrOff);
37916     if( rc ){
37917       return rc;
37918     }
37919     if( memcmp(aMagic, aJournalMagic, sizeof(aMagic))!=0 ){
37920       return SQLITE_DONE;
37921     }
37922   }
37923
37924   /* Read the first three 32-bit fields of the journal header: The nRec
37925   ** field, the checksum-initializer and the database size at the start
37926   ** of the transaction. Return an error code if anything goes wrong.
37927   */
37928   if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+8, pNRec))
37929    || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+12, &pPager->cksumInit))
37930    || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+16, pDbSize))
37931   ){
37932     return rc;
37933   }
37934
37935   if( pPager->journalOff==0 ){
37936     u32 iPageSize;               /* Page-size field of journal header */
37937     u32 iSectorSize;             /* Sector-size field of journal header */
37938
37939     /* Read the page-size and sector-size journal header fields. */
37940     if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+20, &iSectorSize))
37941      || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+24, &iPageSize))
37942     ){
37943       return rc;
37944     }
37945
37946     /* Versions of SQLite prior to 3.5.8 set the page-size field of the
37947     ** journal header to zero. In this case, assume that the Pager.pageSize
37948     ** variable is already set to the correct page size.
37949     */
37950     if( iPageSize==0 ){
37951       iPageSize = pPager->pageSize;
37952     }
37953
37954     /* Check that the values read from the page-size and sector-size fields
37955     ** are within range. To be 'in range', both values need to be a power
37956     ** of two greater than or equal to 512 or 32, and not greater than their 
37957     ** respective compile time maximum limits.
37958     */
37959     if( iPageSize<512                  || iSectorSize<32
37960      || iPageSize>SQLITE_MAX_PAGE_SIZE || iSectorSize>MAX_SECTOR_SIZE
37961      || ((iPageSize-1)&iPageSize)!=0   || ((iSectorSize-1)&iSectorSize)!=0 
37962     ){
37963       /* If the either the page-size or sector-size in the journal-header is 
37964       ** invalid, then the process that wrote the journal-header must have 
37965       ** crashed before the header was synced. In this case stop reading 
37966       ** the journal file here.
37967       */
37968       return SQLITE_DONE;
37969     }
37970
37971     /* Update the page-size to match the value read from the journal. 
37972     ** Use a testcase() macro to make sure that malloc failure within 
37973     ** PagerSetPagesize() is tested.
37974     */
37975     rc = sqlite3PagerSetPagesize(pPager, &iPageSize, -1);
37976     testcase( rc!=SQLITE_OK );
37977
37978     /* Update the assumed sector-size to match the value used by 
37979     ** the process that created this journal. If this journal was
37980     ** created by a process other than this one, then this routine
37981     ** is being called from within pager_playback(). The local value
37982     ** of Pager.sectorSize is restored at the end of that routine.
37983     */
37984     pPager->sectorSize = iSectorSize;
37985   }
37986
37987   pPager->journalOff += JOURNAL_HDR_SZ(pPager);
37988   return rc;
37989 }
37990
37991
37992 /*
37993 ** Write the supplied master journal name into the journal file for pager
37994 ** pPager at the current location. The master journal name must be the last
37995 ** thing written to a journal file. If the pager is in full-sync mode, the
37996 ** journal file descriptor is advanced to the next sector boundary before
37997 ** anything is written. The format is:
37998 **
37999 **   + 4 bytes: PAGER_MJ_PGNO.
38000 **   + N bytes: Master journal filename in utf-8.
38001 **   + 4 bytes: N (length of master journal name in bytes, no nul-terminator).
38002 **   + 4 bytes: Master journal name checksum.
38003 **   + 8 bytes: aJournalMagic[].
38004 **
38005 ** The master journal page checksum is the sum of the bytes in the master
38006 ** journal name, where each byte is interpreted as a signed 8-bit integer.
38007 **
38008 ** If zMaster is a NULL pointer (occurs for a single database transaction), 
38009 ** this call is a no-op.
38010 */
38011 static int writeMasterJournal(Pager *pPager, const char *zMaster){
38012   int rc;                          /* Return code */
38013   int nMaster;                     /* Length of string zMaster */
38014   i64 iHdrOff;                     /* Offset of header in journal file */
38015   i64 jrnlSize;                    /* Size of journal file on disk */
38016   u32 cksum = 0;                   /* Checksum of string zMaster */
38017
38018   assert( pPager->setMaster==0 );
38019   assert( !pagerUseWal(pPager) );
38020
38021   if( !zMaster 
38022    || pPager->journalMode==PAGER_JOURNALMODE_MEMORY 
38023    || pPager->journalMode==PAGER_JOURNALMODE_OFF 
38024   ){
38025     return SQLITE_OK;
38026   }
38027   pPager->setMaster = 1;
38028   assert( isOpen(pPager->jfd) );
38029   assert( pPager->journalHdr <= pPager->journalOff );
38030
38031   /* Calculate the length in bytes and the checksum of zMaster */
38032   for(nMaster=0; zMaster[nMaster]; nMaster++){
38033     cksum += zMaster[nMaster];
38034   }
38035
38036   /* If in full-sync mode, advance to the next disk sector before writing
38037   ** the master journal name. This is in case the previous page written to
38038   ** the journal has already been synced.
38039   */
38040   if( pPager->fullSync ){
38041     pPager->journalOff = journalHdrOffset(pPager);
38042   }
38043   iHdrOff = pPager->journalOff;
38044
38045   /* Write the master journal data to the end of the journal file. If
38046   ** an error occurs, return the error code to the caller.
38047   */
38048   if( (0 != (rc = write32bits(pPager->jfd, iHdrOff, PAGER_MJ_PGNO(pPager))))
38049    || (0 != (rc = sqlite3OsWrite(pPager->jfd, zMaster, nMaster, iHdrOff+4)))
38050    || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster, nMaster)))
38051    || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster+4, cksum)))
38052    || (0 != (rc = sqlite3OsWrite(pPager->jfd, aJournalMagic, 8, iHdrOff+4+nMaster+8)))
38053   ){
38054     return rc;
38055   }
38056   pPager->journalOff += (nMaster+20);
38057
38058   /* If the pager is in peristent-journal mode, then the physical 
38059   ** journal-file may extend past the end of the master-journal name
38060   ** and 8 bytes of magic data just written to the file. This is 
38061   ** dangerous because the code to rollback a hot-journal file
38062   ** will not be able to find the master-journal name to determine 
38063   ** whether or not the journal is hot. 
38064   **
38065   ** Easiest thing to do in this scenario is to truncate the journal 
38066   ** file to the required size.
38067   */ 
38068   if( SQLITE_OK==(rc = sqlite3OsFileSize(pPager->jfd, &jrnlSize))
38069    && jrnlSize>pPager->journalOff
38070   ){
38071     rc = sqlite3OsTruncate(pPager->jfd, pPager->journalOff);
38072   }
38073   return rc;
38074 }
38075
38076 /*
38077 ** Find a page in the hash table given its page number. Return
38078 ** a pointer to the page or NULL if the requested page is not 
38079 ** already in memory.
38080 */
38081 static PgHdr *pager_lookup(Pager *pPager, Pgno pgno){
38082   PgHdr *p;                         /* Return value */
38083
38084   /* It is not possible for a call to PcacheFetch() with createFlag==0 to
38085   ** fail, since no attempt to allocate dynamic memory will be made.
38086   */
38087   (void)sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &p);
38088   return p;
38089 }
38090
38091 /*
38092 ** Discard the entire contents of the in-memory page-cache.
38093 */
38094 static void pager_reset(Pager *pPager){
38095   sqlite3BackupRestart(pPager->pBackup);
38096   sqlite3PcacheClear(pPager->pPCache);
38097 }
38098
38099 /*
38100 ** Free all structures in the Pager.aSavepoint[] array and set both
38101 ** Pager.aSavepoint and Pager.nSavepoint to zero. Close the sub-journal
38102 ** if it is open and the pager is not in exclusive mode.
38103 */
38104 static void releaseAllSavepoints(Pager *pPager){
38105   int ii;               /* Iterator for looping through Pager.aSavepoint */
38106   for(ii=0; ii<pPager->nSavepoint; ii++){
38107     sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint);
38108   }
38109   if( !pPager->exclusiveMode || sqlite3IsMemJournal(pPager->sjfd) ){
38110     sqlite3OsClose(pPager->sjfd);
38111   }
38112   sqlite3_free(pPager->aSavepoint);
38113   pPager->aSavepoint = 0;
38114   pPager->nSavepoint = 0;
38115   pPager->nSubRec = 0;
38116 }
38117
38118 /*
38119 ** Set the bit number pgno in the PagerSavepoint.pInSavepoint 
38120 ** bitvecs of all open savepoints. Return SQLITE_OK if successful
38121 ** or SQLITE_NOMEM if a malloc failure occurs.
38122 */
38123 static int addToSavepointBitvecs(Pager *pPager, Pgno pgno){
38124   int ii;                   /* Loop counter */
38125   int rc = SQLITE_OK;       /* Result code */
38126
38127   for(ii=0; ii<pPager->nSavepoint; ii++){
38128     PagerSavepoint *p = &pPager->aSavepoint[ii];
38129     if( pgno<=p->nOrig ){
38130       rc |= sqlite3BitvecSet(p->pInSavepoint, pgno);
38131       testcase( rc==SQLITE_NOMEM );
38132       assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );
38133     }
38134   }
38135   return rc;
38136 }
38137
38138 /*
38139 ** This function is a no-op if the pager is in exclusive mode and not
38140 ** in the ERROR state. Otherwise, it switches the pager to PAGER_OPEN
38141 ** state.
38142 **
38143 ** If the pager is not in exclusive-access mode, the database file is
38144 ** completely unlocked. If the file is unlocked and the file-system does
38145 ** not exhibit the UNDELETABLE_WHEN_OPEN property, the journal file is
38146 ** closed (if it is open).
38147 **
38148 ** If the pager is in ERROR state when this function is called, the 
38149 ** contents of the pager cache are discarded before switching back to 
38150 ** the OPEN state. Regardless of whether the pager is in exclusive-mode
38151 ** or not, any journal file left in the file-system will be treated
38152 ** as a hot-journal and rolled back the next time a read-transaction
38153 ** is opened (by this or by any other connection).
38154 */
38155 static void pager_unlock(Pager *pPager){
38156
38157   assert( pPager->eState==PAGER_READER 
38158        || pPager->eState==PAGER_OPEN 
38159        || pPager->eState==PAGER_ERROR 
38160   );
38161
38162   sqlite3BitvecDestroy(pPager->pInJournal);
38163   pPager->pInJournal = 0;
38164   releaseAllSavepoints(pPager);
38165
38166   if( pagerUseWal(pPager) ){
38167     assert( !isOpen(pPager->jfd) );
38168     sqlite3WalEndReadTransaction(pPager->pWal);
38169     pPager->eState = PAGER_OPEN;
38170   }else if( !pPager->exclusiveMode ){
38171     int rc;                       /* Error code returned by pagerUnlockDb() */
38172     int iDc = isOpen(pPager->fd)?sqlite3OsDeviceCharacteristics(pPager->fd):0;
38173
38174     /* If the operating system support deletion of open files, then
38175     ** close the journal file when dropping the database lock.  Otherwise
38176     ** another connection with journal_mode=delete might delete the file
38177     ** out from under us.
38178     */
38179     assert( (PAGER_JOURNALMODE_MEMORY   & 5)!=1 );
38180     assert( (PAGER_JOURNALMODE_OFF      & 5)!=1 );
38181     assert( (PAGER_JOURNALMODE_WAL      & 5)!=1 );
38182     assert( (PAGER_JOURNALMODE_DELETE   & 5)!=1 );
38183     assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 );
38184     assert( (PAGER_JOURNALMODE_PERSIST  & 5)==1 );
38185     if( 0==(iDc & SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN)
38186      || 1!=(pPager->journalMode & 5)
38187     ){
38188       sqlite3OsClose(pPager->jfd);
38189     }
38190
38191     /* If the pager is in the ERROR state and the call to unlock the database
38192     ** file fails, set the current lock to UNKNOWN_LOCK. See the comment
38193     ** above the #define for UNKNOWN_LOCK for an explanation of why this
38194     ** is necessary.
38195     */
38196     rc = pagerUnlockDb(pPager, NO_LOCK);
38197     if( rc!=SQLITE_OK && pPager->eState==PAGER_ERROR ){
38198       pPager->eLock = UNKNOWN_LOCK;
38199     }
38200
38201     /* The pager state may be changed from PAGER_ERROR to PAGER_OPEN here
38202     ** without clearing the error code. This is intentional - the error
38203     ** code is cleared and the cache reset in the block below.
38204     */
38205     assert( pPager->errCode || pPager->eState!=PAGER_ERROR );
38206     pPager->changeCountDone = 0;
38207     pPager->eState = PAGER_OPEN;
38208   }
38209
38210   /* If Pager.errCode is set, the contents of the pager cache cannot be
38211   ** trusted. Now that there are no outstanding references to the pager,
38212   ** it can safely move back to PAGER_OPEN state. This happens in both
38213   ** normal and exclusive-locking mode.
38214   */
38215   if( pPager->errCode ){
38216     assert( !MEMDB );
38217     pager_reset(pPager);
38218     pPager->changeCountDone = pPager->tempFile;
38219     pPager->eState = PAGER_OPEN;
38220     pPager->errCode = SQLITE_OK;
38221   }
38222
38223   pPager->journalOff = 0;
38224   pPager->journalHdr = 0;
38225   pPager->setMaster = 0;
38226 }
38227
38228 /*
38229 ** This function is called whenever an IOERR or FULL error that requires
38230 ** the pager to transition into the ERROR state may ahve occurred.
38231 ** The first argument is a pointer to the pager structure, the second 
38232 ** the error-code about to be returned by a pager API function. The 
38233 ** value returned is a copy of the second argument to this function. 
38234 **
38235 ** If the second argument is SQLITE_FULL, SQLITE_IOERR or one of the
38236 ** IOERR sub-codes, the pager enters the ERROR state and the error code
38237 ** is stored in Pager.errCode. While the pager remains in the ERROR state,
38238 ** all major API calls on the Pager will immediately return Pager.errCode.
38239 **
38240 ** The ERROR state indicates that the contents of the pager-cache 
38241 ** cannot be trusted. This state can be cleared by completely discarding 
38242 ** the contents of the pager-cache. If a transaction was active when
38243 ** the persistent error occurred, then the rollback journal may need
38244 ** to be replayed to restore the contents of the database file (as if
38245 ** it were a hot-journal).
38246 */
38247 static int pager_error(Pager *pPager, int rc){
38248   int rc2 = rc & 0xff;
38249   assert( rc==SQLITE_OK || !MEMDB );
38250   assert(
38251        pPager->errCode==SQLITE_FULL ||
38252        pPager->errCode==SQLITE_OK ||
38253        (pPager->errCode & 0xff)==SQLITE_IOERR
38254   );
38255   if( rc2==SQLITE_FULL || rc2==SQLITE_IOERR ){
38256     pPager->errCode = rc;
38257     pPager->eState = PAGER_ERROR;
38258   }
38259   return rc;
38260 }
38261
38262 /*
38263 ** This routine ends a transaction. A transaction is usually ended by 
38264 ** either a COMMIT or a ROLLBACK operation. This routine may be called 
38265 ** after rollback of a hot-journal, or if an error occurs while opening
38266 ** the journal file or writing the very first journal-header of a
38267 ** database transaction.
38268 ** 
38269 ** This routine is never called in PAGER_ERROR state. If it is called
38270 ** in PAGER_NONE or PAGER_SHARED state and the lock held is less
38271 ** exclusive than a RESERVED lock, it is a no-op.
38272 **
38273 ** Otherwise, any active savepoints are released.
38274 **
38275 ** If the journal file is open, then it is "finalized". Once a journal 
38276 ** file has been finalized it is not possible to use it to roll back a 
38277 ** transaction. Nor will it be considered to be a hot-journal by this
38278 ** or any other database connection. Exactly how a journal is finalized
38279 ** depends on whether or not the pager is running in exclusive mode and
38280 ** the current journal-mode (Pager.journalMode value), as follows:
38281 **
38282 **   journalMode==MEMORY
38283 **     Journal file descriptor is simply closed. This destroys an 
38284 **     in-memory journal.
38285 **
38286 **   journalMode==TRUNCATE
38287 **     Journal file is truncated to zero bytes in size.
38288 **
38289 **   journalMode==PERSIST
38290 **     The first 28 bytes of the journal file are zeroed. This invalidates
38291 **     the first journal header in the file, and hence the entire journal
38292 **     file. An invalid journal file cannot be rolled back.
38293 **
38294 **   journalMode==DELETE
38295 **     The journal file is closed and deleted using sqlite3OsDelete().
38296 **
38297 **     If the pager is running in exclusive mode, this method of finalizing
38298 **     the journal file is never used. Instead, if the journalMode is
38299 **     DELETE and the pager is in exclusive mode, the method described under
38300 **     journalMode==PERSIST is used instead.
38301 **
38302 ** After the journal is finalized, the pager moves to PAGER_READER state.
38303 ** If running in non-exclusive rollback mode, the lock on the file is 
38304 ** downgraded to a SHARED_LOCK.
38305 **
38306 ** SQLITE_OK is returned if no error occurs. If an error occurs during
38307 ** any of the IO operations to finalize the journal file or unlock the
38308 ** database then the IO error code is returned to the user. If the 
38309 ** operation to finalize the journal file fails, then the code still
38310 ** tries to unlock the database file if not in exclusive mode. If the
38311 ** unlock operation fails as well, then the first error code related
38312 ** to the first error encountered (the journal finalization one) is
38313 ** returned.
38314 */
38315 static int pager_end_transaction(Pager *pPager, int hasMaster){
38316   int rc = SQLITE_OK;      /* Error code from journal finalization operation */
38317   int rc2 = SQLITE_OK;     /* Error code from db file unlock operation */
38318
38319   /* Do nothing if the pager does not have an open write transaction
38320   ** or at least a RESERVED lock. This function may be called when there
38321   ** is no write-transaction active but a RESERVED or greater lock is
38322   ** held under two circumstances:
38323   **
38324   **   1. After a successful hot-journal rollback, it is called with
38325   **      eState==PAGER_NONE and eLock==EXCLUSIVE_LOCK.
38326   **
38327   **   2. If a connection with locking_mode=exclusive holding an EXCLUSIVE 
38328   **      lock switches back to locking_mode=normal and then executes a
38329   **      read-transaction, this function is called with eState==PAGER_READER 
38330   **      and eLock==EXCLUSIVE_LOCK when the read-transaction is closed.
38331   */
38332   assert( assert_pager_state(pPager) );
38333   assert( pPager->eState!=PAGER_ERROR );
38334   if( pPager->eState<PAGER_WRITER_LOCKED && pPager->eLock<RESERVED_LOCK ){
38335     return SQLITE_OK;
38336   }
38337
38338   releaseAllSavepoints(pPager);
38339   assert( isOpen(pPager->jfd) || pPager->pInJournal==0 );
38340   if( isOpen(pPager->jfd) ){
38341     assert( !pagerUseWal(pPager) );
38342
38343     /* Finalize the journal file. */
38344     if( sqlite3IsMemJournal(pPager->jfd) ){
38345       assert( pPager->journalMode==PAGER_JOURNALMODE_MEMORY );
38346       sqlite3OsClose(pPager->jfd);
38347     }else if( pPager->journalMode==PAGER_JOURNALMODE_TRUNCATE ){
38348       if( pPager->journalOff==0 ){
38349         rc = SQLITE_OK;
38350       }else{
38351         rc = sqlite3OsTruncate(pPager->jfd, 0);
38352       }
38353       pPager->journalOff = 0;
38354     }else if( pPager->journalMode==PAGER_JOURNALMODE_PERSIST
38355       || (pPager->exclusiveMode && pPager->journalMode!=PAGER_JOURNALMODE_WAL)
38356     ){
38357       rc = zeroJournalHdr(pPager, hasMaster);
38358       pPager->journalOff = 0;
38359     }else{
38360       /* This branch may be executed with Pager.journalMode==MEMORY if
38361       ** a hot-journal was just rolled back. In this case the journal
38362       ** file should be closed and deleted. If this connection writes to
38363       ** the database file, it will do so using an in-memory journal. 
38364       */
38365       assert( pPager->journalMode==PAGER_JOURNALMODE_DELETE 
38366            || pPager->journalMode==PAGER_JOURNALMODE_MEMORY 
38367            || pPager->journalMode==PAGER_JOURNALMODE_WAL 
38368       );
38369       sqlite3OsClose(pPager->jfd);
38370       if( !pPager->tempFile ){
38371         rc = sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);
38372       }
38373     }
38374   }
38375
38376 #ifdef SQLITE_CHECK_PAGES
38377   sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash);
38378   if( pPager->dbSize==0 && sqlite3PcacheRefCount(pPager->pPCache)>0 ){
38379     PgHdr *p = pager_lookup(pPager, 1);
38380     if( p ){
38381       p->pageHash = 0;
38382       sqlite3PagerUnref(p);
38383     }
38384   }
38385 #endif
38386
38387   sqlite3BitvecDestroy(pPager->pInJournal);
38388   pPager->pInJournal = 0;
38389   pPager->nRec = 0;
38390   sqlite3PcacheCleanAll(pPager->pPCache);
38391   sqlite3PcacheTruncate(pPager->pPCache, pPager->dbSize);
38392
38393   if( pagerUseWal(pPager) ){
38394     /* Drop the WAL write-lock, if any. Also, if the connection was in 
38395     ** locking_mode=exclusive mode but is no longer, drop the EXCLUSIVE 
38396     ** lock held on the database file.
38397     */
38398     rc2 = sqlite3WalEndWriteTransaction(pPager->pWal);
38399     assert( rc2==SQLITE_OK );
38400   }
38401   if( !pPager->exclusiveMode 
38402    && (!pagerUseWal(pPager) || sqlite3WalExclusiveMode(pPager->pWal, 0))
38403   ){
38404     rc2 = pagerUnlockDb(pPager, SHARED_LOCK);
38405     pPager->changeCountDone = 0;
38406   }
38407   pPager->eState = PAGER_READER;
38408   pPager->setMaster = 0;
38409
38410   return (rc==SQLITE_OK?rc2:rc);
38411 }
38412
38413 /*
38414 ** Execute a rollback if a transaction is active and unlock the 
38415 ** database file. 
38416 **
38417 ** If the pager has already entered the ERROR state, do not attempt 
38418 ** the rollback at this time. Instead, pager_unlock() is called. The
38419 ** call to pager_unlock() will discard all in-memory pages, unlock
38420 ** the database file and move the pager back to OPEN state. If this 
38421 ** means that there is a hot-journal left in the file-system, the next 
38422 ** connection to obtain a shared lock on the pager (which may be this one) 
38423 ** will roll it back.
38424 **
38425 ** If the pager has not already entered the ERROR state, but an IO or
38426 ** malloc error occurs during a rollback, then this will itself cause 
38427 ** the pager to enter the ERROR state. Which will be cleared by the
38428 ** call to pager_unlock(), as described above.
38429 */
38430 static void pagerUnlockAndRollback(Pager *pPager){
38431   if( pPager->eState!=PAGER_ERROR && pPager->eState!=PAGER_OPEN ){
38432     assert( assert_pager_state(pPager) );
38433     if( pPager->eState>=PAGER_WRITER_LOCKED ){
38434       sqlite3BeginBenignMalloc();
38435       sqlite3PagerRollback(pPager);
38436       sqlite3EndBenignMalloc();
38437     }else if( !pPager->exclusiveMode ){
38438       assert( pPager->eState==PAGER_READER );
38439       pager_end_transaction(pPager, 0);
38440     }
38441   }
38442   pager_unlock(pPager);
38443 }
38444
38445 /*
38446 ** Parameter aData must point to a buffer of pPager->pageSize bytes
38447 ** of data. Compute and return a checksum based ont the contents of the 
38448 ** page of data and the current value of pPager->cksumInit.
38449 **
38450 ** This is not a real checksum. It is really just the sum of the 
38451 ** random initial value (pPager->cksumInit) and every 200th byte
38452 ** of the page data, starting with byte offset (pPager->pageSize%200).
38453 ** Each byte is interpreted as an 8-bit unsigned integer.
38454 **
38455 ** Changing the formula used to compute this checksum results in an
38456 ** incompatible journal file format.
38457 **
38458 ** If journal corruption occurs due to a power failure, the most likely 
38459 ** scenario is that one end or the other of the record will be changed. 
38460 ** It is much less likely that the two ends of the journal record will be
38461 ** correct and the middle be corrupt.  Thus, this "checksum" scheme,
38462 ** though fast and simple, catches the mostly likely kind of corruption.
38463 */
38464 static u32 pager_cksum(Pager *pPager, const u8 *aData){
38465   u32 cksum = pPager->cksumInit;         /* Checksum value to return */
38466   int i = pPager->pageSize-200;          /* Loop counter */
38467   while( i>0 ){
38468     cksum += aData[i];
38469     i -= 200;
38470   }
38471   return cksum;
38472 }
38473
38474 /*
38475 ** Report the current page size and number of reserved bytes back
38476 ** to the codec.
38477 */
38478 #ifdef SQLITE_HAS_CODEC
38479 static void pagerReportSize(Pager *pPager){
38480   if( pPager->xCodecSizeChng ){
38481     pPager->xCodecSizeChng(pPager->pCodec, pPager->pageSize,
38482                            (int)pPager->nReserve);
38483   }
38484 }
38485 #else
38486 # define pagerReportSize(X)     /* No-op if we do not support a codec */
38487 #endif
38488
38489 /*
38490 ** Read a single page from either the journal file (if isMainJrnl==1) or
38491 ** from the sub-journal (if isMainJrnl==0) and playback that page.
38492 ** The page begins at offset *pOffset into the file. The *pOffset
38493 ** value is increased to the start of the next page in the journal.
38494 **
38495 ** The main rollback journal uses checksums - the statement journal does 
38496 ** not.
38497 **
38498 ** If the page number of the page record read from the (sub-)journal file
38499 ** is greater than the current value of Pager.dbSize, then playback is
38500 ** skipped and SQLITE_OK is returned.
38501 **
38502 ** If pDone is not NULL, then it is a record of pages that have already
38503 ** been played back.  If the page at *pOffset has already been played back
38504 ** (if the corresponding pDone bit is set) then skip the playback.
38505 ** Make sure the pDone bit corresponding to the *pOffset page is set
38506 ** prior to returning.
38507 **
38508 ** If the page record is successfully read from the (sub-)journal file
38509 ** and played back, then SQLITE_OK is returned. If an IO error occurs
38510 ** while reading the record from the (sub-)journal file or while writing
38511 ** to the database file, then the IO error code is returned. If data
38512 ** is successfully read from the (sub-)journal file but appears to be
38513 ** corrupted, SQLITE_DONE is returned. Data is considered corrupted in
38514 ** two circumstances:
38515 ** 
38516 **   * If the record page-number is illegal (0 or PAGER_MJ_PGNO), or
38517 **   * If the record is being rolled back from the main journal file
38518 **     and the checksum field does not match the record content.
38519 **
38520 ** Neither of these two scenarios are possible during a savepoint rollback.
38521 **
38522 ** If this is a savepoint rollback, then memory may have to be dynamically
38523 ** allocated by this function. If this is the case and an allocation fails,
38524 ** SQLITE_NOMEM is returned.
38525 */
38526 static int pager_playback_one_page(
38527   Pager *pPager,                /* The pager being played back */
38528   i64 *pOffset,                 /* Offset of record to playback */
38529   Bitvec *pDone,                /* Bitvec of pages already played back */
38530   int isMainJrnl,               /* 1 -> main journal. 0 -> sub-journal. */
38531   int isSavepnt                 /* True for a savepoint rollback */
38532 ){
38533   int rc;
38534   PgHdr *pPg;                   /* An existing page in the cache */
38535   Pgno pgno;                    /* The page number of a page in journal */
38536   u32 cksum;                    /* Checksum used for sanity checking */
38537   char *aData;                  /* Temporary storage for the page */
38538   sqlite3_file *jfd;            /* The file descriptor for the journal file */
38539   int isSynced;                 /* True if journal page is synced */
38540
38541   assert( (isMainJrnl&~1)==0 );      /* isMainJrnl is 0 or 1 */
38542   assert( (isSavepnt&~1)==0 );       /* isSavepnt is 0 or 1 */
38543   assert( isMainJrnl || pDone );     /* pDone always used on sub-journals */
38544   assert( isSavepnt || pDone==0 );   /* pDone never used on non-savepoint */
38545
38546   aData = pPager->pTmpSpace;
38547   assert( aData );         /* Temp storage must have already been allocated */
38548   assert( pagerUseWal(pPager)==0 || (!isMainJrnl && isSavepnt) );
38549
38550   /* Either the state is greater than PAGER_WRITER_CACHEMOD (a transaction 
38551   ** or savepoint rollback done at the request of the caller) or this is
38552   ** a hot-journal rollback. If it is a hot-journal rollback, the pager
38553   ** is in state OPEN and holds an EXCLUSIVE lock. Hot-journal rollback
38554   ** only reads from the main journal, not the sub-journal.
38555   */
38556   assert( pPager->eState>=PAGER_WRITER_CACHEMOD
38557        || (pPager->eState==PAGER_OPEN && pPager->eLock==EXCLUSIVE_LOCK)
38558   );
38559   assert( pPager->eState>=PAGER_WRITER_CACHEMOD || isMainJrnl );
38560
38561   /* Read the page number and page data from the journal or sub-journal
38562   ** file. Return an error code to the caller if an IO error occurs.
38563   */
38564   jfd = isMainJrnl ? pPager->jfd : pPager->sjfd;
38565   rc = read32bits(jfd, *pOffset, &pgno);
38566   if( rc!=SQLITE_OK ) return rc;
38567   rc = sqlite3OsRead(jfd, (u8*)aData, pPager->pageSize, (*pOffset)+4);
38568   if( rc!=SQLITE_OK ) return rc;
38569   *pOffset += pPager->pageSize + 4 + isMainJrnl*4;
38570
38571   /* Sanity checking on the page.  This is more important that I originally
38572   ** thought.  If a power failure occurs while the journal is being written,
38573   ** it could cause invalid data to be written into the journal.  We need to
38574   ** detect this invalid data (with high probability) and ignore it.
38575   */
38576   if( pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){
38577     assert( !isSavepnt );
38578     return SQLITE_DONE;
38579   }
38580   if( pgno>(Pgno)pPager->dbSize || sqlite3BitvecTest(pDone, pgno) ){
38581     return SQLITE_OK;
38582   }
38583   if( isMainJrnl ){
38584     rc = read32bits(jfd, (*pOffset)-4, &cksum);
38585     if( rc ) return rc;
38586     if( !isSavepnt && pager_cksum(pPager, (u8*)aData)!=cksum ){
38587       return SQLITE_DONE;
38588     }
38589   }
38590
38591   /* If this page has already been played by before during the current
38592   ** rollback, then don't bother to play it back again.
38593   */
38594   if( pDone && (rc = sqlite3BitvecSet(pDone, pgno))!=SQLITE_OK ){
38595     return rc;
38596   }
38597
38598   /* When playing back page 1, restore the nReserve setting
38599   */
38600   if( pgno==1 && pPager->nReserve!=((u8*)aData)[20] ){
38601     pPager->nReserve = ((u8*)aData)[20];
38602     pagerReportSize(pPager);
38603   }
38604
38605   /* If the pager is in CACHEMOD state, then there must be a copy of this
38606   ** page in the pager cache. In this case just update the pager cache,
38607   ** not the database file. The page is left marked dirty in this case.
38608   **
38609   ** An exception to the above rule: If the database is in no-sync mode
38610   ** and a page is moved during an incremental vacuum then the page may
38611   ** not be in the pager cache. Later: if a malloc() or IO error occurs
38612   ** during a Movepage() call, then the page may not be in the cache
38613   ** either. So the condition described in the above paragraph is not
38614   ** assert()able.
38615   **
38616   ** If in WRITER_DBMOD, WRITER_FINISHED or OPEN state, then we update the
38617   ** pager cache if it exists and the main file. The page is then marked 
38618   ** not dirty. Since this code is only executed in PAGER_OPEN state for
38619   ** a hot-journal rollback, it is guaranteed that the page-cache is empty
38620   ** if the pager is in OPEN state.
38621   **
38622   ** Ticket #1171:  The statement journal might contain page content that is
38623   ** different from the page content at the start of the transaction.
38624   ** This occurs when a page is changed prior to the start of a statement
38625   ** then changed again within the statement.  When rolling back such a
38626   ** statement we must not write to the original database unless we know
38627   ** for certain that original page contents are synced into the main rollback
38628   ** journal.  Otherwise, a power loss might leave modified data in the
38629   ** database file without an entry in the rollback journal that can
38630   ** restore the database to its original form.  Two conditions must be
38631   ** met before writing to the database files. (1) the database must be
38632   ** locked.  (2) we know that the original page content is fully synced
38633   ** in the main journal either because the page is not in cache or else
38634   ** the page is marked as needSync==0.
38635   **
38636   ** 2008-04-14:  When attempting to vacuum a corrupt database file, it
38637   ** is possible to fail a statement on a database that does not yet exist.
38638   ** Do not attempt to write if database file has never been opened.
38639   */
38640   if( pagerUseWal(pPager) ){
38641     pPg = 0;
38642   }else{
38643     pPg = pager_lookup(pPager, pgno);
38644   }
38645   assert( pPg || !MEMDB );
38646   assert( pPager->eState!=PAGER_OPEN || pPg==0 );
38647   PAGERTRACE(("PLAYBACK %d page %d hash(%08x) %s\n",
38648            PAGERID(pPager), pgno, pager_datahash(pPager->pageSize, (u8*)aData),
38649            (isMainJrnl?"main-journal":"sub-journal")
38650   ));
38651   if( isMainJrnl ){
38652     isSynced = pPager->noSync || (*pOffset <= pPager->journalHdr);
38653   }else{
38654     isSynced = (pPg==0 || 0==(pPg->flags & PGHDR_NEED_SYNC));
38655   }
38656   if( isOpen(pPager->fd)
38657    && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
38658    && isSynced
38659   ){
38660     i64 ofst = (pgno-1)*(i64)pPager->pageSize;
38661     testcase( !isSavepnt && pPg!=0 && (pPg->flags&PGHDR_NEED_SYNC)!=0 );
38662     assert( !pagerUseWal(pPager) );
38663     rc = sqlite3OsWrite(pPager->fd, (u8*)aData, pPager->pageSize, ofst);
38664     if( pgno>pPager->dbFileSize ){
38665       pPager->dbFileSize = pgno;
38666     }
38667     if( pPager->pBackup ){
38668       CODEC1(pPager, aData, pgno, 3, rc=SQLITE_NOMEM);
38669       sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)aData);
38670       CODEC2(pPager, aData, pgno, 7, rc=SQLITE_NOMEM, aData);
38671     }
38672   }else if( !isMainJrnl && pPg==0 ){
38673     /* If this is a rollback of a savepoint and data was not written to
38674     ** the database and the page is not in-memory, there is a potential
38675     ** problem. When the page is next fetched by the b-tree layer, it 
38676     ** will be read from the database file, which may or may not be 
38677     ** current. 
38678     **
38679     ** There are a couple of different ways this can happen. All are quite
38680     ** obscure. When running in synchronous mode, this can only happen 
38681     ** if the page is on the free-list at the start of the transaction, then
38682     ** populated, then moved using sqlite3PagerMovepage().
38683     **
38684     ** The solution is to add an in-memory page to the cache containing
38685     ** the data just read from the sub-journal. Mark the page as dirty 
38686     ** and if the pager requires a journal-sync, then mark the page as 
38687     ** requiring a journal-sync before it is written.
38688     */
38689     assert( isSavepnt );
38690     assert( pPager->doNotSpill==0 );
38691     pPager->doNotSpill++;
38692     rc = sqlite3PagerAcquire(pPager, pgno, &pPg, 1);
38693     assert( pPager->doNotSpill==1 );
38694     pPager->doNotSpill--;
38695     if( rc!=SQLITE_OK ) return rc;
38696     pPg->flags &= ~PGHDR_NEED_READ;
38697     sqlite3PcacheMakeDirty(pPg);
38698   }
38699   if( pPg ){
38700     /* No page should ever be explicitly rolled back that is in use, except
38701     ** for page 1 which is held in use in order to keep the lock on the
38702     ** database active. However such a page may be rolled back as a result
38703     ** of an internal error resulting in an automatic call to
38704     ** sqlite3PagerRollback().
38705     */
38706     void *pData;
38707     pData = pPg->pData;
38708     memcpy(pData, (u8*)aData, pPager->pageSize);
38709     pPager->xReiniter(pPg);
38710     if( isMainJrnl && (!isSavepnt || *pOffset<=pPager->journalHdr) ){
38711       /* If the contents of this page were just restored from the main 
38712       ** journal file, then its content must be as they were when the 
38713       ** transaction was first opened. In this case we can mark the page
38714       ** as clean, since there will be no need to write it out to the
38715       ** database.
38716       **
38717       ** There is one exception to this rule. If the page is being rolled
38718       ** back as part of a savepoint (or statement) rollback from an 
38719       ** unsynced portion of the main journal file, then it is not safe
38720       ** to mark the page as clean. This is because marking the page as
38721       ** clean will clear the PGHDR_NEED_SYNC flag. Since the page is
38722       ** already in the journal file (recorded in Pager.pInJournal) and
38723       ** the PGHDR_NEED_SYNC flag is cleared, if the page is written to
38724       ** again within this transaction, it will be marked as dirty but
38725       ** the PGHDR_NEED_SYNC flag will not be set. It could then potentially
38726       ** be written out into the database file before its journal file
38727       ** segment is synced. If a crash occurs during or following this,
38728       ** database corruption may ensue.
38729       */
38730       assert( !pagerUseWal(pPager) );
38731       sqlite3PcacheMakeClean(pPg);
38732     }
38733     pager_set_pagehash(pPg);
38734
38735     /* If this was page 1, then restore the value of Pager.dbFileVers.
38736     ** Do this before any decoding. */
38737     if( pgno==1 ){
38738       memcpy(&pPager->dbFileVers, &((u8*)pData)[24],sizeof(pPager->dbFileVers));
38739     }
38740
38741     /* Decode the page just read from disk */
38742     CODEC1(pPager, pData, pPg->pgno, 3, rc=SQLITE_NOMEM);
38743     sqlite3PcacheRelease(pPg);
38744   }
38745   return rc;
38746 }
38747
38748 /*
38749 ** Parameter zMaster is the name of a master journal file. A single journal
38750 ** file that referred to the master journal file has just been rolled back.
38751 ** This routine checks if it is possible to delete the master journal file,
38752 ** and does so if it is.
38753 **
38754 ** Argument zMaster may point to Pager.pTmpSpace. So that buffer is not 
38755 ** available for use within this function.
38756 **
38757 ** When a master journal file is created, it is populated with the names 
38758 ** of all of its child journals, one after another, formatted as utf-8 
38759 ** encoded text. The end of each child journal file is marked with a 
38760 ** nul-terminator byte (0x00). i.e. the entire contents of a master journal
38761 ** file for a transaction involving two databases might be:
38762 **
38763 **   "/home/bill/a.db-journal\x00/home/bill/b.db-journal\x00"
38764 **
38765 ** A master journal file may only be deleted once all of its child 
38766 ** journals have been rolled back.
38767 **
38768 ** This function reads the contents of the master-journal file into 
38769 ** memory and loops through each of the child journal names. For
38770 ** each child journal, it checks if:
38771 **
38772 **   * if the child journal exists, and if so
38773 **   * if the child journal contains a reference to master journal 
38774 **     file zMaster
38775 **
38776 ** If a child journal can be found that matches both of the criteria
38777 ** above, this function returns without doing anything. Otherwise, if
38778 ** no such child journal can be found, file zMaster is deleted from
38779 ** the file-system using sqlite3OsDelete().
38780 **
38781 ** If an IO error within this function, an error code is returned. This
38782 ** function allocates memory by calling sqlite3Malloc(). If an allocation
38783 ** fails, SQLITE_NOMEM is returned. Otherwise, if no IO or malloc errors 
38784 ** occur, SQLITE_OK is returned.
38785 **
38786 ** TODO: This function allocates a single block of memory to load
38787 ** the entire contents of the master journal file. This could be
38788 ** a couple of kilobytes or so - potentially larger than the page 
38789 ** size.
38790 */
38791 static int pager_delmaster(Pager *pPager, const char *zMaster){
38792   sqlite3_vfs *pVfs = pPager->pVfs;
38793   int rc;                   /* Return code */
38794   sqlite3_file *pMaster;    /* Malloc'd master-journal file descriptor */
38795   sqlite3_file *pJournal;   /* Malloc'd child-journal file descriptor */
38796   char *zMasterJournal = 0; /* Contents of master journal file */
38797   i64 nMasterJournal;       /* Size of master journal file */
38798   char *zJournal;           /* Pointer to one journal within MJ file */
38799   char *zMasterPtr;         /* Space to hold MJ filename from a journal file */
38800   int nMasterPtr;           /* Amount of space allocated to zMasterPtr[] */
38801
38802   /* Allocate space for both the pJournal and pMaster file descriptors.
38803   ** If successful, open the master journal file for reading.
38804   */
38805   pMaster = (sqlite3_file *)sqlite3MallocZero(pVfs->szOsFile * 2);
38806   pJournal = (sqlite3_file *)(((u8 *)pMaster) + pVfs->szOsFile);
38807   if( !pMaster ){
38808     rc = SQLITE_NOMEM;
38809   }else{
38810     const int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_MASTER_JOURNAL);
38811     rc = sqlite3OsOpen(pVfs, zMaster, pMaster, flags, 0);
38812   }
38813   if( rc!=SQLITE_OK ) goto delmaster_out;
38814
38815   /* Load the entire master journal file into space obtained from
38816   ** sqlite3_malloc() and pointed to by zMasterJournal.   Also obtain
38817   ** sufficient space (in zMasterPtr) to hold the names of master
38818   ** journal files extracted from regular rollback-journals.
38819   */
38820   rc = sqlite3OsFileSize(pMaster, &nMasterJournal);
38821   if( rc!=SQLITE_OK ) goto delmaster_out;
38822   nMasterPtr = pVfs->mxPathname+1;
38823   zMasterJournal = sqlite3Malloc((int)nMasterJournal + nMasterPtr + 1);
38824   if( !zMasterJournal ){
38825     rc = SQLITE_NOMEM;
38826     goto delmaster_out;
38827   }
38828   zMasterPtr = &zMasterJournal[nMasterJournal+1];
38829   rc = sqlite3OsRead(pMaster, zMasterJournal, (int)nMasterJournal, 0);
38830   if( rc!=SQLITE_OK ) goto delmaster_out;
38831   zMasterJournal[nMasterJournal] = 0;
38832
38833   zJournal = zMasterJournal;
38834   while( (zJournal-zMasterJournal)<nMasterJournal ){
38835     int exists;
38836     rc = sqlite3OsAccess(pVfs, zJournal, SQLITE_ACCESS_EXISTS, &exists);
38837     if( rc!=SQLITE_OK ){
38838       goto delmaster_out;
38839     }
38840     if( exists ){
38841       /* One of the journals pointed to by the master journal exists.
38842       ** Open it and check if it points at the master journal. If
38843       ** so, return without deleting the master journal file.
38844       */
38845       int c;
38846       int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL);
38847       rc = sqlite3OsOpen(pVfs, zJournal, pJournal, flags, 0);
38848       if( rc!=SQLITE_OK ){
38849         goto delmaster_out;
38850       }
38851
38852       rc = readMasterJournal(pJournal, zMasterPtr, nMasterPtr);
38853       sqlite3OsClose(pJournal);
38854       if( rc!=SQLITE_OK ){
38855         goto delmaster_out;
38856       }
38857
38858       c = zMasterPtr[0]!=0 && strcmp(zMasterPtr, zMaster)==0;
38859       if( c ){
38860         /* We have a match. Do not delete the master journal file. */
38861         goto delmaster_out;
38862       }
38863     }
38864     zJournal += (sqlite3Strlen30(zJournal)+1);
38865   }
38866  
38867   sqlite3OsClose(pMaster);
38868   rc = sqlite3OsDelete(pVfs, zMaster, 0);
38869
38870 delmaster_out:
38871   sqlite3_free(zMasterJournal);
38872   if( pMaster ){
38873     sqlite3OsClose(pMaster);
38874     assert( !isOpen(pJournal) );
38875     sqlite3_free(pMaster);
38876   }
38877   return rc;
38878 }
38879
38880
38881 /*
38882 ** This function is used to change the actual size of the database 
38883 ** file in the file-system. This only happens when committing a transaction,
38884 ** or rolling back a transaction (including rolling back a hot-journal).
38885 **
38886 ** If the main database file is not open, or the pager is not in either
38887 ** DBMOD or OPEN state, this function is a no-op. Otherwise, the size 
38888 ** of the file is changed to nPage pages (nPage*pPager->pageSize bytes). 
38889 ** If the file on disk is currently larger than nPage pages, then use the VFS
38890 ** xTruncate() method to truncate it.
38891 **
38892 ** Or, it might might be the case that the file on disk is smaller than 
38893 ** nPage pages. Some operating system implementations can get confused if 
38894 ** you try to truncate a file to some size that is larger than it 
38895 ** currently is, so detect this case and write a single zero byte to 
38896 ** the end of the new file instead.
38897 **
38898 ** If successful, return SQLITE_OK. If an IO error occurs while modifying
38899 ** the database file, return the error code to the caller.
38900 */
38901 static int pager_truncate(Pager *pPager, Pgno nPage){
38902   int rc = SQLITE_OK;
38903   assert( pPager->eState!=PAGER_ERROR );
38904   assert( pPager->eState!=PAGER_READER );
38905   
38906   if( isOpen(pPager->fd) 
38907    && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN) 
38908   ){
38909     i64 currentSize, newSize;
38910     int szPage = pPager->pageSize;
38911     assert( pPager->eLock==EXCLUSIVE_LOCK );
38912     /* TODO: Is it safe to use Pager.dbFileSize here? */
38913     rc = sqlite3OsFileSize(pPager->fd, &currentSize);
38914     newSize = szPage*(i64)nPage;
38915     if( rc==SQLITE_OK && currentSize!=newSize ){
38916       if( currentSize>newSize ){
38917         rc = sqlite3OsTruncate(pPager->fd, newSize);
38918       }else{
38919         char *pTmp = pPager->pTmpSpace;
38920         memset(pTmp, 0, szPage);
38921         testcase( (newSize-szPage) <  currentSize );
38922         testcase( (newSize-szPage) == currentSize );
38923         testcase( (newSize-szPage) >  currentSize );
38924         rc = sqlite3OsWrite(pPager->fd, pTmp, szPage, newSize-szPage);
38925       }
38926       if( rc==SQLITE_OK ){
38927         pPager->dbFileSize = nPage;
38928       }
38929     }
38930   }
38931   return rc;
38932 }
38933
38934 /*
38935 ** Set the value of the Pager.sectorSize variable for the given
38936 ** pager based on the value returned by the xSectorSize method
38937 ** of the open database file. The sector size will be used used 
38938 ** to determine the size and alignment of journal header and 
38939 ** master journal pointers within created journal files.
38940 **
38941 ** For temporary files the effective sector size is always 512 bytes.
38942 **
38943 ** Otherwise, for non-temporary files, the effective sector size is
38944 ** the value returned by the xSectorSize() method rounded up to 32 if
38945 ** it is less than 32, or rounded down to MAX_SECTOR_SIZE if it
38946 ** is greater than MAX_SECTOR_SIZE.
38947 */
38948 static void setSectorSize(Pager *pPager){
38949   assert( isOpen(pPager->fd) || pPager->tempFile );
38950
38951   if( !pPager->tempFile ){
38952     /* Sector size doesn't matter for temporary files. Also, the file
38953     ** may not have been opened yet, in which case the OsSectorSize()
38954     ** call will segfault.
38955     */
38956     pPager->sectorSize = sqlite3OsSectorSize(pPager->fd);
38957   }
38958   if( pPager->sectorSize<32 ){
38959     pPager->sectorSize = 512;
38960   }
38961   if( pPager->sectorSize>MAX_SECTOR_SIZE ){
38962     assert( MAX_SECTOR_SIZE>=512 );
38963     pPager->sectorSize = MAX_SECTOR_SIZE;
38964   }
38965 }
38966
38967 /*
38968 ** Playback the journal and thus restore the database file to
38969 ** the state it was in before we started making changes.  
38970 **
38971 ** The journal file format is as follows: 
38972 **
38973 **  (1)  8 byte prefix.  A copy of aJournalMagic[].
38974 **  (2)  4 byte big-endian integer which is the number of valid page records
38975 **       in the journal.  If this value is 0xffffffff, then compute the
38976 **       number of page records from the journal size.
38977 **  (3)  4 byte big-endian integer which is the initial value for the 
38978 **       sanity checksum.
38979 **  (4)  4 byte integer which is the number of pages to truncate the
38980 **       database to during a rollback.
38981 **  (5)  4 byte big-endian integer which is the sector size.  The header
38982 **       is this many bytes in size.
38983 **  (6)  4 byte big-endian integer which is the page size.
38984 **  (7)  zero padding out to the next sector size.
38985 **  (8)  Zero or more pages instances, each as follows:
38986 **        +  4 byte page number.
38987 **        +  pPager->pageSize bytes of data.
38988 **        +  4 byte checksum
38989 **
38990 ** When we speak of the journal header, we mean the first 7 items above.
38991 ** Each entry in the journal is an instance of the 8th item.
38992 **
38993 ** Call the value from the second bullet "nRec".  nRec is the number of
38994 ** valid page entries in the journal.  In most cases, you can compute the
38995 ** value of nRec from the size of the journal file.  But if a power
38996 ** failure occurred while the journal was being written, it could be the
38997 ** case that the size of the journal file had already been increased but
38998 ** the extra entries had not yet made it safely to disk.  In such a case,
38999 ** the value of nRec computed from the file size would be too large.  For
39000 ** that reason, we always use the nRec value in the header.
39001 **
39002 ** If the nRec value is 0xffffffff it means that nRec should be computed
39003 ** from the file size.  This value is used when the user selects the
39004 ** no-sync option for the journal.  A power failure could lead to corruption
39005 ** in this case.  But for things like temporary table (which will be
39006 ** deleted when the power is restored) we don't care.  
39007 **
39008 ** If the file opened as the journal file is not a well-formed
39009 ** journal file then all pages up to the first corrupted page are rolled
39010 ** back (or no pages if the journal header is corrupted). The journal file
39011 ** is then deleted and SQLITE_OK returned, just as if no corruption had
39012 ** been encountered.
39013 **
39014 ** If an I/O or malloc() error occurs, the journal-file is not deleted
39015 ** and an error code is returned.
39016 **
39017 ** The isHot parameter indicates that we are trying to rollback a journal
39018 ** that might be a hot journal.  Or, it could be that the journal is 
39019 ** preserved because of JOURNALMODE_PERSIST or JOURNALMODE_TRUNCATE.
39020 ** If the journal really is hot, reset the pager cache prior rolling
39021 ** back any content.  If the journal is merely persistent, no reset is
39022 ** needed.
39023 */
39024 static int pager_playback(Pager *pPager, int isHot){
39025   sqlite3_vfs *pVfs = pPager->pVfs;
39026   i64 szJ;                 /* Size of the journal file in bytes */
39027   u32 nRec;                /* Number of Records in the journal */
39028   u32 u;                   /* Unsigned loop counter */
39029   Pgno mxPg = 0;           /* Size of the original file in pages */
39030   int rc;                  /* Result code of a subroutine */
39031   int res = 1;             /* Value returned by sqlite3OsAccess() */
39032   char *zMaster = 0;       /* Name of master journal file if any */
39033   int needPagerReset;      /* True to reset page prior to first page rollback */
39034
39035   /* Figure out how many records are in the journal.  Abort early if
39036   ** the journal is empty.
39037   */
39038   assert( isOpen(pPager->jfd) );
39039   rc = sqlite3OsFileSize(pPager->jfd, &szJ);
39040   if( rc!=SQLITE_OK ){
39041     goto end_playback;
39042   }
39043
39044   /* Read the master journal name from the journal, if it is present.
39045   ** If a master journal file name is specified, but the file is not
39046   ** present on disk, then the journal is not hot and does not need to be
39047   ** played back.
39048   **
39049   ** TODO: Technically the following is an error because it assumes that
39050   ** buffer Pager.pTmpSpace is (mxPathname+1) bytes or larger. i.e. that
39051   ** (pPager->pageSize >= pPager->pVfs->mxPathname+1). Using os_unix.c,
39052   **  mxPathname is 512, which is the same as the minimum allowable value
39053   ** for pageSize.
39054   */
39055   zMaster = pPager->pTmpSpace;
39056   rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1);
39057   if( rc==SQLITE_OK && zMaster[0] ){
39058     rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res);
39059   }
39060   zMaster = 0;
39061   if( rc!=SQLITE_OK || !res ){
39062     goto end_playback;
39063   }
39064   pPager->journalOff = 0;
39065   needPagerReset = isHot;
39066
39067   /* This loop terminates either when a readJournalHdr() or 
39068   ** pager_playback_one_page() call returns SQLITE_DONE or an IO error 
39069   ** occurs. 
39070   */
39071   while( 1 ){
39072     /* Read the next journal header from the journal file.  If there are
39073     ** not enough bytes left in the journal file for a complete header, or
39074     ** it is corrupted, then a process must have failed while writing it.
39075     ** This indicates nothing more needs to be rolled back.
39076     */
39077     rc = readJournalHdr(pPager, isHot, szJ, &nRec, &mxPg);
39078     if( rc!=SQLITE_OK ){ 
39079       if( rc==SQLITE_DONE ){
39080         rc = SQLITE_OK;
39081       }
39082       goto end_playback;
39083     }
39084
39085     /* If nRec is 0xffffffff, then this journal was created by a process
39086     ** working in no-sync mode. This means that the rest of the journal
39087     ** file consists of pages, there are no more journal headers. Compute
39088     ** the value of nRec based on this assumption.
39089     */
39090     if( nRec==0xffffffff ){
39091       assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) );
39092       nRec = (int)((szJ - JOURNAL_HDR_SZ(pPager))/JOURNAL_PG_SZ(pPager));
39093     }
39094
39095     /* If nRec is 0 and this rollback is of a transaction created by this
39096     ** process and if this is the final header in the journal, then it means
39097     ** that this part of the journal was being filled but has not yet been
39098     ** synced to disk.  Compute the number of pages based on the remaining
39099     ** size of the file.
39100     **
39101     ** The third term of the test was added to fix ticket #2565.
39102     ** When rolling back a hot journal, nRec==0 always means that the next
39103     ** chunk of the journal contains zero pages to be rolled back.  But
39104     ** when doing a ROLLBACK and the nRec==0 chunk is the last chunk in
39105     ** the journal, it means that the journal might contain additional
39106     ** pages that need to be rolled back and that the number of pages 
39107     ** should be computed based on the journal file size.
39108     */
39109     if( nRec==0 && !isHot &&
39110         pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff ){
39111       nRec = (int)((szJ - pPager->journalOff) / JOURNAL_PG_SZ(pPager));
39112     }
39113
39114     /* If this is the first header read from the journal, truncate the
39115     ** database file back to its original size.
39116     */
39117     if( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ){
39118       rc = pager_truncate(pPager, mxPg);
39119       if( rc!=SQLITE_OK ){
39120         goto end_playback;
39121       }
39122       pPager->dbSize = mxPg;
39123     }
39124
39125     /* Copy original pages out of the journal and back into the 
39126     ** database file and/or page cache.
39127     */
39128     for(u=0; u<nRec; u++){
39129       if( needPagerReset ){
39130         pager_reset(pPager);
39131         needPagerReset = 0;
39132       }
39133       rc = pager_playback_one_page(pPager,&pPager->journalOff,0,1,0);
39134       if( rc!=SQLITE_OK ){
39135         if( rc==SQLITE_DONE ){
39136           rc = SQLITE_OK;
39137           pPager->journalOff = szJ;
39138           break;
39139         }else if( rc==SQLITE_IOERR_SHORT_READ ){
39140           /* If the journal has been truncated, simply stop reading and
39141           ** processing the journal. This might happen if the journal was
39142           ** not completely written and synced prior to a crash.  In that
39143           ** case, the database should have never been written in the
39144           ** first place so it is OK to simply abandon the rollback. */
39145           rc = SQLITE_OK;
39146           goto end_playback;
39147         }else{
39148           /* If we are unable to rollback, quit and return the error
39149           ** code.  This will cause the pager to enter the error state
39150           ** so that no further harm will be done.  Perhaps the next
39151           ** process to come along will be able to rollback the database.
39152           */
39153           goto end_playback;
39154         }
39155       }
39156     }
39157   }
39158   /*NOTREACHED*/
39159   assert( 0 );
39160
39161 end_playback:
39162   /* Following a rollback, the database file should be back in its original
39163   ** state prior to the start of the transaction, so invoke the
39164   ** SQLITE_FCNTL_DB_UNCHANGED file-control method to disable the
39165   ** assertion that the transaction counter was modified.
39166   */
39167   assert(
39168     pPager->fd->pMethods==0 ||
39169     sqlite3OsFileControl(pPager->fd,SQLITE_FCNTL_DB_UNCHANGED,0)>=SQLITE_OK
39170   );
39171
39172   /* If this playback is happening automatically as a result of an IO or 
39173   ** malloc error that occurred after the change-counter was updated but 
39174   ** before the transaction was committed, then the change-counter 
39175   ** modification may just have been reverted. If this happens in exclusive 
39176   ** mode, then subsequent transactions performed by the connection will not
39177   ** update the change-counter at all. This may lead to cache inconsistency
39178   ** problems for other processes at some point in the future. So, just
39179   ** in case this has happened, clear the changeCountDone flag now.
39180   */
39181   pPager->changeCountDone = pPager->tempFile;
39182
39183   if( rc==SQLITE_OK ){
39184     zMaster = pPager->pTmpSpace;
39185     rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1);
39186     testcase( rc!=SQLITE_OK );
39187   }
39188   if( rc==SQLITE_OK
39189    && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
39190   ){
39191     rc = sqlite3PagerSync(pPager);
39192   }
39193   if( rc==SQLITE_OK ){
39194     rc = pager_end_transaction(pPager, zMaster[0]!='\0');
39195     testcase( rc!=SQLITE_OK );
39196   }
39197   if( rc==SQLITE_OK && zMaster[0] && res ){
39198     /* If there was a master journal and this routine will return success,
39199     ** see if it is possible to delete the master journal.
39200     */
39201     rc = pager_delmaster(pPager, zMaster);
39202     testcase( rc!=SQLITE_OK );
39203   }
39204
39205   /* The Pager.sectorSize variable may have been updated while rolling
39206   ** back a journal created by a process with a different sector size
39207   ** value. Reset it to the correct value for this process.
39208   */
39209   setSectorSize(pPager);
39210   return rc;
39211 }
39212
39213
39214 /*
39215 ** Read the content for page pPg out of the database file and into 
39216 ** pPg->pData. A shared lock or greater must be held on the database
39217 ** file before this function is called.
39218 **
39219 ** If page 1 is read, then the value of Pager.dbFileVers[] is set to
39220 ** the value read from the database file.
39221 **
39222 ** If an IO error occurs, then the IO error is returned to the caller.
39223 ** Otherwise, SQLITE_OK is returned.
39224 */
39225 static int readDbPage(PgHdr *pPg){
39226   Pager *pPager = pPg->pPager; /* Pager object associated with page pPg */
39227   Pgno pgno = pPg->pgno;       /* Page number to read */
39228   int rc = SQLITE_OK;          /* Return code */
39229   int isInWal = 0;             /* True if page is in log file */
39230   int pgsz = pPager->pageSize; /* Number of bytes to read */
39231
39232   assert( pPager->eState>=PAGER_READER && !MEMDB );
39233   assert( isOpen(pPager->fd) );
39234
39235   if( NEVER(!isOpen(pPager->fd)) ){
39236     assert( pPager->tempFile );
39237     memset(pPg->pData, 0, pPager->pageSize);
39238     return SQLITE_OK;
39239   }
39240
39241   if( pagerUseWal(pPager) ){
39242     /* Try to pull the page from the write-ahead log. */
39243     rc = sqlite3WalRead(pPager->pWal, pgno, &isInWal, pgsz, pPg->pData);
39244   }
39245   if( rc==SQLITE_OK && !isInWal ){
39246     i64 iOffset = (pgno-1)*(i64)pPager->pageSize;
39247     rc = sqlite3OsRead(pPager->fd, pPg->pData, pgsz, iOffset);
39248     if( rc==SQLITE_IOERR_SHORT_READ ){
39249       rc = SQLITE_OK;
39250     }
39251   }
39252
39253   if( pgno==1 ){
39254     if( rc ){
39255       /* If the read is unsuccessful, set the dbFileVers[] to something
39256       ** that will never be a valid file version.  dbFileVers[] is a copy
39257       ** of bytes 24..39 of the database.  Bytes 28..31 should always be
39258       ** zero or the size of the database in page. Bytes 32..35 and 35..39
39259       ** should be page numbers which are never 0xffffffff.  So filling
39260       ** pPager->dbFileVers[] with all 0xff bytes should suffice.
39261       **
39262       ** For an encrypted database, the situation is more complex:  bytes
39263       ** 24..39 of the database are white noise.  But the probability of
39264       ** white noising equaling 16 bytes of 0xff is vanishingly small so
39265       ** we should still be ok.
39266       */
39267       memset(pPager->dbFileVers, 0xff, sizeof(pPager->dbFileVers));
39268     }else{
39269       u8 *dbFileVers = &((u8*)pPg->pData)[24];
39270       memcpy(&pPager->dbFileVers, dbFileVers, sizeof(pPager->dbFileVers));
39271     }
39272   }
39273   CODEC1(pPager, pPg->pData, pgno, 3, rc = SQLITE_NOMEM);
39274
39275   PAGER_INCR(sqlite3_pager_readdb_count);
39276   PAGER_INCR(pPager->nRead);
39277   IOTRACE(("PGIN %p %d\n", pPager, pgno));
39278   PAGERTRACE(("FETCH %d page %d hash(%08x)\n",
39279                PAGERID(pPager), pgno, pager_pagehash(pPg)));
39280
39281   return rc;
39282 }
39283
39284 /*
39285 ** Update the value of the change-counter at offsets 24 and 92 in
39286 ** the header and the sqlite version number at offset 96.
39287 **
39288 ** This is an unconditional update.  See also the pager_incr_changecounter()
39289 ** routine which only updates the change-counter if the update is actually
39290 ** needed, as determined by the pPager->changeCountDone state variable.
39291 */
39292 static void pager_write_changecounter(PgHdr *pPg){
39293   u32 change_counter;
39294
39295   /* Increment the value just read and write it back to byte 24. */
39296   change_counter = sqlite3Get4byte((u8*)pPg->pPager->dbFileVers)+1;
39297   put32bits(((char*)pPg->pData)+24, change_counter);
39298
39299   /* Also store the SQLite version number in bytes 96..99 and in
39300   ** bytes 92..95 store the change counter for which the version number
39301   ** is valid. */
39302   put32bits(((char*)pPg->pData)+92, change_counter);
39303   put32bits(((char*)pPg->pData)+96, SQLITE_VERSION_NUMBER);
39304 }
39305
39306 #ifndef SQLITE_OMIT_WAL
39307 /*
39308 ** This function is invoked once for each page that has already been 
39309 ** written into the log file when a WAL transaction is rolled back.
39310 ** Parameter iPg is the page number of said page. The pCtx argument 
39311 ** is actually a pointer to the Pager structure.
39312 **
39313 ** If page iPg is present in the cache, and has no outstanding references,
39314 ** it is discarded. Otherwise, if there are one or more outstanding
39315 ** references, the page content is reloaded from the database. If the
39316 ** attempt to reload content from the database is required and fails, 
39317 ** return an SQLite error code. Otherwise, SQLITE_OK.
39318 */
39319 static int pagerUndoCallback(void *pCtx, Pgno iPg){
39320   int rc = SQLITE_OK;
39321   Pager *pPager = (Pager *)pCtx;
39322   PgHdr *pPg;
39323
39324   pPg = sqlite3PagerLookup(pPager, iPg);
39325   if( pPg ){
39326     if( sqlite3PcachePageRefcount(pPg)==1 ){
39327       sqlite3PcacheDrop(pPg);
39328     }else{
39329       rc = readDbPage(pPg);
39330       if( rc==SQLITE_OK ){
39331         pPager->xReiniter(pPg);
39332       }
39333       sqlite3PagerUnref(pPg);
39334     }
39335   }
39336
39337   /* Normally, if a transaction is rolled back, any backup processes are
39338   ** updated as data is copied out of the rollback journal and into the
39339   ** database. This is not generally possible with a WAL database, as
39340   ** rollback involves simply truncating the log file. Therefore, if one
39341   ** or more frames have already been written to the log (and therefore 
39342   ** also copied into the backup databases) as part of this transaction,
39343   ** the backups must be restarted.
39344   */
39345   sqlite3BackupRestart(pPager->pBackup);
39346
39347   return rc;
39348 }
39349
39350 /*
39351 ** This function is called to rollback a transaction on a WAL database.
39352 */
39353 static int pagerRollbackWal(Pager *pPager){
39354   int rc;                         /* Return Code */
39355   PgHdr *pList;                   /* List of dirty pages to revert */
39356
39357   /* For all pages in the cache that are currently dirty or have already
39358   ** been written (but not committed) to the log file, do one of the 
39359   ** following:
39360   **
39361   **   + Discard the cached page (if refcount==0), or
39362   **   + Reload page content from the database (if refcount>0).
39363   */
39364   pPager->dbSize = pPager->dbOrigSize;
39365   rc = sqlite3WalUndo(pPager->pWal, pagerUndoCallback, (void *)pPager);
39366   pList = sqlite3PcacheDirtyList(pPager->pPCache);
39367   while( pList && rc==SQLITE_OK ){
39368     PgHdr *pNext = pList->pDirty;
39369     rc = pagerUndoCallback((void *)pPager, pList->pgno);
39370     pList = pNext;
39371   }
39372
39373   return rc;
39374 }
39375
39376 /*
39377 ** This function is a wrapper around sqlite3WalFrames(). As well as logging
39378 ** the contents of the list of pages headed by pList (connected by pDirty),
39379 ** this function notifies any active backup processes that the pages have
39380 ** changed. 
39381 **
39382 ** The list of pages passed into this routine is always sorted by page number.
39383 ** Hence, if page 1 appears anywhere on the list, it will be the first page.
39384 */ 
39385 static int pagerWalFrames(
39386   Pager *pPager,                  /* Pager object */
39387   PgHdr *pList,                   /* List of frames to log */
39388   Pgno nTruncate,                 /* Database size after this commit */
39389   int isCommit,                   /* True if this is a commit */
39390   int syncFlags                   /* Flags to pass to OsSync() (or 0) */
39391 ){
39392   int rc;                         /* Return code */
39393 #if defined(SQLITE_DEBUG) || defined(SQLITE_CHECK_PAGES)
39394   PgHdr *p;                       /* For looping over pages */
39395 #endif
39396
39397   assert( pPager->pWal );
39398 #ifdef SQLITE_DEBUG
39399   /* Verify that the page list is in accending order */
39400   for(p=pList; p && p->pDirty; p=p->pDirty){
39401     assert( p->pgno < p->pDirty->pgno );
39402   }
39403 #endif
39404
39405   if( isCommit ){
39406     /* If a WAL transaction is being committed, there is no point in writing
39407     ** any pages with page numbers greater than nTruncate into the WAL file.
39408     ** They will never be read by any client. So remove them from the pDirty
39409     ** list here. */
39410     PgHdr *p;
39411     PgHdr **ppNext = &pList;
39412     for(p=pList; (*ppNext = p); p=p->pDirty){
39413       if( p->pgno<=nTruncate ) ppNext = &p->pDirty;
39414     }
39415     assert( pList );
39416   }
39417
39418   if( pList->pgno==1 ) pager_write_changecounter(pList);
39419   rc = sqlite3WalFrames(pPager->pWal, 
39420       pPager->pageSize, pList, nTruncate, isCommit, syncFlags
39421   );
39422   if( rc==SQLITE_OK && pPager->pBackup ){
39423     PgHdr *p;
39424     for(p=pList; p; p=p->pDirty){
39425       sqlite3BackupUpdate(pPager->pBackup, p->pgno, (u8 *)p->pData);
39426     }
39427   }
39428
39429 #ifdef SQLITE_CHECK_PAGES
39430   pList = sqlite3PcacheDirtyList(pPager->pPCache);
39431   for(p=pList; p; p=p->pDirty){
39432     pager_set_pagehash(p);
39433   }
39434 #endif
39435
39436   return rc;
39437 }
39438
39439 /*
39440 ** Begin a read transaction on the WAL.
39441 **
39442 ** This routine used to be called "pagerOpenSnapshot()" because it essentially
39443 ** makes a snapshot of the database at the current point in time and preserves
39444 ** that snapshot for use by the reader in spite of concurrently changes by
39445 ** other writers or checkpointers.
39446 */
39447 static int pagerBeginReadTransaction(Pager *pPager){
39448   int rc;                         /* Return code */
39449   int changed = 0;                /* True if cache must be reset */
39450
39451   assert( pagerUseWal(pPager) );
39452   assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER );
39453
39454   /* sqlite3WalEndReadTransaction() was not called for the previous
39455   ** transaction in locking_mode=EXCLUSIVE.  So call it now.  If we
39456   ** are in locking_mode=NORMAL and EndRead() was previously called,
39457   ** the duplicate call is harmless.
39458   */
39459   sqlite3WalEndReadTransaction(pPager->pWal);
39460
39461   rc = sqlite3WalBeginReadTransaction(pPager->pWal, &changed);
39462   if( rc!=SQLITE_OK || changed ){
39463     pager_reset(pPager);
39464   }
39465
39466   return rc;
39467 }
39468 #endif
39469
39470 /*
39471 ** This function is called as part of the transition from PAGER_OPEN
39472 ** to PAGER_READER state to determine the size of the database file
39473 ** in pages (assuming the page size currently stored in Pager.pageSize).
39474 **
39475 ** If no error occurs, SQLITE_OK is returned and the size of the database
39476 ** in pages is stored in *pnPage. Otherwise, an error code (perhaps
39477 ** SQLITE_IOERR_FSTAT) is returned and *pnPage is left unmodified.
39478 */
39479 static int pagerPagecount(Pager *pPager, Pgno *pnPage){
39480   Pgno nPage;                     /* Value to return via *pnPage */
39481
39482   /* Query the WAL sub-system for the database size. The WalDbsize()
39483   ** function returns zero if the WAL is not open (i.e. Pager.pWal==0), or
39484   ** if the database size is not available. The database size is not
39485   ** available from the WAL sub-system if the log file is empty or
39486   ** contains no valid committed transactions.
39487   */
39488   assert( pPager->eState==PAGER_OPEN );
39489   assert( pPager->eLock>=SHARED_LOCK || pPager->noReadlock );
39490   nPage = sqlite3WalDbsize(pPager->pWal);
39491
39492   /* If the database size was not available from the WAL sub-system,
39493   ** determine it based on the size of the database file. If the size
39494   ** of the database file is not an integer multiple of the page-size,
39495   ** round down to the nearest page. Except, any file larger than 0
39496   ** bytes in size is considered to contain at least one page.
39497   */
39498   if( nPage==0 ){
39499     i64 n = 0;                    /* Size of db file in bytes */
39500     assert( isOpen(pPager->fd) || pPager->tempFile );
39501     if( isOpen(pPager->fd) ){
39502       int rc = sqlite3OsFileSize(pPager->fd, &n);
39503       if( rc!=SQLITE_OK ){
39504         return rc;
39505       }
39506     }
39507     nPage = (Pgno)(n / pPager->pageSize);
39508     if( nPage==0 && n>0 ){
39509       nPage = 1;
39510     }
39511   }
39512
39513   /* If the current number of pages in the file is greater than the
39514   ** configured maximum pager number, increase the allowed limit so
39515   ** that the file can be read.
39516   */
39517   if( nPage>pPager->mxPgno ){
39518     pPager->mxPgno = (Pgno)nPage;
39519   }
39520
39521   *pnPage = nPage;
39522   return SQLITE_OK;
39523 }
39524
39525 #ifndef SQLITE_OMIT_WAL
39526 /*
39527 ** Check if the *-wal file that corresponds to the database opened by pPager
39528 ** exists if the database is not empy, or verify that the *-wal file does
39529 ** not exist (by deleting it) if the database file is empty.
39530 **
39531 ** If the database is not empty and the *-wal file exists, open the pager
39532 ** in WAL mode.  If the database is empty or if no *-wal file exists and
39533 ** if no error occurs, make sure Pager.journalMode is not set to
39534 ** PAGER_JOURNALMODE_WAL.
39535 **
39536 ** Return SQLITE_OK or an error code.
39537 **
39538 ** The caller must hold a SHARED lock on the database file to call this
39539 ** function. Because an EXCLUSIVE lock on the db file is required to delete 
39540 ** a WAL on a none-empty database, this ensures there is no race condition 
39541 ** between the xAccess() below and an xDelete() being executed by some 
39542 ** other connection.
39543 */
39544 static int pagerOpenWalIfPresent(Pager *pPager){
39545   int rc = SQLITE_OK;
39546   assert( pPager->eState==PAGER_OPEN );
39547   assert( pPager->eLock>=SHARED_LOCK || pPager->noReadlock );
39548
39549   if( !pPager->tempFile ){
39550     int isWal;                    /* True if WAL file exists */
39551     Pgno nPage;                   /* Size of the database file */
39552
39553     rc = pagerPagecount(pPager, &nPage);
39554     if( rc ) return rc;
39555     if( nPage==0 ){
39556       rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0);
39557       isWal = 0;
39558     }else{
39559       rc = sqlite3OsAccess(
39560           pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal
39561       );
39562     }
39563     if( rc==SQLITE_OK ){
39564       if( isWal ){
39565         testcase( sqlite3PcachePagecount(pPager->pPCache)==0 );
39566         rc = sqlite3PagerOpenWal(pPager, 0);
39567       }else if( pPager->journalMode==PAGER_JOURNALMODE_WAL ){
39568         pPager->journalMode = PAGER_JOURNALMODE_DELETE;
39569       }
39570     }
39571   }
39572   return rc;
39573 }
39574 #endif
39575
39576 /*
39577 ** Playback savepoint pSavepoint. Or, if pSavepoint==NULL, then playback
39578 ** the entire master journal file. The case pSavepoint==NULL occurs when 
39579 ** a ROLLBACK TO command is invoked on a SAVEPOINT that is a transaction 
39580 ** savepoint.
39581 **
39582 ** When pSavepoint is not NULL (meaning a non-transaction savepoint is 
39583 ** being rolled back), then the rollback consists of up to three stages,
39584 ** performed in the order specified:
39585 **
39586 **   * Pages are played back from the main journal starting at byte
39587 **     offset PagerSavepoint.iOffset and continuing to 
39588 **     PagerSavepoint.iHdrOffset, or to the end of the main journal
39589 **     file if PagerSavepoint.iHdrOffset is zero.
39590 **
39591 **   * If PagerSavepoint.iHdrOffset is not zero, then pages are played
39592 **     back starting from the journal header immediately following 
39593 **     PagerSavepoint.iHdrOffset to the end of the main journal file.
39594 **
39595 **   * Pages are then played back from the sub-journal file, starting
39596 **     with the PagerSavepoint.iSubRec and continuing to the end of
39597 **     the journal file.
39598 **
39599 ** Throughout the rollback process, each time a page is rolled back, the
39600 ** corresponding bit is set in a bitvec structure (variable pDone in the
39601 ** implementation below). This is used to ensure that a page is only
39602 ** rolled back the first time it is encountered in either journal.
39603 **
39604 ** If pSavepoint is NULL, then pages are only played back from the main
39605 ** journal file. There is no need for a bitvec in this case.
39606 **
39607 ** In either case, before playback commences the Pager.dbSize variable
39608 ** is reset to the value that it held at the start of the savepoint 
39609 ** (or transaction). No page with a page-number greater than this value
39610 ** is played back. If one is encountered it is simply skipped.
39611 */
39612 static int pagerPlaybackSavepoint(Pager *pPager, PagerSavepoint *pSavepoint){
39613   i64 szJ;                 /* Effective size of the main journal */
39614   i64 iHdrOff;             /* End of first segment of main-journal records */
39615   int rc = SQLITE_OK;      /* Return code */
39616   Bitvec *pDone = 0;       /* Bitvec to ensure pages played back only once */
39617
39618   assert( pPager->eState!=PAGER_ERROR );
39619   assert( pPager->eState>=PAGER_WRITER_LOCKED );
39620
39621   /* Allocate a bitvec to use to store the set of pages rolled back */
39622   if( pSavepoint ){
39623     pDone = sqlite3BitvecCreate(pSavepoint->nOrig);
39624     if( !pDone ){
39625       return SQLITE_NOMEM;
39626     }
39627   }
39628
39629   /* Set the database size back to the value it was before the savepoint 
39630   ** being reverted was opened.
39631   */
39632   pPager->dbSize = pSavepoint ? pSavepoint->nOrig : pPager->dbOrigSize;
39633   pPager->changeCountDone = pPager->tempFile;
39634
39635   if( !pSavepoint && pagerUseWal(pPager) ){
39636     return pagerRollbackWal(pPager);
39637   }
39638
39639   /* Use pPager->journalOff as the effective size of the main rollback
39640   ** journal.  The actual file might be larger than this in
39641   ** PAGER_JOURNALMODE_TRUNCATE or PAGER_JOURNALMODE_PERSIST.  But anything
39642   ** past pPager->journalOff is off-limits to us.
39643   */
39644   szJ = pPager->journalOff;
39645   assert( pagerUseWal(pPager)==0 || szJ==0 );
39646
39647   /* Begin by rolling back records from the main journal starting at
39648   ** PagerSavepoint.iOffset and continuing to the next journal header.
39649   ** There might be records in the main journal that have a page number
39650   ** greater than the current database size (pPager->dbSize) but those
39651   ** will be skipped automatically.  Pages are added to pDone as they
39652   ** are played back.
39653   */
39654   if( pSavepoint && !pagerUseWal(pPager) ){
39655     iHdrOff = pSavepoint->iHdrOffset ? pSavepoint->iHdrOffset : szJ;
39656     pPager->journalOff = pSavepoint->iOffset;
39657     while( rc==SQLITE_OK && pPager->journalOff<iHdrOff ){
39658       rc = pager_playback_one_page(pPager, &pPager->journalOff, pDone, 1, 1);
39659     }
39660     assert( rc!=SQLITE_DONE );
39661   }else{
39662     pPager->journalOff = 0;
39663   }
39664
39665   /* Continue rolling back records out of the main journal starting at
39666   ** the first journal header seen and continuing until the effective end
39667   ** of the main journal file.  Continue to skip out-of-range pages and
39668   ** continue adding pages rolled back to pDone.
39669   */
39670   while( rc==SQLITE_OK && pPager->journalOff<szJ ){
39671     u32 ii;            /* Loop counter */
39672     u32 nJRec = 0;     /* Number of Journal Records */
39673     u32 dummy;
39674     rc = readJournalHdr(pPager, 0, szJ, &nJRec, &dummy);
39675     assert( rc!=SQLITE_DONE );
39676
39677     /*
39678     ** The "pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff"
39679     ** test is related to ticket #2565.  See the discussion in the
39680     ** pager_playback() function for additional information.
39681     */
39682     if( nJRec==0 
39683      && pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff
39684     ){
39685       nJRec = (u32)((szJ - pPager->journalOff)/JOURNAL_PG_SZ(pPager));
39686     }
39687     for(ii=0; rc==SQLITE_OK && ii<nJRec && pPager->journalOff<szJ; ii++){
39688       rc = pager_playback_one_page(pPager, &pPager->journalOff, pDone, 1, 1);
39689     }
39690     assert( rc!=SQLITE_DONE );
39691   }
39692   assert( rc!=SQLITE_OK || pPager->journalOff>=szJ );
39693
39694   /* Finally,  rollback pages from the sub-journal.  Page that were
39695   ** previously rolled back out of the main journal (and are hence in pDone)
39696   ** will be skipped.  Out-of-range pages are also skipped.
39697   */
39698   if( pSavepoint ){
39699     u32 ii;            /* Loop counter */
39700     i64 offset = pSavepoint->iSubRec*(4+pPager->pageSize);
39701
39702     if( pagerUseWal(pPager) ){
39703       rc = sqlite3WalSavepointUndo(pPager->pWal, pSavepoint->aWalData);
39704     }
39705     for(ii=pSavepoint->iSubRec; rc==SQLITE_OK && ii<pPager->nSubRec; ii++){
39706       assert( offset==ii*(4+pPager->pageSize) );
39707       rc = pager_playback_one_page(pPager, &offset, pDone, 0, 1);
39708     }
39709     assert( rc!=SQLITE_DONE );
39710   }
39711
39712   sqlite3BitvecDestroy(pDone);
39713   if( rc==SQLITE_OK ){
39714     pPager->journalOff = szJ;
39715   }
39716
39717   return rc;
39718 }
39719
39720 /*
39721 ** Change the maximum number of in-memory pages that are allowed.
39722 */
39723 SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager *pPager, int mxPage){
39724   sqlite3PcacheSetCachesize(pPager->pPCache, mxPage);
39725 }
39726
39727 /*
39728 ** Adjust the robustness of the database to damage due to OS crashes
39729 ** or power failures by changing the number of syncs()s when writing
39730 ** the rollback journal.  There are three levels:
39731 **
39732 **    OFF       sqlite3OsSync() is never called.  This is the default
39733 **              for temporary and transient files.
39734 **
39735 **    NORMAL    The journal is synced once before writes begin on the
39736 **              database.  This is normally adequate protection, but
39737 **              it is theoretically possible, though very unlikely,
39738 **              that an inopertune power failure could leave the journal
39739 **              in a state which would cause damage to the database
39740 **              when it is rolled back.
39741 **
39742 **    FULL      The journal is synced twice before writes begin on the
39743 **              database (with some additional information - the nRec field
39744 **              of the journal header - being written in between the two
39745 **              syncs).  If we assume that writing a
39746 **              single disk sector is atomic, then this mode provides
39747 **              assurance that the journal will not be corrupted to the
39748 **              point of causing damage to the database during rollback.
39749 **
39750 ** The above is for a rollback-journal mode.  For WAL mode, OFF continues
39751 ** to mean that no syncs ever occur.  NORMAL means that the WAL is synced
39752 ** prior to the start of checkpoint and that the database file is synced
39753 ** at the conclusion of the checkpoint if the entire content of the WAL
39754 ** was written back into the database.  But no sync operations occur for
39755 ** an ordinary commit in NORMAL mode with WAL.  FULL means that the WAL
39756 ** file is synced following each commit operation, in addition to the
39757 ** syncs associated with NORMAL.
39758 **
39759 ** Do not confuse synchronous=FULL with SQLITE_SYNC_FULL.  The
39760 ** SQLITE_SYNC_FULL macro means to use the MacOSX-style full-fsync
39761 ** using fcntl(F_FULLFSYNC).  SQLITE_SYNC_NORMAL means to do an
39762 ** ordinary fsync() call.  There is no difference between SQLITE_SYNC_FULL
39763 ** and SQLITE_SYNC_NORMAL on platforms other than MacOSX.  But the
39764 ** synchronous=FULL versus synchronous=NORMAL setting determines when
39765 ** the xSync primitive is called and is relevant to all platforms.
39766 **
39767 ** Numeric values associated with these states are OFF==1, NORMAL=2,
39768 ** and FULL=3.
39769 */
39770 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
39771 SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(
39772   Pager *pPager,        /* The pager to set safety level for */
39773   int level,            /* PRAGMA synchronous.  1=OFF, 2=NORMAL, 3=FULL */  
39774   int bFullFsync,       /* PRAGMA fullfsync */
39775   int bCkptFullFsync    /* PRAGMA checkpoint_fullfsync */
39776 ){
39777   assert( level>=1 && level<=3 );
39778   pPager->noSync =  (level==1 || pPager->tempFile) ?1:0;
39779   pPager->fullSync = (level==3 && !pPager->tempFile) ?1:0;
39780   if( pPager->noSync ){
39781     pPager->syncFlags = 0;
39782     pPager->ckptSyncFlags = 0;
39783   }else if( bFullFsync ){
39784     pPager->syncFlags = SQLITE_SYNC_FULL;
39785     pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
39786   }else if( bCkptFullFsync ){
39787     pPager->syncFlags = SQLITE_SYNC_NORMAL;
39788     pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
39789   }else{
39790     pPager->syncFlags = SQLITE_SYNC_NORMAL;
39791     pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL;
39792   }
39793 }
39794 #endif
39795
39796 /*
39797 ** The following global variable is incremented whenever the library
39798 ** attempts to open a temporary file.  This information is used for
39799 ** testing and analysis only.  
39800 */
39801 #ifdef SQLITE_TEST
39802 SQLITE_API int sqlite3_opentemp_count = 0;
39803 #endif
39804
39805 /*
39806 ** Open a temporary file.
39807 **
39808 ** Write the file descriptor into *pFile. Return SQLITE_OK on success 
39809 ** or some other error code if we fail. The OS will automatically 
39810 ** delete the temporary file when it is closed.
39811 **
39812 ** The flags passed to the VFS layer xOpen() call are those specified
39813 ** by parameter vfsFlags ORed with the following:
39814 **
39815 **     SQLITE_OPEN_READWRITE
39816 **     SQLITE_OPEN_CREATE
39817 **     SQLITE_OPEN_EXCLUSIVE
39818 **     SQLITE_OPEN_DELETEONCLOSE
39819 */
39820 static int pagerOpentemp(
39821   Pager *pPager,        /* The pager object */
39822   sqlite3_file *pFile,  /* Write the file descriptor here */
39823   int vfsFlags          /* Flags passed through to the VFS */
39824 ){
39825   int rc;               /* Return code */
39826
39827 #ifdef SQLITE_TEST
39828   sqlite3_opentemp_count++;  /* Used for testing and analysis only */
39829 #endif
39830
39831   vfsFlags |=  SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
39832             SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE;
39833   rc = sqlite3OsOpen(pPager->pVfs, 0, pFile, vfsFlags, 0);
39834   assert( rc!=SQLITE_OK || isOpen(pFile) );
39835   return rc;
39836 }
39837
39838 /*
39839 ** Set the busy handler function.
39840 **
39841 ** The pager invokes the busy-handler if sqlite3OsLock() returns 
39842 ** SQLITE_BUSY when trying to upgrade from no-lock to a SHARED lock,
39843 ** or when trying to upgrade from a RESERVED lock to an EXCLUSIVE 
39844 ** lock. It does *not* invoke the busy handler when upgrading from
39845 ** SHARED to RESERVED, or when upgrading from SHARED to EXCLUSIVE
39846 ** (which occurs during hot-journal rollback). Summary:
39847 **
39848 **   Transition                        | Invokes xBusyHandler
39849 **   --------------------------------------------------------
39850 **   NO_LOCK       -> SHARED_LOCK      | Yes
39851 **   SHARED_LOCK   -> RESERVED_LOCK    | No
39852 **   SHARED_LOCK   -> EXCLUSIVE_LOCK   | No
39853 **   RESERVED_LOCK -> EXCLUSIVE_LOCK   | Yes
39854 **
39855 ** If the busy-handler callback returns non-zero, the lock is 
39856 ** retried. If it returns zero, then the SQLITE_BUSY error is
39857 ** returned to the caller of the pager API function.
39858 */
39859 SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(
39860   Pager *pPager,                       /* Pager object */
39861   int (*xBusyHandler)(void *),         /* Pointer to busy-handler function */
39862   void *pBusyHandlerArg                /* Argument to pass to xBusyHandler */
39863 ){  
39864   pPager->xBusyHandler = xBusyHandler;
39865   pPager->pBusyHandlerArg = pBusyHandlerArg;
39866 }
39867
39868 /*
39869 ** Change the page size used by the Pager object. The new page size 
39870 ** is passed in *pPageSize.
39871 **
39872 ** If the pager is in the error state when this function is called, it
39873 ** is a no-op. The value returned is the error state error code (i.e. 
39874 ** one of SQLITE_IOERR, an SQLITE_IOERR_xxx sub-code or SQLITE_FULL).
39875 **
39876 ** Otherwise, if all of the following are true:
39877 **
39878 **   * the new page size (value of *pPageSize) is valid (a power 
39879 **     of two between 512 and SQLITE_MAX_PAGE_SIZE, inclusive), and
39880 **
39881 **   * there are no outstanding page references, and
39882 **
39883 **   * the database is either not an in-memory database or it is
39884 **     an in-memory database that currently consists of zero pages.
39885 **
39886 ** then the pager object page size is set to *pPageSize.
39887 **
39888 ** If the page size is changed, then this function uses sqlite3PagerMalloc() 
39889 ** to obtain a new Pager.pTmpSpace buffer. If this allocation attempt 
39890 ** fails, SQLITE_NOMEM is returned and the page size remains unchanged. 
39891 ** In all other cases, SQLITE_OK is returned.
39892 **
39893 ** If the page size is not changed, either because one of the enumerated
39894 ** conditions above is not true, the pager was in error state when this
39895 ** function was called, or because the memory allocation attempt failed, 
39896 ** then *pPageSize is set to the old, retained page size before returning.
39897 */
39898 SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize, int nReserve){
39899   int rc = SQLITE_OK;
39900
39901   /* It is not possible to do a full assert_pager_state() here, as this
39902   ** function may be called from within PagerOpen(), before the state
39903   ** of the Pager object is internally consistent.
39904   **
39905   ** At one point this function returned an error if the pager was in 
39906   ** PAGER_ERROR state. But since PAGER_ERROR state guarantees that
39907   ** there is at least one outstanding page reference, this function
39908   ** is a no-op for that case anyhow.
39909   */
39910
39911   u32 pageSize = *pPageSize;
39912   assert( pageSize==0 || (pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE) );
39913   if( (pPager->memDb==0 || pPager->dbSize==0)
39914    && sqlite3PcacheRefCount(pPager->pPCache)==0 
39915    && pageSize && pageSize!=(u32)pPager->pageSize 
39916   ){
39917     char *pNew = NULL;             /* New temp space */
39918     i64 nByte = 0;
39919
39920     if( pPager->eState>PAGER_OPEN && isOpen(pPager->fd) ){
39921       rc = sqlite3OsFileSize(pPager->fd, &nByte);
39922     }
39923     if( rc==SQLITE_OK ){
39924       pNew = (char *)sqlite3PageMalloc(pageSize);
39925       if( !pNew ) rc = SQLITE_NOMEM;
39926     }
39927
39928     if( rc==SQLITE_OK ){
39929       pager_reset(pPager);
39930       pPager->dbSize = (Pgno)(nByte/pageSize);
39931       pPager->pageSize = pageSize;
39932       sqlite3PageFree(pPager->pTmpSpace);
39933       pPager->pTmpSpace = pNew;
39934       sqlite3PcacheSetPageSize(pPager->pPCache, pageSize);
39935     }
39936   }
39937
39938   *pPageSize = pPager->pageSize;
39939   if( rc==SQLITE_OK ){
39940     if( nReserve<0 ) nReserve = pPager->nReserve;
39941     assert( nReserve>=0 && nReserve<1000 );
39942     pPager->nReserve = (i16)nReserve;
39943     pagerReportSize(pPager);
39944   }
39945   return rc;
39946 }
39947
39948 /*
39949 ** Return a pointer to the "temporary page" buffer held internally
39950 ** by the pager.  This is a buffer that is big enough to hold the
39951 ** entire content of a database page.  This buffer is used internally
39952 ** during rollback and will be overwritten whenever a rollback
39953 ** occurs.  But other modules are free to use it too, as long as
39954 ** no rollbacks are happening.
39955 */
39956 SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager *pPager){
39957   return pPager->pTmpSpace;
39958 }
39959
39960 /*
39961 ** Attempt to set the maximum database page count if mxPage is positive. 
39962 ** Make no changes if mxPage is zero or negative.  And never reduce the
39963 ** maximum page count below the current size of the database.
39964 **
39965 ** Regardless of mxPage, return the current maximum page count.
39966 */
39967 SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager *pPager, int mxPage){
39968   if( mxPage>0 ){
39969     pPager->mxPgno = mxPage;
39970   }
39971   assert( pPager->eState!=PAGER_OPEN );      /* Called only by OP_MaxPgcnt */
39972   assert( pPager->mxPgno>=pPager->dbSize );  /* OP_MaxPgcnt enforces this */
39973   return pPager->mxPgno;
39974 }
39975
39976 /*
39977 ** The following set of routines are used to disable the simulated
39978 ** I/O error mechanism.  These routines are used to avoid simulated
39979 ** errors in places where we do not care about errors.
39980 **
39981 ** Unless -DSQLITE_TEST=1 is used, these routines are all no-ops
39982 ** and generate no code.
39983 */
39984 #ifdef SQLITE_TEST
39985 SQLITE_API extern int sqlite3_io_error_pending;
39986 SQLITE_API extern int sqlite3_io_error_hit;
39987 static int saved_cnt;
39988 void disable_simulated_io_errors(void){
39989   saved_cnt = sqlite3_io_error_pending;
39990   sqlite3_io_error_pending = -1;
39991 }
39992 void enable_simulated_io_errors(void){
39993   sqlite3_io_error_pending = saved_cnt;
39994 }
39995 #else
39996 # define disable_simulated_io_errors()
39997 # define enable_simulated_io_errors()
39998 #endif
39999
40000 /*
40001 ** Read the first N bytes from the beginning of the file into memory
40002 ** that pDest points to. 
40003 **
40004 ** If the pager was opened on a transient file (zFilename==""), or
40005 ** opened on a file less than N bytes in size, the output buffer is
40006 ** zeroed and SQLITE_OK returned. The rationale for this is that this 
40007 ** function is used to read database headers, and a new transient or
40008 ** zero sized database has a header than consists entirely of zeroes.
40009 **
40010 ** If any IO error apart from SQLITE_IOERR_SHORT_READ is encountered,
40011 ** the error code is returned to the caller and the contents of the
40012 ** output buffer undefined.
40013 */
40014 SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager *pPager, int N, unsigned char *pDest){
40015   int rc = SQLITE_OK;
40016   memset(pDest, 0, N);
40017   assert( isOpen(pPager->fd) || pPager->tempFile );
40018
40019   /* This routine is only called by btree immediately after creating
40020   ** the Pager object.  There has not been an opportunity to transition
40021   ** to WAL mode yet.
40022   */
40023   assert( !pagerUseWal(pPager) );
40024
40025   if( isOpen(pPager->fd) ){
40026     IOTRACE(("DBHDR %p 0 %d\n", pPager, N))
40027     rc = sqlite3OsRead(pPager->fd, pDest, N, 0);
40028     if( rc==SQLITE_IOERR_SHORT_READ ){
40029       rc = SQLITE_OK;
40030     }
40031   }
40032   return rc;
40033 }
40034
40035 /*
40036 ** This function may only be called when a read-transaction is open on
40037 ** the pager. It returns the total number of pages in the database.
40038 **
40039 ** However, if the file is between 1 and <page-size> bytes in size, then 
40040 ** this is considered a 1 page file.
40041 */
40042 SQLITE_PRIVATE void sqlite3PagerPagecount(Pager *pPager, int *pnPage){
40043   assert( pPager->eState>=PAGER_READER );
40044   assert( pPager->eState!=PAGER_WRITER_FINISHED );
40045   *pnPage = (int)pPager->dbSize;
40046 }
40047
40048
40049 /*
40050 ** Try to obtain a lock of type locktype on the database file. If
40051 ** a similar or greater lock is already held, this function is a no-op
40052 ** (returning SQLITE_OK immediately).
40053 **
40054 ** Otherwise, attempt to obtain the lock using sqlite3OsLock(). Invoke 
40055 ** the busy callback if the lock is currently not available. Repeat 
40056 ** until the busy callback returns false or until the attempt to 
40057 ** obtain the lock succeeds.
40058 **
40059 ** Return SQLITE_OK on success and an error code if we cannot obtain
40060 ** the lock. If the lock is obtained successfully, set the Pager.state 
40061 ** variable to locktype before returning.
40062 */
40063 static int pager_wait_on_lock(Pager *pPager, int locktype){
40064   int rc;                              /* Return code */
40065
40066   /* Check that this is either a no-op (because the requested lock is 
40067   ** already held, or one of the transistions that the busy-handler
40068   ** may be invoked during, according to the comment above
40069   ** sqlite3PagerSetBusyhandler().
40070   */
40071   assert( (pPager->eLock>=locktype)
40072        || (pPager->eLock==NO_LOCK && locktype==SHARED_LOCK)
40073        || (pPager->eLock==RESERVED_LOCK && locktype==EXCLUSIVE_LOCK)
40074   );
40075
40076   do {
40077     rc = pagerLockDb(pPager, locktype);
40078   }while( rc==SQLITE_BUSY && pPager->xBusyHandler(pPager->pBusyHandlerArg) );
40079   return rc;
40080 }
40081
40082 /*
40083 ** Function assertTruncateConstraint(pPager) checks that one of the 
40084 ** following is true for all dirty pages currently in the page-cache:
40085 **
40086 **   a) The page number is less than or equal to the size of the 
40087 **      current database image, in pages, OR
40088 **
40089 **   b) if the page content were written at this time, it would not
40090 **      be necessary to write the current content out to the sub-journal
40091 **      (as determined by function subjRequiresPage()).
40092 **
40093 ** If the condition asserted by this function were not true, and the
40094 ** dirty page were to be discarded from the cache via the pagerStress()
40095 ** routine, pagerStress() would not write the current page content to
40096 ** the database file. If a savepoint transaction were rolled back after
40097 ** this happened, the correct behaviour would be to restore the current
40098 ** content of the page. However, since this content is not present in either
40099 ** the database file or the portion of the rollback journal and 
40100 ** sub-journal rolled back the content could not be restored and the
40101 ** database image would become corrupt. It is therefore fortunate that 
40102 ** this circumstance cannot arise.
40103 */
40104 #if defined(SQLITE_DEBUG)
40105 static void assertTruncateConstraintCb(PgHdr *pPg){
40106   assert( pPg->flags&PGHDR_DIRTY );
40107   assert( !subjRequiresPage(pPg) || pPg->pgno<=pPg->pPager->dbSize );
40108 }
40109 static void assertTruncateConstraint(Pager *pPager){
40110   sqlite3PcacheIterateDirty(pPager->pPCache, assertTruncateConstraintCb);
40111 }
40112 #else
40113 # define assertTruncateConstraint(pPager)
40114 #endif
40115
40116 /*
40117 ** Truncate the in-memory database file image to nPage pages. This 
40118 ** function does not actually modify the database file on disk. It 
40119 ** just sets the internal state of the pager object so that the 
40120 ** truncation will be done when the current transaction is committed.
40121 */
40122 SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){
40123   assert( pPager->dbSize>=nPage );
40124   assert( pPager->eState>=PAGER_WRITER_CACHEMOD );
40125   pPager->dbSize = nPage;
40126   assertTruncateConstraint(pPager);
40127 }
40128
40129
40130 /*
40131 ** This function is called before attempting a hot-journal rollback. It
40132 ** syncs the journal file to disk, then sets pPager->journalHdr to the
40133 ** size of the journal file so that the pager_playback() routine knows
40134 ** that the entire journal file has been synced.
40135 **
40136 ** Syncing a hot-journal to disk before attempting to roll it back ensures 
40137 ** that if a power-failure occurs during the rollback, the process that
40138 ** attempts rollback following system recovery sees the same journal
40139 ** content as this process.
40140 **
40141 ** If everything goes as planned, SQLITE_OK is returned. Otherwise, 
40142 ** an SQLite error code.
40143 */
40144 static int pagerSyncHotJournal(Pager *pPager){
40145   int rc = SQLITE_OK;
40146   if( !pPager->noSync ){
40147     rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_NORMAL);
40148   }
40149   if( rc==SQLITE_OK ){
40150     rc = sqlite3OsFileSize(pPager->jfd, &pPager->journalHdr);
40151   }
40152   return rc;
40153 }
40154
40155 /*
40156 ** Shutdown the page cache.  Free all memory and close all files.
40157 **
40158 ** If a transaction was in progress when this routine is called, that
40159 ** transaction is rolled back.  All outstanding pages are invalidated
40160 ** and their memory is freed.  Any attempt to use a page associated
40161 ** with this page cache after this function returns will likely
40162 ** result in a coredump.
40163 **
40164 ** This function always succeeds. If a transaction is active an attempt
40165 ** is made to roll it back. If an error occurs during the rollback 
40166 ** a hot journal may be left in the filesystem but no error is returned
40167 ** to the caller.
40168 */
40169 SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager){
40170   u8 *pTmp = (u8 *)pPager->pTmpSpace;
40171
40172   disable_simulated_io_errors();
40173   sqlite3BeginBenignMalloc();
40174   /* pPager->errCode = 0; */
40175   pPager->exclusiveMode = 0;
40176 #ifndef SQLITE_OMIT_WAL
40177   sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags, pPager->pageSize, pTmp);
40178   pPager->pWal = 0;
40179 #endif
40180   pager_reset(pPager);
40181   if( MEMDB ){
40182     pager_unlock(pPager);
40183   }else{
40184     /* If it is open, sync the journal file before calling UnlockAndRollback.
40185     ** If this is not done, then an unsynced portion of the open journal 
40186     ** file may be played back into the database. If a power failure occurs 
40187     ** while this is happening, the database could become corrupt.
40188     **
40189     ** If an error occurs while trying to sync the journal, shift the pager
40190     ** into the ERROR state. This causes UnlockAndRollback to unlock the
40191     ** database and close the journal file without attempting to roll it
40192     ** back or finalize it. The next database user will have to do hot-journal
40193     ** rollback before accessing the database file.
40194     */
40195     if( isOpen(pPager->jfd) ){
40196       pager_error(pPager, pagerSyncHotJournal(pPager));
40197     }
40198     pagerUnlockAndRollback(pPager);
40199   }
40200   sqlite3EndBenignMalloc();
40201   enable_simulated_io_errors();
40202   PAGERTRACE(("CLOSE %d\n", PAGERID(pPager)));
40203   IOTRACE(("CLOSE %p\n", pPager))
40204   sqlite3OsClose(pPager->jfd);
40205   sqlite3OsClose(pPager->fd);
40206   sqlite3PageFree(pTmp);
40207   sqlite3PcacheClose(pPager->pPCache);
40208
40209 #ifdef SQLITE_HAS_CODEC
40210   if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec);
40211 #endif
40212
40213   assert( !pPager->aSavepoint && !pPager->pInJournal );
40214   assert( !isOpen(pPager->jfd) && !isOpen(pPager->sjfd) );
40215
40216   sqlite3_free(pPager);
40217   return SQLITE_OK;
40218 }
40219
40220 #if !defined(NDEBUG) || defined(SQLITE_TEST)
40221 /*
40222 ** Return the page number for page pPg.
40223 */
40224 SQLITE_PRIVATE Pgno sqlite3PagerPagenumber(DbPage *pPg){
40225   return pPg->pgno;
40226 }
40227 #endif
40228
40229 /*
40230 ** Increment the reference count for page pPg.
40231 */
40232 SQLITE_PRIVATE void sqlite3PagerRef(DbPage *pPg){
40233   sqlite3PcacheRef(pPg);
40234 }
40235
40236 /*
40237 ** Sync the journal. In other words, make sure all the pages that have
40238 ** been written to the journal have actually reached the surface of the
40239 ** disk and can be restored in the event of a hot-journal rollback.
40240 **
40241 ** If the Pager.noSync flag is set, then this function is a no-op.
40242 ** Otherwise, the actions required depend on the journal-mode and the 
40243 ** device characteristics of the the file-system, as follows:
40244 **
40245 **   * If the journal file is an in-memory journal file, no action need
40246 **     be taken.
40247 **
40248 **   * Otherwise, if the device does not support the SAFE_APPEND property,
40249 **     then the nRec field of the most recently written journal header
40250 **     is updated to contain the number of journal records that have
40251 **     been written following it. If the pager is operating in full-sync
40252 **     mode, then the journal file is synced before this field is updated.
40253 **
40254 **   * If the device does not support the SEQUENTIAL property, then 
40255 **     journal file is synced.
40256 **
40257 ** Or, in pseudo-code:
40258 **
40259 **   if( NOT <in-memory journal> ){
40260 **     if( NOT SAFE_APPEND ){
40261 **       if( <full-sync mode> ) xSync(<journal file>);
40262 **       <update nRec field>
40263 **     } 
40264 **     if( NOT SEQUENTIAL ) xSync(<journal file>);
40265 **   }
40266 **
40267 ** If successful, this routine clears the PGHDR_NEED_SYNC flag of every 
40268 ** page currently held in memory before returning SQLITE_OK. If an IO
40269 ** error is encountered, then the IO error code is returned to the caller.
40270 */
40271 static int syncJournal(Pager *pPager, int newHdr){
40272   int rc;                         /* Return code */
40273
40274   assert( pPager->eState==PAGER_WRITER_CACHEMOD
40275        || pPager->eState==PAGER_WRITER_DBMOD
40276   );
40277   assert( assert_pager_state(pPager) );
40278   assert( !pagerUseWal(pPager) );
40279
40280   rc = sqlite3PagerExclusiveLock(pPager);
40281   if( rc!=SQLITE_OK ) return rc;
40282
40283   if( !pPager->noSync ){
40284     assert( !pPager->tempFile );
40285     if( isOpen(pPager->jfd) && pPager->journalMode!=PAGER_JOURNALMODE_MEMORY ){
40286       const int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
40287       assert( isOpen(pPager->jfd) );
40288
40289       if( 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){
40290         /* This block deals with an obscure problem. If the last connection
40291         ** that wrote to this database was operating in persistent-journal
40292         ** mode, then the journal file may at this point actually be larger
40293         ** than Pager.journalOff bytes. If the next thing in the journal
40294         ** file happens to be a journal-header (written as part of the
40295         ** previous connection's transaction), and a crash or power-failure 
40296         ** occurs after nRec is updated but before this connection writes 
40297         ** anything else to the journal file (or commits/rolls back its 
40298         ** transaction), then SQLite may become confused when doing the 
40299         ** hot-journal rollback following recovery. It may roll back all
40300         ** of this connections data, then proceed to rolling back the old,
40301         ** out-of-date data that follows it. Database corruption.
40302         **
40303         ** To work around this, if the journal file does appear to contain
40304         ** a valid header following Pager.journalOff, then write a 0x00
40305         ** byte to the start of it to prevent it from being recognized.
40306         **
40307         ** Variable iNextHdrOffset is set to the offset at which this
40308         ** problematic header will occur, if it exists. aMagic is used 
40309         ** as a temporary buffer to inspect the first couple of bytes of
40310         ** the potential journal header.
40311         */
40312         i64 iNextHdrOffset;
40313         u8 aMagic[8];
40314         u8 zHeader[sizeof(aJournalMagic)+4];
40315
40316         memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));
40317         put32bits(&zHeader[sizeof(aJournalMagic)], pPager->nRec);
40318
40319         iNextHdrOffset = journalHdrOffset(pPager);
40320         rc = sqlite3OsRead(pPager->jfd, aMagic, 8, iNextHdrOffset);
40321         if( rc==SQLITE_OK && 0==memcmp(aMagic, aJournalMagic, 8) ){
40322           static const u8 zerobyte = 0;
40323           rc = sqlite3OsWrite(pPager->jfd, &zerobyte, 1, iNextHdrOffset);
40324         }
40325         if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){
40326           return rc;
40327         }
40328
40329         /* Write the nRec value into the journal file header. If in
40330         ** full-synchronous mode, sync the journal first. This ensures that
40331         ** all data has really hit the disk before nRec is updated to mark
40332         ** it as a candidate for rollback.
40333         **
40334         ** This is not required if the persistent media supports the
40335         ** SAFE_APPEND property. Because in this case it is not possible 
40336         ** for garbage data to be appended to the file, the nRec field
40337         ** is populated with 0xFFFFFFFF when the journal header is written
40338         ** and never needs to be updated.
40339         */
40340         if( pPager->fullSync && 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
40341           PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));
40342           IOTRACE(("JSYNC %p\n", pPager))
40343           rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags);
40344           if( rc!=SQLITE_OK ) return rc;
40345         }
40346         IOTRACE(("JHDR %p %lld\n", pPager, pPager->journalHdr));
40347         rc = sqlite3OsWrite(
40348             pPager->jfd, zHeader, sizeof(zHeader), pPager->journalHdr
40349         );
40350         if( rc!=SQLITE_OK ) return rc;
40351       }
40352       if( 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
40353         PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));
40354         IOTRACE(("JSYNC %p\n", pPager))
40355         rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags| 
40356           (pPager->syncFlags==SQLITE_SYNC_FULL?SQLITE_SYNC_DATAONLY:0)
40357         );
40358         if( rc!=SQLITE_OK ) return rc;
40359       }
40360
40361       pPager->journalHdr = pPager->journalOff;
40362       if( newHdr && 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){
40363         pPager->nRec = 0;
40364         rc = writeJournalHdr(pPager);
40365         if( rc!=SQLITE_OK ) return rc;
40366       }
40367     }else{
40368       pPager->journalHdr = pPager->journalOff;
40369     }
40370   }
40371
40372   /* Unless the pager is in noSync mode, the journal file was just 
40373   ** successfully synced. Either way, clear the PGHDR_NEED_SYNC flag on 
40374   ** all pages.
40375   */
40376   sqlite3PcacheClearSyncFlags(pPager->pPCache);
40377   pPager->eState = PAGER_WRITER_DBMOD;
40378   assert( assert_pager_state(pPager) );
40379   return SQLITE_OK;
40380 }
40381
40382 /*
40383 ** The argument is the first in a linked list of dirty pages connected
40384 ** by the PgHdr.pDirty pointer. This function writes each one of the
40385 ** in-memory pages in the list to the database file. The argument may
40386 ** be NULL, representing an empty list. In this case this function is
40387 ** a no-op.
40388 **
40389 ** The pager must hold at least a RESERVED lock when this function
40390 ** is called. Before writing anything to the database file, this lock
40391 ** is upgraded to an EXCLUSIVE lock. If the lock cannot be obtained,
40392 ** SQLITE_BUSY is returned and no data is written to the database file.
40393 ** 
40394 ** If the pager is a temp-file pager and the actual file-system file
40395 ** is not yet open, it is created and opened before any data is 
40396 ** written out.
40397 **
40398 ** Once the lock has been upgraded and, if necessary, the file opened,
40399 ** the pages are written out to the database file in list order. Writing
40400 ** a page is skipped if it meets either of the following criteria:
40401 **
40402 **   * The page number is greater than Pager.dbSize, or
40403 **   * The PGHDR_DONT_WRITE flag is set on the page.
40404 **
40405 ** If writing out a page causes the database file to grow, Pager.dbFileSize
40406 ** is updated accordingly. If page 1 is written out, then the value cached
40407 ** in Pager.dbFileVers[] is updated to match the new value stored in
40408 ** the database file.
40409 **
40410 ** If everything is successful, SQLITE_OK is returned. If an IO error 
40411 ** occurs, an IO error code is returned. Or, if the EXCLUSIVE lock cannot
40412 ** be obtained, SQLITE_BUSY is returned.
40413 */
40414 static int pager_write_pagelist(Pager *pPager, PgHdr *pList){
40415   int rc = SQLITE_OK;                  /* Return code */
40416
40417   /* This function is only called for rollback pagers in WRITER_DBMOD state. */
40418   assert( !pagerUseWal(pPager) );
40419   assert( pPager->eState==PAGER_WRITER_DBMOD );
40420   assert( pPager->eLock==EXCLUSIVE_LOCK );
40421
40422   /* If the file is a temp-file has not yet been opened, open it now. It
40423   ** is not possible for rc to be other than SQLITE_OK if this branch
40424   ** is taken, as pager_wait_on_lock() is a no-op for temp-files.
40425   */
40426   if( !isOpen(pPager->fd) ){
40427     assert( pPager->tempFile && rc==SQLITE_OK );
40428     rc = pagerOpentemp(pPager, pPager->fd, pPager->vfsFlags);
40429   }
40430
40431   /* Before the first write, give the VFS a hint of what the final
40432   ** file size will be.
40433   */
40434   assert( rc!=SQLITE_OK || isOpen(pPager->fd) );
40435   if( rc==SQLITE_OK && pPager->dbSize>pPager->dbHintSize ){
40436     sqlite3_int64 szFile = pPager->pageSize * (sqlite3_int64)pPager->dbSize;
40437     sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SIZE_HINT, &szFile);
40438     pPager->dbHintSize = pPager->dbSize;
40439   }
40440
40441   while( rc==SQLITE_OK && pList ){
40442     Pgno pgno = pList->pgno;
40443
40444     /* If there are dirty pages in the page cache with page numbers greater
40445     ** than Pager.dbSize, this means sqlite3PagerTruncateImage() was called to
40446     ** make the file smaller (presumably by auto-vacuum code). Do not write
40447     ** any such pages to the file.
40448     **
40449     ** Also, do not write out any page that has the PGHDR_DONT_WRITE flag
40450     ** set (set by sqlite3PagerDontWrite()).
40451     */
40452     if( pgno<=pPager->dbSize && 0==(pList->flags&PGHDR_DONT_WRITE) ){
40453       i64 offset = (pgno-1)*(i64)pPager->pageSize;   /* Offset to write */
40454       char *pData;                                   /* Data to write */    
40455
40456       assert( (pList->flags&PGHDR_NEED_SYNC)==0 );
40457       if( pList->pgno==1 ) pager_write_changecounter(pList);
40458
40459       /* Encode the database */
40460       CODEC2(pPager, pList->pData, pgno, 6, return SQLITE_NOMEM, pData);
40461
40462       /* Write out the page data. */
40463       rc = sqlite3OsWrite(pPager->fd, pData, pPager->pageSize, offset);
40464
40465       /* If page 1 was just written, update Pager.dbFileVers to match
40466       ** the value now stored in the database file. If writing this 
40467       ** page caused the database file to grow, update dbFileSize. 
40468       */
40469       if( pgno==1 ){
40470         memcpy(&pPager->dbFileVers, &pData[24], sizeof(pPager->dbFileVers));
40471       }
40472       if( pgno>pPager->dbFileSize ){
40473         pPager->dbFileSize = pgno;
40474       }
40475
40476       /* Update any backup objects copying the contents of this pager. */
40477       sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)pList->pData);
40478
40479       PAGERTRACE(("STORE %d page %d hash(%08x)\n",
40480                    PAGERID(pPager), pgno, pager_pagehash(pList)));
40481       IOTRACE(("PGOUT %p %d\n", pPager, pgno));
40482       PAGER_INCR(sqlite3_pager_writedb_count);
40483       PAGER_INCR(pPager->nWrite);
40484     }else{
40485       PAGERTRACE(("NOSTORE %d page %d\n", PAGERID(pPager), pgno));
40486     }
40487     pager_set_pagehash(pList);
40488     pList = pList->pDirty;
40489   }
40490
40491   return rc;
40492 }
40493
40494 /*
40495 ** Ensure that the sub-journal file is open. If it is already open, this 
40496 ** function is a no-op.
40497 **
40498 ** SQLITE_OK is returned if everything goes according to plan. An 
40499 ** SQLITE_IOERR_XXX error code is returned if a call to sqlite3OsOpen() 
40500 ** fails.
40501 */
40502 static int openSubJournal(Pager *pPager){
40503   int rc = SQLITE_OK;
40504   if( !isOpen(pPager->sjfd) ){
40505     if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY || pPager->subjInMemory ){
40506       sqlite3MemJournalOpen(pPager->sjfd);
40507     }else{
40508       rc = pagerOpentemp(pPager, pPager->sjfd, SQLITE_OPEN_SUBJOURNAL);
40509     }
40510   }
40511   return rc;
40512 }
40513
40514 /*
40515 ** Append a record of the current state of page pPg to the sub-journal. 
40516 ** It is the callers responsibility to use subjRequiresPage() to check 
40517 ** that it is really required before calling this function.
40518 **
40519 ** If successful, set the bit corresponding to pPg->pgno in the bitvecs
40520 ** for all open savepoints before returning.
40521 **
40522 ** This function returns SQLITE_OK if everything is successful, an IO
40523 ** error code if the attempt to write to the sub-journal fails, or 
40524 ** SQLITE_NOMEM if a malloc fails while setting a bit in a savepoint
40525 ** bitvec.
40526 */
40527 static int subjournalPage(PgHdr *pPg){
40528   int rc = SQLITE_OK;
40529   Pager *pPager = pPg->pPager;
40530   if( pPager->journalMode!=PAGER_JOURNALMODE_OFF ){
40531
40532     /* Open the sub-journal, if it has not already been opened */
40533     assert( pPager->useJournal );
40534     assert( isOpen(pPager->jfd) || pagerUseWal(pPager) );
40535     assert( isOpen(pPager->sjfd) || pPager->nSubRec==0 );
40536     assert( pagerUseWal(pPager) 
40537          || pageInJournal(pPg) 
40538          || pPg->pgno>pPager->dbOrigSize 
40539     );
40540     rc = openSubJournal(pPager);
40541
40542     /* If the sub-journal was opened successfully (or was already open),
40543     ** write the journal record into the file.  */
40544     if( rc==SQLITE_OK ){
40545       void *pData = pPg->pData;
40546       i64 offset = pPager->nSubRec*(4+pPager->pageSize);
40547       char *pData2;
40548   
40549       CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2);
40550       PAGERTRACE(("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno));
40551       rc = write32bits(pPager->sjfd, offset, pPg->pgno);
40552       if( rc==SQLITE_OK ){
40553         rc = sqlite3OsWrite(pPager->sjfd, pData2, pPager->pageSize, offset+4);
40554       }
40555     }
40556   }
40557   if( rc==SQLITE_OK ){
40558     pPager->nSubRec++;
40559     assert( pPager->nSavepoint>0 );
40560     rc = addToSavepointBitvecs(pPager, pPg->pgno);
40561   }
40562   return rc;
40563 }
40564
40565 /*
40566 ** This function is called by the pcache layer when it has reached some
40567 ** soft memory limit. The first argument is a pointer to a Pager object
40568 ** (cast as a void*). The pager is always 'purgeable' (not an in-memory
40569 ** database). The second argument is a reference to a page that is 
40570 ** currently dirty but has no outstanding references. The page
40571 ** is always associated with the Pager object passed as the first 
40572 ** argument.
40573 **
40574 ** The job of this function is to make pPg clean by writing its contents
40575 ** out to the database file, if possible. This may involve syncing the
40576 ** journal file. 
40577 **
40578 ** If successful, sqlite3PcacheMakeClean() is called on the page and
40579 ** SQLITE_OK returned. If an IO error occurs while trying to make the
40580 ** page clean, the IO error code is returned. If the page cannot be
40581 ** made clean for some other reason, but no error occurs, then SQLITE_OK
40582 ** is returned by sqlite3PcacheMakeClean() is not called.
40583 */
40584 static int pagerStress(void *p, PgHdr *pPg){
40585   Pager *pPager = (Pager *)p;
40586   int rc = SQLITE_OK;
40587
40588   assert( pPg->pPager==pPager );
40589   assert( pPg->flags&PGHDR_DIRTY );
40590
40591   /* The doNotSyncSpill flag is set during times when doing a sync of
40592   ** journal (and adding a new header) is not allowed.  This occurs
40593   ** during calls to sqlite3PagerWrite() while trying to journal multiple
40594   ** pages belonging to the same sector.
40595   **
40596   ** The doNotSpill flag inhibits all cache spilling regardless of whether
40597   ** or not a sync is required.  This is set during a rollback.
40598   **
40599   ** Spilling is also prohibited when in an error state since that could
40600   ** lead to database corruption.   In the current implementaton it 
40601   ** is impossible for sqlite3PCacheFetch() to be called with createFlag==1
40602   ** while in the error state, hence it is impossible for this routine to
40603   ** be called in the error state.  Nevertheless, we include a NEVER()
40604   ** test for the error state as a safeguard against future changes.
40605   */
40606   if( NEVER(pPager->errCode) ) return SQLITE_OK;
40607   if( pPager->doNotSpill ) return SQLITE_OK;
40608   if( pPager->doNotSyncSpill && (pPg->flags & PGHDR_NEED_SYNC)!=0 ){
40609     return SQLITE_OK;
40610   }
40611
40612   pPg->pDirty = 0;
40613   if( pagerUseWal(pPager) ){
40614     /* Write a single frame for this page to the log. */
40615     if( subjRequiresPage(pPg) ){ 
40616       rc = subjournalPage(pPg); 
40617     }
40618     if( rc==SQLITE_OK ){
40619       rc = pagerWalFrames(pPager, pPg, 0, 0, 0);
40620     }
40621   }else{
40622   
40623     /* Sync the journal file if required. */
40624     if( pPg->flags&PGHDR_NEED_SYNC 
40625      || pPager->eState==PAGER_WRITER_CACHEMOD
40626     ){
40627       rc = syncJournal(pPager, 1);
40628     }
40629   
40630     /* If the page number of this page is larger than the current size of
40631     ** the database image, it may need to be written to the sub-journal.
40632     ** This is because the call to pager_write_pagelist() below will not
40633     ** actually write data to the file in this case.
40634     **
40635     ** Consider the following sequence of events:
40636     **
40637     **   BEGIN;
40638     **     <journal page X>
40639     **     <modify page X>
40640     **     SAVEPOINT sp;
40641     **       <shrink database file to Y pages>
40642     **       pagerStress(page X)
40643     **     ROLLBACK TO sp;
40644     **
40645     ** If (X>Y), then when pagerStress is called page X will not be written
40646     ** out to the database file, but will be dropped from the cache. Then,
40647     ** following the "ROLLBACK TO sp" statement, reading page X will read
40648     ** data from the database file. This will be the copy of page X as it
40649     ** was when the transaction started, not as it was when "SAVEPOINT sp"
40650     ** was executed.
40651     **
40652     ** The solution is to write the current data for page X into the 
40653     ** sub-journal file now (if it is not already there), so that it will
40654     ** be restored to its current value when the "ROLLBACK TO sp" is 
40655     ** executed.
40656     */
40657     if( NEVER(
40658         rc==SQLITE_OK && pPg->pgno>pPager->dbSize && subjRequiresPage(pPg)
40659     ) ){
40660       rc = subjournalPage(pPg);
40661     }
40662   
40663     /* Write the contents of the page out to the database file. */
40664     if( rc==SQLITE_OK ){
40665       assert( (pPg->flags&PGHDR_NEED_SYNC)==0 );
40666       rc = pager_write_pagelist(pPager, pPg);
40667     }
40668   }
40669
40670   /* Mark the page as clean. */
40671   if( rc==SQLITE_OK ){
40672     PAGERTRACE(("STRESS %d page %d\n", PAGERID(pPager), pPg->pgno));
40673     sqlite3PcacheMakeClean(pPg);
40674   }
40675
40676   return pager_error(pPager, rc); 
40677 }
40678
40679
40680 /*
40681 ** Allocate and initialize a new Pager object and put a pointer to it
40682 ** in *ppPager. The pager should eventually be freed by passing it
40683 ** to sqlite3PagerClose().
40684 **
40685 ** The zFilename argument is the path to the database file to open.
40686 ** If zFilename is NULL then a randomly-named temporary file is created
40687 ** and used as the file to be cached. Temporary files are be deleted
40688 ** automatically when they are closed. If zFilename is ":memory:" then 
40689 ** all information is held in cache. It is never written to disk. 
40690 ** This can be used to implement an in-memory database.
40691 **
40692 ** The nExtra parameter specifies the number of bytes of space allocated
40693 ** along with each page reference. This space is available to the user
40694 ** via the sqlite3PagerGetExtra() API.
40695 **
40696 ** The flags argument is used to specify properties that affect the
40697 ** operation of the pager. It should be passed some bitwise combination
40698 ** of the PAGER_OMIT_JOURNAL and PAGER_NO_READLOCK flags.
40699 **
40700 ** The vfsFlags parameter is a bitmask to pass to the flags parameter
40701 ** of the xOpen() method of the supplied VFS when opening files. 
40702 **
40703 ** If the pager object is allocated and the specified file opened 
40704 ** successfully, SQLITE_OK is returned and *ppPager set to point to
40705 ** the new pager object. If an error occurs, *ppPager is set to NULL
40706 ** and error code returned. This function may return SQLITE_NOMEM
40707 ** (sqlite3Malloc() is used to allocate memory), SQLITE_CANTOPEN or 
40708 ** various SQLITE_IO_XXX errors.
40709 */
40710 SQLITE_PRIVATE int sqlite3PagerOpen(
40711   sqlite3_vfs *pVfs,       /* The virtual file system to use */
40712   Pager **ppPager,         /* OUT: Return the Pager structure here */
40713   const char *zFilename,   /* Name of the database file to open */
40714   int nExtra,              /* Extra bytes append to each in-memory page */
40715   int flags,               /* flags controlling this file */
40716   int vfsFlags,            /* flags passed through to sqlite3_vfs.xOpen() */
40717   void (*xReinit)(DbPage*) /* Function to reinitialize pages */
40718 ){
40719   u8 *pPtr;
40720   Pager *pPager = 0;       /* Pager object to allocate and return */
40721   int rc = SQLITE_OK;      /* Return code */
40722   int tempFile = 0;        /* True for temp files (incl. in-memory files) */
40723   int memDb = 0;           /* True if this is an in-memory file */
40724   int readOnly = 0;        /* True if this is a read-only file */
40725   int journalFileSize;     /* Bytes to allocate for each journal fd */
40726   char *zPathname = 0;     /* Full path to database file */
40727   int nPathname = 0;       /* Number of bytes in zPathname */
40728   int useJournal = (flags & PAGER_OMIT_JOURNAL)==0; /* False to omit journal */
40729   int noReadlock = (flags & PAGER_NO_READLOCK)!=0;  /* True to omit read-lock */
40730   int pcacheSize = sqlite3PcacheSize();       /* Bytes to allocate for PCache */
40731   u32 szPageDflt = SQLITE_DEFAULT_PAGE_SIZE;  /* Default page size */
40732
40733   /* Figure out how much space is required for each journal file-handle
40734   ** (there are two of them, the main journal and the sub-journal). This
40735   ** is the maximum space required for an in-memory journal file handle 
40736   ** and a regular journal file-handle. Note that a "regular journal-handle"
40737   ** may be a wrapper capable of caching the first portion of the journal
40738   ** file in memory to implement the atomic-write optimization (see 
40739   ** source file journal.c).
40740   */
40741   if( sqlite3JournalSize(pVfs)>sqlite3MemJournalSize() ){
40742     journalFileSize = ROUND8(sqlite3JournalSize(pVfs));
40743   }else{
40744     journalFileSize = ROUND8(sqlite3MemJournalSize());
40745   }
40746
40747   /* Set the output variable to NULL in case an error occurs. */
40748   *ppPager = 0;
40749
40750 #ifndef SQLITE_OMIT_MEMORYDB
40751   if( flags & PAGER_MEMORY ){
40752     memDb = 1;
40753     zFilename = 0;
40754   }
40755 #endif
40756
40757   /* Compute and store the full pathname in an allocated buffer pointed
40758   ** to by zPathname, length nPathname. Or, if this is a temporary file,
40759   ** leave both nPathname and zPathname set to 0.
40760   */
40761   if( zFilename && zFilename[0] ){
40762     nPathname = pVfs->mxPathname+1;
40763     zPathname = sqlite3Malloc(nPathname*2);
40764     if( zPathname==0 ){
40765       return SQLITE_NOMEM;
40766     }
40767     zPathname[0] = 0; /* Make sure initialized even if FullPathname() fails */
40768     rc = sqlite3OsFullPathname(pVfs, zFilename, nPathname, zPathname);
40769     nPathname = sqlite3Strlen30(zPathname);
40770     if( rc==SQLITE_OK && nPathname+8>pVfs->mxPathname ){
40771       /* This branch is taken when the journal path required by
40772       ** the database being opened will be more than pVfs->mxPathname
40773       ** bytes in length. This means the database cannot be opened,
40774       ** as it will not be possible to open the journal file or even
40775       ** check for a hot-journal before reading.
40776       */
40777       rc = SQLITE_CANTOPEN_BKPT;
40778     }
40779     if( rc!=SQLITE_OK ){
40780       sqlite3_free(zPathname);
40781       return rc;
40782     }
40783   }
40784
40785   /* Allocate memory for the Pager structure, PCache object, the
40786   ** three file descriptors, the database file name and the journal 
40787   ** file name. The layout in memory is as follows:
40788   **
40789   **     Pager object                    (sizeof(Pager) bytes)
40790   **     PCache object                   (sqlite3PcacheSize() bytes)
40791   **     Database file handle            (pVfs->szOsFile bytes)
40792   **     Sub-journal file handle         (journalFileSize bytes)
40793   **     Main journal file handle        (journalFileSize bytes)
40794   **     Database file name              (nPathname+1 bytes)
40795   **     Journal file name               (nPathname+8+1 bytes)
40796   */
40797   pPtr = (u8 *)sqlite3MallocZero(
40798     ROUND8(sizeof(*pPager)) +      /* Pager structure */
40799     ROUND8(pcacheSize) +           /* PCache object */
40800     ROUND8(pVfs->szOsFile) +       /* The main db file */
40801     journalFileSize * 2 +          /* The two journal files */ 
40802     nPathname + 1 +                /* zFilename */
40803     nPathname + 8 + 1              /* zJournal */
40804 #ifndef SQLITE_OMIT_WAL
40805     + nPathname + 4 + 1              /* zWal */
40806 #endif
40807   );
40808   assert( EIGHT_BYTE_ALIGNMENT(SQLITE_INT_TO_PTR(journalFileSize)) );
40809   if( !pPtr ){
40810     sqlite3_free(zPathname);
40811     return SQLITE_NOMEM;
40812   }
40813   pPager =              (Pager*)(pPtr);
40814   pPager->pPCache =    (PCache*)(pPtr += ROUND8(sizeof(*pPager)));
40815   pPager->fd =   (sqlite3_file*)(pPtr += ROUND8(pcacheSize));
40816   pPager->sjfd = (sqlite3_file*)(pPtr += ROUND8(pVfs->szOsFile));
40817   pPager->jfd =  (sqlite3_file*)(pPtr += journalFileSize);
40818   pPager->zFilename =    (char*)(pPtr += journalFileSize);
40819   assert( EIGHT_BYTE_ALIGNMENT(pPager->jfd) );
40820
40821   /* Fill in the Pager.zFilename and Pager.zJournal buffers, if required. */
40822   if( zPathname ){
40823     assert( nPathname>0 );
40824     pPager->zJournal =   (char*)(pPtr += nPathname + 1);
40825     memcpy(pPager->zFilename, zPathname, nPathname);
40826     memcpy(pPager->zJournal, zPathname, nPathname);
40827     memcpy(&pPager->zJournal[nPathname], "-journal", 8);
40828 #ifndef SQLITE_OMIT_WAL
40829     pPager->zWal = &pPager->zJournal[nPathname+8+1];
40830     memcpy(pPager->zWal, zPathname, nPathname);
40831     memcpy(&pPager->zWal[nPathname], "-wal", 4);
40832 #endif
40833     sqlite3_free(zPathname);
40834   }
40835   pPager->pVfs = pVfs;
40836   pPager->vfsFlags = vfsFlags;
40837
40838   /* Open the pager file.
40839   */
40840   if( zFilename && zFilename[0] ){
40841     int fout = 0;                    /* VFS flags returned by xOpen() */
40842     rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, vfsFlags, &fout);
40843     assert( !memDb );
40844     readOnly = (fout&SQLITE_OPEN_READONLY);
40845
40846     /* If the file was successfully opened for read/write access,
40847     ** choose a default page size in case we have to create the
40848     ** database file. The default page size is the maximum of:
40849     **
40850     **    + SQLITE_DEFAULT_PAGE_SIZE,
40851     **    + The value returned by sqlite3OsSectorSize()
40852     **    + The largest page size that can be written atomically.
40853     */
40854     if( rc==SQLITE_OK && !readOnly ){
40855       setSectorSize(pPager);
40856       assert(SQLITE_DEFAULT_PAGE_SIZE<=SQLITE_MAX_DEFAULT_PAGE_SIZE);
40857       if( szPageDflt<pPager->sectorSize ){
40858         if( pPager->sectorSize>SQLITE_MAX_DEFAULT_PAGE_SIZE ){
40859           szPageDflt = SQLITE_MAX_DEFAULT_PAGE_SIZE;
40860         }else{
40861           szPageDflt = (u32)pPager->sectorSize;
40862         }
40863       }
40864 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
40865       {
40866         int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
40867         int ii;
40868         assert(SQLITE_IOCAP_ATOMIC512==(512>>8));
40869         assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));
40870         assert(SQLITE_MAX_DEFAULT_PAGE_SIZE<=65536);
40871         for(ii=szPageDflt; ii<=SQLITE_MAX_DEFAULT_PAGE_SIZE; ii=ii*2){
40872           if( iDc&(SQLITE_IOCAP_ATOMIC|(ii>>8)) ){
40873             szPageDflt = ii;
40874           }
40875         }
40876       }
40877 #endif
40878     }
40879   }else{
40880     /* If a temporary file is requested, it is not opened immediately.
40881     ** In this case we accept the default page size and delay actually
40882     ** opening the file until the first call to OsWrite().
40883     **
40884     ** This branch is also run for an in-memory database. An in-memory
40885     ** database is the same as a temp-file that is never written out to
40886     ** disk and uses an in-memory rollback journal.
40887     */ 
40888     tempFile = 1;
40889     pPager->eState = PAGER_READER;
40890     pPager->eLock = EXCLUSIVE_LOCK;
40891     readOnly = (vfsFlags&SQLITE_OPEN_READONLY);
40892   }
40893
40894   /* The following call to PagerSetPagesize() serves to set the value of 
40895   ** Pager.pageSize and to allocate the Pager.pTmpSpace buffer.
40896   */
40897   if( rc==SQLITE_OK ){
40898     assert( pPager->memDb==0 );
40899     rc = sqlite3PagerSetPagesize(pPager, &szPageDflt, -1);
40900     testcase( rc!=SQLITE_OK );
40901   }
40902
40903   /* If an error occurred in either of the blocks above, free the 
40904   ** Pager structure and close the file.
40905   */
40906   if( rc!=SQLITE_OK ){
40907     assert( !pPager->pTmpSpace );
40908     sqlite3OsClose(pPager->fd);
40909     sqlite3_free(pPager);
40910     return rc;
40911   }
40912
40913   /* Initialize the PCache object. */
40914   assert( nExtra<1000 );
40915   nExtra = ROUND8(nExtra);
40916   sqlite3PcacheOpen(szPageDflt, nExtra, !memDb,
40917                     !memDb?pagerStress:0, (void *)pPager, pPager->pPCache);
40918
40919   PAGERTRACE(("OPEN %d %s\n", FILEHANDLEID(pPager->fd), pPager->zFilename));
40920   IOTRACE(("OPEN %p %s\n", pPager, pPager->zFilename))
40921
40922   pPager->useJournal = (u8)useJournal;
40923   pPager->noReadlock = (noReadlock && readOnly) ?1:0;
40924   /* pPager->stmtOpen = 0; */
40925   /* pPager->stmtInUse = 0; */
40926   /* pPager->nRef = 0; */
40927   /* pPager->stmtSize = 0; */
40928   /* pPager->stmtJSize = 0; */
40929   /* pPager->nPage = 0; */
40930   pPager->mxPgno = SQLITE_MAX_PAGE_COUNT;
40931   /* pPager->state = PAGER_UNLOCK; */
40932 #if 0
40933   assert( pPager->state == (tempFile ? PAGER_EXCLUSIVE : PAGER_UNLOCK) );
40934 #endif
40935   /* pPager->errMask = 0; */
40936   pPager->tempFile = (u8)tempFile;
40937   assert( tempFile==PAGER_LOCKINGMODE_NORMAL 
40938           || tempFile==PAGER_LOCKINGMODE_EXCLUSIVE );
40939   assert( PAGER_LOCKINGMODE_EXCLUSIVE==1 );
40940   pPager->exclusiveMode = (u8)tempFile; 
40941   pPager->changeCountDone = pPager->tempFile;
40942   pPager->memDb = (u8)memDb;
40943   pPager->readOnly = (u8)readOnly;
40944   assert( useJournal || pPager->tempFile );
40945   pPager->noSync = pPager->tempFile;
40946   pPager->fullSync = pPager->noSync ?0:1;
40947   pPager->syncFlags = pPager->noSync ? 0 : SQLITE_SYNC_NORMAL;
40948   pPager->ckptSyncFlags = pPager->syncFlags;
40949   /* pPager->pFirst = 0; */
40950   /* pPager->pFirstSynced = 0; */
40951   /* pPager->pLast = 0; */
40952   pPager->nExtra = (u16)nExtra;
40953   pPager->journalSizeLimit = SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT;
40954   assert( isOpen(pPager->fd) || tempFile );
40955   setSectorSize(pPager);
40956   if( !useJournal ){
40957     pPager->journalMode = PAGER_JOURNALMODE_OFF;
40958   }else if( memDb ){
40959     pPager->journalMode = PAGER_JOURNALMODE_MEMORY;
40960   }
40961   /* pPager->xBusyHandler = 0; */
40962   /* pPager->pBusyHandlerArg = 0; */
40963   pPager->xReiniter = xReinit;
40964   /* memset(pPager->aHash, 0, sizeof(pPager->aHash)); */
40965
40966   *ppPager = pPager;
40967   return SQLITE_OK;
40968 }
40969
40970
40971
40972 /*
40973 ** This function is called after transitioning from PAGER_UNLOCK to
40974 ** PAGER_SHARED state. It tests if there is a hot journal present in
40975 ** the file-system for the given pager. A hot journal is one that 
40976 ** needs to be played back. According to this function, a hot-journal
40977 ** file exists if the following criteria are met:
40978 **
40979 **   * The journal file exists in the file system, and
40980 **   * No process holds a RESERVED or greater lock on the database file, and
40981 **   * The database file itself is greater than 0 bytes in size, and
40982 **   * The first byte of the journal file exists and is not 0x00.
40983 **
40984 ** If the current size of the database file is 0 but a journal file
40985 ** exists, that is probably an old journal left over from a prior
40986 ** database with the same name. In this case the journal file is
40987 ** just deleted using OsDelete, *pExists is set to 0 and SQLITE_OK
40988 ** is returned.
40989 **
40990 ** This routine does not check if there is a master journal filename
40991 ** at the end of the file. If there is, and that master journal file
40992 ** does not exist, then the journal file is not really hot. In this
40993 ** case this routine will return a false-positive. The pager_playback()
40994 ** routine will discover that the journal file is not really hot and 
40995 ** will not roll it back. 
40996 **
40997 ** If a hot-journal file is found to exist, *pExists is set to 1 and 
40998 ** SQLITE_OK returned. If no hot-journal file is present, *pExists is
40999 ** set to 0 and SQLITE_OK returned. If an IO error occurs while trying
41000 ** to determine whether or not a hot-journal file exists, the IO error
41001 ** code is returned and the value of *pExists is undefined.
41002 */
41003 static int hasHotJournal(Pager *pPager, int *pExists){
41004   sqlite3_vfs * const pVfs = pPager->pVfs;
41005   int rc = SQLITE_OK;           /* Return code */
41006   int exists = 1;               /* True if a journal file is present */
41007   int jrnlOpen = !!isOpen(pPager->jfd);
41008
41009   assert( pPager->useJournal );
41010   assert( isOpen(pPager->fd) );
41011   assert( pPager->eState==PAGER_OPEN );
41012
41013   assert( jrnlOpen==0 || ( sqlite3OsDeviceCharacteristics(pPager->jfd) &
41014     SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
41015   ));
41016
41017   *pExists = 0;
41018   if( !jrnlOpen ){
41019     rc = sqlite3OsAccess(pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &exists);
41020   }
41021   if( rc==SQLITE_OK && exists ){
41022     int locked = 0;             /* True if some process holds a RESERVED lock */
41023
41024     /* Race condition here:  Another process might have been holding the
41025     ** the RESERVED lock and have a journal open at the sqlite3OsAccess() 
41026     ** call above, but then delete the journal and drop the lock before
41027     ** we get to the following sqlite3OsCheckReservedLock() call.  If that
41028     ** is the case, this routine might think there is a hot journal when
41029     ** in fact there is none.  This results in a false-positive which will
41030     ** be dealt with by the playback routine.  Ticket #3883.
41031     */
41032     rc = sqlite3OsCheckReservedLock(pPager->fd, &locked);
41033     if( rc==SQLITE_OK && !locked ){
41034       Pgno nPage;                 /* Number of pages in database file */
41035
41036       /* Check the size of the database file. If it consists of 0 pages,
41037       ** then delete the journal file. See the header comment above for 
41038       ** the reasoning here.  Delete the obsolete journal file under
41039       ** a RESERVED lock to avoid race conditions and to avoid violating
41040       ** [H33020].
41041       */
41042       rc = pagerPagecount(pPager, &nPage);
41043       if( rc==SQLITE_OK ){
41044         if( nPage==0 ){
41045           sqlite3BeginBenignMalloc();
41046           if( pagerLockDb(pPager, RESERVED_LOCK)==SQLITE_OK ){
41047             sqlite3OsDelete(pVfs, pPager->zJournal, 0);
41048             if( !pPager->exclusiveMode ) pagerUnlockDb(pPager, SHARED_LOCK);
41049           }
41050           sqlite3EndBenignMalloc();
41051         }else{
41052           /* The journal file exists and no other connection has a reserved
41053           ** or greater lock on the database file. Now check that there is
41054           ** at least one non-zero bytes at the start of the journal file.
41055           ** If there is, then we consider this journal to be hot. If not, 
41056           ** it can be ignored.
41057           */
41058           if( !jrnlOpen ){
41059             int f = SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL;
41060             rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &f);
41061           }
41062           if( rc==SQLITE_OK ){
41063             u8 first = 0;
41064             rc = sqlite3OsRead(pPager->jfd, (void *)&first, 1, 0);
41065             if( rc==SQLITE_IOERR_SHORT_READ ){
41066               rc = SQLITE_OK;
41067             }
41068             if( !jrnlOpen ){
41069               sqlite3OsClose(pPager->jfd);
41070             }
41071             *pExists = (first!=0);
41072           }else if( rc==SQLITE_CANTOPEN ){
41073             /* If we cannot open the rollback journal file in order to see if
41074             ** its has a zero header, that might be due to an I/O error, or
41075             ** it might be due to the race condition described above and in
41076             ** ticket #3883.  Either way, assume that the journal is hot.
41077             ** This might be a false positive.  But if it is, then the
41078             ** automatic journal playback and recovery mechanism will deal
41079             ** with it under an EXCLUSIVE lock where we do not need to
41080             ** worry so much with race conditions.
41081             */
41082             *pExists = 1;
41083             rc = SQLITE_OK;
41084           }
41085         }
41086       }
41087     }
41088   }
41089
41090   return rc;
41091 }
41092
41093 /*
41094 ** This function is called to obtain a shared lock on the database file.
41095 ** It is illegal to call sqlite3PagerAcquire() until after this function
41096 ** has been successfully called. If a shared-lock is already held when
41097 ** this function is called, it is a no-op.
41098 **
41099 ** The following operations are also performed by this function.
41100 **
41101 **   1) If the pager is currently in PAGER_OPEN state (no lock held
41102 **      on the database file), then an attempt is made to obtain a
41103 **      SHARED lock on the database file. Immediately after obtaining
41104 **      the SHARED lock, the file-system is checked for a hot-journal,
41105 **      which is played back if present. Following any hot-journal 
41106 **      rollback, the contents of the cache are validated by checking
41107 **      the 'change-counter' field of the database file header and
41108 **      discarded if they are found to be invalid.
41109 **
41110 **   2) If the pager is running in exclusive-mode, and there are currently
41111 **      no outstanding references to any pages, and is in the error state,
41112 **      then an attempt is made to clear the error state by discarding
41113 **      the contents of the page cache and rolling back any open journal
41114 **      file.
41115 **
41116 ** If everything is successful, SQLITE_OK is returned. If an IO error 
41117 ** occurs while locking the database, checking for a hot-journal file or 
41118 ** rolling back a journal file, the IO error code is returned.
41119 */
41120 SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager){
41121   int rc = SQLITE_OK;                /* Return code */
41122
41123   /* This routine is only called from b-tree and only when there are no
41124   ** outstanding pages. This implies that the pager state should either
41125   ** be OPEN or READER. READER is only possible if the pager is or was in 
41126   ** exclusive access mode.
41127   */
41128   assert( sqlite3PcacheRefCount(pPager->pPCache)==0 );
41129   assert( assert_pager_state(pPager) );
41130   assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER );
41131   if( NEVER(MEMDB && pPager->errCode) ){ return pPager->errCode; }
41132
41133   if( !pagerUseWal(pPager) && pPager->eState==PAGER_OPEN ){
41134     int bHotJournal = 1;          /* True if there exists a hot journal-file */
41135
41136     assert( !MEMDB );
41137     assert( pPager->noReadlock==0 || pPager->readOnly );
41138
41139     if( pPager->noReadlock==0 ){
41140       rc = pager_wait_on_lock(pPager, SHARED_LOCK);
41141       if( rc!=SQLITE_OK ){
41142         assert( pPager->eLock==NO_LOCK || pPager->eLock==UNKNOWN_LOCK );
41143         goto failed;
41144       }
41145     }
41146
41147     /* If a journal file exists, and there is no RESERVED lock on the
41148     ** database file, then it either needs to be played back or deleted.
41149     */
41150     if( pPager->eLock<=SHARED_LOCK ){
41151       rc = hasHotJournal(pPager, &bHotJournal);
41152     }
41153     if( rc!=SQLITE_OK ){
41154       goto failed;
41155     }
41156     if( bHotJournal ){
41157       /* Get an EXCLUSIVE lock on the database file. At this point it is
41158       ** important that a RESERVED lock is not obtained on the way to the
41159       ** EXCLUSIVE lock. If it were, another process might open the
41160       ** database file, detect the RESERVED lock, and conclude that the
41161       ** database is safe to read while this process is still rolling the 
41162       ** hot-journal back.
41163       ** 
41164       ** Because the intermediate RESERVED lock is not requested, any
41165       ** other process attempting to access the database file will get to 
41166       ** this point in the code and fail to obtain its own EXCLUSIVE lock 
41167       ** on the database file.
41168       **
41169       ** Unless the pager is in locking_mode=exclusive mode, the lock is
41170       ** downgraded to SHARED_LOCK before this function returns.
41171       */
41172       rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
41173       if( rc!=SQLITE_OK ){
41174         goto failed;
41175       }
41176  
41177       /* If it is not already open and the file exists on disk, open the 
41178       ** journal for read/write access. Write access is required because 
41179       ** in exclusive-access mode the file descriptor will be kept open 
41180       ** and possibly used for a transaction later on. Also, write-access 
41181       ** is usually required to finalize the journal in journal_mode=persist 
41182       ** mode (and also for journal_mode=truncate on some systems).
41183       **
41184       ** If the journal does not exist, it usually means that some 
41185       ** other connection managed to get in and roll it back before 
41186       ** this connection obtained the exclusive lock above. Or, it 
41187       ** may mean that the pager was in the error-state when this
41188       ** function was called and the journal file does not exist.
41189       */
41190       if( !isOpen(pPager->jfd) ){
41191         sqlite3_vfs * const pVfs = pPager->pVfs;
41192         int bExists;              /* True if journal file exists */
41193         rc = sqlite3OsAccess(
41194             pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &bExists);
41195         if( rc==SQLITE_OK && bExists ){
41196           int fout = 0;
41197           int f = SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_JOURNAL;
41198           assert( !pPager->tempFile );
41199           rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &fout);
41200           assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );
41201           if( rc==SQLITE_OK && fout&SQLITE_OPEN_READONLY ){
41202             rc = SQLITE_CANTOPEN_BKPT;
41203             sqlite3OsClose(pPager->jfd);
41204           }
41205         }
41206       }
41207  
41208       /* Playback and delete the journal.  Drop the database write
41209       ** lock and reacquire the read lock. Purge the cache before
41210       ** playing back the hot-journal so that we don't end up with
41211       ** an inconsistent cache.  Sync the hot journal before playing
41212       ** it back since the process that crashed and left the hot journal
41213       ** probably did not sync it and we are required to always sync
41214       ** the journal before playing it back.
41215       */
41216       if( isOpen(pPager->jfd) ){
41217         assert( rc==SQLITE_OK );
41218         rc = pagerSyncHotJournal(pPager);
41219         if( rc==SQLITE_OK ){
41220           rc = pager_playback(pPager, 1);
41221           pPager->eState = PAGER_OPEN;
41222         }
41223       }else if( !pPager->exclusiveMode ){
41224         pagerUnlockDb(pPager, SHARED_LOCK);
41225       }
41226
41227       if( rc!=SQLITE_OK ){
41228         /* This branch is taken if an error occurs while trying to open
41229         ** or roll back a hot-journal while holding an EXCLUSIVE lock. The
41230         ** pager_unlock() routine will be called before returning to unlock
41231         ** the file. If the unlock attempt fails, then Pager.eLock must be
41232         ** set to UNKNOWN_LOCK (see the comment above the #define for 
41233         ** UNKNOWN_LOCK above for an explanation). 
41234         **
41235         ** In order to get pager_unlock() to do this, set Pager.eState to
41236         ** PAGER_ERROR now. This is not actually counted as a transition
41237         ** to ERROR state in the state diagram at the top of this file,
41238         ** since we know that the same call to pager_unlock() will very
41239         ** shortly transition the pager object to the OPEN state. Calling
41240         ** assert_pager_state() would fail now, as it should not be possible
41241         ** to be in ERROR state when there are zero outstanding page 
41242         ** references.
41243         */
41244         pager_error(pPager, rc);
41245         goto failed;
41246       }
41247
41248       assert( pPager->eState==PAGER_OPEN );
41249       assert( (pPager->eLock==SHARED_LOCK)
41250            || (pPager->exclusiveMode && pPager->eLock>SHARED_LOCK)
41251       );
41252     }
41253
41254     if( !pPager->tempFile 
41255      && (pPager->pBackup || sqlite3PcachePagecount(pPager->pPCache)>0) 
41256     ){
41257       /* The shared-lock has just been acquired on the database file
41258       ** and there are already pages in the cache (from a previous
41259       ** read or write transaction).  Check to see if the database
41260       ** has been modified.  If the database has changed, flush the
41261       ** cache.
41262       **
41263       ** Database changes is detected by looking at 15 bytes beginning
41264       ** at offset 24 into the file.  The first 4 of these 16 bytes are
41265       ** a 32-bit counter that is incremented with each change.  The
41266       ** other bytes change randomly with each file change when
41267       ** a codec is in use.
41268       ** 
41269       ** There is a vanishingly small chance that a change will not be 
41270       ** detected.  The chance of an undetected change is so small that
41271       ** it can be neglected.
41272       */
41273       Pgno nPage = 0;
41274       char dbFileVers[sizeof(pPager->dbFileVers)];
41275
41276       rc = pagerPagecount(pPager, &nPage);
41277       if( rc ) goto failed;
41278
41279       if( nPage>0 ){
41280         IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers)));
41281         rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24);
41282         if( rc!=SQLITE_OK ){
41283           goto failed;
41284         }
41285       }else{
41286         memset(dbFileVers, 0, sizeof(dbFileVers));
41287       }
41288
41289       if( memcmp(pPager->dbFileVers, dbFileVers, sizeof(dbFileVers))!=0 ){
41290         pager_reset(pPager);
41291       }
41292     }
41293
41294     /* If there is a WAL file in the file-system, open this database in WAL
41295     ** mode. Otherwise, the following function call is a no-op.
41296     */
41297     rc = pagerOpenWalIfPresent(pPager);
41298 #ifndef SQLITE_OMIT_WAL
41299     assert( pPager->pWal==0 || rc==SQLITE_OK );
41300 #endif
41301   }
41302
41303   if( pagerUseWal(pPager) ){
41304     assert( rc==SQLITE_OK );
41305     rc = pagerBeginReadTransaction(pPager);
41306   }
41307
41308   if( pPager->eState==PAGER_OPEN && rc==SQLITE_OK ){
41309     rc = pagerPagecount(pPager, &pPager->dbSize);
41310   }
41311
41312  failed:
41313   if( rc!=SQLITE_OK ){
41314     assert( !MEMDB );
41315     pager_unlock(pPager);
41316     assert( pPager->eState==PAGER_OPEN );
41317   }else{
41318     pPager->eState = PAGER_READER;
41319   }
41320   return rc;
41321 }
41322
41323 /*
41324 ** If the reference count has reached zero, rollback any active
41325 ** transaction and unlock the pager.
41326 **
41327 ** Except, in locking_mode=EXCLUSIVE when there is nothing to in
41328 ** the rollback journal, the unlock is not performed and there is
41329 ** nothing to rollback, so this routine is a no-op.
41330 */ 
41331 static void pagerUnlockIfUnused(Pager *pPager){
41332   if( (sqlite3PcacheRefCount(pPager->pPCache)==0) ){
41333     pagerUnlockAndRollback(pPager);
41334   }
41335 }
41336
41337 /*
41338 ** Acquire a reference to page number pgno in pager pPager (a page
41339 ** reference has type DbPage*). If the requested reference is 
41340 ** successfully obtained, it is copied to *ppPage and SQLITE_OK returned.
41341 **
41342 ** If the requested page is already in the cache, it is returned. 
41343 ** Otherwise, a new page object is allocated and populated with data
41344 ** read from the database file. In some cases, the pcache module may
41345 ** choose not to allocate a new page object and may reuse an existing
41346 ** object with no outstanding references.
41347 **
41348 ** The extra data appended to a page is always initialized to zeros the 
41349 ** first time a page is loaded into memory. If the page requested is 
41350 ** already in the cache when this function is called, then the extra
41351 ** data is left as it was when the page object was last used.
41352 **
41353 ** If the database image is smaller than the requested page or if a 
41354 ** non-zero value is passed as the noContent parameter and the 
41355 ** requested page is not already stored in the cache, then no 
41356 ** actual disk read occurs. In this case the memory image of the 
41357 ** page is initialized to all zeros. 
41358 **
41359 ** If noContent is true, it means that we do not care about the contents
41360 ** of the page. This occurs in two seperate scenarios:
41361 **
41362 **   a) When reading a free-list leaf page from the database, and
41363 **
41364 **   b) When a savepoint is being rolled back and we need to load
41365 **      a new page into the cache to be filled with the data read
41366 **      from the savepoint journal.
41367 **
41368 ** If noContent is true, then the data returned is zeroed instead of
41369 ** being read from the database. Additionally, the bits corresponding
41370 ** to pgno in Pager.pInJournal (bitvec of pages already written to the
41371 ** journal file) and the PagerSavepoint.pInSavepoint bitvecs of any open
41372 ** savepoints are set. This means if the page is made writable at any
41373 ** point in the future, using a call to sqlite3PagerWrite(), its contents
41374 ** will not be journaled. This saves IO.
41375 **
41376 ** The acquisition might fail for several reasons.  In all cases,
41377 ** an appropriate error code is returned and *ppPage is set to NULL.
41378 **
41379 ** See also sqlite3PagerLookup().  Both this routine and Lookup() attempt
41380 ** to find a page in the in-memory cache first.  If the page is not already
41381 ** in memory, this routine goes to disk to read it in whereas Lookup()
41382 ** just returns 0.  This routine acquires a read-lock the first time it
41383 ** has to go to disk, and could also playback an old journal if necessary.
41384 ** Since Lookup() never goes to disk, it never has to deal with locks
41385 ** or journal files.
41386 */
41387 SQLITE_PRIVATE int sqlite3PagerAcquire(
41388   Pager *pPager,      /* The pager open on the database file */
41389   Pgno pgno,          /* Page number to fetch */
41390   DbPage **ppPage,    /* Write a pointer to the page here */
41391   int noContent       /* Do not bother reading content from disk if true */
41392 ){
41393   int rc;
41394   PgHdr *pPg;
41395
41396   assert( pPager->eState>=PAGER_READER );
41397   assert( assert_pager_state(pPager) );
41398
41399   if( pgno==0 ){
41400     return SQLITE_CORRUPT_BKPT;
41401   }
41402
41403   /* If the pager is in the error state, return an error immediately. 
41404   ** Otherwise, request the page from the PCache layer. */
41405   if( pPager->errCode!=SQLITE_OK ){
41406     rc = pPager->errCode;
41407   }else{
41408     rc = sqlite3PcacheFetch(pPager->pPCache, pgno, 1, ppPage);
41409   }
41410
41411   if( rc!=SQLITE_OK ){
41412     /* Either the call to sqlite3PcacheFetch() returned an error or the
41413     ** pager was already in the error-state when this function was called.
41414     ** Set pPg to 0 and jump to the exception handler.  */
41415     pPg = 0;
41416     goto pager_acquire_err;
41417   }
41418   assert( (*ppPage)->pgno==pgno );
41419   assert( (*ppPage)->pPager==pPager || (*ppPage)->pPager==0 );
41420
41421   if( (*ppPage)->pPager && !noContent ){
41422     /* In this case the pcache already contains an initialized copy of
41423     ** the page. Return without further ado.  */
41424     assert( pgno<=PAGER_MAX_PGNO && pgno!=PAGER_MJ_PGNO(pPager) );
41425     PAGER_INCR(pPager->nHit);
41426     return SQLITE_OK;
41427
41428   }else{
41429     /* The pager cache has created a new page. Its content needs to 
41430     ** be initialized.  */
41431
41432     PAGER_INCR(pPager->nMiss);
41433     pPg = *ppPage;
41434     pPg->pPager = pPager;
41435
41436     /* The maximum page number is 2^31. Return SQLITE_CORRUPT if a page
41437     ** number greater than this, or the unused locking-page, is requested. */
41438     if( pgno>PAGER_MAX_PGNO || pgno==PAGER_MJ_PGNO(pPager) ){
41439       rc = SQLITE_CORRUPT_BKPT;
41440       goto pager_acquire_err;
41441     }
41442
41443     if( MEMDB || pPager->dbSize<pgno || noContent || !isOpen(pPager->fd) ){
41444       if( pgno>pPager->mxPgno ){
41445         rc = SQLITE_FULL;
41446         goto pager_acquire_err;
41447       }
41448       if( noContent ){
41449         /* Failure to set the bits in the InJournal bit-vectors is benign.
41450         ** It merely means that we might do some extra work to journal a 
41451         ** page that does not need to be journaled.  Nevertheless, be sure 
41452         ** to test the case where a malloc error occurs while trying to set 
41453         ** a bit in a bit vector.
41454         */
41455         sqlite3BeginBenignMalloc();
41456         if( pgno<=pPager->dbOrigSize ){
41457           TESTONLY( rc = ) sqlite3BitvecSet(pPager->pInJournal, pgno);
41458           testcase( rc==SQLITE_NOMEM );
41459         }
41460         TESTONLY( rc = ) addToSavepointBitvecs(pPager, pgno);
41461         testcase( rc==SQLITE_NOMEM );
41462         sqlite3EndBenignMalloc();
41463       }
41464       memset(pPg->pData, 0, pPager->pageSize);
41465       IOTRACE(("ZERO %p %d\n", pPager, pgno));
41466     }else{
41467       assert( pPg->pPager==pPager );
41468       rc = readDbPage(pPg);
41469       if( rc!=SQLITE_OK ){
41470         goto pager_acquire_err;
41471       }
41472     }
41473     pager_set_pagehash(pPg);
41474   }
41475
41476   return SQLITE_OK;
41477
41478 pager_acquire_err:
41479   assert( rc!=SQLITE_OK );
41480   if( pPg ){
41481     sqlite3PcacheDrop(pPg);
41482   }
41483   pagerUnlockIfUnused(pPager);
41484
41485   *ppPage = 0;
41486   return rc;
41487 }
41488
41489 /*
41490 ** Acquire a page if it is already in the in-memory cache.  Do
41491 ** not read the page from disk.  Return a pointer to the page,
41492 ** or 0 if the page is not in cache. 
41493 **
41494 ** See also sqlite3PagerGet().  The difference between this routine
41495 ** and sqlite3PagerGet() is that _get() will go to the disk and read
41496 ** in the page if the page is not already in cache.  This routine
41497 ** returns NULL if the page is not in cache or if a disk I/O error 
41498 ** has ever happened.
41499 */
41500 SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){
41501   PgHdr *pPg = 0;
41502   assert( pPager!=0 );
41503   assert( pgno!=0 );
41504   assert( pPager->pPCache!=0 );
41505   assert( pPager->eState>=PAGER_READER && pPager->eState!=PAGER_ERROR );
41506   sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &pPg);
41507   return pPg;
41508 }
41509
41510 /*
41511 ** Release a page reference.
41512 **
41513 ** If the number of references to the page drop to zero, then the
41514 ** page is added to the LRU list.  When all references to all pages
41515 ** are released, a rollback occurs and the lock on the database is
41516 ** removed.
41517 */
41518 SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){
41519   if( pPg ){
41520     Pager *pPager = pPg->pPager;
41521     sqlite3PcacheRelease(pPg);
41522     pagerUnlockIfUnused(pPager);
41523   }
41524 }
41525
41526 #if defined(__APPLE__)
41527 /*
41528 ** Create and return a CFURLRef given a cstring containing the path to a file.
41529 */
41530 static CFURLRef create_cfurl_from_cstring(const char* filePath){
41531   CFStringRef urlString = CFStringCreateWithFileSystemRepresentation(
41532       kCFAllocatorDefault, filePath);
41533   CFURLRef urlRef = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
41534       urlString, kCFURLPOSIXPathStyle, FALSE);
41535   CFRelease(urlString);
41536   return urlRef;
41537 }
41538 #endif
41539
41540 /*
41541 ** This function is called at the start of every write transaction.
41542 ** There must already be a RESERVED or EXCLUSIVE lock on the database 
41543 ** file when this routine is called.
41544 **
41545 ** Open the journal file for pager pPager and write a journal header
41546 ** to the start of it. If there are active savepoints, open the sub-journal
41547 ** as well. This function is only used when the journal file is being 
41548 ** opened to write a rollback log for a transaction. It is not used 
41549 ** when opening a hot journal file to roll it back.
41550 **
41551 ** If the journal file is already open (as it may be in exclusive mode),
41552 ** then this function just writes a journal header to the start of the
41553 ** already open file. 
41554 **
41555 ** Whether or not the journal file is opened by this function, the
41556 ** Pager.pInJournal bitvec structure is allocated.
41557 **
41558 ** Return SQLITE_OK if everything is successful. Otherwise, return 
41559 ** SQLITE_NOMEM if the attempt to allocate Pager.pInJournal fails, or 
41560 ** an IO error code if opening or writing the journal file fails.
41561 */
41562 static int pager_open_journal(Pager *pPager){
41563   int rc = SQLITE_OK;                        /* Return code */
41564   sqlite3_vfs * const pVfs = pPager->pVfs;   /* Local cache of vfs pointer */
41565
41566   assert( pPager->eState==PAGER_WRITER_LOCKED );
41567   assert( assert_pager_state(pPager) );
41568   assert( pPager->pInJournal==0 );
41569   
41570   /* If already in the error state, this function is a no-op.  But on
41571   ** the other hand, this routine is never called if we are already in
41572   ** an error state. */
41573   if( NEVER(pPager->errCode) ) return pPager->errCode;
41574
41575   if( !pagerUseWal(pPager) && pPager->journalMode!=PAGER_JOURNALMODE_OFF ){
41576     pPager->pInJournal = sqlite3BitvecCreate(pPager->dbSize);
41577     if( pPager->pInJournal==0 ){
41578       return SQLITE_NOMEM;
41579     }
41580   
41581     /* Open the journal file if it is not already open. */
41582     if( !isOpen(pPager->jfd) ){
41583       if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ){
41584         sqlite3MemJournalOpen(pPager->jfd);
41585       }else{
41586         const int flags =                   /* VFS flags to open journal file */
41587           SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|
41588           (pPager->tempFile ? 
41589             (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL):
41590             (SQLITE_OPEN_MAIN_JOURNAL)
41591           );
41592   #ifdef SQLITE_ENABLE_ATOMIC_WRITE
41593         rc = sqlite3JournalOpen(
41594             pVfs, pPager->zJournal, pPager->jfd, flags, jrnlBufferSize(pPager)
41595         );
41596   #else
41597         rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, flags, 0);
41598   #endif
41599 #if defined(__APPLE__)
41600         /* Set the TimeMachine exclusion metadata for the journal if it has
41601         ** been set for the database. Only do this for unix-type vfs
41602         ** implementations. */
41603         if( rc==SQLITE_OK && pPager->zFilename!=NULL
41604          && strlen(pPager->zFilename)>0
41605          && strncmp(pVfs->zName, "unix", 4)==0
41606          && ( pVfs->zName[4]=='-' || pVfs->zName[4]=='\0' ) ){
41607           CFURLRef database = create_cfurl_from_cstring(pPager->zFilename);
41608           if( CSBackupIsItemExcluded(database, NULL) ){
41609             CFURLRef journal = create_cfurl_from_cstring(pPager->zJournal);
41610             /* Ignore errors from the following exclusion call. */
41611             CSBackupSetItemExcluded(journal, TRUE, FALSE);
41612             CFRelease(journal);
41613           }
41614           CFRelease(database);
41615         }
41616 #endif
41617       }
41618       assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );
41619     }
41620   
41621   
41622     /* Write the first journal header to the journal file and open 
41623     ** the sub-journal if necessary.
41624     */
41625     if( rc==SQLITE_OK ){
41626       /* TODO: Check if all of these are really required. */
41627       pPager->nRec = 0;
41628       pPager->journalOff = 0;
41629       pPager->setMaster = 0;
41630       pPager->journalHdr = 0;
41631       rc = writeJournalHdr(pPager);
41632     }
41633   }
41634
41635   if( rc!=SQLITE_OK ){
41636     sqlite3BitvecDestroy(pPager->pInJournal);
41637     pPager->pInJournal = 0;
41638   }else{
41639     assert( pPager->eState==PAGER_WRITER_LOCKED );
41640     pPager->eState = PAGER_WRITER_CACHEMOD;
41641   }
41642
41643   return rc;
41644 }
41645
41646 /*
41647 ** Begin a write-transaction on the specified pager object. If a 
41648 ** write-transaction has already been opened, this function is a no-op.
41649 **
41650 ** If the exFlag argument is false, then acquire at least a RESERVED
41651 ** lock on the database file. If exFlag is true, then acquire at least
41652 ** an EXCLUSIVE lock. If such a lock is already held, no locking 
41653 ** functions need be called.
41654 **
41655 ** If the subjInMemory argument is non-zero, then any sub-journal opened
41656 ** within this transaction will be opened as an in-memory file. This
41657 ** has no effect if the sub-journal is already opened (as it may be when
41658 ** running in exclusive mode) or if the transaction does not require a
41659 ** sub-journal. If the subjInMemory argument is zero, then any required
41660 ** sub-journal is implemented in-memory if pPager is an in-memory database, 
41661 ** or using a temporary file otherwise.
41662 */
41663 SQLITE_PRIVATE int sqlite3PagerBegin(Pager *pPager, int exFlag, int subjInMemory){
41664   int rc = SQLITE_OK;
41665
41666   if( pPager->errCode ) return pPager->errCode;
41667   assert( pPager->eState>=PAGER_READER && pPager->eState<PAGER_ERROR );
41668   pPager->subjInMemory = (u8)subjInMemory;
41669
41670   if( ALWAYS(pPager->eState==PAGER_READER) ){
41671     assert( pPager->pInJournal==0 );
41672
41673     if( pagerUseWal(pPager) ){
41674       /* If the pager is configured to use locking_mode=exclusive, and an
41675       ** exclusive lock on the database is not already held, obtain it now.
41676       */
41677       if( pPager->exclusiveMode && sqlite3WalExclusiveMode(pPager->pWal, -1) ){
41678         rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
41679         if( rc!=SQLITE_OK ){
41680           return rc;
41681         }
41682         sqlite3WalExclusiveMode(pPager->pWal, 1);
41683       }
41684
41685       /* Grab the write lock on the log file. If successful, upgrade to
41686       ** PAGER_RESERVED state. Otherwise, return an error code to the caller.
41687       ** The busy-handler is not invoked if another connection already
41688       ** holds the write-lock. If possible, the upper layer will call it.
41689       */
41690       rc = sqlite3WalBeginWriteTransaction(pPager->pWal);
41691     }else{
41692       /* Obtain a RESERVED lock on the database file. If the exFlag parameter
41693       ** is true, then immediately upgrade this to an EXCLUSIVE lock. The
41694       ** busy-handler callback can be used when upgrading to the EXCLUSIVE
41695       ** lock, but not when obtaining the RESERVED lock.
41696       */
41697       rc = pagerLockDb(pPager, RESERVED_LOCK);
41698       if( rc==SQLITE_OK && exFlag ){
41699         rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK);
41700       }
41701     }
41702
41703     if( rc==SQLITE_OK ){
41704       /* Change to WRITER_LOCKED state.
41705       **
41706       ** WAL mode sets Pager.eState to PAGER_WRITER_LOCKED or CACHEMOD
41707       ** when it has an open transaction, but never to DBMOD or FINISHED.
41708       ** This is because in those states the code to roll back savepoint 
41709       ** transactions may copy data from the sub-journal into the database 
41710       ** file as well as into the page cache. Which would be incorrect in 
41711       ** WAL mode.
41712       */
41713       pPager->eState = PAGER_WRITER_LOCKED;
41714       pPager->dbHintSize = pPager->dbSize;
41715       pPager->dbFileSize = pPager->dbSize;
41716       pPager->dbOrigSize = pPager->dbSize;
41717       pPager->journalOff = 0;
41718     }
41719
41720     assert( rc==SQLITE_OK || pPager->eState==PAGER_READER );
41721     assert( rc!=SQLITE_OK || pPager->eState==PAGER_WRITER_LOCKED );
41722     assert( assert_pager_state(pPager) );
41723   }
41724
41725   PAGERTRACE(("TRANSACTION %d\n", PAGERID(pPager)));
41726   return rc;
41727 }
41728
41729 /*
41730 ** Mark a single data page as writeable. The page is written into the 
41731 ** main journal or sub-journal as required. If the page is written into
41732 ** one of the journals, the corresponding bit is set in the 
41733 ** Pager.pInJournal bitvec and the PagerSavepoint.pInSavepoint bitvecs
41734 ** of any open savepoints as appropriate.
41735 */
41736 static int pager_write(PgHdr *pPg){
41737   void *pData = pPg->pData;
41738   Pager *pPager = pPg->pPager;
41739   int rc = SQLITE_OK;
41740
41741   /* This routine is not called unless a write-transaction has already 
41742   ** been started. The journal file may or may not be open at this point.
41743   ** It is never called in the ERROR state.
41744   */
41745   assert( pPager->eState==PAGER_WRITER_LOCKED
41746        || pPager->eState==PAGER_WRITER_CACHEMOD
41747        || pPager->eState==PAGER_WRITER_DBMOD
41748   );
41749   assert( assert_pager_state(pPager) );
41750
41751   /* If an error has been previously detected, report the same error
41752   ** again. This should not happen, but the check provides robustness. */
41753   if( NEVER(pPager->errCode) )  return pPager->errCode;
41754
41755   /* Higher-level routines never call this function if database is not
41756   ** writable.  But check anyway, just for robustness. */
41757   if( NEVER(pPager->readOnly) ) return SQLITE_PERM;
41758
41759   CHECK_PAGE(pPg);
41760
41761   /* The journal file needs to be opened. Higher level routines have already
41762   ** obtained the necessary locks to begin the write-transaction, but the
41763   ** rollback journal might not yet be open. Open it now if this is the case.
41764   **
41765   ** This is done before calling sqlite3PcacheMakeDirty() on the page. 
41766   ** Otherwise, if it were done after calling sqlite3PcacheMakeDirty(), then
41767   ** an error might occur and the pager would end up in WRITER_LOCKED state
41768   ** with pages marked as dirty in the cache.
41769   */
41770   if( pPager->eState==PAGER_WRITER_LOCKED ){
41771     rc = pager_open_journal(pPager);
41772     if( rc!=SQLITE_OK ) return rc;
41773   }
41774   assert( pPager->eState>=PAGER_WRITER_CACHEMOD );
41775   assert( assert_pager_state(pPager) );
41776
41777   /* Mark the page as dirty.  If the page has already been written
41778   ** to the journal then we can return right away.
41779   */
41780   sqlite3PcacheMakeDirty(pPg);
41781   if( pageInJournal(pPg) && !subjRequiresPage(pPg) ){
41782     assert( !pagerUseWal(pPager) );
41783   }else{
41784   
41785     /* The transaction journal now exists and we have a RESERVED or an
41786     ** EXCLUSIVE lock on the main database file.  Write the current page to
41787     ** the transaction journal if it is not there already.
41788     */
41789     if( !pageInJournal(pPg) && !pagerUseWal(pPager) ){
41790       assert( pagerUseWal(pPager)==0 );
41791       if( pPg->pgno<=pPager->dbOrigSize && isOpen(pPager->jfd) ){
41792         u32 cksum;
41793         char *pData2;
41794         i64 iOff = pPager->journalOff;
41795
41796         /* We should never write to the journal file the page that
41797         ** contains the database locks.  The following assert verifies
41798         ** that we do not. */
41799         assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) );
41800
41801         assert( pPager->journalHdr<=pPager->journalOff );
41802         CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2);
41803         cksum = pager_cksum(pPager, (u8*)pData2);
41804
41805         /* Even if an IO or diskfull error occurs while journalling the
41806         ** page in the block above, set the need-sync flag for the page.
41807         ** Otherwise, when the transaction is rolled back, the logic in
41808         ** playback_one_page() will think that the page needs to be restored
41809         ** in the database file. And if an IO error occurs while doing so,
41810         ** then corruption may follow.
41811         */
41812         pPg->flags |= PGHDR_NEED_SYNC;
41813
41814         rc = write32bits(pPager->jfd, iOff, pPg->pgno);
41815         if( rc!=SQLITE_OK ) return rc;
41816         rc = sqlite3OsWrite(pPager->jfd, pData2, pPager->pageSize, iOff+4);
41817         if( rc!=SQLITE_OK ) return rc;
41818         rc = write32bits(pPager->jfd, iOff+pPager->pageSize+4, cksum);
41819         if( rc!=SQLITE_OK ) return rc;
41820
41821         IOTRACE(("JOUT %p %d %lld %d\n", pPager, pPg->pgno, 
41822                  pPager->journalOff, pPager->pageSize));
41823         PAGER_INCR(sqlite3_pager_writej_count);
41824         PAGERTRACE(("JOURNAL %d page %d needSync=%d hash(%08x)\n",
41825              PAGERID(pPager), pPg->pgno, 
41826              ((pPg->flags&PGHDR_NEED_SYNC)?1:0), pager_pagehash(pPg)));
41827
41828         pPager->journalOff += 8 + pPager->pageSize;
41829         pPager->nRec++;
41830         assert( pPager->pInJournal!=0 );
41831         rc = sqlite3BitvecSet(pPager->pInJournal, pPg->pgno);
41832         testcase( rc==SQLITE_NOMEM );
41833         assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );
41834         rc |= addToSavepointBitvecs(pPager, pPg->pgno);
41835         if( rc!=SQLITE_OK ){
41836           assert( rc==SQLITE_NOMEM );
41837           return rc;
41838         }
41839       }else{
41840         if( pPager->eState!=PAGER_WRITER_DBMOD ){
41841           pPg->flags |= PGHDR_NEED_SYNC;
41842         }
41843         PAGERTRACE(("APPEND %d page %d needSync=%d\n",
41844                 PAGERID(pPager), pPg->pgno,
41845                ((pPg->flags&PGHDR_NEED_SYNC)?1:0)));
41846       }
41847     }
41848   
41849     /* If the statement journal is open and the page is not in it,
41850     ** then write the current page to the statement journal.  Note that
41851     ** the statement journal format differs from the standard journal format
41852     ** in that it omits the checksums and the header.
41853     */
41854     if( subjRequiresPage(pPg) ){
41855       rc = subjournalPage(pPg);
41856     }
41857   }
41858
41859   /* Update the database size and return.
41860   */
41861   if( pPager->dbSize<pPg->pgno ){
41862     pPager->dbSize = pPg->pgno;
41863   }
41864   return rc;
41865 }
41866
41867 /*
41868 ** Mark a data page as writeable. This routine must be called before 
41869 ** making changes to a page. The caller must check the return value 
41870 ** of this function and be careful not to change any page data unless 
41871 ** this routine returns SQLITE_OK.
41872 **
41873 ** The difference between this function and pager_write() is that this
41874 ** function also deals with the special case where 2 or more pages
41875 ** fit on a single disk sector. In this case all co-resident pages
41876 ** must have been written to the journal file before returning.
41877 **
41878 ** If an error occurs, SQLITE_NOMEM or an IO error code is returned
41879 ** as appropriate. Otherwise, SQLITE_OK.
41880 */
41881 SQLITE_PRIVATE int sqlite3PagerWrite(DbPage *pDbPage){
41882   int rc = SQLITE_OK;
41883
41884   PgHdr *pPg = pDbPage;
41885   Pager *pPager = pPg->pPager;
41886   Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize);
41887
41888   assert( pPager->eState>=PAGER_WRITER_LOCKED );
41889   assert( pPager->eState!=PAGER_ERROR );
41890   assert( assert_pager_state(pPager) );
41891
41892   if( nPagePerSector>1 ){
41893     Pgno nPageCount;          /* Total number of pages in database file */
41894     Pgno pg1;                 /* First page of the sector pPg is located on. */
41895     int nPage = 0;            /* Number of pages starting at pg1 to journal */
41896     int ii;                   /* Loop counter */
41897     int needSync = 0;         /* True if any page has PGHDR_NEED_SYNC */
41898
41899     /* Set the doNotSyncSpill flag to 1. This is because we cannot allow
41900     ** a journal header to be written between the pages journaled by
41901     ** this function.
41902     */
41903     assert( !MEMDB );
41904     assert( pPager->doNotSyncSpill==0 );
41905     pPager->doNotSyncSpill++;
41906
41907     /* This trick assumes that both the page-size and sector-size are
41908     ** an integer power of 2. It sets variable pg1 to the identifier
41909     ** of the first page of the sector pPg is located on.
41910     */
41911     pg1 = ((pPg->pgno-1) & ~(nPagePerSector-1)) + 1;
41912
41913     nPageCount = pPager->dbSize;
41914     if( pPg->pgno>nPageCount ){
41915       nPage = (pPg->pgno - pg1)+1;
41916     }else if( (pg1+nPagePerSector-1)>nPageCount ){
41917       nPage = nPageCount+1-pg1;
41918     }else{
41919       nPage = nPagePerSector;
41920     }
41921     assert(nPage>0);
41922     assert(pg1<=pPg->pgno);
41923     assert((pg1+nPage)>pPg->pgno);
41924
41925     for(ii=0; ii<nPage && rc==SQLITE_OK; ii++){
41926       Pgno pg = pg1+ii;
41927       PgHdr *pPage;
41928       if( pg==pPg->pgno || !sqlite3BitvecTest(pPager->pInJournal, pg) ){
41929         if( pg!=PAGER_MJ_PGNO(pPager) ){
41930           rc = sqlite3PagerGet(pPager, pg, &pPage);
41931           if( rc==SQLITE_OK ){
41932             rc = pager_write(pPage);
41933             if( pPage->flags&PGHDR_NEED_SYNC ){
41934               needSync = 1;
41935             }
41936             sqlite3PagerUnref(pPage);
41937           }
41938         }
41939       }else if( (pPage = pager_lookup(pPager, pg))!=0 ){
41940         if( pPage->flags&PGHDR_NEED_SYNC ){
41941           needSync = 1;
41942         }
41943         sqlite3PagerUnref(pPage);
41944       }
41945     }
41946
41947     /* If the PGHDR_NEED_SYNC flag is set for any of the nPage pages 
41948     ** starting at pg1, then it needs to be set for all of them. Because
41949     ** writing to any of these nPage pages may damage the others, the
41950     ** journal file must contain sync()ed copies of all of them
41951     ** before any of them can be written out to the database file.
41952     */
41953     if( rc==SQLITE_OK && needSync ){
41954       assert( !MEMDB );
41955       for(ii=0; ii<nPage; ii++){
41956         PgHdr *pPage = pager_lookup(pPager, pg1+ii);
41957         if( pPage ){
41958           pPage->flags |= PGHDR_NEED_SYNC;
41959           sqlite3PagerUnref(pPage);
41960         }
41961       }
41962     }
41963
41964     assert( pPager->doNotSyncSpill==1 );
41965     pPager->doNotSyncSpill--;
41966   }else{
41967     rc = pager_write(pDbPage);
41968   }
41969   return rc;
41970 }
41971
41972 /*
41973 ** Return TRUE if the page given in the argument was previously passed
41974 ** to sqlite3PagerWrite().  In other words, return TRUE if it is ok
41975 ** to change the content of the page.
41976 */
41977 #ifndef NDEBUG
41978 SQLITE_PRIVATE int sqlite3PagerIswriteable(DbPage *pPg){
41979   return pPg->flags&PGHDR_DIRTY;
41980 }
41981 #endif
41982
41983 /*
41984 ** A call to this routine tells the pager that it is not necessary to
41985 ** write the information on page pPg back to the disk, even though
41986 ** that page might be marked as dirty.  This happens, for example, when
41987 ** the page has been added as a leaf of the freelist and so its
41988 ** content no longer matters.
41989 **
41990 ** The overlying software layer calls this routine when all of the data
41991 ** on the given page is unused. The pager marks the page as clean so
41992 ** that it does not get written to disk.
41993 **
41994 ** Tests show that this optimization can quadruple the speed of large 
41995 ** DELETE operations.
41996 */
41997 SQLITE_PRIVATE void sqlite3PagerDontWrite(PgHdr *pPg){
41998   Pager *pPager = pPg->pPager;
41999   if( (pPg->flags&PGHDR_DIRTY) && pPager->nSavepoint==0 ){
42000     PAGERTRACE(("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager)));
42001     IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno))
42002     pPg->flags |= PGHDR_DONT_WRITE;
42003     pager_set_pagehash(pPg);
42004   }
42005 }
42006
42007 /*
42008 ** This routine is called to increment the value of the database file 
42009 ** change-counter, stored as a 4-byte big-endian integer starting at 
42010 ** byte offset 24 of the pager file.  The secondary change counter at
42011 ** 92 is also updated, as is the SQLite version number at offset 96.
42012 **
42013 ** But this only happens if the pPager->changeCountDone flag is false.
42014 ** To avoid excess churning of page 1, the update only happens once.
42015 ** See also the pager_write_changecounter() routine that does an 
42016 ** unconditional update of the change counters.
42017 **
42018 ** If the isDirectMode flag is zero, then this is done by calling 
42019 ** sqlite3PagerWrite() on page 1, then modifying the contents of the
42020 ** page data. In this case the file will be updated when the current
42021 ** transaction is committed.
42022 **
42023 ** The isDirectMode flag may only be non-zero if the library was compiled
42024 ** with the SQLITE_ENABLE_ATOMIC_WRITE macro defined. In this case,
42025 ** if isDirect is non-zero, then the database file is updated directly
42026 ** by writing an updated version of page 1 using a call to the 
42027 ** sqlite3OsWrite() function.
42028 */
42029 static int pager_incr_changecounter(Pager *pPager, int isDirectMode){
42030   int rc = SQLITE_OK;
42031
42032   assert( pPager->eState==PAGER_WRITER_CACHEMOD
42033        || pPager->eState==PAGER_WRITER_DBMOD
42034   );
42035   assert( assert_pager_state(pPager) );
42036
42037   /* Declare and initialize constant integer 'isDirect'. If the
42038   ** atomic-write optimization is enabled in this build, then isDirect
42039   ** is initialized to the value passed as the isDirectMode parameter
42040   ** to this function. Otherwise, it is always set to zero.
42041   **
42042   ** The idea is that if the atomic-write optimization is not
42043   ** enabled at compile time, the compiler can omit the tests of
42044   ** 'isDirect' below, as well as the block enclosed in the
42045   ** "if( isDirect )" condition.
42046   */
42047 #ifndef SQLITE_ENABLE_ATOMIC_WRITE
42048 # define DIRECT_MODE 0
42049   assert( isDirectMode==0 );
42050   UNUSED_PARAMETER(isDirectMode);
42051 #else
42052 # define DIRECT_MODE isDirectMode
42053 #endif
42054
42055   if( !pPager->changeCountDone && pPager->dbSize>0 ){
42056     PgHdr *pPgHdr;                /* Reference to page 1 */
42057
42058     assert( !pPager->tempFile && isOpen(pPager->fd) );
42059
42060     /* Open page 1 of the file for writing. */
42061     rc = sqlite3PagerGet(pPager, 1, &pPgHdr);
42062     assert( pPgHdr==0 || rc==SQLITE_OK );
42063
42064     /* If page one was fetched successfully, and this function is not
42065     ** operating in direct-mode, make page 1 writable.  When not in 
42066     ** direct mode, page 1 is always held in cache and hence the PagerGet()
42067     ** above is always successful - hence the ALWAYS on rc==SQLITE_OK.
42068     */
42069     if( !DIRECT_MODE && ALWAYS(rc==SQLITE_OK) ){
42070       rc = sqlite3PagerWrite(pPgHdr);
42071     }
42072
42073     if( rc==SQLITE_OK ){
42074       /* Actually do the update of the change counter */
42075       pager_write_changecounter(pPgHdr);
42076
42077       /* If running in direct mode, write the contents of page 1 to the file. */
42078       if( DIRECT_MODE ){
42079         const void *zBuf;
42080         assert( pPager->dbFileSize>0 );
42081         CODEC2(pPager, pPgHdr->pData, 1, 6, rc=SQLITE_NOMEM, zBuf);
42082         if( rc==SQLITE_OK ){
42083           rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0);
42084         }
42085         if( rc==SQLITE_OK ){
42086           pPager->changeCountDone = 1;
42087         }
42088       }else{
42089         pPager->changeCountDone = 1;
42090       }
42091     }
42092
42093     /* Release the page reference. */
42094     sqlite3PagerUnref(pPgHdr);
42095   }
42096   return rc;
42097 }
42098
42099 /*
42100 ** Sync the database file to disk. This is a no-op for in-memory databases
42101 ** or pages with the Pager.noSync flag set.
42102 **
42103 ** If successful, or if called on a pager for which it is a no-op, this
42104 ** function returns SQLITE_OK. Otherwise, an IO error code is returned.
42105 */
42106 SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager){
42107   int rc = SQLITE_OK;
42108   if( !pPager->noSync ){
42109     assert( !MEMDB );
42110     rc = sqlite3OsSync(pPager->fd, pPager->syncFlags);
42111   }else if( isOpen(pPager->fd) ){
42112     assert( !MEMDB );
42113     sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SYNC_OMITTED, (void *)&rc);
42114   }
42115   return rc;
42116 }
42117
42118 /*
42119 ** This function may only be called while a write-transaction is active in
42120 ** rollback. If the connection is in WAL mode, this call is a no-op. 
42121 ** Otherwise, if the connection does not already have an EXCLUSIVE lock on 
42122 ** the database file, an attempt is made to obtain one.
42123 **
42124 ** If the EXCLUSIVE lock is already held or the attempt to obtain it is
42125 ** successful, or the connection is in WAL mode, SQLITE_OK is returned.
42126 ** Otherwise, either SQLITE_BUSY or an SQLITE_IOERR_XXX error code is 
42127 ** returned.
42128 */
42129 SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager *pPager){
42130   int rc = SQLITE_OK;
42131   assert( pPager->eState==PAGER_WRITER_CACHEMOD 
42132        || pPager->eState==PAGER_WRITER_DBMOD 
42133        || pPager->eState==PAGER_WRITER_LOCKED 
42134   );
42135   assert( assert_pager_state(pPager) );
42136   if( 0==pagerUseWal(pPager) ){
42137     rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK);
42138   }
42139   return rc;
42140 }
42141
42142 /*
42143 ** Sync the database file for the pager pPager. zMaster points to the name
42144 ** of a master journal file that should be written into the individual
42145 ** journal file. zMaster may be NULL, which is interpreted as no master
42146 ** journal (a single database transaction).
42147 **
42148 ** This routine ensures that:
42149 **
42150 **   * The database file change-counter is updated,
42151 **   * the journal is synced (unless the atomic-write optimization is used),
42152 **   * all dirty pages are written to the database file, 
42153 **   * the database file is truncated (if required), and
42154 **   * the database file synced. 
42155 **
42156 ** The only thing that remains to commit the transaction is to finalize 
42157 ** (delete, truncate or zero the first part of) the journal file (or 
42158 ** delete the master journal file if specified).
42159 **
42160 ** Note that if zMaster==NULL, this does not overwrite a previous value
42161 ** passed to an sqlite3PagerCommitPhaseOne() call.
42162 **
42163 ** If the final parameter - noSync - is true, then the database file itself
42164 ** is not synced. The caller must call sqlite3PagerSync() directly to
42165 ** sync the database file before calling CommitPhaseTwo() to delete the
42166 ** journal file in this case.
42167 */
42168 SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
42169   Pager *pPager,                  /* Pager object */
42170   const char *zMaster,            /* If not NULL, the master journal name */
42171   int noSync                      /* True to omit the xSync on the db file */
42172 ){
42173   int rc = SQLITE_OK;             /* Return code */
42174
42175   assert( pPager->eState==PAGER_WRITER_LOCKED
42176        || pPager->eState==PAGER_WRITER_CACHEMOD
42177        || pPager->eState==PAGER_WRITER_DBMOD
42178        || pPager->eState==PAGER_ERROR
42179   );
42180   assert( assert_pager_state(pPager) );
42181
42182   /* If a prior error occurred, report that error again. */
42183   if( NEVER(pPager->errCode) ) return pPager->errCode;
42184
42185   PAGERTRACE(("DATABASE SYNC: File=%s zMaster=%s nSize=%d\n", 
42186       pPager->zFilename, zMaster, pPager->dbSize));
42187
42188   /* If no database changes have been made, return early. */
42189   if( pPager->eState<PAGER_WRITER_CACHEMOD ) return SQLITE_OK;
42190
42191   if( MEMDB ){
42192     /* If this is an in-memory db, or no pages have been written to, or this
42193     ** function has already been called, it is mostly a no-op.  However, any
42194     ** backup in progress needs to be restarted.
42195     */
42196     sqlite3BackupRestart(pPager->pBackup);
42197   }else{
42198     if( pagerUseWal(pPager) ){
42199       PgHdr *pList = sqlite3PcacheDirtyList(pPager->pPCache);
42200       PgHdr *pPageOne = 0;
42201       if( pList==0 ){
42202         /* Must have at least one page for the WAL commit flag.
42203         ** Ticket [2d1a5c67dfc2363e44f29d9bbd57f] 2011-05-18 */
42204         rc = sqlite3PagerGet(pPager, 1, &pPageOne);
42205         pList = pPageOne;
42206         pList->pDirty = 0;
42207       }
42208       assert( pList!=0 || rc!=SQLITE_OK );
42209       if( pList ){
42210         rc = pagerWalFrames(pPager, pList, pPager->dbSize, 1, 
42211             (pPager->fullSync ? pPager->syncFlags : 0)
42212         );
42213       }
42214       sqlite3PagerUnref(pPageOne);
42215       if( rc==SQLITE_OK ){
42216         sqlite3PcacheCleanAll(pPager->pPCache);
42217       }
42218     }else{
42219       /* The following block updates the change-counter. Exactly how it
42220       ** does this depends on whether or not the atomic-update optimization
42221       ** was enabled at compile time, and if this transaction meets the 
42222       ** runtime criteria to use the operation: 
42223       **
42224       **    * The file-system supports the atomic-write property for
42225       **      blocks of size page-size, and 
42226       **    * This commit is not part of a multi-file transaction, and
42227       **    * Exactly one page has been modified and store in the journal file.
42228       **
42229       ** If the optimization was not enabled at compile time, then the
42230       ** pager_incr_changecounter() function is called to update the change
42231       ** counter in 'indirect-mode'. If the optimization is compiled in but
42232       ** is not applicable to this transaction, call sqlite3JournalCreate()
42233       ** to make sure the journal file has actually been created, then call
42234       ** pager_incr_changecounter() to update the change-counter in indirect
42235       ** mode. 
42236       **
42237       ** Otherwise, if the optimization is both enabled and applicable,
42238       ** then call pager_incr_changecounter() to update the change-counter
42239       ** in 'direct' mode. In this case the journal file will never be
42240       ** created for this transaction.
42241       */
42242   #ifdef SQLITE_ENABLE_ATOMIC_WRITE
42243       PgHdr *pPg;
42244       assert( isOpen(pPager->jfd) 
42245            || pPager->journalMode==PAGER_JOURNALMODE_OFF 
42246            || pPager->journalMode==PAGER_JOURNALMODE_WAL 
42247       );
42248       if( !zMaster && isOpen(pPager->jfd) 
42249        && pPager->journalOff==jrnlBufferSize(pPager) 
42250        && pPager->dbSize>=pPager->dbOrigSize
42251        && (0==(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty)
42252       ){
42253         /* Update the db file change counter via the direct-write method. The 
42254         ** following call will modify the in-memory representation of page 1 
42255         ** to include the updated change counter and then write page 1 
42256         ** directly to the database file. Because of the atomic-write 
42257         ** property of the host file-system, this is safe.
42258         */
42259         rc = pager_incr_changecounter(pPager, 1);
42260       }else{
42261         rc = sqlite3JournalCreate(pPager->jfd);
42262         if( rc==SQLITE_OK ){
42263           rc = pager_incr_changecounter(pPager, 0);
42264         }
42265       }
42266   #else
42267       rc = pager_incr_changecounter(pPager, 0);
42268   #endif
42269       if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
42270   
42271       /* If this transaction has made the database smaller, then all pages
42272       ** being discarded by the truncation must be written to the journal
42273       ** file. This can only happen in auto-vacuum mode.
42274       **
42275       ** Before reading the pages with page numbers larger than the 
42276       ** current value of Pager.dbSize, set dbSize back to the value
42277       ** that it took at the start of the transaction. Otherwise, the
42278       ** calls to sqlite3PagerGet() return zeroed pages instead of 
42279       ** reading data from the database file.
42280       */
42281   #ifndef SQLITE_OMIT_AUTOVACUUM
42282       if( pPager->dbSize<pPager->dbOrigSize 
42283        && pPager->journalMode!=PAGER_JOURNALMODE_OFF
42284       ){
42285         Pgno i;                                   /* Iterator variable */
42286         const Pgno iSkip = PAGER_MJ_PGNO(pPager); /* Pending lock page */
42287         const Pgno dbSize = pPager->dbSize;       /* Database image size */ 
42288         pPager->dbSize = pPager->dbOrigSize;
42289         for( i=dbSize+1; i<=pPager->dbOrigSize; i++ ){
42290           if( !sqlite3BitvecTest(pPager->pInJournal, i) && i!=iSkip ){
42291             PgHdr *pPage;             /* Page to journal */
42292             rc = sqlite3PagerGet(pPager, i, &pPage);
42293             if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
42294             rc = sqlite3PagerWrite(pPage);
42295             sqlite3PagerUnref(pPage);
42296             if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
42297           }
42298         }
42299         pPager->dbSize = dbSize;
42300       } 
42301   #endif
42302   
42303       /* Write the master journal name into the journal file. If a master 
42304       ** journal file name has already been written to the journal file, 
42305       ** or if zMaster is NULL (no master journal), then this call is a no-op.
42306       */
42307       rc = writeMasterJournal(pPager, zMaster);
42308       if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
42309   
42310       /* Sync the journal file and write all dirty pages to the database.
42311       ** If the atomic-update optimization is being used, this sync will not 
42312       ** create the journal file or perform any real IO.
42313       **
42314       ** Because the change-counter page was just modified, unless the
42315       ** atomic-update optimization is used it is almost certain that the
42316       ** journal requires a sync here. However, in locking_mode=exclusive
42317       ** on a system under memory pressure it is just possible that this is 
42318       ** not the case. In this case it is likely enough that the redundant
42319       ** xSync() call will be changed to a no-op by the OS anyhow. 
42320       */
42321       rc = syncJournal(pPager, 0);
42322       if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
42323   
42324       rc = pager_write_pagelist(pPager,sqlite3PcacheDirtyList(pPager->pPCache));
42325       if( rc!=SQLITE_OK ){
42326         assert( rc!=SQLITE_IOERR_BLOCKED );
42327         goto commit_phase_one_exit;
42328       }
42329       sqlite3PcacheCleanAll(pPager->pPCache);
42330   
42331       /* If the file on disk is not the same size as the database image,
42332       ** then use pager_truncate to grow or shrink the file here.
42333       */
42334       if( pPager->dbSize!=pPager->dbFileSize ){
42335         Pgno nNew = pPager->dbSize - (pPager->dbSize==PAGER_MJ_PGNO(pPager));
42336         assert( pPager->eState==PAGER_WRITER_DBMOD );
42337         rc = pager_truncate(pPager, nNew);
42338         if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
42339       }
42340   
42341       /* Finally, sync the database file. */
42342       if( !noSync ){
42343         rc = sqlite3PagerSync(pPager);
42344       }
42345       IOTRACE(("DBSYNC %p\n", pPager))
42346     }
42347   }
42348
42349 commit_phase_one_exit:
42350   if( rc==SQLITE_OK && !pagerUseWal(pPager) ){
42351     pPager->eState = PAGER_WRITER_FINISHED;
42352   }
42353   return rc;
42354 }
42355
42356
42357 /*
42358 ** When this function is called, the database file has been completely
42359 ** updated to reflect the changes made by the current transaction and
42360 ** synced to disk. The journal file still exists in the file-system 
42361 ** though, and if a failure occurs at this point it will eventually
42362 ** be used as a hot-journal and the current transaction rolled back.
42363 **
42364 ** This function finalizes the journal file, either by deleting, 
42365 ** truncating or partially zeroing it, so that it cannot be used 
42366 ** for hot-journal rollback. Once this is done the transaction is
42367 ** irrevocably committed.
42368 **
42369 ** If an error occurs, an IO error code is returned and the pager
42370 ** moves into the error state. Otherwise, SQLITE_OK is returned.
42371 */
42372 SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager *pPager){
42373   int rc = SQLITE_OK;                  /* Return code */
42374
42375   /* This routine should not be called if a prior error has occurred.
42376   ** But if (due to a coding error elsewhere in the system) it does get
42377   ** called, just return the same error code without doing anything. */
42378   if( NEVER(pPager->errCode) ) return pPager->errCode;
42379
42380   assert( pPager->eState==PAGER_WRITER_LOCKED
42381        || pPager->eState==PAGER_WRITER_FINISHED
42382        || (pagerUseWal(pPager) && pPager->eState==PAGER_WRITER_CACHEMOD)
42383   );
42384   assert( assert_pager_state(pPager) );
42385
42386   /* An optimization. If the database was not actually modified during
42387   ** this transaction, the pager is running in exclusive-mode and is
42388   ** using persistent journals, then this function is a no-op.
42389   **
42390   ** The start of the journal file currently contains a single journal 
42391   ** header with the nRec field set to 0. If such a journal is used as
42392   ** a hot-journal during hot-journal rollback, 0 changes will be made
42393   ** to the database file. So there is no need to zero the journal 
42394   ** header. Since the pager is in exclusive mode, there is no need
42395   ** to drop any locks either.
42396   */
42397   if( pPager->eState==PAGER_WRITER_LOCKED 
42398    && pPager->exclusiveMode 
42399    && pPager->journalMode==PAGER_JOURNALMODE_PERSIST
42400   ){
42401     assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) || !pPager->journalOff );
42402     pPager->eState = PAGER_READER;
42403     return SQLITE_OK;
42404   }
42405
42406   PAGERTRACE(("COMMIT %d\n", PAGERID(pPager)));
42407   rc = pager_end_transaction(pPager, pPager->setMaster);
42408   return pager_error(pPager, rc);
42409 }
42410
42411 /*
42412 ** If a write transaction is open, then all changes made within the 
42413 ** transaction are reverted and the current write-transaction is closed.
42414 ** The pager falls back to PAGER_READER state if successful, or PAGER_ERROR
42415 ** state if an error occurs.
42416 **
42417 ** If the pager is already in PAGER_ERROR state when this function is called,
42418 ** it returns Pager.errCode immediately. No work is performed in this case.
42419 **
42420 ** Otherwise, in rollback mode, this function performs two functions:
42421 **
42422 **   1) It rolls back the journal file, restoring all database file and 
42423 **      in-memory cache pages to the state they were in when the transaction
42424 **      was opened, and
42425 **
42426 **   2) It finalizes the journal file, so that it is not used for hot
42427 **      rollback at any point in the future.
42428 **
42429 ** Finalization of the journal file (task 2) is only performed if the 
42430 ** rollback is successful.
42431 **
42432 ** In WAL mode, all cache-entries containing data modified within the
42433 ** current transaction are either expelled from the cache or reverted to
42434 ** their pre-transaction state by re-reading data from the database or
42435 ** WAL files. The WAL transaction is then closed.
42436 */
42437 SQLITE_PRIVATE int sqlite3PagerRollback(Pager *pPager){
42438   int rc = SQLITE_OK;                  /* Return code */
42439   PAGERTRACE(("ROLLBACK %d\n", PAGERID(pPager)));
42440
42441   /* PagerRollback() is a no-op if called in READER or OPEN state. If
42442   ** the pager is already in the ERROR state, the rollback is not 
42443   ** attempted here. Instead, the error code is returned to the caller.
42444   */
42445   assert( assert_pager_state(pPager) );
42446   if( pPager->eState==PAGER_ERROR ) return pPager->errCode;
42447   if( pPager->eState<=PAGER_READER ) return SQLITE_OK;
42448
42449   if( pagerUseWal(pPager) ){
42450     int rc2;
42451     rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, -1);
42452     rc2 = pager_end_transaction(pPager, pPager->setMaster);
42453     if( rc==SQLITE_OK ) rc = rc2;
42454   }else if( !isOpen(pPager->jfd) || pPager->eState==PAGER_WRITER_LOCKED ){
42455     int eState = pPager->eState;
42456     rc = pager_end_transaction(pPager, 0);
42457     if( !MEMDB && eState>PAGER_WRITER_LOCKED ){
42458       /* This can happen using journal_mode=off. Move the pager to the error 
42459       ** state to indicate that the contents of the cache may not be trusted.
42460       ** Any active readers will get SQLITE_ABORT.
42461       */
42462       pPager->errCode = SQLITE_ABORT;
42463       pPager->eState = PAGER_ERROR;
42464       return rc;
42465     }
42466   }else{
42467     rc = pager_playback(pPager, 0);
42468   }
42469
42470   assert( pPager->eState==PAGER_READER || rc!=SQLITE_OK );
42471   assert( rc==SQLITE_OK || rc==SQLITE_FULL || (rc&0xFF)==SQLITE_IOERR );
42472
42473   /* If an error occurs during a ROLLBACK, we can no longer trust the pager
42474   ** cache. So call pager_error() on the way out to make any error persistent.
42475   */
42476   return pager_error(pPager, rc);
42477 }
42478
42479 /*
42480 ** Return TRUE if the database file is opened read-only.  Return FALSE
42481 ** if the database is (in theory) writable.
42482 */
42483 SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager *pPager){
42484   return pPager->readOnly;
42485 }
42486
42487 /*
42488 ** Return the number of references to the pager.
42489 */
42490 SQLITE_PRIVATE int sqlite3PagerRefcount(Pager *pPager){
42491   return sqlite3PcacheRefCount(pPager->pPCache);
42492 }
42493
42494 /*
42495 ** Return the approximate number of bytes of memory currently
42496 ** used by the pager and its associated cache.
42497 */
42498 SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager *pPager){
42499   int perPageSize = pPager->pageSize + pPager->nExtra + sizeof(PgHdr)
42500                                      + 5*sizeof(void*);
42501   return perPageSize*sqlite3PcachePagecount(pPager->pPCache)
42502            + sqlite3MallocSize(pPager)
42503            + pPager->pageSize;
42504 }
42505
42506 /*
42507 ** Return the number of references to the specified page.
42508 */
42509 SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage *pPage){
42510   return sqlite3PcachePageRefcount(pPage);
42511 }
42512
42513 #ifdef SQLITE_TEST
42514 /*
42515 ** This routine is used for testing and analysis only.
42516 */
42517 SQLITE_PRIVATE int *sqlite3PagerStats(Pager *pPager){
42518   static int a[11];
42519   a[0] = sqlite3PcacheRefCount(pPager->pPCache);
42520   a[1] = sqlite3PcachePagecount(pPager->pPCache);
42521   a[2] = sqlite3PcacheGetCachesize(pPager->pPCache);
42522   a[3] = pPager->eState==PAGER_OPEN ? -1 : (int) pPager->dbSize;
42523   a[4] = pPager->eState;
42524   a[5] = pPager->errCode;
42525   a[6] = pPager->nHit;
42526   a[7] = pPager->nMiss;
42527   a[8] = 0;  /* Used to be pPager->nOvfl */
42528   a[9] = pPager->nRead;
42529   a[10] = pPager->nWrite;
42530   return a;
42531 }
42532 #endif
42533
42534 /*
42535 ** Return true if this is an in-memory pager.
42536 */
42537 SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager *pPager){
42538   return MEMDB;
42539 }
42540
42541 /*
42542 ** Check that there are at least nSavepoint savepoints open. If there are
42543 ** currently less than nSavepoints open, then open one or more savepoints
42544 ** to make up the difference. If the number of savepoints is already
42545 ** equal to nSavepoint, then this function is a no-op.
42546 **
42547 ** If a memory allocation fails, SQLITE_NOMEM is returned. If an error 
42548 ** occurs while opening the sub-journal file, then an IO error code is
42549 ** returned. Otherwise, SQLITE_OK.
42550 */
42551 SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int nSavepoint){
42552   int rc = SQLITE_OK;                       /* Return code */
42553   int nCurrent = pPager->nSavepoint;        /* Current number of savepoints */
42554
42555   assert( pPager->eState>=PAGER_WRITER_LOCKED );
42556   assert( assert_pager_state(pPager) );
42557
42558   if( nSavepoint>nCurrent && pPager->useJournal ){
42559     int ii;                                 /* Iterator variable */
42560     PagerSavepoint *aNew;                   /* New Pager.aSavepoint array */
42561
42562     /* Grow the Pager.aSavepoint array using realloc(). Return SQLITE_NOMEM
42563     ** if the allocation fails. Otherwise, zero the new portion in case a 
42564     ** malloc failure occurs while populating it in the for(...) loop below.
42565     */
42566     aNew = (PagerSavepoint *)sqlite3Realloc(
42567         pPager->aSavepoint, sizeof(PagerSavepoint)*nSavepoint
42568     );
42569     if( !aNew ){
42570       return SQLITE_NOMEM;
42571     }
42572     memset(&aNew[nCurrent], 0, (nSavepoint-nCurrent) * sizeof(PagerSavepoint));
42573     pPager->aSavepoint = aNew;
42574
42575     /* Populate the PagerSavepoint structures just allocated. */
42576     for(ii=nCurrent; ii<nSavepoint; ii++){
42577       aNew[ii].nOrig = pPager->dbSize;
42578       if( isOpen(pPager->jfd) && pPager->journalOff>0 ){
42579         aNew[ii].iOffset = pPager->journalOff;
42580       }else{
42581         aNew[ii].iOffset = JOURNAL_HDR_SZ(pPager);
42582       }
42583       aNew[ii].iSubRec = pPager->nSubRec;
42584       aNew[ii].pInSavepoint = sqlite3BitvecCreate(pPager->dbSize);
42585       if( !aNew[ii].pInSavepoint ){
42586         return SQLITE_NOMEM;
42587       }
42588       if( pagerUseWal(pPager) ){
42589         sqlite3WalSavepoint(pPager->pWal, aNew[ii].aWalData);
42590       }
42591       pPager->nSavepoint = ii+1;
42592     }
42593     assert( pPager->nSavepoint==nSavepoint );
42594     assertTruncateConstraint(pPager);
42595   }
42596
42597   return rc;
42598 }
42599
42600 /*
42601 ** This function is called to rollback or release (commit) a savepoint.
42602 ** The savepoint to release or rollback need not be the most recently 
42603 ** created savepoint.
42604 **
42605 ** Parameter op is always either SAVEPOINT_ROLLBACK or SAVEPOINT_RELEASE.
42606 ** If it is SAVEPOINT_RELEASE, then release and destroy the savepoint with
42607 ** index iSavepoint. If it is SAVEPOINT_ROLLBACK, then rollback all changes
42608 ** that have occurred since the specified savepoint was created.
42609 **
42610 ** The savepoint to rollback or release is identified by parameter 
42611 ** iSavepoint. A value of 0 means to operate on the outermost savepoint
42612 ** (the first created). A value of (Pager.nSavepoint-1) means operate
42613 ** on the most recently created savepoint. If iSavepoint is greater than
42614 ** (Pager.nSavepoint-1), then this function is a no-op.
42615 **
42616 ** If a negative value is passed to this function, then the current
42617 ** transaction is rolled back. This is different to calling 
42618 ** sqlite3PagerRollback() because this function does not terminate
42619 ** the transaction or unlock the database, it just restores the 
42620 ** contents of the database to its original state. 
42621 **
42622 ** In any case, all savepoints with an index greater than iSavepoint 
42623 ** are destroyed. If this is a release operation (op==SAVEPOINT_RELEASE),
42624 ** then savepoint iSavepoint is also destroyed.
42625 **
42626 ** This function may return SQLITE_NOMEM if a memory allocation fails,
42627 ** or an IO error code if an IO error occurs while rolling back a 
42628 ** savepoint. If no errors occur, SQLITE_OK is returned.
42629 */ 
42630 SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){
42631   int rc = pPager->errCode;       /* Return code */
42632
42633   assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK );
42634   assert( iSavepoint>=0 || op==SAVEPOINT_ROLLBACK );
42635
42636   if( rc==SQLITE_OK && iSavepoint<pPager->nSavepoint ){
42637     int ii;            /* Iterator variable */
42638     int nNew;          /* Number of remaining savepoints after this op. */
42639
42640     /* Figure out how many savepoints will still be active after this
42641     ** operation. Store this value in nNew. Then free resources associated 
42642     ** with any savepoints that are destroyed by this operation.
42643     */
42644     nNew = iSavepoint + (( op==SAVEPOINT_RELEASE ) ? 0 : 1);
42645     for(ii=nNew; ii<pPager->nSavepoint; ii++){
42646       sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint);
42647     }
42648     pPager->nSavepoint = nNew;
42649
42650     /* If this is a release of the outermost savepoint, truncate 
42651     ** the sub-journal to zero bytes in size. */
42652     if( op==SAVEPOINT_RELEASE ){
42653       if( nNew==0 && isOpen(pPager->sjfd) ){
42654         /* Only truncate if it is an in-memory sub-journal. */
42655         if( sqlite3IsMemJournal(pPager->sjfd) ){
42656           rc = sqlite3OsTruncate(pPager->sjfd, 0);
42657           assert( rc==SQLITE_OK );
42658         }
42659         pPager->nSubRec = 0;
42660       }
42661     }
42662     /* Else this is a rollback operation, playback the specified savepoint.
42663     ** If this is a temp-file, it is possible that the journal file has
42664     ** not yet been opened. In this case there have been no changes to
42665     ** the database file, so the playback operation can be skipped.
42666     */
42667     else if( pagerUseWal(pPager) || isOpen(pPager->jfd) ){
42668       PagerSavepoint *pSavepoint = (nNew==0)?0:&pPager->aSavepoint[nNew-1];
42669       rc = pagerPlaybackSavepoint(pPager, pSavepoint);
42670       assert(rc!=SQLITE_DONE);
42671     }
42672   }
42673
42674   return rc;
42675 }
42676
42677 /*
42678 ** Return the full pathname of the database file.
42679 */
42680 SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager *pPager){
42681   return pPager->zFilename;
42682 }
42683
42684 /*
42685 ** Return the VFS structure for the pager.
42686 */
42687 SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager *pPager){
42688   return pPager->pVfs;
42689 }
42690
42691 /*
42692 ** Return the file handle for the database file associated
42693 ** with the pager.  This might return NULL if the file has
42694 ** not yet been opened.
42695 */
42696 SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager *pPager){
42697   return pPager->fd;
42698 }
42699
42700 /*
42701 ** Return the full pathname of the journal file.
42702 */
42703 SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager *pPager){
42704   return pPager->zJournal;
42705 }
42706
42707 /*
42708 ** Return true if fsync() calls are disabled for this pager.  Return FALSE
42709 ** if fsync()s are executed normally.
42710 */
42711 SQLITE_PRIVATE int sqlite3PagerNosync(Pager *pPager){
42712   return pPager->noSync;
42713 }
42714
42715 #ifdef SQLITE_HAS_CODEC
42716 /*
42717 ** Set or retrieve the codec for this pager
42718 */
42719 SQLITE_PRIVATE void sqlite3PagerSetCodec(
42720   Pager *pPager,
42721   void *(*xCodec)(void*,void*,Pgno,int),
42722   void (*xCodecSizeChng)(void*,int,int),
42723   void (*xCodecFree)(void*),
42724   void *pCodec
42725 ){
42726   if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec);
42727   pPager->xCodec = pPager->memDb ? 0 : xCodec;
42728   pPager->xCodecSizeChng = xCodecSizeChng;
42729   pPager->xCodecFree = xCodecFree;
42730   pPager->pCodec = pCodec;
42731   pagerReportSize(pPager);
42732 }
42733 SQLITE_PRIVATE void *sqlite3PagerGetCodec(Pager *pPager){
42734   return pPager->pCodec;
42735 }
42736 #endif
42737
42738 #ifndef SQLITE_OMIT_AUTOVACUUM
42739 /*
42740 ** Move the page pPg to location pgno in the file.
42741 **
42742 ** There must be no references to the page previously located at
42743 ** pgno (which we call pPgOld) though that page is allowed to be
42744 ** in cache.  If the page previously located at pgno is not already
42745 ** in the rollback journal, it is not put there by by this routine.
42746 **
42747 ** References to the page pPg remain valid. Updating any
42748 ** meta-data associated with pPg (i.e. data stored in the nExtra bytes
42749 ** allocated along with the page) is the responsibility of the caller.
42750 **
42751 ** A transaction must be active when this routine is called. It used to be
42752 ** required that a statement transaction was not active, but this restriction
42753 ** has been removed (CREATE INDEX needs to move a page when a statement
42754 ** transaction is active).
42755 **
42756 ** If the fourth argument, isCommit, is non-zero, then this page is being
42757 ** moved as part of a database reorganization just before the transaction 
42758 ** is being committed. In this case, it is guaranteed that the database page 
42759 ** pPg refers to will not be written to again within this transaction.
42760 **
42761 ** This function may return SQLITE_NOMEM or an IO error code if an error
42762 ** occurs. Otherwise, it returns SQLITE_OK.
42763 */
42764 SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){
42765   PgHdr *pPgOld;               /* The page being overwritten. */
42766   Pgno needSyncPgno = 0;       /* Old value of pPg->pgno, if sync is required */
42767   int rc;                      /* Return code */
42768   Pgno origPgno;               /* The original page number */
42769
42770   assert( pPg->nRef>0 );
42771   assert( pPager->eState==PAGER_WRITER_CACHEMOD
42772        || pPager->eState==PAGER_WRITER_DBMOD
42773   );
42774   assert( assert_pager_state(pPager) );
42775
42776   /* In order to be able to rollback, an in-memory database must journal
42777   ** the page we are moving from.
42778   */
42779   if( MEMDB ){
42780     rc = sqlite3PagerWrite(pPg);
42781     if( rc ) return rc;
42782   }
42783
42784   /* If the page being moved is dirty and has not been saved by the latest
42785   ** savepoint, then save the current contents of the page into the 
42786   ** sub-journal now. This is required to handle the following scenario:
42787   **
42788   **   BEGIN;
42789   **     <journal page X, then modify it in memory>
42790   **     SAVEPOINT one;
42791   **       <Move page X to location Y>
42792   **     ROLLBACK TO one;
42793   **
42794   ** If page X were not written to the sub-journal here, it would not
42795   ** be possible to restore its contents when the "ROLLBACK TO one"
42796   ** statement were is processed.
42797   **
42798   ** subjournalPage() may need to allocate space to store pPg->pgno into
42799   ** one or more savepoint bitvecs. This is the reason this function
42800   ** may return SQLITE_NOMEM.
42801   */
42802   if( pPg->flags&PGHDR_DIRTY
42803    && subjRequiresPage(pPg)
42804    && SQLITE_OK!=(rc = subjournalPage(pPg))
42805   ){
42806     return rc;
42807   }
42808
42809   PAGERTRACE(("MOVE %d page %d (needSync=%d) moves to %d\n", 
42810       PAGERID(pPager), pPg->pgno, (pPg->flags&PGHDR_NEED_SYNC)?1:0, pgno));
42811   IOTRACE(("MOVE %p %d %d\n", pPager, pPg->pgno, pgno))
42812
42813   /* If the journal needs to be sync()ed before page pPg->pgno can
42814   ** be written to, store pPg->pgno in local variable needSyncPgno.
42815   **
42816   ** If the isCommit flag is set, there is no need to remember that
42817   ** the journal needs to be sync()ed before database page pPg->pgno 
42818   ** can be written to. The caller has already promised not to write to it.
42819   */
42820   if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){
42821     needSyncPgno = pPg->pgno;
42822     assert( pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize );
42823     assert( pPg->flags&PGHDR_DIRTY );
42824   }
42825
42826   /* If the cache contains a page with page-number pgno, remove it
42827   ** from its hash chain. Also, if the PGHDR_NEED_SYNC flag was set for 
42828   ** page pgno before the 'move' operation, it needs to be retained 
42829   ** for the page moved there.
42830   */
42831   pPg->flags &= ~PGHDR_NEED_SYNC;
42832   pPgOld = pager_lookup(pPager, pgno);
42833   assert( !pPgOld || pPgOld->nRef==1 );
42834   if( pPgOld ){
42835     pPg->flags |= (pPgOld->flags&PGHDR_NEED_SYNC);
42836     if( MEMDB ){
42837       /* Do not discard pages from an in-memory database since we might
42838       ** need to rollback later.  Just move the page out of the way. */
42839       sqlite3PcacheMove(pPgOld, pPager->dbSize+1);
42840     }else{
42841       sqlite3PcacheDrop(pPgOld);
42842     }
42843   }
42844
42845   origPgno = pPg->pgno;
42846   sqlite3PcacheMove(pPg, pgno);
42847   sqlite3PcacheMakeDirty(pPg);
42848
42849   /* For an in-memory database, make sure the original page continues
42850   ** to exist, in case the transaction needs to roll back.  Use pPgOld
42851   ** as the original page since it has already been allocated.
42852   */
42853   if( MEMDB ){
42854     assert( pPgOld );
42855     sqlite3PcacheMove(pPgOld, origPgno);
42856     sqlite3PagerUnref(pPgOld);
42857   }
42858
42859   if( needSyncPgno ){
42860     /* If needSyncPgno is non-zero, then the journal file needs to be 
42861     ** sync()ed before any data is written to database file page needSyncPgno.
42862     ** Currently, no such page exists in the page-cache and the 
42863     ** "is journaled" bitvec flag has been set. This needs to be remedied by
42864     ** loading the page into the pager-cache and setting the PGHDR_NEED_SYNC
42865     ** flag.
42866     **
42867     ** If the attempt to load the page into the page-cache fails, (due
42868     ** to a malloc() or IO failure), clear the bit in the pInJournal[]
42869     ** array. Otherwise, if the page is loaded and written again in
42870     ** this transaction, it may be written to the database file before
42871     ** it is synced into the journal file. This way, it may end up in
42872     ** the journal file twice, but that is not a problem.
42873     */
42874     PgHdr *pPgHdr;
42875     rc = sqlite3PagerGet(pPager, needSyncPgno, &pPgHdr);
42876     if( rc!=SQLITE_OK ){
42877       if( needSyncPgno<=pPager->dbOrigSize ){
42878         assert( pPager->pTmpSpace!=0 );
42879         sqlite3BitvecClear(pPager->pInJournal, needSyncPgno, pPager->pTmpSpace);
42880       }
42881       return rc;
42882     }
42883     pPgHdr->flags |= PGHDR_NEED_SYNC;
42884     sqlite3PcacheMakeDirty(pPgHdr);
42885     sqlite3PagerUnref(pPgHdr);
42886   }
42887
42888   return SQLITE_OK;
42889 }
42890 #endif
42891
42892 /*
42893 ** Return a pointer to the data for the specified page.
42894 */
42895 SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *pPg){
42896   assert( pPg->nRef>0 || pPg->pPager->memDb );
42897   return pPg->pData;
42898 }
42899
42900 /*
42901 ** Return a pointer to the Pager.nExtra bytes of "extra" space 
42902 ** allocated along with the specified page.
42903 */
42904 SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *pPg){
42905   return pPg->pExtra;
42906 }
42907
42908 /*
42909 ** Get/set the locking-mode for this pager. Parameter eMode must be one
42910 ** of PAGER_LOCKINGMODE_QUERY, PAGER_LOCKINGMODE_NORMAL or 
42911 ** PAGER_LOCKINGMODE_EXCLUSIVE. If the parameter is not _QUERY, then
42912 ** the locking-mode is set to the value specified.
42913 **
42914 ** The returned value is either PAGER_LOCKINGMODE_NORMAL or
42915 ** PAGER_LOCKINGMODE_EXCLUSIVE, indicating the current (possibly updated)
42916 ** locking-mode.
42917 */
42918 SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *pPager, int eMode){
42919   assert( eMode==PAGER_LOCKINGMODE_QUERY
42920             || eMode==PAGER_LOCKINGMODE_NORMAL
42921             || eMode==PAGER_LOCKINGMODE_EXCLUSIVE );
42922   assert( PAGER_LOCKINGMODE_QUERY<0 );
42923   assert( PAGER_LOCKINGMODE_NORMAL>=0 && PAGER_LOCKINGMODE_EXCLUSIVE>=0 );
42924   assert( pPager->exclusiveMode || 0==sqlite3WalHeapMemory(pPager->pWal) );
42925   if( eMode>=0 && !pPager->tempFile && !sqlite3WalHeapMemory(pPager->pWal) ){
42926     pPager->exclusiveMode = (u8)eMode;
42927   }
42928   return (int)pPager->exclusiveMode;
42929 }
42930
42931 /*
42932 ** Set the journal-mode for this pager. Parameter eMode must be one of:
42933 **
42934 **    PAGER_JOURNALMODE_DELETE
42935 **    PAGER_JOURNALMODE_TRUNCATE
42936 **    PAGER_JOURNALMODE_PERSIST
42937 **    PAGER_JOURNALMODE_OFF
42938 **    PAGER_JOURNALMODE_MEMORY
42939 **    PAGER_JOURNALMODE_WAL
42940 **
42941 ** The journalmode is set to the value specified if the change is allowed.
42942 ** The change may be disallowed for the following reasons:
42943 **
42944 **   *  An in-memory database can only have its journal_mode set to _OFF
42945 **      or _MEMORY.
42946 **
42947 **   *  Temporary databases cannot have _WAL journalmode.
42948 **
42949 ** The returned indicate the current (possibly updated) journal-mode.
42950 */
42951 SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){
42952   u8 eOld = pPager->journalMode;    /* Prior journalmode */
42953
42954 #ifdef SQLITE_DEBUG
42955   /* The print_pager_state() routine is intended to be used by the debugger
42956   ** only.  We invoke it once here to suppress a compiler warning. */
42957   print_pager_state(pPager);
42958 #endif
42959
42960
42961   /* The eMode parameter is always valid */
42962   assert(      eMode==PAGER_JOURNALMODE_DELETE
42963             || eMode==PAGER_JOURNALMODE_TRUNCATE
42964             || eMode==PAGER_JOURNALMODE_PERSIST
42965             || eMode==PAGER_JOURNALMODE_OFF 
42966             || eMode==PAGER_JOURNALMODE_WAL 
42967             || eMode==PAGER_JOURNALMODE_MEMORY );
42968
42969   /* This routine is only called from the OP_JournalMode opcode, and
42970   ** the logic there will never allow a temporary file to be changed
42971   ** to WAL mode.
42972   */
42973   assert( pPager->tempFile==0 || eMode!=PAGER_JOURNALMODE_WAL );
42974
42975   /* Do allow the journalmode of an in-memory database to be set to
42976   ** anything other than MEMORY or OFF
42977   */
42978   if( MEMDB ){
42979     assert( eOld==PAGER_JOURNALMODE_MEMORY || eOld==PAGER_JOURNALMODE_OFF );
42980     if( eMode!=PAGER_JOURNALMODE_MEMORY && eMode!=PAGER_JOURNALMODE_OFF ){
42981       eMode = eOld;
42982     }
42983   }
42984
42985   if( eMode!=eOld ){
42986
42987     /* Change the journal mode. */
42988     assert( pPager->eState!=PAGER_ERROR );
42989     pPager->journalMode = (u8)eMode;
42990
42991     /* When transistioning from TRUNCATE or PERSIST to any other journal
42992     ** mode except WAL, unless the pager is in locking_mode=exclusive mode,
42993     ** delete the journal file.
42994     */
42995     assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 );
42996     assert( (PAGER_JOURNALMODE_PERSIST & 5)==1 );
42997     assert( (PAGER_JOURNALMODE_DELETE & 5)==0 );
42998     assert( (PAGER_JOURNALMODE_MEMORY & 5)==4 );
42999     assert( (PAGER_JOURNALMODE_OFF & 5)==0 );
43000     assert( (PAGER_JOURNALMODE_WAL & 5)==5 );
43001
43002     assert( isOpen(pPager->fd) || pPager->exclusiveMode );
43003     if( !pPager->exclusiveMode && (eOld & 5)==1 && (eMode & 1)==0 ){
43004
43005       /* In this case we would like to delete the journal file. If it is
43006       ** not possible, then that is not a problem. Deleting the journal file
43007       ** here is an optimization only.
43008       **
43009       ** Before deleting the journal file, obtain a RESERVED lock on the
43010       ** database file. This ensures that the journal file is not deleted
43011       ** while it is in use by some other client.
43012       */
43013       sqlite3OsClose(pPager->jfd);
43014       if( pPager->eLock>=RESERVED_LOCK ){
43015         sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);
43016       }else{
43017         int rc = SQLITE_OK;
43018         int state = pPager->eState;
43019         assert( state==PAGER_OPEN || state==PAGER_READER );
43020         if( state==PAGER_OPEN ){
43021           rc = sqlite3PagerSharedLock(pPager);
43022         }
43023         if( pPager->eState==PAGER_READER ){
43024           assert( rc==SQLITE_OK );
43025           rc = pagerLockDb(pPager, RESERVED_LOCK);
43026         }
43027         if( rc==SQLITE_OK ){
43028           sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);
43029         }
43030         if( rc==SQLITE_OK && state==PAGER_READER ){
43031           pagerUnlockDb(pPager, SHARED_LOCK);
43032         }else if( state==PAGER_OPEN ){
43033           pager_unlock(pPager);
43034         }
43035         assert( state==pPager->eState );
43036       }
43037     }
43038   }
43039
43040   /* Return the new journal mode */
43041   return (int)pPager->journalMode;
43042 }
43043
43044 /*
43045 ** Return the current journal mode.
43046 */
43047 SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager *pPager){
43048   return (int)pPager->journalMode;
43049 }
43050
43051 /*
43052 ** Return TRUE if the pager is in a state where it is OK to change the
43053 ** journalmode.  Journalmode changes can only happen when the database
43054 ** is unmodified.
43055 */
43056 SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager *pPager){
43057   assert( assert_pager_state(pPager) );
43058   if( pPager->eState>=PAGER_WRITER_CACHEMOD ) return 0;
43059   if( NEVER(isOpen(pPager->jfd) && pPager->journalOff>0) ) return 0;
43060   return 1;
43061 }
43062
43063 /*
43064 ** Get/set the size-limit used for persistent journal files.
43065 **
43066 ** Setting the size limit to -1 means no limit is enforced.
43067 ** An attempt to set a limit smaller than -1 is a no-op.
43068 */
43069 SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *pPager, i64 iLimit){
43070   if( iLimit>=-1 ){
43071     pPager->journalSizeLimit = iLimit;
43072   }
43073   return pPager->journalSizeLimit;
43074 }
43075
43076 /*
43077 ** Return a pointer to the pPager->pBackup variable. The backup module
43078 ** in backup.c maintains the content of this variable. This module
43079 ** uses it opaquely as an argument to sqlite3BackupRestart() and
43080 ** sqlite3BackupUpdate() only.
43081 */
43082 SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager *pPager){
43083   return &pPager->pBackup;
43084 }
43085
43086 #ifndef SQLITE_OMIT_WAL
43087 /*
43088 ** This function is called when the user invokes "PRAGMA wal_checkpoint",
43089 ** "PRAGMA wal_blocking_checkpoint" or calls the sqlite3_wal_checkpoint()
43090 ** or wal_blocking_checkpoint() API functions.
43091 **
43092 ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
43093 */
43094 SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int eMode, int *pnLog, int *pnCkpt){
43095   int rc = SQLITE_OK;
43096   if( pPager->pWal ){
43097     rc = sqlite3WalCheckpoint(pPager->pWal, eMode,
43098         pPager->xBusyHandler, pPager->pBusyHandlerArg,
43099         pPager->ckptSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace,
43100         pnLog, pnCkpt
43101     );
43102   }
43103   return rc;
43104 }
43105
43106 SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager){
43107   return sqlite3WalCallback(pPager->pWal);
43108 }
43109
43110 /*
43111 ** Return true if the underlying VFS for the given pager supports the
43112 ** primitives necessary for write-ahead logging.
43113 */
43114 SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager){
43115   const sqlite3_io_methods *pMethods = pPager->fd->pMethods;
43116   return pPager->exclusiveMode || (pMethods->iVersion>=2 && pMethods->xShmMap);
43117 }
43118
43119 /*
43120 ** Attempt to take an exclusive lock on the database file. If a PENDING lock
43121 ** is obtained instead, immediately release it.
43122 */
43123 static int pagerExclusiveLock(Pager *pPager){
43124   int rc;                         /* Return code */
43125
43126   assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK );
43127   rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
43128   if( rc!=SQLITE_OK ){
43129     /* If the attempt to grab the exclusive lock failed, release the 
43130     ** pending lock that may have been obtained instead.  */
43131     pagerUnlockDb(pPager, SHARED_LOCK);
43132   }
43133
43134   return rc;
43135 }
43136
43137 /*
43138 ** Call sqlite3WalOpen() to open the WAL handle. If the pager is in 
43139 ** exclusive-locking mode when this function is called, take an EXCLUSIVE
43140 ** lock on the database file and use heap-memory to store the wal-index
43141 ** in. Otherwise, use the normal shared-memory.
43142 */
43143 static int pagerOpenWal(Pager *pPager){
43144   int rc = SQLITE_OK;
43145
43146   assert( pPager->pWal==0 && pPager->tempFile==0 );
43147   assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK || pPager->noReadlock);
43148
43149   /* If the pager is already in exclusive-mode, the WAL module will use 
43150   ** heap-memory for the wal-index instead of the VFS shared-memory 
43151   ** implementation. Take the exclusive lock now, before opening the WAL
43152   ** file, to make sure this is safe.
43153   */
43154   if( pPager->exclusiveMode ){
43155     rc = pagerExclusiveLock(pPager);
43156   }
43157
43158   /* Open the connection to the log file. If this operation fails, 
43159   ** (e.g. due to malloc() failure), return an error code.
43160   */
43161   if( rc==SQLITE_OK ){
43162     rc = sqlite3WalOpen(pPager->pVfs, 
43163         pPager->fd, pPager->zWal, pPager->exclusiveMode, &pPager->pWal
43164     );
43165   }
43166
43167   return rc;
43168 }
43169
43170
43171 /*
43172 ** The caller must be holding a SHARED lock on the database file to call
43173 ** this function.
43174 **
43175 ** If the pager passed as the first argument is open on a real database
43176 ** file (not a temp file or an in-memory database), and the WAL file
43177 ** is not already open, make an attempt to open it now. If successful,
43178 ** return SQLITE_OK. If an error occurs or the VFS used by the pager does 
43179 ** not support the xShmXXX() methods, return an error code. *pbOpen is
43180 ** not modified in either case.
43181 **
43182 ** If the pager is open on a temp-file (or in-memory database), or if
43183 ** the WAL file is already open, set *pbOpen to 1 and return SQLITE_OK
43184 ** without doing anything.
43185 */
43186 SQLITE_PRIVATE int sqlite3PagerOpenWal(
43187   Pager *pPager,                  /* Pager object */
43188   int *pbOpen                     /* OUT: Set to true if call is a no-op */
43189 ){
43190   int rc = SQLITE_OK;             /* Return code */
43191
43192   assert( assert_pager_state(pPager) );
43193   assert( pPager->eState==PAGER_OPEN   || pbOpen );
43194   assert( pPager->eState==PAGER_READER || !pbOpen );
43195   assert( pbOpen==0 || *pbOpen==0 );
43196   assert( pbOpen!=0 || (!pPager->tempFile && !pPager->pWal) );
43197
43198   if( !pPager->tempFile && !pPager->pWal ){
43199     if( !sqlite3PagerWalSupported(pPager) ) return SQLITE_CANTOPEN;
43200
43201     /* Close any rollback journal previously open */
43202     sqlite3OsClose(pPager->jfd);
43203
43204     rc = pagerOpenWal(pPager);
43205     if( rc==SQLITE_OK ){
43206       pPager->journalMode = PAGER_JOURNALMODE_WAL;
43207       pPager->eState = PAGER_OPEN;
43208     }
43209   }else{
43210     *pbOpen = 1;
43211   }
43212
43213   return rc;
43214 }
43215
43216 /*
43217 ** This function is called to close the connection to the log file prior
43218 ** to switching from WAL to rollback mode.
43219 **
43220 ** Before closing the log file, this function attempts to take an 
43221 ** EXCLUSIVE lock on the database file. If this cannot be obtained, an
43222 ** error (SQLITE_BUSY) is returned and the log connection is not closed.
43223 ** If successful, the EXCLUSIVE lock is not released before returning.
43224 */
43225 SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager){
43226   int rc = SQLITE_OK;
43227
43228   assert( pPager->journalMode==PAGER_JOURNALMODE_WAL );
43229
43230   /* If the log file is not already open, but does exist in the file-system,
43231   ** it may need to be checkpointed before the connection can switch to
43232   ** rollback mode. Open it now so this can happen.
43233   */
43234   if( !pPager->pWal ){
43235     int logexists = 0;
43236     rc = pagerLockDb(pPager, SHARED_LOCK);
43237     if( rc==SQLITE_OK ){
43238       rc = sqlite3OsAccess(
43239           pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &logexists
43240       );
43241     }
43242     if( rc==SQLITE_OK && logexists ){
43243       rc = pagerOpenWal(pPager);
43244     }
43245   }
43246     
43247   /* Checkpoint and close the log. Because an EXCLUSIVE lock is held on
43248   ** the database file, the log and log-summary files will be deleted.
43249   */
43250   if( rc==SQLITE_OK && pPager->pWal ){
43251     rc = pagerExclusiveLock(pPager);
43252     if( rc==SQLITE_OK ){
43253       rc = sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags,
43254                            pPager->pageSize, (u8*)pPager->pTmpSpace);
43255       pPager->pWal = 0;
43256     }
43257   }
43258   return rc;
43259 }
43260
43261 #ifdef SQLITE_HAS_CODEC
43262 /*
43263 ** This function is called by the wal module when writing page content
43264 ** into the log file.
43265 **
43266 ** This function returns a pointer to a buffer containing the encrypted
43267 ** page content. If a malloc fails, this function may return NULL.
43268 */
43269 SQLITE_PRIVATE void *sqlite3PagerCodec(PgHdr *pPg){
43270   void *aData = 0;
43271   CODEC2(pPg->pPager, pPg->pData, pPg->pgno, 6, return 0, aData);
43272   return aData;
43273 }
43274 #endif /* SQLITE_HAS_CODEC */
43275
43276 #endif /* !SQLITE_OMIT_WAL */
43277
43278 #endif /* SQLITE_OMIT_DISKIO */
43279
43280 /************** End of pager.c ***********************************************/
43281 /************** Begin file wal.c *********************************************/
43282 /*
43283 ** 2010 February 1
43284 **
43285 ** The author disclaims copyright to this source code.  In place of
43286 ** a legal notice, here is a blessing:
43287 **
43288 **    May you do good and not evil.
43289 **    May you find forgiveness for yourself and forgive others.
43290 **    May you share freely, never taking more than you give.
43291 **
43292 *************************************************************************
43293 **
43294 ** This file contains the implementation of a write-ahead log (WAL) used in 
43295 ** "journal_mode=WAL" mode.
43296 **
43297 ** WRITE-AHEAD LOG (WAL) FILE FORMAT
43298 **
43299 ** A WAL file consists of a header followed by zero or more "frames".
43300 ** Each frame records the revised content of a single page from the
43301 ** database file.  All changes to the database are recorded by writing
43302 ** frames into the WAL.  Transactions commit when a frame is written that
43303 ** contains a commit marker.  A single WAL can and usually does record 
43304 ** multiple transactions.  Periodically, the content of the WAL is
43305 ** transferred back into the database file in an operation called a
43306 ** "checkpoint".
43307 **
43308 ** A single WAL file can be used multiple times.  In other words, the
43309 ** WAL can fill up with frames and then be checkpointed and then new
43310 ** frames can overwrite the old ones.  A WAL always grows from beginning
43311 ** toward the end.  Checksums and counters attached to each frame are
43312 ** used to determine which frames within the WAL are valid and which
43313 ** are leftovers from prior checkpoints.
43314 **
43315 ** The WAL header is 32 bytes in size and consists of the following eight
43316 ** big-endian 32-bit unsigned integer values:
43317 **
43318 **     0: Magic number.  0x377f0682 or 0x377f0683
43319 **     4: File format version.  Currently 3007000
43320 **     8: Database page size.  Example: 1024
43321 **    12: Checkpoint sequence number
43322 **    16: Salt-1, random integer incremented with each checkpoint
43323 **    20: Salt-2, a different random integer changing with each ckpt
43324 **    24: Checksum-1 (first part of checksum for first 24 bytes of header).
43325 **    28: Checksum-2 (second part of checksum for first 24 bytes of header).
43326 **
43327 ** Immediately following the wal-header are zero or more frames. Each
43328 ** frame consists of a 24-byte frame-header followed by a <page-size> bytes
43329 ** of page data. The frame-header is six big-endian 32-bit unsigned 
43330 ** integer values, as follows:
43331 **
43332 **     0: Page number.
43333 **     4: For commit records, the size of the database image in pages 
43334 **        after the commit. For all other records, zero.
43335 **     8: Salt-1 (copied from the header)
43336 **    12: Salt-2 (copied from the header)
43337 **    16: Checksum-1.
43338 **    20: Checksum-2.
43339 **
43340 ** A frame is considered valid if and only if the following conditions are
43341 ** true:
43342 **
43343 **    (1) The salt-1 and salt-2 values in the frame-header match
43344 **        salt values in the wal-header
43345 **
43346 **    (2) The checksum values in the final 8 bytes of the frame-header
43347 **        exactly match the checksum computed consecutively on the
43348 **        WAL header and the first 8 bytes and the content of all frames
43349 **        up to and including the current frame.
43350 **
43351 ** The checksum is computed using 32-bit big-endian integers if the
43352 ** magic number in the first 4 bytes of the WAL is 0x377f0683 and it
43353 ** is computed using little-endian if the magic number is 0x377f0682.
43354 ** The checksum values are always stored in the frame header in a
43355 ** big-endian format regardless of which byte order is used to compute
43356 ** the checksum.  The checksum is computed by interpreting the input as
43357 ** an even number of unsigned 32-bit integers: x[0] through x[N].  The
43358 ** algorithm used for the checksum is as follows:
43359 ** 
43360 **   for i from 0 to n-1 step 2:
43361 **     s0 += x[i] + s1;
43362 **     s1 += x[i+1] + s0;
43363 **   endfor
43364 **
43365 ** Note that s0 and s1 are both weighted checksums using fibonacci weights
43366 ** in reverse order (the largest fibonacci weight occurs on the first element
43367 ** of the sequence being summed.)  The s1 value spans all 32-bit 
43368 ** terms of the sequence whereas s0 omits the final term.
43369 **
43370 ** On a checkpoint, the WAL is first VFS.xSync-ed, then valid content of the
43371 ** WAL is transferred into the database, then the database is VFS.xSync-ed.
43372 ** The VFS.xSync operations serve as write barriers - all writes launched
43373 ** before the xSync must complete before any write that launches after the
43374 ** xSync begins.
43375 **
43376 ** After each checkpoint, the salt-1 value is incremented and the salt-2
43377 ** value is randomized.  This prevents old and new frames in the WAL from
43378 ** being considered valid at the same time and being checkpointing together
43379 ** following a crash.
43380 **
43381 ** READER ALGORITHM
43382 **
43383 ** To read a page from the database (call it page number P), a reader
43384 ** first checks the WAL to see if it contains page P.  If so, then the
43385 ** last valid instance of page P that is a followed by a commit frame
43386 ** or is a commit frame itself becomes the value read.  If the WAL
43387 ** contains no copies of page P that are valid and which are a commit
43388 ** frame or are followed by a commit frame, then page P is read from
43389 ** the database file.
43390 **
43391 ** To start a read transaction, the reader records the index of the last
43392 ** valid frame in the WAL.  The reader uses this recorded "mxFrame" value
43393 ** for all subsequent read operations.  New transactions can be appended
43394 ** to the WAL, but as long as the reader uses its original mxFrame value
43395 ** and ignores the newly appended content, it will see a consistent snapshot
43396 ** of the database from a single point in time.  This technique allows
43397 ** multiple concurrent readers to view different versions of the database
43398 ** content simultaneously.
43399 **
43400 ** The reader algorithm in the previous paragraphs works correctly, but 
43401 ** because frames for page P can appear anywhere within the WAL, the
43402 ** reader has to scan the entire WAL looking for page P frames.  If the
43403 ** WAL is large (multiple megabytes is typical) that scan can be slow,
43404 ** and read performance suffers.  To overcome this problem, a separate
43405 ** data structure called the wal-index is maintained to expedite the
43406 ** search for frames of a particular page.
43407 ** 
43408 ** WAL-INDEX FORMAT
43409 **
43410 ** Conceptually, the wal-index is shared memory, though VFS implementations
43411 ** might choose to implement the wal-index using a mmapped file.  Because
43412 ** the wal-index is shared memory, SQLite does not support journal_mode=WAL 
43413 ** on a network filesystem.  All users of the database must be able to
43414 ** share memory.
43415 **
43416 ** The wal-index is transient.  After a crash, the wal-index can (and should
43417 ** be) reconstructed from the original WAL file.  In fact, the VFS is required
43418 ** to either truncate or zero the header of the wal-index when the last
43419 ** connection to it closes.  Because the wal-index is transient, it can
43420 ** use an architecture-specific format; it does not have to be cross-platform.
43421 ** Hence, unlike the database and WAL file formats which store all values
43422 ** as big endian, the wal-index can store multi-byte values in the native
43423 ** byte order of the host computer.
43424 **
43425 ** The purpose of the wal-index is to answer this question quickly:  Given
43426 ** a page number P, return the index of the last frame for page P in the WAL,
43427 ** or return NULL if there are no frames for page P in the WAL.
43428 **
43429 ** The wal-index consists of a header region, followed by an one or
43430 ** more index blocks.  
43431 **
43432 ** The wal-index header contains the total number of frames within the WAL
43433 ** in the the mxFrame field.  
43434 **
43435 ** Each index block except for the first contains information on 
43436 ** HASHTABLE_NPAGE frames. The first index block contains information on
43437 ** HASHTABLE_NPAGE_ONE frames. The values of HASHTABLE_NPAGE_ONE and 
43438 ** HASHTABLE_NPAGE are selected so that together the wal-index header and
43439 ** first index block are the same size as all other index blocks in the
43440 ** wal-index.
43441 **
43442 ** Each index block contains two sections, a page-mapping that contains the
43443 ** database page number associated with each wal frame, and a hash-table 
43444 ** that allows readers to query an index block for a specific page number.
43445 ** The page-mapping is an array of HASHTABLE_NPAGE (or HASHTABLE_NPAGE_ONE
43446 ** for the first index block) 32-bit page numbers. The first entry in the 
43447 ** first index-block contains the database page number corresponding to the
43448 ** first frame in the WAL file. The first entry in the second index block
43449 ** in the WAL file corresponds to the (HASHTABLE_NPAGE_ONE+1)th frame in
43450 ** the log, and so on.
43451 **
43452 ** The last index block in a wal-index usually contains less than the full
43453 ** complement of HASHTABLE_NPAGE (or HASHTABLE_NPAGE_ONE) page-numbers,
43454 ** depending on the contents of the WAL file. This does not change the
43455 ** allocated size of the page-mapping array - the page-mapping array merely
43456 ** contains unused entries.
43457 **
43458 ** Even without using the hash table, the last frame for page P
43459 ** can be found by scanning the page-mapping sections of each index block
43460 ** starting with the last index block and moving toward the first, and
43461 ** within each index block, starting at the end and moving toward the
43462 ** beginning.  The first entry that equals P corresponds to the frame
43463 ** holding the content for that page.
43464 **
43465 ** The hash table consists of HASHTABLE_NSLOT 16-bit unsigned integers.
43466 ** HASHTABLE_NSLOT = 2*HASHTABLE_NPAGE, and there is one entry in the
43467 ** hash table for each page number in the mapping section, so the hash 
43468 ** table is never more than half full.  The expected number of collisions 
43469 ** prior to finding a match is 1.  Each entry of the hash table is an
43470 ** 1-based index of an entry in the mapping section of the same
43471 ** index block.   Let K be the 1-based index of the largest entry in
43472 ** the mapping section.  (For index blocks other than the last, K will
43473 ** always be exactly HASHTABLE_NPAGE (4096) and for the last index block
43474 ** K will be (mxFrame%HASHTABLE_NPAGE).)  Unused slots of the hash table
43475 ** contain a value of 0.
43476 **
43477 ** To look for page P in the hash table, first compute a hash iKey on
43478 ** P as follows:
43479 **
43480 **      iKey = (P * 383) % HASHTABLE_NSLOT
43481 **
43482 ** Then start scanning entries of the hash table, starting with iKey
43483 ** (wrapping around to the beginning when the end of the hash table is
43484 ** reached) until an unused hash slot is found. Let the first unused slot
43485 ** be at index iUnused.  (iUnused might be less than iKey if there was
43486 ** wrap-around.) Because the hash table is never more than half full,
43487 ** the search is guaranteed to eventually hit an unused entry.  Let 
43488 ** iMax be the value between iKey and iUnused, closest to iUnused,
43489 ** where aHash[iMax]==P.  If there is no iMax entry (if there exists
43490 ** no hash slot such that aHash[i]==p) then page P is not in the
43491 ** current index block.  Otherwise the iMax-th mapping entry of the
43492 ** current index block corresponds to the last entry that references 
43493 ** page P.
43494 **
43495 ** A hash search begins with the last index block and moves toward the
43496 ** first index block, looking for entries corresponding to page P.  On
43497 ** average, only two or three slots in each index block need to be
43498 ** examined in order to either find the last entry for page P, or to
43499 ** establish that no such entry exists in the block.  Each index block
43500 ** holds over 4000 entries.  So two or three index blocks are sufficient
43501 ** to cover a typical 10 megabyte WAL file, assuming 1K pages.  8 or 10
43502 ** comparisons (on average) suffice to either locate a frame in the
43503 ** WAL or to establish that the frame does not exist in the WAL.  This
43504 ** is much faster than scanning the entire 10MB WAL.
43505 **
43506 ** Note that entries are added in order of increasing K.  Hence, one
43507 ** reader might be using some value K0 and a second reader that started
43508 ** at a later time (after additional transactions were added to the WAL
43509 ** and to the wal-index) might be using a different value K1, where K1>K0.
43510 ** Both readers can use the same hash table and mapping section to get
43511 ** the correct result.  There may be entries in the hash table with
43512 ** K>K0 but to the first reader, those entries will appear to be unused
43513 ** slots in the hash table and so the first reader will get an answer as
43514 ** if no values greater than K0 had ever been inserted into the hash table
43515 ** in the first place - which is what reader one wants.  Meanwhile, the
43516 ** second reader using K1 will see additional values that were inserted
43517 ** later, which is exactly what reader two wants.  
43518 **
43519 ** When a rollback occurs, the value of K is decreased. Hash table entries
43520 ** that correspond to frames greater than the new K value are removed
43521 ** from the hash table at this point.
43522 */
43523 #ifndef SQLITE_OMIT_WAL
43524
43525
43526 /*
43527 ** Trace output macros
43528 */
43529 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
43530 SQLITE_PRIVATE int sqlite3WalTrace = 0;
43531 # define WALTRACE(X)  if(sqlite3WalTrace) sqlite3DebugPrintf X
43532 #else
43533 # define WALTRACE(X)
43534 #endif
43535
43536 /*
43537 ** The maximum (and only) versions of the wal and wal-index formats
43538 ** that may be interpreted by this version of SQLite.
43539 **
43540 ** If a client begins recovering a WAL file and finds that (a) the checksum
43541 ** values in the wal-header are correct and (b) the version field is not
43542 ** WAL_MAX_VERSION, recovery fails and SQLite returns SQLITE_CANTOPEN.
43543 **
43544 ** Similarly, if a client successfully reads a wal-index header (i.e. the 
43545 ** checksum test is successful) and finds that the version field is not
43546 ** WALINDEX_MAX_VERSION, then no read-transaction is opened and SQLite
43547 ** returns SQLITE_CANTOPEN.
43548 */
43549 #define WAL_MAX_VERSION      3007000
43550 #define WALINDEX_MAX_VERSION 3007000
43551
43552 /*
43553 ** Indices of various locking bytes.   WAL_NREADER is the number
43554 ** of available reader locks and should be at least 3.
43555 */
43556 #define WAL_WRITE_LOCK         0
43557 #define WAL_ALL_BUT_WRITE      1
43558 #define WAL_CKPT_LOCK          1
43559 #define WAL_RECOVER_LOCK       2
43560 #define WAL_READ_LOCK(I)       (3+(I))
43561 #define WAL_NREADER            (SQLITE_SHM_NLOCK-3)
43562
43563
43564 /* Object declarations */
43565 typedef struct WalIndexHdr WalIndexHdr;
43566 typedef struct WalIterator WalIterator;
43567 typedef struct WalCkptInfo WalCkptInfo;
43568
43569
43570 /*
43571 ** The following object holds a copy of the wal-index header content.
43572 **
43573 ** The actual header in the wal-index consists of two copies of this
43574 ** object.
43575 **
43576 ** The szPage value can be any power of 2 between 512 and 32768, inclusive.
43577 ** Or it can be 1 to represent a 65536-byte page.  The latter case was
43578 ** added in 3.7.1 when support for 64K pages was added.  
43579 */
43580 struct WalIndexHdr {
43581   u32 iVersion;                   /* Wal-index version */
43582   u32 unused;                     /* Unused (padding) field */
43583   u32 iChange;                    /* Counter incremented each transaction */
43584   u8 isInit;                      /* 1 when initialized */
43585   u8 bigEndCksum;                 /* True if checksums in WAL are big-endian */
43586   u16 szPage;                     /* Database page size in bytes. 1==64K */
43587   u32 mxFrame;                    /* Index of last valid frame in the WAL */
43588   u32 nPage;                      /* Size of database in pages */
43589   u32 aFrameCksum[2];             /* Checksum of last frame in log */
43590   u32 aSalt[2];                   /* Two salt values copied from WAL header */
43591   u32 aCksum[2];                  /* Checksum over all prior fields */
43592 };
43593
43594 /*
43595 ** A copy of the following object occurs in the wal-index immediately
43596 ** following the second copy of the WalIndexHdr.  This object stores
43597 ** information used by checkpoint.
43598 **
43599 ** nBackfill is the number of frames in the WAL that have been written
43600 ** back into the database. (We call the act of moving content from WAL to
43601 ** database "backfilling".)  The nBackfill number is never greater than
43602 ** WalIndexHdr.mxFrame.  nBackfill can only be increased by threads
43603 ** holding the WAL_CKPT_LOCK lock (which includes a recovery thread).
43604 ** However, a WAL_WRITE_LOCK thread can move the value of nBackfill from
43605 ** mxFrame back to zero when the WAL is reset.
43606 **
43607 ** There is one entry in aReadMark[] for each reader lock.  If a reader
43608 ** holds read-lock K, then the value in aReadMark[K] is no greater than
43609 ** the mxFrame for that reader.  The value READMARK_NOT_USED (0xffffffff)
43610 ** for any aReadMark[] means that entry is unused.  aReadMark[0] is 
43611 ** a special case; its value is never used and it exists as a place-holder
43612 ** to avoid having to offset aReadMark[] indexs by one.  Readers holding
43613 ** WAL_READ_LOCK(0) always ignore the entire WAL and read all content
43614 ** directly from the database.
43615 **
43616 ** The value of aReadMark[K] may only be changed by a thread that
43617 ** is holding an exclusive lock on WAL_READ_LOCK(K).  Thus, the value of
43618 ** aReadMark[K] cannot changed while there is a reader is using that mark
43619 ** since the reader will be holding a shared lock on WAL_READ_LOCK(K).
43620 **
43621 ** The checkpointer may only transfer frames from WAL to database where
43622 ** the frame numbers are less than or equal to every aReadMark[] that is
43623 ** in use (that is, every aReadMark[j] for which there is a corresponding
43624 ** WAL_READ_LOCK(j)).  New readers (usually) pick the aReadMark[] with the
43625 ** largest value and will increase an unused aReadMark[] to mxFrame if there
43626 ** is not already an aReadMark[] equal to mxFrame.  The exception to the
43627 ** previous sentence is when nBackfill equals mxFrame (meaning that everything
43628 ** in the WAL has been backfilled into the database) then new readers
43629 ** will choose aReadMark[0] which has value 0 and hence such reader will
43630 ** get all their all content directly from the database file and ignore 
43631 ** the WAL.
43632 **
43633 ** Writers normally append new frames to the end of the WAL.  However,
43634 ** if nBackfill equals mxFrame (meaning that all WAL content has been
43635 ** written back into the database) and if no readers are using the WAL
43636 ** (in other words, if there are no WAL_READ_LOCK(i) where i>0) then
43637 ** the writer will first "reset" the WAL back to the beginning and start
43638 ** writing new content beginning at frame 1.
43639 **
43640 ** We assume that 32-bit loads are atomic and so no locks are needed in
43641 ** order to read from any aReadMark[] entries.
43642 */
43643 struct WalCkptInfo {
43644   u32 nBackfill;                  /* Number of WAL frames backfilled into DB */
43645   u32 aReadMark[WAL_NREADER];     /* Reader marks */
43646 };
43647 #define READMARK_NOT_USED  0xffffffff
43648
43649
43650 /* A block of WALINDEX_LOCK_RESERVED bytes beginning at
43651 ** WALINDEX_LOCK_OFFSET is reserved for locks. Since some systems
43652 ** only support mandatory file-locks, we do not read or write data
43653 ** from the region of the file on which locks are applied.
43654 */
43655 #define WALINDEX_LOCK_OFFSET   (sizeof(WalIndexHdr)*2 + sizeof(WalCkptInfo))
43656 #define WALINDEX_LOCK_RESERVED 16
43657 #define WALINDEX_HDR_SIZE      (WALINDEX_LOCK_OFFSET+WALINDEX_LOCK_RESERVED)
43658
43659 /* Size of header before each frame in wal */
43660 #define WAL_FRAME_HDRSIZE 24
43661
43662 /* Size of write ahead log header, including checksum. */
43663 /* #define WAL_HDRSIZE 24 */
43664 #define WAL_HDRSIZE 32
43665
43666 /* WAL magic value. Either this value, or the same value with the least
43667 ** significant bit also set (WAL_MAGIC | 0x00000001) is stored in 32-bit
43668 ** big-endian format in the first 4 bytes of a WAL file.
43669 **
43670 ** If the LSB is set, then the checksums for each frame within the WAL
43671 ** file are calculated by treating all data as an array of 32-bit 
43672 ** big-endian words. Otherwise, they are calculated by interpreting 
43673 ** all data as 32-bit little-endian words.
43674 */
43675 #define WAL_MAGIC 0x377f0682
43676
43677 /*
43678 ** Return the offset of frame iFrame in the write-ahead log file, 
43679 ** assuming a database page size of szPage bytes. The offset returned
43680 ** is to the start of the write-ahead log frame-header.
43681 */
43682 #define walFrameOffset(iFrame, szPage) (                               \
43683   WAL_HDRSIZE + ((iFrame)-1)*(i64)((szPage)+WAL_FRAME_HDRSIZE)         \
43684 )
43685
43686 /*
43687 ** An open write-ahead log file is represented by an instance of the
43688 ** following object.
43689 */
43690 struct Wal {
43691   sqlite3_vfs *pVfs;         /* The VFS used to create pDbFd */
43692   sqlite3_file *pDbFd;       /* File handle for the database file */
43693   sqlite3_file *pWalFd;      /* File handle for WAL file */
43694   u32 iCallback;             /* Value to pass to log callback (or 0) */
43695   int nWiData;               /* Size of array apWiData */
43696   volatile u32 **apWiData;   /* Pointer to wal-index content in memory */
43697   u32 szPage;                /* Database page size */
43698   i16 readLock;              /* Which read lock is being held.  -1 for none */
43699   u8 exclusiveMode;          /* Non-zero if connection is in exclusive mode */
43700   u8 writeLock;              /* True if in a write transaction */
43701   u8 ckptLock;               /* True if holding a checkpoint lock */
43702   u8 readOnly;               /* True if the WAL file is open read-only */
43703   WalIndexHdr hdr;           /* Wal-index header for current transaction */
43704   const char *zWalName;      /* Name of WAL file */
43705   u32 nCkpt;                 /* Checkpoint sequence counter in the wal-header */
43706 #ifdef SQLITE_DEBUG
43707   u8 lockError;              /* True if a locking error has occurred */
43708 #endif
43709 };
43710
43711 /*
43712 ** Candidate values for Wal.exclusiveMode.
43713 */
43714 #define WAL_NORMAL_MODE     0
43715 #define WAL_EXCLUSIVE_MODE  1     
43716 #define WAL_HEAPMEMORY_MODE 2
43717
43718 /*
43719 ** Each page of the wal-index mapping contains a hash-table made up of
43720 ** an array of HASHTABLE_NSLOT elements of the following type.
43721 */
43722 typedef u16 ht_slot;
43723
43724 /*
43725 ** This structure is used to implement an iterator that loops through
43726 ** all frames in the WAL in database page order. Where two or more frames
43727 ** correspond to the same database page, the iterator visits only the 
43728 ** frame most recently written to the WAL (in other words, the frame with
43729 ** the largest index).
43730 **
43731 ** The internals of this structure are only accessed by:
43732 **
43733 **   walIteratorInit() - Create a new iterator,
43734 **   walIteratorNext() - Step an iterator,
43735 **   walIteratorFree() - Free an iterator.
43736 **
43737 ** This functionality is used by the checkpoint code (see walCheckpoint()).
43738 */
43739 struct WalIterator {
43740   int iPrior;                     /* Last result returned from the iterator */
43741   int nSegment;                   /* Number of entries in aSegment[] */
43742   struct WalSegment {
43743     int iNext;                    /* Next slot in aIndex[] not yet returned */
43744     ht_slot *aIndex;              /* i0, i1, i2... such that aPgno[iN] ascend */
43745     u32 *aPgno;                   /* Array of page numbers. */
43746     int nEntry;                   /* Nr. of entries in aPgno[] and aIndex[] */
43747     int iZero;                    /* Frame number associated with aPgno[0] */
43748   } aSegment[1];                  /* One for every 32KB page in the wal-index */
43749 };
43750
43751 /*
43752 ** Define the parameters of the hash tables in the wal-index file. There
43753 ** is a hash-table following every HASHTABLE_NPAGE page numbers in the
43754 ** wal-index.
43755 **
43756 ** Changing any of these constants will alter the wal-index format and
43757 ** create incompatibilities.
43758 */
43759 #define HASHTABLE_NPAGE      4096                 /* Must be power of 2 */
43760 #define HASHTABLE_HASH_1     383                  /* Should be prime */
43761 #define HASHTABLE_NSLOT      (HASHTABLE_NPAGE*2)  /* Must be a power of 2 */
43762
43763 /* 
43764 ** The block of page numbers associated with the first hash-table in a
43765 ** wal-index is smaller than usual. This is so that there is a complete
43766 ** hash-table on each aligned 32KB page of the wal-index.
43767 */
43768 #define HASHTABLE_NPAGE_ONE  (HASHTABLE_NPAGE - (WALINDEX_HDR_SIZE/sizeof(u32)))
43769
43770 /* The wal-index is divided into pages of WALINDEX_PGSZ bytes each. */
43771 #define WALINDEX_PGSZ   (                                         \
43772     sizeof(ht_slot)*HASHTABLE_NSLOT + HASHTABLE_NPAGE*sizeof(u32) \
43773 )
43774
43775 /*
43776 ** Obtain a pointer to the iPage'th page of the wal-index. The wal-index
43777 ** is broken into pages of WALINDEX_PGSZ bytes. Wal-index pages are
43778 ** numbered from zero.
43779 **
43780 ** If this call is successful, *ppPage is set to point to the wal-index
43781 ** page and SQLITE_OK is returned. If an error (an OOM or VFS error) occurs,
43782 ** then an SQLite error code is returned and *ppPage is set to 0.
43783 */
43784 static int walIndexPage(Wal *pWal, int iPage, volatile u32 **ppPage){
43785   int rc = SQLITE_OK;
43786
43787   /* Enlarge the pWal->apWiData[] array if required */
43788   if( pWal->nWiData<=iPage ){
43789     int nByte = sizeof(u32*)*(iPage+1);
43790     volatile u32 **apNew;
43791     apNew = (volatile u32 **)sqlite3_realloc((void *)pWal->apWiData, nByte);
43792     if( !apNew ){
43793       *ppPage = 0;
43794       return SQLITE_NOMEM;
43795     }
43796     memset((void*)&apNew[pWal->nWiData], 0,
43797            sizeof(u32*)*(iPage+1-pWal->nWiData));
43798     pWal->apWiData = apNew;
43799     pWal->nWiData = iPage+1;
43800   }
43801
43802   /* Request a pointer to the required page from the VFS */
43803   if( pWal->apWiData[iPage]==0 ){
43804     if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){
43805       pWal->apWiData[iPage] = (u32 volatile *)sqlite3MallocZero(WALINDEX_PGSZ);
43806       if( !pWal->apWiData[iPage] ) rc = SQLITE_NOMEM;
43807     }else{
43808       rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ, 
43809           pWal->writeLock, (void volatile **)&pWal->apWiData[iPage]
43810       );
43811     }
43812   }
43813
43814   *ppPage = pWal->apWiData[iPage];
43815   assert( iPage==0 || *ppPage || rc!=SQLITE_OK );
43816   return rc;
43817 }
43818
43819 /*
43820 ** Return a pointer to the WalCkptInfo structure in the wal-index.
43821 */
43822 static volatile WalCkptInfo *walCkptInfo(Wal *pWal){
43823   assert( pWal->nWiData>0 && pWal->apWiData[0] );
43824   return (volatile WalCkptInfo*)&(pWal->apWiData[0][sizeof(WalIndexHdr)/2]);
43825 }
43826
43827 /*
43828 ** Return a pointer to the WalIndexHdr structure in the wal-index.
43829 */
43830 static volatile WalIndexHdr *walIndexHdr(Wal *pWal){
43831   assert( pWal->nWiData>0 && pWal->apWiData[0] );
43832   return (volatile WalIndexHdr*)pWal->apWiData[0];
43833 }
43834
43835 /*
43836 ** The argument to this macro must be of type u32. On a little-endian
43837 ** architecture, it returns the u32 value that results from interpreting
43838 ** the 4 bytes as a big-endian value. On a big-endian architecture, it
43839 ** returns the value that would be produced by intepreting the 4 bytes
43840 ** of the input value as a little-endian integer.
43841 */
43842 #define BYTESWAP32(x) ( \
43843     (((x)&0x000000FF)<<24) + (((x)&0x0000FF00)<<8)  \
43844   + (((x)&0x00FF0000)>>8)  + (((x)&0xFF000000)>>24) \
43845 )
43846
43847 /*
43848 ** Generate or extend an 8 byte checksum based on the data in 
43849 ** array aByte[] and the initial values of aIn[0] and aIn[1] (or
43850 ** initial values of 0 and 0 if aIn==NULL).
43851 **
43852 ** The checksum is written back into aOut[] before returning.
43853 **
43854 ** nByte must be a positive multiple of 8.
43855 */
43856 static void walChecksumBytes(
43857   int nativeCksum, /* True for native byte-order, false for non-native */
43858   u8 *a,           /* Content to be checksummed */
43859   int nByte,       /* Bytes of content in a[].  Must be a multiple of 8. */
43860   const u32 *aIn,  /* Initial checksum value input */
43861   u32 *aOut        /* OUT: Final checksum value output */
43862 ){
43863   u32 s1, s2;
43864   u32 *aData = (u32 *)a;
43865   u32 *aEnd = (u32 *)&a[nByte];
43866
43867   if( aIn ){
43868     s1 = aIn[0];
43869     s2 = aIn[1];
43870   }else{
43871     s1 = s2 = 0;
43872   }
43873
43874   assert( nByte>=8 );
43875   assert( (nByte&0x00000007)==0 );
43876
43877   if( nativeCksum ){
43878     do {
43879       s1 += *aData++ + s2;
43880       s2 += *aData++ + s1;
43881     }while( aData<aEnd );
43882   }else{
43883     do {
43884       s1 += BYTESWAP32(aData[0]) + s2;
43885       s2 += BYTESWAP32(aData[1]) + s1;
43886       aData += 2;
43887     }while( aData<aEnd );
43888   }
43889
43890   aOut[0] = s1;
43891   aOut[1] = s2;
43892 }
43893
43894 static void walShmBarrier(Wal *pWal){
43895   if( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE ){
43896     sqlite3OsShmBarrier(pWal->pDbFd);
43897   }
43898 }
43899
43900 /*
43901 ** Write the header information in pWal->hdr into the wal-index.
43902 **
43903 ** The checksum on pWal->hdr is updated before it is written.
43904 */
43905 static void walIndexWriteHdr(Wal *pWal){
43906   volatile WalIndexHdr *aHdr = walIndexHdr(pWal);
43907   const int nCksum = offsetof(WalIndexHdr, aCksum);
43908
43909   assert( pWal->writeLock );
43910   pWal->hdr.isInit = 1;
43911   pWal->hdr.iVersion = WALINDEX_MAX_VERSION;
43912   walChecksumBytes(1, (u8*)&pWal->hdr, nCksum, 0, pWal->hdr.aCksum);
43913   memcpy((void *)&aHdr[1], (void *)&pWal->hdr, sizeof(WalIndexHdr));
43914   walShmBarrier(pWal);
43915   memcpy((void *)&aHdr[0], (void *)&pWal->hdr, sizeof(WalIndexHdr));
43916 }
43917
43918 /*
43919 ** This function encodes a single frame header and writes it to a buffer
43920 ** supplied by the caller. A frame-header is made up of a series of 
43921 ** 4-byte big-endian integers, as follows:
43922 **
43923 **     0: Page number.
43924 **     4: For commit records, the size of the database image in pages 
43925 **        after the commit. For all other records, zero.
43926 **     8: Salt-1 (copied from the wal-header)
43927 **    12: Salt-2 (copied from the wal-header)
43928 **    16: Checksum-1.
43929 **    20: Checksum-2.
43930 */
43931 static void walEncodeFrame(
43932   Wal *pWal,                      /* The write-ahead log */
43933   u32 iPage,                      /* Database page number for frame */
43934   u32 nTruncate,                  /* New db size (or 0 for non-commit frames) */
43935   u8 *aData,                      /* Pointer to page data */
43936   u8 *aFrame                      /* OUT: Write encoded frame here */
43937 ){
43938   int nativeCksum;                /* True for native byte-order checksums */
43939   u32 *aCksum = pWal->hdr.aFrameCksum;
43940   assert( WAL_FRAME_HDRSIZE==24 );
43941   sqlite3Put4byte(&aFrame[0], iPage);
43942   sqlite3Put4byte(&aFrame[4], nTruncate);
43943   memcpy(&aFrame[8], pWal->hdr.aSalt, 8);
43944
43945   nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN);
43946   walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum);
43947   walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum);
43948
43949   sqlite3Put4byte(&aFrame[16], aCksum[0]);
43950   sqlite3Put4byte(&aFrame[20], aCksum[1]);
43951 }
43952
43953 /*
43954 ** Check to see if the frame with header in aFrame[] and content
43955 ** in aData[] is valid.  If it is a valid frame, fill *piPage and
43956 ** *pnTruncate and return true.  Return if the frame is not valid.
43957 */
43958 static int walDecodeFrame(
43959   Wal *pWal,                      /* The write-ahead log */
43960   u32 *piPage,                    /* OUT: Database page number for frame */
43961   u32 *pnTruncate,                /* OUT: New db size (or 0 if not commit) */
43962   u8 *aData,                      /* Pointer to page data (for checksum) */
43963   u8 *aFrame                      /* Frame data */
43964 ){
43965   int nativeCksum;                /* True for native byte-order checksums */
43966   u32 *aCksum = pWal->hdr.aFrameCksum;
43967   u32 pgno;                       /* Page number of the frame */
43968   assert( WAL_FRAME_HDRSIZE==24 );
43969
43970   /* A frame is only valid if the salt values in the frame-header
43971   ** match the salt values in the wal-header. 
43972   */
43973   if( memcmp(&pWal->hdr.aSalt, &aFrame[8], 8)!=0 ){
43974     return 0;
43975   }
43976
43977   /* A frame is only valid if the page number is creater than zero.
43978   */
43979   pgno = sqlite3Get4byte(&aFrame[0]);
43980   if( pgno==0 ){
43981     return 0;
43982   }
43983
43984   /* A frame is only valid if a checksum of the WAL header,
43985   ** all prior frams, the first 16 bytes of this frame-header, 
43986   ** and the frame-data matches the checksum in the last 8 
43987   ** bytes of this frame-header.
43988   */
43989   nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN);
43990   walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum);
43991   walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum);
43992   if( aCksum[0]!=sqlite3Get4byte(&aFrame[16]) 
43993    || aCksum[1]!=sqlite3Get4byte(&aFrame[20]) 
43994   ){
43995     /* Checksum failed. */
43996     return 0;
43997   }
43998
43999   /* If we reach this point, the frame is valid.  Return the page number
44000   ** and the new database size.
44001   */
44002   *piPage = pgno;
44003   *pnTruncate = sqlite3Get4byte(&aFrame[4]);
44004   return 1;
44005 }
44006
44007
44008 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
44009 /*
44010 ** Names of locks.  This routine is used to provide debugging output and is not
44011 ** a part of an ordinary build.
44012 */
44013 static const char *walLockName(int lockIdx){
44014   if( lockIdx==WAL_WRITE_LOCK ){
44015     return "WRITE-LOCK";
44016   }else if( lockIdx==WAL_CKPT_LOCK ){
44017     return "CKPT-LOCK";
44018   }else if( lockIdx==WAL_RECOVER_LOCK ){
44019     return "RECOVER-LOCK";
44020   }else{
44021     static char zName[15];
44022     sqlite3_snprintf(sizeof(zName), zName, "READ-LOCK[%d]",
44023                      lockIdx-WAL_READ_LOCK(0));
44024     return zName;
44025   }
44026 }
44027 #endif /*defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */
44028     
44029
44030 /*
44031 ** Set or release locks on the WAL.  Locks are either shared or exclusive.
44032 ** A lock cannot be moved directly between shared and exclusive - it must go
44033 ** through the unlocked state first.
44034 **
44035 ** In locking_mode=EXCLUSIVE, all of these routines become no-ops.
44036 */
44037 static int walLockShared(Wal *pWal, int lockIdx){
44038   int rc;
44039   if( pWal->exclusiveMode ) return SQLITE_OK;
44040   rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1,
44041                         SQLITE_SHM_LOCK | SQLITE_SHM_SHARED);
44042   WALTRACE(("WAL%p: acquire SHARED-%s %s\n", pWal,
44043             walLockName(lockIdx), rc ? "failed" : "ok"));
44044   VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); )
44045   return rc;
44046 }
44047 static void walUnlockShared(Wal *pWal, int lockIdx){
44048   if( pWal->exclusiveMode ) return;
44049   (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1,
44050                          SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED);
44051   WALTRACE(("WAL%p: release SHARED-%s\n", pWal, walLockName(lockIdx)));
44052 }
44053 static int walLockExclusive(Wal *pWal, int lockIdx, int n){
44054   int rc;
44055   if( pWal->exclusiveMode ) return SQLITE_OK;
44056   rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, n,
44057                         SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE);
44058   WALTRACE(("WAL%p: acquire EXCLUSIVE-%s cnt=%d %s\n", pWal,
44059             walLockName(lockIdx), n, rc ? "failed" : "ok"));
44060   VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); )
44061   return rc;
44062 }
44063 static void walUnlockExclusive(Wal *pWal, int lockIdx, int n){
44064   if( pWal->exclusiveMode ) return;
44065   (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, n,
44066                          SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE);
44067   WALTRACE(("WAL%p: release EXCLUSIVE-%s cnt=%d\n", pWal,
44068              walLockName(lockIdx), n));
44069 }
44070
44071 /*
44072 ** Compute a hash on a page number.  The resulting hash value must land
44073 ** between 0 and (HASHTABLE_NSLOT-1).  The walHashNext() function advances
44074 ** the hash to the next value in the event of a collision.
44075 */
44076 static int walHash(u32 iPage){
44077   assert( iPage>0 );
44078   assert( (HASHTABLE_NSLOT & (HASHTABLE_NSLOT-1))==0 );
44079   return (iPage*HASHTABLE_HASH_1) & (HASHTABLE_NSLOT-1);
44080 }
44081 static int walNextHash(int iPriorHash){
44082   return (iPriorHash+1)&(HASHTABLE_NSLOT-1);
44083 }
44084
44085 /* 
44086 ** Return pointers to the hash table and page number array stored on
44087 ** page iHash of the wal-index. The wal-index is broken into 32KB pages
44088 ** numbered starting from 0.
44089 **
44090 ** Set output variable *paHash to point to the start of the hash table
44091 ** in the wal-index file. Set *piZero to one less than the frame 
44092 ** number of the first frame indexed by this hash table. If a
44093 ** slot in the hash table is set to N, it refers to frame number 
44094 ** (*piZero+N) in the log.
44095 **
44096 ** Finally, set *paPgno so that *paPgno[1] is the page number of the
44097 ** first frame indexed by the hash table, frame (*piZero+1).
44098 */
44099 static int walHashGet(
44100   Wal *pWal,                      /* WAL handle */
44101   int iHash,                      /* Find the iHash'th table */
44102   volatile ht_slot **paHash,      /* OUT: Pointer to hash index */
44103   volatile u32 **paPgno,          /* OUT: Pointer to page number array */
44104   u32 *piZero                     /* OUT: Frame associated with *paPgno[0] */
44105 ){
44106   int rc;                         /* Return code */
44107   volatile u32 *aPgno;
44108
44109   rc = walIndexPage(pWal, iHash, &aPgno);
44110   assert( rc==SQLITE_OK || iHash>0 );
44111
44112   if( rc==SQLITE_OK ){
44113     u32 iZero;
44114     volatile ht_slot *aHash;
44115
44116     aHash = (volatile ht_slot *)&aPgno[HASHTABLE_NPAGE];
44117     if( iHash==0 ){
44118       aPgno = &aPgno[WALINDEX_HDR_SIZE/sizeof(u32)];
44119       iZero = 0;
44120     }else{
44121       iZero = HASHTABLE_NPAGE_ONE + (iHash-1)*HASHTABLE_NPAGE;
44122     }
44123   
44124     *paPgno = &aPgno[-1];
44125     *paHash = aHash;
44126     *piZero = iZero;
44127   }
44128   return rc;
44129 }
44130
44131 /*
44132 ** Return the number of the wal-index page that contains the hash-table
44133 ** and page-number array that contain entries corresponding to WAL frame
44134 ** iFrame. The wal-index is broken up into 32KB pages. Wal-index pages 
44135 ** are numbered starting from 0.
44136 */
44137 static int walFramePage(u32 iFrame){
44138   int iHash = (iFrame+HASHTABLE_NPAGE-HASHTABLE_NPAGE_ONE-1) / HASHTABLE_NPAGE;
44139   assert( (iHash==0 || iFrame>HASHTABLE_NPAGE_ONE)
44140        && (iHash>=1 || iFrame<=HASHTABLE_NPAGE_ONE)
44141        && (iHash<=1 || iFrame>(HASHTABLE_NPAGE_ONE+HASHTABLE_NPAGE))
44142        && (iHash>=2 || iFrame<=HASHTABLE_NPAGE_ONE+HASHTABLE_NPAGE)
44143        && (iHash<=2 || iFrame>(HASHTABLE_NPAGE_ONE+2*HASHTABLE_NPAGE))
44144   );
44145   return iHash;
44146 }
44147
44148 /*
44149 ** Return the page number associated with frame iFrame in this WAL.
44150 */
44151 static u32 walFramePgno(Wal *pWal, u32 iFrame){
44152   int iHash = walFramePage(iFrame);
44153   if( iHash==0 ){
44154     return pWal->apWiData[0][WALINDEX_HDR_SIZE/sizeof(u32) + iFrame - 1];
44155   }
44156   return pWal->apWiData[iHash][(iFrame-1-HASHTABLE_NPAGE_ONE)%HASHTABLE_NPAGE];
44157 }
44158
44159 /*
44160 ** Remove entries from the hash table that point to WAL slots greater
44161 ** than pWal->hdr.mxFrame.
44162 **
44163 ** This function is called whenever pWal->hdr.mxFrame is decreased due
44164 ** to a rollback or savepoint.
44165 **
44166 ** At most only the hash table containing pWal->hdr.mxFrame needs to be
44167 ** updated.  Any later hash tables will be automatically cleared when
44168 ** pWal->hdr.mxFrame advances to the point where those hash tables are
44169 ** actually needed.
44170 */
44171 static void walCleanupHash(Wal *pWal){
44172   volatile ht_slot *aHash = 0;    /* Pointer to hash table to clear */
44173   volatile u32 *aPgno = 0;        /* Page number array for hash table */
44174   u32 iZero = 0;                  /* frame == (aHash[x]+iZero) */
44175   int iLimit = 0;                 /* Zero values greater than this */
44176   int nByte;                      /* Number of bytes to zero in aPgno[] */
44177   int i;                          /* Used to iterate through aHash[] */
44178
44179   assert( pWal->writeLock );
44180   testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE-1 );
44181   testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE );
44182   testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE+1 );
44183
44184   if( pWal->hdr.mxFrame==0 ) return;
44185
44186   /* Obtain pointers to the hash-table and page-number array containing 
44187   ** the entry that corresponds to frame pWal->hdr.mxFrame. It is guaranteed
44188   ** that the page said hash-table and array reside on is already mapped.
44189   */
44190   assert( pWal->nWiData>walFramePage(pWal->hdr.mxFrame) );
44191   assert( pWal->apWiData[walFramePage(pWal->hdr.mxFrame)] );
44192   walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &aHash, &aPgno, &iZero);
44193
44194   /* Zero all hash-table entries that correspond to frame numbers greater
44195   ** than pWal->hdr.mxFrame.
44196   */
44197   iLimit = pWal->hdr.mxFrame - iZero;
44198   assert( iLimit>0 );
44199   for(i=0; i<HASHTABLE_NSLOT; i++){
44200     if( aHash[i]>iLimit ){
44201       aHash[i] = 0;
44202     }
44203   }
44204   
44205   /* Zero the entries in the aPgno array that correspond to frames with
44206   ** frame numbers greater than pWal->hdr.mxFrame. 
44207   */
44208   nByte = (int)((char *)aHash - (char *)&aPgno[iLimit+1]);
44209   memset((void *)&aPgno[iLimit+1], 0, nByte);
44210
44211 #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
44212   /* Verify that the every entry in the mapping region is still reachable
44213   ** via the hash table even after the cleanup.
44214   */
44215   if( iLimit ){
44216     int i;           /* Loop counter */
44217     int iKey;        /* Hash key */
44218     for(i=1; i<=iLimit; i++){
44219       for(iKey=walHash(aPgno[i]); aHash[iKey]; iKey=walNextHash(iKey)){
44220         if( aHash[iKey]==i ) break;
44221       }
44222       assert( aHash[iKey]==i );
44223     }
44224   }
44225 #endif /* SQLITE_ENABLE_EXPENSIVE_ASSERT */
44226 }
44227
44228
44229 /*
44230 ** Set an entry in the wal-index that will map database page number
44231 ** pPage into WAL frame iFrame.
44232 */
44233 static int walIndexAppend(Wal *pWal, u32 iFrame, u32 iPage){
44234   int rc;                         /* Return code */
44235   u32 iZero = 0;                  /* One less than frame number of aPgno[1] */
44236   volatile u32 *aPgno = 0;        /* Page number array */
44237   volatile ht_slot *aHash = 0;    /* Hash table */
44238
44239   rc = walHashGet(pWal, walFramePage(iFrame), &aHash, &aPgno, &iZero);
44240
44241   /* Assuming the wal-index file was successfully mapped, populate the
44242   ** page number array and hash table entry.
44243   */
44244   if( rc==SQLITE_OK ){
44245     int iKey;                     /* Hash table key */
44246     int idx;                      /* Value to write to hash-table slot */
44247     int nCollide;                 /* Number of hash collisions */
44248
44249     idx = iFrame - iZero;
44250     assert( idx <= HASHTABLE_NSLOT/2 + 1 );
44251     
44252     /* If this is the first entry to be added to this hash-table, zero the
44253     ** entire hash table and aPgno[] array before proceding. 
44254     */
44255     if( idx==1 ){
44256       int nByte = (int)((u8 *)&aHash[HASHTABLE_NSLOT] - (u8 *)&aPgno[1]);
44257       memset((void*)&aPgno[1], 0, nByte);
44258     }
44259
44260     /* If the entry in aPgno[] is already set, then the previous writer
44261     ** must have exited unexpectedly in the middle of a transaction (after
44262     ** writing one or more dirty pages to the WAL to free up memory). 
44263     ** Remove the remnants of that writers uncommitted transaction from 
44264     ** the hash-table before writing any new entries.
44265     */
44266     if( aPgno[idx] ){
44267       walCleanupHash(pWal);
44268       assert( !aPgno[idx] );
44269     }
44270
44271     /* Write the aPgno[] array entry and the hash-table slot. */
44272     nCollide = idx;
44273     for(iKey=walHash(iPage); aHash[iKey]; iKey=walNextHash(iKey)){
44274       if( (nCollide--)==0 ) return SQLITE_CORRUPT_BKPT;
44275     }
44276     aPgno[idx] = iPage;
44277     aHash[iKey] = (ht_slot)idx;
44278
44279 #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
44280     /* Verify that the number of entries in the hash table exactly equals
44281     ** the number of entries in the mapping region.
44282     */
44283     {
44284       int i;           /* Loop counter */
44285       int nEntry = 0;  /* Number of entries in the hash table */
44286       for(i=0; i<HASHTABLE_NSLOT; i++){ if( aHash[i] ) nEntry++; }
44287       assert( nEntry==idx );
44288     }
44289
44290     /* Verify that the every entry in the mapping region is reachable
44291     ** via the hash table.  This turns out to be a really, really expensive
44292     ** thing to check, so only do this occasionally - not on every
44293     ** iteration.
44294     */
44295     if( (idx&0x3ff)==0 ){
44296       int i;           /* Loop counter */
44297       for(i=1; i<=idx; i++){
44298         for(iKey=walHash(aPgno[i]); aHash[iKey]; iKey=walNextHash(iKey)){
44299           if( aHash[iKey]==i ) break;
44300         }
44301         assert( aHash[iKey]==i );
44302       }
44303     }
44304 #endif /* SQLITE_ENABLE_EXPENSIVE_ASSERT */
44305   }
44306
44307
44308   return rc;
44309 }
44310
44311
44312 /*
44313 ** Recover the wal-index by reading the write-ahead log file. 
44314 **
44315 ** This routine first tries to establish an exclusive lock on the
44316 ** wal-index to prevent other threads/processes from doing anything
44317 ** with the WAL or wal-index while recovery is running.  The
44318 ** WAL_RECOVER_LOCK is also held so that other threads will know
44319 ** that this thread is running recovery.  If unable to establish
44320 ** the necessary locks, this routine returns SQLITE_BUSY.
44321 */
44322 static int walIndexRecover(Wal *pWal){
44323   int rc;                         /* Return Code */
44324   i64 nSize;                      /* Size of log file */
44325   u32 aFrameCksum[2] = {0, 0};
44326   int iLock;                      /* Lock offset to lock for checkpoint */
44327   int nLock;                      /* Number of locks to hold */
44328
44329   /* Obtain an exclusive lock on all byte in the locking range not already
44330   ** locked by the caller. The caller is guaranteed to have locked the
44331   ** WAL_WRITE_LOCK byte, and may have also locked the WAL_CKPT_LOCK byte.
44332   ** If successful, the same bytes that are locked here are unlocked before
44333   ** this function returns.
44334   */
44335   assert( pWal->ckptLock==1 || pWal->ckptLock==0 );
44336   assert( WAL_ALL_BUT_WRITE==WAL_WRITE_LOCK+1 );
44337   assert( WAL_CKPT_LOCK==WAL_ALL_BUT_WRITE );
44338   assert( pWal->writeLock );
44339   iLock = WAL_ALL_BUT_WRITE + pWal->ckptLock;
44340   nLock = SQLITE_SHM_NLOCK - iLock;
44341   rc = walLockExclusive(pWal, iLock, nLock);
44342   if( rc ){
44343     return rc;
44344   }
44345   WALTRACE(("WAL%p: recovery begin...\n", pWal));
44346
44347   memset(&pWal->hdr, 0, sizeof(WalIndexHdr));
44348
44349   rc = sqlite3OsFileSize(pWal->pWalFd, &nSize);
44350   if( rc!=SQLITE_OK ){
44351     goto recovery_error;
44352   }
44353
44354   if( nSize>WAL_HDRSIZE ){
44355     u8 aBuf[WAL_HDRSIZE];         /* Buffer to load WAL header into */
44356     u8 *aFrame = 0;               /* Malloc'd buffer to load entire frame */
44357     int szFrame;                  /* Number of bytes in buffer aFrame[] */
44358     u8 *aData;                    /* Pointer to data part of aFrame buffer */
44359     int iFrame;                   /* Index of last frame read */
44360     i64 iOffset;                  /* Next offset to read from log file */
44361     int szPage;                   /* Page size according to the log */
44362     u32 magic;                    /* Magic value read from WAL header */
44363     u32 version;                  /* Magic value read from WAL header */
44364
44365     /* Read in the WAL header. */
44366     rc = sqlite3OsRead(pWal->pWalFd, aBuf, WAL_HDRSIZE, 0);
44367     if( rc!=SQLITE_OK ){
44368       goto recovery_error;
44369     }
44370
44371     /* If the database page size is not a power of two, or is greater than
44372     ** SQLITE_MAX_PAGE_SIZE, conclude that the WAL file contains no valid 
44373     ** data. Similarly, if the 'magic' value is invalid, ignore the whole
44374     ** WAL file.
44375     */
44376     magic = sqlite3Get4byte(&aBuf[0]);
44377     szPage = sqlite3Get4byte(&aBuf[8]);
44378     if( (magic&0xFFFFFFFE)!=WAL_MAGIC 
44379      || szPage&(szPage-1) 
44380      || szPage>SQLITE_MAX_PAGE_SIZE 
44381      || szPage<512 
44382     ){
44383       goto finished;
44384     }
44385     pWal->hdr.bigEndCksum = (u8)(magic&0x00000001);
44386     pWal->szPage = szPage;
44387     pWal->nCkpt = sqlite3Get4byte(&aBuf[12]);
44388     memcpy(&pWal->hdr.aSalt, &aBuf[16], 8);
44389
44390     /* Verify that the WAL header checksum is correct */
44391     walChecksumBytes(pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN, 
44392         aBuf, WAL_HDRSIZE-2*4, 0, pWal->hdr.aFrameCksum
44393     );
44394     if( pWal->hdr.aFrameCksum[0]!=sqlite3Get4byte(&aBuf[24])
44395      || pWal->hdr.aFrameCksum[1]!=sqlite3Get4byte(&aBuf[28])
44396     ){
44397       goto finished;
44398     }
44399
44400     /* Verify that the version number on the WAL format is one that
44401     ** are able to understand */
44402     version = sqlite3Get4byte(&aBuf[4]);
44403     if( version!=WAL_MAX_VERSION ){
44404       rc = SQLITE_CANTOPEN_BKPT;
44405       goto finished;
44406     }
44407
44408     /* Malloc a buffer to read frames into. */
44409     szFrame = szPage + WAL_FRAME_HDRSIZE;
44410     aFrame = (u8 *)sqlite3_malloc(szFrame);
44411     if( !aFrame ){
44412       rc = SQLITE_NOMEM;
44413       goto recovery_error;
44414     }
44415     aData = &aFrame[WAL_FRAME_HDRSIZE];
44416
44417     /* Read all frames from the log file. */
44418     iFrame = 0;
44419     for(iOffset=WAL_HDRSIZE; (iOffset+szFrame)<=nSize; iOffset+=szFrame){
44420       u32 pgno;                   /* Database page number for frame */
44421       u32 nTruncate;              /* dbsize field from frame header */
44422       int isValid;                /* True if this frame is valid */
44423
44424       /* Read and decode the next log frame. */
44425       rc = sqlite3OsRead(pWal->pWalFd, aFrame, szFrame, iOffset);
44426       if( rc!=SQLITE_OK ) break;
44427       isValid = walDecodeFrame(pWal, &pgno, &nTruncate, aData, aFrame);
44428       if( !isValid ) break;
44429       rc = walIndexAppend(pWal, ++iFrame, pgno);
44430       if( rc!=SQLITE_OK ) break;
44431
44432       /* If nTruncate is non-zero, this is a commit record. */
44433       if( nTruncate ){
44434         pWal->hdr.mxFrame = iFrame;
44435         pWal->hdr.nPage = nTruncate;
44436         pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16));
44437         testcase( szPage<=32768 );
44438         testcase( szPage>=65536 );
44439         aFrameCksum[0] = pWal->hdr.aFrameCksum[0];
44440         aFrameCksum[1] = pWal->hdr.aFrameCksum[1];
44441       }
44442     }
44443
44444     sqlite3_free(aFrame);
44445   }
44446
44447 finished:
44448   if( rc==SQLITE_OK ){
44449     volatile WalCkptInfo *pInfo;
44450     int i;
44451     pWal->hdr.aFrameCksum[0] = aFrameCksum[0];
44452     pWal->hdr.aFrameCksum[1] = aFrameCksum[1];
44453     walIndexWriteHdr(pWal);
44454
44455     /* Reset the checkpoint-header. This is safe because this thread is 
44456     ** currently holding locks that exclude all other readers, writers and
44457     ** checkpointers.
44458     */
44459     pInfo = walCkptInfo(pWal);
44460     pInfo->nBackfill = 0;
44461     pInfo->aReadMark[0] = 0;
44462     for(i=1; i<WAL_NREADER; i++) pInfo->aReadMark[i] = READMARK_NOT_USED;
44463
44464     /* If more than one frame was recovered from the log file, report an
44465     ** event via sqlite3_log(). This is to help with identifying performance
44466     ** problems caused by applications routinely shutting down without
44467     ** checkpointing the log file.
44468     */
44469     if( pWal->hdr.nPage ){
44470       sqlite3_log(SQLITE_OK, "Recovered %d frames from WAL file %s",
44471           pWal->hdr.nPage, pWal->zWalName
44472       );
44473     }
44474   }
44475
44476 recovery_error:
44477   WALTRACE(("WAL%p: recovery %s\n", pWal, rc ? "failed" : "ok"));
44478   walUnlockExclusive(pWal, iLock, nLock);
44479   return rc;
44480 }
44481
44482 /*
44483 ** Close an open wal-index.
44484 */
44485 static void walIndexClose(Wal *pWal, int isDelete){
44486   if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){
44487     int i;
44488     for(i=0; i<pWal->nWiData; i++){
44489       sqlite3_free((void *)pWal->apWiData[i]);
44490       pWal->apWiData[i] = 0;
44491     }
44492   }else{
44493     sqlite3OsShmUnmap(pWal->pDbFd, isDelete);
44494   }
44495 }
44496
44497 /* 
44498 ** Open a connection to the WAL file zWalName. The database file must 
44499 ** already be opened on connection pDbFd. The buffer that zWalName points
44500 ** to must remain valid for the lifetime of the returned Wal* handle.
44501 **
44502 ** A SHARED lock should be held on the database file when this function
44503 ** is called. The purpose of this SHARED lock is to prevent any other
44504 ** client from unlinking the WAL or wal-index file. If another process
44505 ** were to do this just after this client opened one of these files, the
44506 ** system would be badly broken.
44507 **
44508 ** If the log file is successfully opened, SQLITE_OK is returned and 
44509 ** *ppWal is set to point to a new WAL handle. If an error occurs,
44510 ** an SQLite error code is returned and *ppWal is left unmodified.
44511 */
44512 SQLITE_PRIVATE int sqlite3WalOpen(
44513   sqlite3_vfs *pVfs,              /* vfs module to open wal and wal-index */
44514   sqlite3_file *pDbFd,            /* The open database file */
44515   const char *zWalName,           /* Name of the WAL file */
44516   int bNoShm,                     /* True to run in heap-memory mode */
44517   Wal **ppWal                     /* OUT: Allocated Wal handle */
44518 ){
44519   int rc;                         /* Return Code */
44520   Wal *pRet;                      /* Object to allocate and return */
44521   int flags;                      /* Flags passed to OsOpen() */
44522
44523   assert( zWalName && zWalName[0] );
44524   assert( pDbFd );
44525
44526   /* In the amalgamation, the os_unix.c and os_win.c source files come before
44527   ** this source file.  Verify that the #defines of the locking byte offsets
44528   ** in os_unix.c and os_win.c agree with the WALINDEX_LOCK_OFFSET value.
44529   */
44530 #ifdef WIN_SHM_BASE
44531   assert( WIN_SHM_BASE==WALINDEX_LOCK_OFFSET );
44532 #endif
44533 #ifdef UNIX_SHM_BASE
44534   assert( UNIX_SHM_BASE==WALINDEX_LOCK_OFFSET );
44535 #endif
44536
44537
44538   /* Allocate an instance of struct Wal to return. */
44539   *ppWal = 0;
44540   pRet = (Wal*)sqlite3MallocZero(sizeof(Wal) + pVfs->szOsFile);
44541   if( !pRet ){
44542     return SQLITE_NOMEM;
44543   }
44544
44545   pRet->pVfs = pVfs;
44546   pRet->pWalFd = (sqlite3_file *)&pRet[1];
44547   pRet->pDbFd = pDbFd;
44548   pRet->readLock = -1;
44549   pRet->zWalName = zWalName;
44550   pRet->exclusiveMode = (bNoShm ? WAL_HEAPMEMORY_MODE: WAL_NORMAL_MODE);
44551
44552   /* Open file handle on the write-ahead log file. */
44553   flags = (SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_WAL);
44554   rc = sqlite3OsOpen(pVfs, zWalName, pRet->pWalFd, flags, &flags);
44555   if( rc==SQLITE_OK && flags&SQLITE_OPEN_READONLY ){
44556     pRet->readOnly = 1;
44557   }
44558
44559   if( rc!=SQLITE_OK ){
44560     walIndexClose(pRet, 0);
44561     sqlite3OsClose(pRet->pWalFd);
44562     sqlite3_free(pRet);
44563   }else{
44564     *ppWal = pRet;
44565     WALTRACE(("WAL%d: opened\n", pRet));
44566   }
44567   return rc;
44568 }
44569
44570 /*
44571 ** Find the smallest page number out of all pages held in the WAL that
44572 ** has not been returned by any prior invocation of this method on the
44573 ** same WalIterator object.   Write into *piFrame the frame index where
44574 ** that page was last written into the WAL.  Write into *piPage the page
44575 ** number.
44576 **
44577 ** Return 0 on success.  If there are no pages in the WAL with a page
44578 ** number larger than *piPage, then return 1.
44579 */
44580 static int walIteratorNext(
44581   WalIterator *p,               /* Iterator */
44582   u32 *piPage,                  /* OUT: The page number of the next page */
44583   u32 *piFrame                  /* OUT: Wal frame index of next page */
44584 ){
44585   u32 iMin;                     /* Result pgno must be greater than iMin */
44586   u32 iRet = 0xFFFFFFFF;        /* 0xffffffff is never a valid page number */
44587   int i;                        /* For looping through segments */
44588
44589   iMin = p->iPrior;
44590   assert( iMin<0xffffffff );
44591   for(i=p->nSegment-1; i>=0; i--){
44592     struct WalSegment *pSegment = &p->aSegment[i];
44593     while( pSegment->iNext<pSegment->nEntry ){
44594       u32 iPg = pSegment->aPgno[pSegment->aIndex[pSegment->iNext]];
44595       if( iPg>iMin ){
44596         if( iPg<iRet ){
44597           iRet = iPg;
44598           *piFrame = pSegment->iZero + pSegment->aIndex[pSegment->iNext];
44599         }
44600         break;
44601       }
44602       pSegment->iNext++;
44603     }
44604   }
44605
44606   *piPage = p->iPrior = iRet;
44607   return (iRet==0xFFFFFFFF);
44608 }
44609
44610 /*
44611 ** This function merges two sorted lists into a single sorted list.
44612 **
44613 ** aLeft[] and aRight[] are arrays of indices.  The sort key is
44614 ** aContent[aLeft[]] and aContent[aRight[]].  Upon entry, the following
44615 ** is guaranteed for all J<K:
44616 **
44617 **        aContent[aLeft[J]] < aContent[aLeft[K]]
44618 **        aContent[aRight[J]] < aContent[aRight[K]]
44619 **
44620 ** This routine overwrites aRight[] with a new (probably longer) sequence
44621 ** of indices such that the aRight[] contains every index that appears in
44622 ** either aLeft[] or the old aRight[] and such that the second condition
44623 ** above is still met.
44624 **
44625 ** The aContent[aLeft[X]] values will be unique for all X.  And the
44626 ** aContent[aRight[X]] values will be unique too.  But there might be
44627 ** one or more combinations of X and Y such that
44628 **
44629 **      aLeft[X]!=aRight[Y]  &&  aContent[aLeft[X]] == aContent[aRight[Y]]
44630 **
44631 ** When that happens, omit the aLeft[X] and use the aRight[Y] index.
44632 */
44633 static void walMerge(
44634   const u32 *aContent,            /* Pages in wal - keys for the sort */
44635   ht_slot *aLeft,                 /* IN: Left hand input list */
44636   int nLeft,                      /* IN: Elements in array *paLeft */
44637   ht_slot **paRight,              /* IN/OUT: Right hand input list */
44638   int *pnRight,                   /* IN/OUT: Elements in *paRight */
44639   ht_slot *aTmp                   /* Temporary buffer */
44640 ){
44641   int iLeft = 0;                  /* Current index in aLeft */
44642   int iRight = 0;                 /* Current index in aRight */
44643   int iOut = 0;                   /* Current index in output buffer */
44644   int nRight = *pnRight;
44645   ht_slot *aRight = *paRight;
44646
44647   assert( nLeft>0 && nRight>0 );
44648   while( iRight<nRight || iLeft<nLeft ){
44649     ht_slot logpage;
44650     Pgno dbpage;
44651
44652     if( (iLeft<nLeft) 
44653      && (iRight>=nRight || aContent[aLeft[iLeft]]<aContent[aRight[iRight]])
44654     ){
44655       logpage = aLeft[iLeft++];
44656     }else{
44657       logpage = aRight[iRight++];
44658     }
44659     dbpage = aContent[logpage];
44660
44661     aTmp[iOut++] = logpage;
44662     if( iLeft<nLeft && aContent[aLeft[iLeft]]==dbpage ) iLeft++;
44663
44664     assert( iLeft>=nLeft || aContent[aLeft[iLeft]]>dbpage );
44665     assert( iRight>=nRight || aContent[aRight[iRight]]>dbpage );
44666   }
44667
44668   *paRight = aLeft;
44669   *pnRight = iOut;
44670   memcpy(aLeft, aTmp, sizeof(aTmp[0])*iOut);
44671 }
44672
44673 /*
44674 ** Sort the elements in list aList using aContent[] as the sort key.
44675 ** Remove elements with duplicate keys, preferring to keep the
44676 ** larger aList[] values.
44677 **
44678 ** The aList[] entries are indices into aContent[].  The values in
44679 ** aList[] are to be sorted so that for all J<K:
44680 **
44681 **      aContent[aList[J]] < aContent[aList[K]]
44682 **
44683 ** For any X and Y such that
44684 **
44685 **      aContent[aList[X]] == aContent[aList[Y]]
44686 **
44687 ** Keep the larger of the two values aList[X] and aList[Y] and discard
44688 ** the smaller.
44689 */
44690 static void walMergesort(
44691   const u32 *aContent,            /* Pages in wal */
44692   ht_slot *aBuffer,               /* Buffer of at least *pnList items to use */
44693   ht_slot *aList,                 /* IN/OUT: List to sort */
44694   int *pnList                     /* IN/OUT: Number of elements in aList[] */
44695 ){
44696   struct Sublist {
44697     int nList;                    /* Number of elements in aList */
44698     ht_slot *aList;               /* Pointer to sub-list content */
44699   };
44700
44701   const int nList = *pnList;      /* Size of input list */
44702   int nMerge = 0;                 /* Number of elements in list aMerge */
44703   ht_slot *aMerge = 0;            /* List to be merged */
44704   int iList;                      /* Index into input list */
44705   int iSub = 0;                   /* Index into aSub array */
44706   struct Sublist aSub[13];        /* Array of sub-lists */
44707
44708   memset(aSub, 0, sizeof(aSub));
44709   assert( nList<=HASHTABLE_NPAGE && nList>0 );
44710   assert( HASHTABLE_NPAGE==(1<<(ArraySize(aSub)-1)) );
44711
44712   for(iList=0; iList<nList; iList++){
44713     nMerge = 1;
44714     aMerge = &aList[iList];
44715     for(iSub=0; iList & (1<<iSub); iSub++){
44716       struct Sublist *p = &aSub[iSub];
44717       assert( p->aList && p->nList<=(1<<iSub) );
44718       assert( p->aList==&aList[iList&~((2<<iSub)-1)] );
44719       walMerge(aContent, p->aList, p->nList, &aMerge, &nMerge, aBuffer);
44720     }
44721     aSub[iSub].aList = aMerge;
44722     aSub[iSub].nList = nMerge;
44723   }
44724
44725   for(iSub++; iSub<ArraySize(aSub); iSub++){
44726     if( nList & (1<<iSub) ){
44727       struct Sublist *p = &aSub[iSub];
44728       assert( p->nList<=(1<<iSub) );
44729       assert( p->aList==&aList[nList&~((2<<iSub)-1)] );
44730       walMerge(aContent, p->aList, p->nList, &aMerge, &nMerge, aBuffer);
44731     }
44732   }
44733   assert( aMerge==aList );
44734   *pnList = nMerge;
44735
44736 #ifdef SQLITE_DEBUG
44737   {
44738     int i;
44739     for(i=1; i<*pnList; i++){
44740       assert( aContent[aList[i]] > aContent[aList[i-1]] );
44741     }
44742   }
44743 #endif
44744 }
44745
44746 /* 
44747 ** Free an iterator allocated by walIteratorInit().
44748 */
44749 static void walIteratorFree(WalIterator *p){
44750   sqlite3ScratchFree(p);
44751 }
44752
44753 /*
44754 ** Construct a WalInterator object that can be used to loop over all 
44755 ** pages in the WAL in ascending order. The caller must hold the checkpoint
44756 ** lock.
44757 **
44758 ** On success, make *pp point to the newly allocated WalInterator object
44759 ** return SQLITE_OK. Otherwise, return an error code. If this routine
44760 ** returns an error, the value of *pp is undefined.
44761 **
44762 ** The calling routine should invoke walIteratorFree() to destroy the
44763 ** WalIterator object when it has finished with it.
44764 */
44765 static int walIteratorInit(Wal *pWal, WalIterator **pp){
44766   WalIterator *p;                 /* Return value */
44767   int nSegment;                   /* Number of segments to merge */
44768   u32 iLast;                      /* Last frame in log */
44769   int nByte;                      /* Number of bytes to allocate */
44770   int i;                          /* Iterator variable */
44771   ht_slot *aTmp;                  /* Temp space used by merge-sort */
44772   int rc = SQLITE_OK;             /* Return Code */
44773
44774   /* This routine only runs while holding the checkpoint lock. And
44775   ** it only runs if there is actually content in the log (mxFrame>0).
44776   */
44777   assert( pWal->ckptLock && pWal->hdr.mxFrame>0 );
44778   iLast = pWal->hdr.mxFrame;
44779
44780   /* Allocate space for the WalIterator object. */
44781   nSegment = walFramePage(iLast) + 1;
44782   nByte = sizeof(WalIterator) 
44783         + (nSegment-1)*sizeof(struct WalSegment)
44784         + iLast*sizeof(ht_slot);
44785   p = (WalIterator *)sqlite3ScratchMalloc(nByte);
44786   if( !p ){
44787     return SQLITE_NOMEM;
44788   }
44789   memset(p, 0, nByte);
44790   p->nSegment = nSegment;
44791
44792   /* Allocate temporary space used by the merge-sort routine. This block
44793   ** of memory will be freed before this function returns.
44794   */
44795   aTmp = (ht_slot *)sqlite3ScratchMalloc(
44796       sizeof(ht_slot) * (iLast>HASHTABLE_NPAGE?HASHTABLE_NPAGE:iLast)
44797   );
44798   if( !aTmp ){
44799     rc = SQLITE_NOMEM;
44800   }
44801
44802   for(i=0; rc==SQLITE_OK && i<nSegment; i++){
44803     volatile ht_slot *aHash;
44804     u32 iZero;
44805     volatile u32 *aPgno;
44806
44807     rc = walHashGet(pWal, i, &aHash, &aPgno, &iZero);
44808     if( rc==SQLITE_OK ){
44809       int j;                      /* Counter variable */
44810       int nEntry;                 /* Number of entries in this segment */
44811       ht_slot *aIndex;            /* Sorted index for this segment */
44812
44813       aPgno++;
44814       if( (i+1)==nSegment ){
44815         nEntry = (int)(iLast - iZero);
44816       }else{
44817         nEntry = (int)((u32*)aHash - (u32*)aPgno);
44818       }
44819       aIndex = &((ht_slot *)&p->aSegment[p->nSegment])[iZero];
44820       iZero++;
44821   
44822       for(j=0; j<nEntry; j++){
44823         aIndex[j] = (ht_slot)j;
44824       }
44825       walMergesort((u32 *)aPgno, aTmp, aIndex, &nEntry);
44826       p->aSegment[i].iZero = iZero;
44827       p->aSegment[i].nEntry = nEntry;
44828       p->aSegment[i].aIndex = aIndex;
44829       p->aSegment[i].aPgno = (u32 *)aPgno;
44830     }
44831   }
44832   sqlite3ScratchFree(aTmp);
44833
44834   if( rc!=SQLITE_OK ){
44835     walIteratorFree(p);
44836   }
44837   *pp = p;
44838   return rc;
44839 }
44840
44841 /*
44842 ** Attempt to obtain the exclusive WAL lock defined by parameters lockIdx and
44843 ** n. If the attempt fails and parameter xBusy is not NULL, then it is a
44844 ** busy-handler function. Invoke it and retry the lock until either the
44845 ** lock is successfully obtained or the busy-handler returns 0.
44846 */
44847 static int walBusyLock(
44848   Wal *pWal,                      /* WAL connection */
44849   int (*xBusy)(void*),            /* Function to call when busy */
44850   void *pBusyArg,                 /* Context argument for xBusyHandler */
44851   int lockIdx,                    /* Offset of first byte to lock */
44852   int n                           /* Number of bytes to lock */
44853 ){
44854   int rc;
44855   do {
44856     rc = walLockExclusive(pWal, lockIdx, n);
44857   }while( xBusy && rc==SQLITE_BUSY && xBusy(pBusyArg) );
44858   return rc;
44859 }
44860
44861 /*
44862 ** The cache of the wal-index header must be valid to call this function.
44863 ** Return the page-size in bytes used by the database.
44864 */
44865 static int walPagesize(Wal *pWal){
44866   return (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16);
44867 }
44868
44869 /*
44870 ** Copy as much content as we can from the WAL back into the database file
44871 ** in response to an sqlite3_wal_checkpoint() request or the equivalent.
44872 **
44873 ** The amount of information copies from WAL to database might be limited
44874 ** by active readers.  This routine will never overwrite a database page
44875 ** that a concurrent reader might be using.
44876 **
44877 ** All I/O barrier operations (a.k.a fsyncs) occur in this routine when
44878 ** SQLite is in WAL-mode in synchronous=NORMAL.  That means that if 
44879 ** checkpoints are always run by a background thread or background 
44880 ** process, foreground threads will never block on a lengthy fsync call.
44881 **
44882 ** Fsync is called on the WAL before writing content out of the WAL and
44883 ** into the database.  This ensures that if the new content is persistent
44884 ** in the WAL and can be recovered following a power-loss or hard reset.
44885 **
44886 ** Fsync is also called on the database file if (and only if) the entire
44887 ** WAL content is copied into the database file.  This second fsync makes
44888 ** it safe to delete the WAL since the new content will persist in the
44889 ** database file.
44890 **
44891 ** This routine uses and updates the nBackfill field of the wal-index header.
44892 ** This is the only routine tha will increase the value of nBackfill.  
44893 ** (A WAL reset or recovery will revert nBackfill to zero, but not increase
44894 ** its value.)
44895 **
44896 ** The caller must be holding sufficient locks to ensure that no other
44897 ** checkpoint is running (in any other thread or process) at the same
44898 ** time.
44899 */
44900 static int walCheckpoint(
44901   Wal *pWal,                      /* Wal connection */
44902   int eMode,                      /* One of PASSIVE, FULL or RESTART */
44903   int (*xBusyCall)(void*),        /* Function to call when busy */
44904   void *pBusyArg,                 /* Context argument for xBusyHandler */
44905   int sync_flags,                 /* Flags for OsSync() (or 0) */
44906   u8 *zBuf                        /* Temporary buffer to use */
44907 ){
44908   int rc;                         /* Return code */
44909   int szPage;                     /* Database page-size */
44910   WalIterator *pIter = 0;         /* Wal iterator context */
44911   u32 iDbpage = 0;                /* Next database page to write */
44912   u32 iFrame = 0;                 /* Wal frame containing data for iDbpage */
44913   u32 mxSafeFrame;                /* Max frame that can be backfilled */
44914   u32 mxPage;                     /* Max database page to write */
44915   int i;                          /* Loop counter */
44916   volatile WalCkptInfo *pInfo;    /* The checkpoint status information */
44917   int (*xBusy)(void*) = 0;        /* Function to call when waiting for locks */
44918
44919   szPage = walPagesize(pWal);
44920   testcase( szPage<=32768 );
44921   testcase( szPage>=65536 );
44922   pInfo = walCkptInfo(pWal);
44923   if( pInfo->nBackfill>=pWal->hdr.mxFrame ) return SQLITE_OK;
44924
44925   /* Allocate the iterator */
44926   rc = walIteratorInit(pWal, &pIter);
44927   if( rc!=SQLITE_OK ){
44928     return rc;
44929   }
44930   assert( pIter );
44931
44932   if( eMode!=SQLITE_CHECKPOINT_PASSIVE ) xBusy = xBusyCall;
44933
44934   /* Compute in mxSafeFrame the index of the last frame of the WAL that is
44935   ** safe to write into the database.  Frames beyond mxSafeFrame might
44936   ** overwrite database pages that are in use by active readers and thus
44937   ** cannot be backfilled from the WAL.
44938   */
44939   mxSafeFrame = pWal->hdr.mxFrame;
44940   mxPage = pWal->hdr.nPage;
44941   for(i=1; i<WAL_NREADER; i++){
44942     u32 y = pInfo->aReadMark[i];
44943     if( mxSafeFrame>y ){
44944       assert( y<=pWal->hdr.mxFrame );
44945       rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(i), 1);
44946       if( rc==SQLITE_OK ){
44947         pInfo->aReadMark[i] = READMARK_NOT_USED;
44948         walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1);
44949       }else if( rc==SQLITE_BUSY ){
44950         mxSafeFrame = y;
44951         xBusy = 0;
44952       }else{
44953         goto walcheckpoint_out;
44954       }
44955     }
44956   }
44957
44958   if( pInfo->nBackfill<mxSafeFrame
44959    && (rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(0), 1))==SQLITE_OK
44960   ){
44961     i64 nSize;                    /* Current size of database file */
44962     u32 nBackfill = pInfo->nBackfill;
44963
44964     /* Sync the WAL to disk */
44965     if( sync_flags ){
44966       rc = sqlite3OsSync(pWal->pWalFd, sync_flags);
44967     }
44968
44969     /* If the database file may grow as a result of this checkpoint, hint
44970     ** about the eventual size of the db file to the VFS layer. 
44971     */
44972     if( rc==SQLITE_OK ){
44973       i64 nReq = ((i64)mxPage * szPage);
44974       rc = sqlite3OsFileSize(pWal->pDbFd, &nSize);
44975       if( rc==SQLITE_OK && nSize<nReq ){
44976         sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_SIZE_HINT, &nReq);
44977       }
44978     }
44979
44980     /* Iterate through the contents of the WAL, copying data to the db file. */
44981     while( rc==SQLITE_OK && 0==walIteratorNext(pIter, &iDbpage, &iFrame) ){
44982       i64 iOffset;
44983       assert( walFramePgno(pWal, iFrame)==iDbpage );
44984       if( iFrame<=nBackfill || iFrame>mxSafeFrame || iDbpage>mxPage ) continue;
44985       iOffset = walFrameOffset(iFrame, szPage) + WAL_FRAME_HDRSIZE;
44986       /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL file */
44987       rc = sqlite3OsRead(pWal->pWalFd, zBuf, szPage, iOffset);
44988       if( rc!=SQLITE_OK ) break;
44989       iOffset = (iDbpage-1)*(i64)szPage;
44990       testcase( IS_BIG_INT(iOffset) );
44991       rc = sqlite3OsWrite(pWal->pDbFd, zBuf, szPage, iOffset);
44992       if( rc!=SQLITE_OK ) break;
44993     }
44994
44995     /* If work was actually accomplished... */
44996     if( rc==SQLITE_OK ){
44997       if( mxSafeFrame==walIndexHdr(pWal)->mxFrame ){
44998         i64 szDb = pWal->hdr.nPage*(i64)szPage;
44999         testcase( IS_BIG_INT(szDb) );
45000         rc = sqlite3OsTruncate(pWal->pDbFd, szDb);
45001         if( rc==SQLITE_OK && sync_flags ){
45002           rc = sqlite3OsSync(pWal->pDbFd, sync_flags);
45003         }
45004       }
45005       if( rc==SQLITE_OK ){
45006         pInfo->nBackfill = mxSafeFrame;
45007       }
45008     }
45009
45010     /* Release the reader lock held while backfilling */
45011     walUnlockExclusive(pWal, WAL_READ_LOCK(0), 1);
45012   }
45013
45014   if( rc==SQLITE_BUSY ){
45015     /* Reset the return code so as not to report a checkpoint failure
45016     ** just because there are active readers.  */
45017     rc = SQLITE_OK;
45018   }
45019
45020   /* If this is an SQLITE_CHECKPOINT_RESTART operation, and the entire wal
45021   ** file has been copied into the database file, then block until all
45022   ** readers have finished using the wal file. This ensures that the next
45023   ** process to write to the database restarts the wal file.
45024   */
45025   if( rc==SQLITE_OK && eMode!=SQLITE_CHECKPOINT_PASSIVE ){
45026     assert( pWal->writeLock );
45027     if( pInfo->nBackfill<pWal->hdr.mxFrame ){
45028       rc = SQLITE_BUSY;
45029     }else if( eMode==SQLITE_CHECKPOINT_RESTART ){
45030       assert( mxSafeFrame==pWal->hdr.mxFrame );
45031       rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(1), WAL_NREADER-1);
45032       if( rc==SQLITE_OK ){
45033         walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
45034       }
45035     }
45036   }
45037
45038  walcheckpoint_out:
45039   walIteratorFree(pIter);
45040   return rc;
45041 }
45042
45043 /*
45044 ** Close a connection to a log file.
45045 */
45046 SQLITE_PRIVATE int sqlite3WalClose(
45047   Wal *pWal,                      /* Wal to close */
45048   int sync_flags,                 /* Flags to pass to OsSync() (or 0) */
45049   int nBuf,
45050   u8 *zBuf                        /* Buffer of at least nBuf bytes */
45051 ){
45052   int rc = SQLITE_OK;
45053   if( pWal ){
45054     int isDelete = 0;             /* True to unlink wal and wal-index files */
45055
45056     /* If an EXCLUSIVE lock can be obtained on the database file (using the
45057     ** ordinary, rollback-mode locking methods, this guarantees that the
45058     ** connection associated with this log file is the only connection to
45059     ** the database. In this case checkpoint the database and unlink both
45060     ** the wal and wal-index files.
45061     **
45062     ** The EXCLUSIVE lock is not released before returning.
45063     */
45064     rc = sqlite3OsLock(pWal->pDbFd, SQLITE_LOCK_EXCLUSIVE);
45065     if( rc==SQLITE_OK ){
45066       if( pWal->exclusiveMode==WAL_NORMAL_MODE ){
45067         pWal->exclusiveMode = WAL_EXCLUSIVE_MODE;
45068       }
45069       rc = sqlite3WalCheckpoint(
45070           pWal, SQLITE_CHECKPOINT_PASSIVE, 0, 0, sync_flags, nBuf, zBuf, 0, 0
45071       );
45072       if( rc==SQLITE_OK ){
45073         isDelete = 1;
45074       }
45075     }
45076
45077     walIndexClose(pWal, isDelete);
45078     sqlite3OsClose(pWal->pWalFd);
45079     if( isDelete ){
45080       sqlite3OsDelete(pWal->pVfs, pWal->zWalName, 0);
45081     }
45082     WALTRACE(("WAL%p: closed\n", pWal));
45083     sqlite3_free((void *)pWal->apWiData);
45084     sqlite3_free(pWal);
45085   }
45086   return rc;
45087 }
45088
45089 /*
45090 ** Try to read the wal-index header.  Return 0 on success and 1 if
45091 ** there is a problem.
45092 **
45093 ** The wal-index is in shared memory.  Another thread or process might
45094 ** be writing the header at the same time this procedure is trying to
45095 ** read it, which might result in inconsistency.  A dirty read is detected
45096 ** by verifying that both copies of the header are the same and also by
45097 ** a checksum on the header.
45098 **
45099 ** If and only if the read is consistent and the header is different from
45100 ** pWal->hdr, then pWal->hdr is updated to the content of the new header
45101 ** and *pChanged is set to 1.
45102 **
45103 ** If the checksum cannot be verified return non-zero. If the header
45104 ** is read successfully and the checksum verified, return zero.
45105 */
45106 static int walIndexTryHdr(Wal *pWal, int *pChanged){
45107   u32 aCksum[2];                  /* Checksum on the header content */
45108   WalIndexHdr h1, h2;             /* Two copies of the header content */
45109   WalIndexHdr volatile *aHdr;     /* Header in shared memory */
45110
45111   /* The first page of the wal-index must be mapped at this point. */
45112   assert( pWal->nWiData>0 && pWal->apWiData[0] );
45113
45114   /* Read the header. This might happen concurrently with a write to the
45115   ** same area of shared memory on a different CPU in a SMP,
45116   ** meaning it is possible that an inconsistent snapshot is read
45117   ** from the file. If this happens, return non-zero.
45118   **
45119   ** There are two copies of the header at the beginning of the wal-index.
45120   ** When reading, read [0] first then [1].  Writes are in the reverse order.
45121   ** Memory barriers are used to prevent the compiler or the hardware from
45122   ** reordering the reads and writes.
45123   */
45124   aHdr = walIndexHdr(pWal);
45125   memcpy(&h1, (void *)&aHdr[0], sizeof(h1));
45126   walShmBarrier(pWal);
45127   memcpy(&h2, (void *)&aHdr[1], sizeof(h2));
45128
45129   if( memcmp(&h1, &h2, sizeof(h1))!=0 ){
45130     return 1;   /* Dirty read */
45131   }  
45132   if( h1.isInit==0 ){
45133     return 1;   /* Malformed header - probably all zeros */
45134   }
45135   walChecksumBytes(1, (u8*)&h1, sizeof(h1)-sizeof(h1.aCksum), 0, aCksum);
45136   if( aCksum[0]!=h1.aCksum[0] || aCksum[1]!=h1.aCksum[1] ){
45137     return 1;   /* Checksum does not match */
45138   }
45139
45140   if( memcmp(&pWal->hdr, &h1, sizeof(WalIndexHdr)) ){
45141     *pChanged = 1;
45142     memcpy(&pWal->hdr, &h1, sizeof(WalIndexHdr));
45143     pWal->szPage = (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16);
45144     testcase( pWal->szPage<=32768 );
45145     testcase( pWal->szPage>=65536 );
45146   }
45147
45148   /* The header was successfully read. Return zero. */
45149   return 0;
45150 }
45151
45152 /*
45153 ** Read the wal-index header from the wal-index and into pWal->hdr.
45154 ** If the wal-header appears to be corrupt, try to reconstruct the
45155 ** wal-index from the WAL before returning.
45156 **
45157 ** Set *pChanged to 1 if the wal-index header value in pWal->hdr is
45158 ** changed by this opertion.  If pWal->hdr is unchanged, set *pChanged
45159 ** to 0.
45160 **
45161 ** If the wal-index header is successfully read, return SQLITE_OK. 
45162 ** Otherwise an SQLite error code.
45163 */
45164 static int walIndexReadHdr(Wal *pWal, int *pChanged){
45165   int rc;                         /* Return code */
45166   int badHdr;                     /* True if a header read failed */
45167   volatile u32 *page0;            /* Chunk of wal-index containing header */
45168
45169   /* Ensure that page 0 of the wal-index (the page that contains the 
45170   ** wal-index header) is mapped. Return early if an error occurs here.
45171   */
45172   assert( pChanged );
45173   rc = walIndexPage(pWal, 0, &page0);
45174   if( rc!=SQLITE_OK ){
45175     return rc;
45176   };
45177   assert( page0 || pWal->writeLock==0 );
45178
45179   /* If the first page of the wal-index has been mapped, try to read the
45180   ** wal-index header immediately, without holding any lock. This usually
45181   ** works, but may fail if the wal-index header is corrupt or currently 
45182   ** being modified by another thread or process.
45183   */
45184   badHdr = (page0 ? walIndexTryHdr(pWal, pChanged) : 1);
45185
45186   /* If the first attempt failed, it might have been due to a race
45187   ** with a writer.  So get a WRITE lock and try again.
45188   */
45189   assert( badHdr==0 || pWal->writeLock==0 );
45190   if( badHdr && SQLITE_OK==(rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1)) ){
45191     pWal->writeLock = 1;
45192     if( SQLITE_OK==(rc = walIndexPage(pWal, 0, &page0)) ){
45193       badHdr = walIndexTryHdr(pWal, pChanged);
45194       if( badHdr ){
45195         /* If the wal-index header is still malformed even while holding
45196         ** a WRITE lock, it can only mean that the header is corrupted and
45197         ** needs to be reconstructed.  So run recovery to do exactly that.
45198         */
45199         rc = walIndexRecover(pWal);
45200         *pChanged = 1;
45201       }
45202     }
45203     pWal->writeLock = 0;
45204     walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
45205   }
45206
45207   /* If the header is read successfully, check the version number to make
45208   ** sure the wal-index was not constructed with some future format that
45209   ** this version of SQLite cannot understand.
45210   */
45211   if( badHdr==0 && pWal->hdr.iVersion!=WALINDEX_MAX_VERSION ){
45212     rc = SQLITE_CANTOPEN_BKPT;
45213   }
45214
45215   return rc;
45216 }
45217
45218 /*
45219 ** This is the value that walTryBeginRead returns when it needs to
45220 ** be retried.
45221 */
45222 #define WAL_RETRY  (-1)
45223
45224 /*
45225 ** Attempt to start a read transaction.  This might fail due to a race or
45226 ** other transient condition.  When that happens, it returns WAL_RETRY to
45227 ** indicate to the caller that it is safe to retry immediately.
45228 **
45229 ** On success return SQLITE_OK.  On a permanent failure (such an
45230 ** I/O error or an SQLITE_BUSY because another process is running
45231 ** recovery) return a positive error code.
45232 **
45233 ** The useWal parameter is true to force the use of the WAL and disable
45234 ** the case where the WAL is bypassed because it has been completely
45235 ** checkpointed.  If useWal==0 then this routine calls walIndexReadHdr() 
45236 ** to make a copy of the wal-index header into pWal->hdr.  If the 
45237 ** wal-index header has changed, *pChanged is set to 1 (as an indication 
45238 ** to the caller that the local paget cache is obsolete and needs to be 
45239 ** flushed.)  When useWal==1, the wal-index header is assumed to already
45240 ** be loaded and the pChanged parameter is unused.
45241 **
45242 ** The caller must set the cnt parameter to the number of prior calls to
45243 ** this routine during the current read attempt that returned WAL_RETRY.
45244 ** This routine will start taking more aggressive measures to clear the
45245 ** race conditions after multiple WAL_RETRY returns, and after an excessive
45246 ** number of errors will ultimately return SQLITE_PROTOCOL.  The
45247 ** SQLITE_PROTOCOL return indicates that some other process has gone rogue
45248 ** and is not honoring the locking protocol.  There is a vanishingly small
45249 ** chance that SQLITE_PROTOCOL could be returned because of a run of really
45250 ** bad luck when there is lots of contention for the wal-index, but that
45251 ** possibility is so small that it can be safely neglected, we believe.
45252 **
45253 ** On success, this routine obtains a read lock on 
45254 ** WAL_READ_LOCK(pWal->readLock).  The pWal->readLock integer is
45255 ** in the range 0 <= pWal->readLock < WAL_NREADER.  If pWal->readLock==(-1)
45256 ** that means the Wal does not hold any read lock.  The reader must not
45257 ** access any database page that is modified by a WAL frame up to and
45258 ** including frame number aReadMark[pWal->readLock].  The reader will
45259 ** use WAL frames up to and including pWal->hdr.mxFrame if pWal->readLock>0
45260 ** Or if pWal->readLock==0, then the reader will ignore the WAL
45261 ** completely and get all content directly from the database file.
45262 ** If the useWal parameter is 1 then the WAL will never be ignored and
45263 ** this routine will always set pWal->readLock>0 on success.
45264 ** When the read transaction is completed, the caller must release the
45265 ** lock on WAL_READ_LOCK(pWal->readLock) and set pWal->readLock to -1.
45266 **
45267 ** This routine uses the nBackfill and aReadMark[] fields of the header
45268 ** to select a particular WAL_READ_LOCK() that strives to let the
45269 ** checkpoint process do as much work as possible.  This routine might
45270 ** update values of the aReadMark[] array in the header, but if it does
45271 ** so it takes care to hold an exclusive lock on the corresponding
45272 ** WAL_READ_LOCK() while changing values.
45273 */
45274 static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){
45275   volatile WalCkptInfo *pInfo;    /* Checkpoint information in wal-index */
45276   u32 mxReadMark;                 /* Largest aReadMark[] value */
45277   int mxI;                        /* Index of largest aReadMark[] value */
45278   int i;                          /* Loop counter */
45279   int rc = SQLITE_OK;             /* Return code  */
45280
45281   assert( pWal->readLock<0 );     /* Not currently locked */
45282
45283   /* Take steps to avoid spinning forever if there is a protocol error.
45284   **
45285   ** Circumstances that cause a RETRY should only last for the briefest
45286   ** instances of time.  No I/O or other system calls are done while the
45287   ** locks are held, so the locks should not be held for very long. But 
45288   ** if we are unlucky, another process that is holding a lock might get
45289   ** paged out or take a page-fault that is time-consuming to resolve, 
45290   ** during the few nanoseconds that it is holding the lock.  In that case,
45291   ** it might take longer than normal for the lock to free.
45292   **
45293   ** After 5 RETRYs, we begin calling sqlite3OsSleep().  The first few
45294   ** calls to sqlite3OsSleep() have a delay of 1 microsecond.  Really this
45295   ** is more of a scheduler yield than an actual delay.  But on the 10th
45296   ** an subsequent retries, the delays start becoming longer and longer, 
45297   ** so that on the 100th (and last) RETRY we delay for 21 milliseconds.
45298   ** The total delay time before giving up is less than 1 second.
45299   */
45300   if( cnt>5 ){
45301     int nDelay = 1;                      /* Pause time in microseconds */
45302     if( cnt>100 ){
45303       VVA_ONLY( pWal->lockError = 1; )
45304       return SQLITE_PROTOCOL;
45305     }
45306     if( cnt>=10 ) nDelay = (cnt-9)*238;  /* Max delay 21ms. Total delay 996ms */
45307     sqlite3OsSleep(pWal->pVfs, nDelay);
45308   }
45309
45310   if( !useWal ){
45311     rc = walIndexReadHdr(pWal, pChanged);
45312     if( rc==SQLITE_BUSY ){
45313       /* If there is not a recovery running in another thread or process
45314       ** then convert BUSY errors to WAL_RETRY.  If recovery is known to
45315       ** be running, convert BUSY to BUSY_RECOVERY.  There is a race here
45316       ** which might cause WAL_RETRY to be returned even if BUSY_RECOVERY
45317       ** would be technically correct.  But the race is benign since with
45318       ** WAL_RETRY this routine will be called again and will probably be
45319       ** right on the second iteration.
45320       */
45321       if( pWal->apWiData[0]==0 ){
45322         /* This branch is taken when the xShmMap() method returns SQLITE_BUSY.
45323         ** We assume this is a transient condition, so return WAL_RETRY. The
45324         ** xShmMap() implementation used by the default unix and win32 VFS 
45325         ** modules may return SQLITE_BUSY due to a race condition in the 
45326         ** code that determines whether or not the shared-memory region 
45327         ** must be zeroed before the requested page is returned.
45328         */
45329         rc = WAL_RETRY;
45330       }else if( SQLITE_OK==(rc = walLockShared(pWal, WAL_RECOVER_LOCK)) ){
45331         walUnlockShared(pWal, WAL_RECOVER_LOCK);
45332         rc = WAL_RETRY;
45333       }else if( rc==SQLITE_BUSY ){
45334         rc = SQLITE_BUSY_RECOVERY;
45335       }
45336     }
45337     if( rc!=SQLITE_OK ){
45338       return rc;
45339     }
45340   }
45341
45342   pInfo = walCkptInfo(pWal);
45343   if( !useWal && pInfo->nBackfill==pWal->hdr.mxFrame ){
45344     /* The WAL has been completely backfilled (or it is empty).
45345     ** and can be safely ignored.
45346     */
45347     rc = walLockShared(pWal, WAL_READ_LOCK(0));
45348     walShmBarrier(pWal);
45349     if( rc==SQLITE_OK ){
45350       if( memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) ){
45351         /* It is not safe to allow the reader to continue here if frames
45352         ** may have been appended to the log before READ_LOCK(0) was obtained.
45353         ** When holding READ_LOCK(0), the reader ignores the entire log file,
45354         ** which implies that the database file contains a trustworthy
45355         ** snapshoT. Since holding READ_LOCK(0) prevents a checkpoint from
45356         ** happening, this is usually correct.
45357         **
45358         ** However, if frames have been appended to the log (or if the log 
45359         ** is wrapped and written for that matter) before the READ_LOCK(0)
45360         ** is obtained, that is not necessarily true. A checkpointer may
45361         ** have started to backfill the appended frames but crashed before
45362         ** it finished. Leaving a corrupt image in the database file.
45363         */
45364         walUnlockShared(pWal, WAL_READ_LOCK(0));
45365         return WAL_RETRY;
45366       }
45367       pWal->readLock = 0;
45368       return SQLITE_OK;
45369     }else if( rc!=SQLITE_BUSY ){
45370       return rc;
45371     }
45372   }
45373
45374   /* If we get this far, it means that the reader will want to use
45375   ** the WAL to get at content from recent commits.  The job now is
45376   ** to select one of the aReadMark[] entries that is closest to
45377   ** but not exceeding pWal->hdr.mxFrame and lock that entry.
45378   */
45379   mxReadMark = 0;
45380   mxI = 0;
45381   for(i=1; i<WAL_NREADER; i++){
45382     u32 thisMark = pInfo->aReadMark[i];
45383     if( mxReadMark<=thisMark && thisMark<=pWal->hdr.mxFrame ){
45384       assert( thisMark!=READMARK_NOT_USED );
45385       mxReadMark = thisMark;
45386       mxI = i;
45387     }
45388   }
45389   /* There was once an "if" here. The extra "{" is to preserve indentation. */
45390   {
45391     if( mxReadMark < pWal->hdr.mxFrame || mxI==0 ){
45392       for(i=1; i<WAL_NREADER; i++){
45393         rc = walLockExclusive(pWal, WAL_READ_LOCK(i), 1);
45394         if( rc==SQLITE_OK ){
45395           mxReadMark = pInfo->aReadMark[i] = pWal->hdr.mxFrame;
45396           mxI = i;
45397           walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1);
45398           break;
45399         }else if( rc!=SQLITE_BUSY ){
45400           return rc;
45401         }
45402       }
45403     }
45404     if( mxI==0 ){
45405       assert( rc==SQLITE_BUSY );
45406       return WAL_RETRY;
45407     }
45408
45409     rc = walLockShared(pWal, WAL_READ_LOCK(mxI));
45410     if( rc ){
45411       return rc==SQLITE_BUSY ? WAL_RETRY : rc;
45412     }
45413     /* Now that the read-lock has been obtained, check that neither the
45414     ** value in the aReadMark[] array or the contents of the wal-index
45415     ** header have changed.
45416     **
45417     ** It is necessary to check that the wal-index header did not change
45418     ** between the time it was read and when the shared-lock was obtained
45419     ** on WAL_READ_LOCK(mxI) was obtained to account for the possibility
45420     ** that the log file may have been wrapped by a writer, or that frames
45421     ** that occur later in the log than pWal->hdr.mxFrame may have been
45422     ** copied into the database by a checkpointer. If either of these things
45423     ** happened, then reading the database with the current value of
45424     ** pWal->hdr.mxFrame risks reading a corrupted snapshot. So, retry
45425     ** instead.
45426     **
45427     ** This does not guarantee that the copy of the wal-index header is up to
45428     ** date before proceeding. That would not be possible without somehow
45429     ** blocking writers. It only guarantees that a dangerous checkpoint or 
45430     ** log-wrap (either of which would require an exclusive lock on
45431     ** WAL_READ_LOCK(mxI)) has not occurred since the snapshot was valid.
45432     */
45433     walShmBarrier(pWal);
45434     if( pInfo->aReadMark[mxI]!=mxReadMark
45435      || memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr))
45436     ){
45437       walUnlockShared(pWal, WAL_READ_LOCK(mxI));
45438       return WAL_RETRY;
45439     }else{
45440       assert( mxReadMark<=pWal->hdr.mxFrame );
45441       pWal->readLock = (i16)mxI;
45442     }
45443   }
45444   return rc;
45445 }
45446
45447 /*
45448 ** Begin a read transaction on the database.
45449 **
45450 ** This routine used to be called sqlite3OpenSnapshot() and with good reason:
45451 ** it takes a snapshot of the state of the WAL and wal-index for the current
45452 ** instant in time.  The current thread will continue to use this snapshot.
45453 ** Other threads might append new content to the WAL and wal-index but
45454 ** that extra content is ignored by the current thread.
45455 **
45456 ** If the database contents have changes since the previous read
45457 ** transaction, then *pChanged is set to 1 before returning.  The
45458 ** Pager layer will use this to know that is cache is stale and
45459 ** needs to be flushed.
45460 */
45461 SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){
45462   int rc;                         /* Return code */
45463   int cnt = 0;                    /* Number of TryBeginRead attempts */
45464
45465   do{
45466     rc = walTryBeginRead(pWal, pChanged, 0, ++cnt);
45467   }while( rc==WAL_RETRY );
45468   testcase( (rc&0xff)==SQLITE_BUSY );
45469   testcase( (rc&0xff)==SQLITE_IOERR );
45470   testcase( rc==SQLITE_PROTOCOL );
45471   testcase( rc==SQLITE_OK );
45472   return rc;
45473 }
45474
45475 /*
45476 ** Finish with a read transaction.  All this does is release the
45477 ** read-lock.
45478 */
45479 SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal){
45480   sqlite3WalEndWriteTransaction(pWal);
45481   if( pWal->readLock>=0 ){
45482     walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock));
45483     pWal->readLock = -1;
45484   }
45485 }
45486
45487 /*
45488 ** Read a page from the WAL, if it is present in the WAL and if the 
45489 ** current read transaction is configured to use the WAL.  
45490 **
45491 ** The *pInWal is set to 1 if the requested page is in the WAL and
45492 ** has been loaded.  Or *pInWal is set to 0 if the page was not in 
45493 ** the WAL and needs to be read out of the database.
45494 */
45495 SQLITE_PRIVATE int sqlite3WalRead(
45496   Wal *pWal,                      /* WAL handle */
45497   Pgno pgno,                      /* Database page number to read data for */
45498   int *pInWal,                    /* OUT: True if data is read from WAL */
45499   int nOut,                       /* Size of buffer pOut in bytes */
45500   u8 *pOut                        /* Buffer to write page data to */
45501 ){
45502   u32 iRead = 0;                  /* If !=0, WAL frame to return data from */
45503   u32 iLast = pWal->hdr.mxFrame;  /* Last page in WAL for this reader */
45504   int iHash;                      /* Used to loop through N hash tables */
45505
45506   /* This routine is only be called from within a read transaction. */
45507   assert( pWal->readLock>=0 || pWal->lockError );
45508
45509   /* If the "last page" field of the wal-index header snapshot is 0, then
45510   ** no data will be read from the wal under any circumstances. Return early
45511   ** in this case as an optimization.  Likewise, if pWal->readLock==0, 
45512   ** then the WAL is ignored by the reader so return early, as if the 
45513   ** WAL were empty.
45514   */
45515   if( iLast==0 || pWal->readLock==0 ){
45516     *pInWal = 0;
45517     return SQLITE_OK;
45518   }
45519
45520   /* Search the hash table or tables for an entry matching page number
45521   ** pgno. Each iteration of the following for() loop searches one
45522   ** hash table (each hash table indexes up to HASHTABLE_NPAGE frames).
45523   **
45524   ** This code might run concurrently to the code in walIndexAppend()
45525   ** that adds entries to the wal-index (and possibly to this hash 
45526   ** table). This means the value just read from the hash 
45527   ** slot (aHash[iKey]) may have been added before or after the 
45528   ** current read transaction was opened. Values added after the
45529   ** read transaction was opened may have been written incorrectly -
45530   ** i.e. these slots may contain garbage data. However, we assume
45531   ** that any slots written before the current read transaction was
45532   ** opened remain unmodified.
45533   **
45534   ** For the reasons above, the if(...) condition featured in the inner
45535   ** loop of the following block is more stringent that would be required 
45536   ** if we had exclusive access to the hash-table:
45537   **
45538   **   (aPgno[iFrame]==pgno): 
45539   **     This condition filters out normal hash-table collisions.
45540   **
45541   **   (iFrame<=iLast): 
45542   **     This condition filters out entries that were added to the hash
45543   **     table after the current read-transaction had started.
45544   */
45545   for(iHash=walFramePage(iLast); iHash>=0 && iRead==0; iHash--){
45546     volatile ht_slot *aHash;      /* Pointer to hash table */
45547     volatile u32 *aPgno;          /* Pointer to array of page numbers */
45548     u32 iZero;                    /* Frame number corresponding to aPgno[0] */
45549     int iKey;                     /* Hash slot index */
45550     int nCollide;                 /* Number of hash collisions remaining */
45551     int rc;                       /* Error code */
45552
45553     rc = walHashGet(pWal, iHash, &aHash, &aPgno, &iZero);
45554     if( rc!=SQLITE_OK ){
45555       return rc;
45556     }
45557     nCollide = HASHTABLE_NSLOT;
45558     for(iKey=walHash(pgno); aHash[iKey]; iKey=walNextHash(iKey)){
45559       u32 iFrame = aHash[iKey] + iZero;
45560       if( iFrame<=iLast && aPgno[aHash[iKey]]==pgno ){
45561         assert( iFrame>iRead );
45562         iRead = iFrame;
45563       }
45564       if( (nCollide--)==0 ){
45565         return SQLITE_CORRUPT_BKPT;
45566       }
45567     }
45568   }
45569
45570 #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
45571   /* If expensive assert() statements are available, do a linear search
45572   ** of the wal-index file content. Make sure the results agree with the
45573   ** result obtained using the hash indexes above.  */
45574   {
45575     u32 iRead2 = 0;
45576     u32 iTest;
45577     for(iTest=iLast; iTest>0; iTest--){
45578       if( walFramePgno(pWal, iTest)==pgno ){
45579         iRead2 = iTest;
45580         break;
45581       }
45582     }
45583     assert( iRead==iRead2 );
45584   }
45585 #endif
45586
45587   /* If iRead is non-zero, then it is the log frame number that contains the
45588   ** required page. Read and return data from the log file.
45589   */
45590   if( iRead ){
45591     int sz;
45592     i64 iOffset;
45593     sz = pWal->hdr.szPage;
45594     sz = (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16);
45595     testcase( sz<=32768 );
45596     testcase( sz>=65536 );
45597     iOffset = walFrameOffset(iRead, sz) + WAL_FRAME_HDRSIZE;
45598     *pInWal = 1;
45599     /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL */
45600     return sqlite3OsRead(pWal->pWalFd, pOut, nOut, iOffset);
45601   }
45602
45603   *pInWal = 0;
45604   return SQLITE_OK;
45605 }
45606
45607
45608 /* 
45609 ** Return the size of the database in pages (or zero, if unknown).
45610 */
45611 SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal){
45612   if( pWal && ALWAYS(pWal->readLock>=0) ){
45613     return pWal->hdr.nPage;
45614   }
45615   return 0;
45616 }
45617
45618
45619 /* 
45620 ** This function starts a write transaction on the WAL.
45621 **
45622 ** A read transaction must have already been started by a prior call
45623 ** to sqlite3WalBeginReadTransaction().
45624 **
45625 ** If another thread or process has written into the database since
45626 ** the read transaction was started, then it is not possible for this
45627 ** thread to write as doing so would cause a fork.  So this routine
45628 ** returns SQLITE_BUSY in that case and no write transaction is started.
45629 **
45630 ** There can only be a single writer active at a time.
45631 */
45632 SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal){
45633   int rc;
45634
45635   /* Cannot start a write transaction without first holding a read
45636   ** transaction. */
45637   assert( pWal->readLock>=0 );
45638
45639   if( pWal->readOnly ){
45640     return SQLITE_READONLY;
45641   }
45642
45643   /* Only one writer allowed at a time.  Get the write lock.  Return
45644   ** SQLITE_BUSY if unable.
45645   */
45646   rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1);
45647   if( rc ){
45648     return rc;
45649   }
45650   pWal->writeLock = 1;
45651
45652   /* If another connection has written to the database file since the
45653   ** time the read transaction on this connection was started, then
45654   ** the write is disallowed.
45655   */
45656   if( memcmp(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr))!=0 ){
45657     walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
45658     pWal->writeLock = 0;
45659     rc = SQLITE_BUSY;
45660   }
45661
45662   return rc;
45663 }
45664
45665 /*
45666 ** End a write transaction.  The commit has already been done.  This
45667 ** routine merely releases the lock.
45668 */
45669 SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal){
45670   if( pWal->writeLock ){
45671     walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
45672     pWal->writeLock = 0;
45673   }
45674   return SQLITE_OK;
45675 }
45676
45677 /*
45678 ** If any data has been written (but not committed) to the log file, this
45679 ** function moves the write-pointer back to the start of the transaction.
45680 **
45681 ** Additionally, the callback function is invoked for each frame written
45682 ** to the WAL since the start of the transaction. If the callback returns
45683 ** other than SQLITE_OK, it is not invoked again and the error code is
45684 ** returned to the caller.
45685 **
45686 ** Otherwise, if the callback function does not return an error, this
45687 ** function returns SQLITE_OK.
45688 */
45689 SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx){
45690   int rc = SQLITE_OK;
45691   if( ALWAYS(pWal->writeLock) ){
45692     Pgno iMax = pWal->hdr.mxFrame;
45693     Pgno iFrame;
45694   
45695     /* Restore the clients cache of the wal-index header to the state it
45696     ** was in before the client began writing to the database. 
45697     */
45698     memcpy(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr));
45699
45700     for(iFrame=pWal->hdr.mxFrame+1; 
45701         ALWAYS(rc==SQLITE_OK) && iFrame<=iMax; 
45702         iFrame++
45703     ){
45704       /* This call cannot fail. Unless the page for which the page number
45705       ** is passed as the second argument is (a) in the cache and 
45706       ** (b) has an outstanding reference, then xUndo is either a no-op
45707       ** (if (a) is false) or simply expels the page from the cache (if (b)
45708       ** is false).
45709       **
45710       ** If the upper layer is doing a rollback, it is guaranteed that there
45711       ** are no outstanding references to any page other than page 1. And
45712       ** page 1 is never written to the log until the transaction is
45713       ** committed. As a result, the call to xUndo may not fail.
45714       */
45715       assert( walFramePgno(pWal, iFrame)!=1 );
45716       rc = xUndo(pUndoCtx, walFramePgno(pWal, iFrame));
45717     }
45718     walCleanupHash(pWal);
45719   }
45720   assert( rc==SQLITE_OK );
45721   return rc;
45722 }
45723
45724 /* 
45725 ** Argument aWalData must point to an array of WAL_SAVEPOINT_NDATA u32 
45726 ** values. This function populates the array with values required to 
45727 ** "rollback" the write position of the WAL handle back to the current 
45728 ** point in the event of a savepoint rollback (via WalSavepointUndo()).
45729 */
45730 SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData){
45731   assert( pWal->writeLock );
45732   aWalData[0] = pWal->hdr.mxFrame;
45733   aWalData[1] = pWal->hdr.aFrameCksum[0];
45734   aWalData[2] = pWal->hdr.aFrameCksum[1];
45735   aWalData[3] = pWal->nCkpt;
45736 }
45737
45738 /* 
45739 ** Move the write position of the WAL back to the point identified by
45740 ** the values in the aWalData[] array. aWalData must point to an array
45741 ** of WAL_SAVEPOINT_NDATA u32 values that has been previously populated
45742 ** by a call to WalSavepoint().
45743 */
45744 SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData){
45745   int rc = SQLITE_OK;
45746
45747   assert( pWal->writeLock );
45748   assert( aWalData[3]!=pWal->nCkpt || aWalData[0]<=pWal->hdr.mxFrame );
45749
45750   if( aWalData[3]!=pWal->nCkpt ){
45751     /* This savepoint was opened immediately after the write-transaction
45752     ** was started. Right after that, the writer decided to wrap around
45753     ** to the start of the log. Update the savepoint values to match.
45754     */
45755     aWalData[0] = 0;
45756     aWalData[3] = pWal->nCkpt;
45757   }
45758
45759   if( aWalData[0]<pWal->hdr.mxFrame ){
45760     pWal->hdr.mxFrame = aWalData[0];
45761     pWal->hdr.aFrameCksum[0] = aWalData[1];
45762     pWal->hdr.aFrameCksum[1] = aWalData[2];
45763     walCleanupHash(pWal);
45764   }
45765
45766   return rc;
45767 }
45768
45769 /*
45770 ** This function is called just before writing a set of frames to the log
45771 ** file (see sqlite3WalFrames()). It checks to see if, instead of appending
45772 ** to the current log file, it is possible to overwrite the start of the
45773 ** existing log file with the new frames (i.e. "reset" the log). If so,
45774 ** it sets pWal->hdr.mxFrame to 0. Otherwise, pWal->hdr.mxFrame is left
45775 ** unchanged.
45776 **
45777 ** SQLITE_OK is returned if no error is encountered (regardless of whether
45778 ** or not pWal->hdr.mxFrame is modified). An SQLite error code is returned
45779 ** if an error occurs.
45780 */
45781 static int walRestartLog(Wal *pWal){
45782   int rc = SQLITE_OK;
45783   int cnt;
45784
45785   if( pWal->readLock==0 ){
45786     volatile WalCkptInfo *pInfo = walCkptInfo(pWal);
45787     assert( pInfo->nBackfill==pWal->hdr.mxFrame );
45788     if( pInfo->nBackfill>0 ){
45789       u32 salt1;
45790       sqlite3_randomness(4, &salt1);
45791       rc = walLockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
45792       if( rc==SQLITE_OK ){
45793         /* If all readers are using WAL_READ_LOCK(0) (in other words if no
45794         ** readers are currently using the WAL), then the transactions
45795         ** frames will overwrite the start of the existing log. Update the
45796         ** wal-index header to reflect this.
45797         **
45798         ** In theory it would be Ok to update the cache of the header only
45799         ** at this point. But updating the actual wal-index header is also
45800         ** safe and means there is no special case for sqlite3WalUndo()
45801         ** to handle if this transaction is rolled back.
45802         */
45803         int i;                    /* Loop counter */
45804         u32 *aSalt = pWal->hdr.aSalt;       /* Big-endian salt values */
45805         pWal->nCkpt++;
45806         pWal->hdr.mxFrame = 0;
45807         sqlite3Put4byte((u8*)&aSalt[0], 1 + sqlite3Get4byte((u8*)&aSalt[0]));
45808         aSalt[1] = salt1;
45809         walIndexWriteHdr(pWal);
45810         pInfo->nBackfill = 0;
45811         for(i=1; i<WAL_NREADER; i++) pInfo->aReadMark[i] = READMARK_NOT_USED;
45812         assert( pInfo->aReadMark[0]==0 );
45813         walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
45814       }else if( rc!=SQLITE_BUSY ){
45815         return rc;
45816       }
45817     }
45818     walUnlockShared(pWal, WAL_READ_LOCK(0));
45819     pWal->readLock = -1;
45820     cnt = 0;
45821     do{
45822       int notUsed;
45823       rc = walTryBeginRead(pWal, &notUsed, 1, ++cnt);
45824     }while( rc==WAL_RETRY );
45825     assert( (rc&0xff)!=SQLITE_BUSY ); /* BUSY not possible when useWal==1 */
45826     testcase( (rc&0xff)==SQLITE_IOERR );
45827     testcase( rc==SQLITE_PROTOCOL );
45828     testcase( rc==SQLITE_OK );
45829   }
45830   return rc;
45831 }
45832
45833 /* 
45834 ** Write a set of frames to the log. The caller must hold the write-lock
45835 ** on the log file (obtained using sqlite3WalBeginWriteTransaction()).
45836 */
45837 SQLITE_PRIVATE int sqlite3WalFrames(
45838   Wal *pWal,                      /* Wal handle to write to */
45839   int szPage,                     /* Database page-size in bytes */
45840   PgHdr *pList,                   /* List of dirty pages to write */
45841   Pgno nTruncate,                 /* Database size after this commit */
45842   int isCommit,                   /* True if this is a commit */
45843   int sync_flags                  /* Flags to pass to OsSync() (or 0) */
45844 ){
45845   int rc;                         /* Used to catch return codes */
45846   u32 iFrame;                     /* Next frame address */
45847   u8 aFrame[WAL_FRAME_HDRSIZE];   /* Buffer to assemble frame-header in */
45848   PgHdr *p;                       /* Iterator to run through pList with. */
45849   PgHdr *pLast = 0;               /* Last frame in list */
45850   int nLast = 0;                  /* Number of extra copies of last page */
45851
45852   assert( pList );
45853   assert( pWal->writeLock );
45854
45855 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
45856   { int cnt; for(cnt=0, p=pList; p; p=p->pDirty, cnt++){}
45857     WALTRACE(("WAL%p: frame write begin. %d frames. mxFrame=%d. %s\n",
45858               pWal, cnt, pWal->hdr.mxFrame, isCommit ? "Commit" : "Spill"));
45859   }
45860 #endif
45861
45862   /* See if it is possible to write these frames into the start of the
45863   ** log file, instead of appending to it at pWal->hdr.mxFrame.
45864   */
45865   if( SQLITE_OK!=(rc = walRestartLog(pWal)) ){
45866     return rc;
45867   }
45868
45869   /* If this is the first frame written into the log, write the WAL
45870   ** header to the start of the WAL file. See comments at the top of
45871   ** this source file for a description of the WAL header format.
45872   */
45873   iFrame = pWal->hdr.mxFrame;
45874   if( iFrame==0 ){
45875     u8 aWalHdr[WAL_HDRSIZE];      /* Buffer to assemble wal-header in */
45876     u32 aCksum[2];                /* Checksum for wal-header */
45877
45878     sqlite3Put4byte(&aWalHdr[0], (WAL_MAGIC | SQLITE_BIGENDIAN));
45879     sqlite3Put4byte(&aWalHdr[4], WAL_MAX_VERSION);
45880     sqlite3Put4byte(&aWalHdr[8], szPage);
45881     sqlite3Put4byte(&aWalHdr[12], pWal->nCkpt);
45882     sqlite3_randomness(8, pWal->hdr.aSalt);
45883     memcpy(&aWalHdr[16], pWal->hdr.aSalt, 8);
45884     walChecksumBytes(1, aWalHdr, WAL_HDRSIZE-2*4, 0, aCksum);
45885     sqlite3Put4byte(&aWalHdr[24], aCksum[0]);
45886     sqlite3Put4byte(&aWalHdr[28], aCksum[1]);
45887     
45888     pWal->szPage = szPage;
45889     pWal->hdr.bigEndCksum = SQLITE_BIGENDIAN;
45890     pWal->hdr.aFrameCksum[0] = aCksum[0];
45891     pWal->hdr.aFrameCksum[1] = aCksum[1];
45892
45893     rc = sqlite3OsWrite(pWal->pWalFd, aWalHdr, sizeof(aWalHdr), 0);
45894     WALTRACE(("WAL%p: wal-header write %s\n", pWal, rc ? "failed" : "ok"));
45895     if( rc!=SQLITE_OK ){
45896       return rc;
45897     }
45898   }
45899   assert( (int)pWal->szPage==szPage );
45900
45901   /* Write the log file. */
45902   for(p=pList; p; p=p->pDirty){
45903     u32 nDbsize;                  /* Db-size field for frame header */
45904     i64 iOffset;                  /* Write offset in log file */
45905     void *pData;
45906    
45907     iOffset = walFrameOffset(++iFrame, szPage);
45908     /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL */
45909     
45910     /* Populate and write the frame header */
45911     nDbsize = (isCommit && p->pDirty==0) ? nTruncate : 0;
45912 #if defined(SQLITE_HAS_CODEC)
45913     if( (pData = sqlite3PagerCodec(p))==0 ) return SQLITE_NOMEM;
45914 #else
45915     pData = p->pData;
45916 #endif
45917     walEncodeFrame(pWal, p->pgno, nDbsize, pData, aFrame);
45918     rc = sqlite3OsWrite(pWal->pWalFd, aFrame, sizeof(aFrame), iOffset);
45919     if( rc!=SQLITE_OK ){
45920       return rc;
45921     }
45922
45923     /* Write the page data */
45924     rc = sqlite3OsWrite(pWal->pWalFd, pData, szPage, iOffset+sizeof(aFrame));
45925     if( rc!=SQLITE_OK ){
45926       return rc;
45927     }
45928     pLast = p;
45929   }
45930
45931   /* Sync the log file if the 'isSync' flag was specified. */
45932   if( sync_flags ){
45933     i64 iSegment = sqlite3OsSectorSize(pWal->pWalFd);
45934     i64 iOffset = walFrameOffset(iFrame+1, szPage);
45935
45936     assert( isCommit );
45937     assert( iSegment>0 );
45938
45939     iSegment = (((iOffset+iSegment-1)/iSegment) * iSegment);
45940     while( iOffset<iSegment ){
45941       void *pData;
45942 #if defined(SQLITE_HAS_CODEC)
45943       if( (pData = sqlite3PagerCodec(pLast))==0 ) return SQLITE_NOMEM;
45944 #else
45945       pData = pLast->pData;
45946 #endif
45947       walEncodeFrame(pWal, pLast->pgno, nTruncate, pData, aFrame);
45948       /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL */
45949       rc = sqlite3OsWrite(pWal->pWalFd, aFrame, sizeof(aFrame), iOffset);
45950       if( rc!=SQLITE_OK ){
45951         return rc;
45952       }
45953       iOffset += WAL_FRAME_HDRSIZE;
45954       rc = sqlite3OsWrite(pWal->pWalFd, pData, szPage, iOffset); 
45955       if( rc!=SQLITE_OK ){
45956         return rc;
45957       }
45958       nLast++;
45959       iOffset += szPage;
45960     }
45961
45962     rc = sqlite3OsSync(pWal->pWalFd, sync_flags);
45963   }
45964
45965   /* Append data to the wal-index. It is not necessary to lock the 
45966   ** wal-index to do this as the SQLITE_SHM_WRITE lock held on the wal-index
45967   ** guarantees that there are no other writers, and no data that may
45968   ** be in use by existing readers is being overwritten.
45969   */
45970   iFrame = pWal->hdr.mxFrame;
45971   for(p=pList; p && rc==SQLITE_OK; p=p->pDirty){
45972     iFrame++;
45973     rc = walIndexAppend(pWal, iFrame, p->pgno);
45974   }
45975   while( nLast>0 && rc==SQLITE_OK ){
45976     iFrame++;
45977     nLast--;
45978     rc = walIndexAppend(pWal, iFrame, pLast->pgno);
45979   }
45980
45981   if( rc==SQLITE_OK ){
45982     /* Update the private copy of the header. */
45983     pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16));
45984     testcase( szPage<=32768 );
45985     testcase( szPage>=65536 );
45986     pWal->hdr.mxFrame = iFrame;
45987     if( isCommit ){
45988       pWal->hdr.iChange++;
45989       pWal->hdr.nPage = nTruncate;
45990     }
45991     /* If this is a commit, update the wal-index header too. */
45992     if( isCommit ){
45993       walIndexWriteHdr(pWal);
45994       pWal->iCallback = iFrame;
45995     }
45996   }
45997
45998   WALTRACE(("WAL%p: frame write %s\n", pWal, rc ? "failed" : "ok"));
45999   return rc;
46000 }
46001
46002 /* 
46003 ** This routine is called to implement sqlite3_wal_checkpoint() and
46004 ** related interfaces.
46005 **
46006 ** Obtain a CHECKPOINT lock and then backfill as much information as
46007 ** we can from WAL into the database.
46008 **
46009 ** If parameter xBusy is not NULL, it is a pointer to a busy-handler
46010 ** callback. In this case this function runs a blocking checkpoint.
46011 */
46012 SQLITE_PRIVATE int sqlite3WalCheckpoint(
46013   Wal *pWal,                      /* Wal connection */
46014   int eMode,                      /* PASSIVE, FULL or RESTART */
46015   int (*xBusy)(void*),            /* Function to call when busy */
46016   void *pBusyArg,                 /* Context argument for xBusyHandler */
46017   int sync_flags,                 /* Flags to sync db file with (or 0) */
46018   int nBuf,                       /* Size of temporary buffer */
46019   u8 *zBuf,                       /* Temporary buffer to use */
46020   int *pnLog,                     /* OUT: Number of frames in WAL */
46021   int *pnCkpt                     /* OUT: Number of backfilled frames in WAL */
46022 ){
46023   int rc;                         /* Return code */
46024   int isChanged = 0;              /* True if a new wal-index header is loaded */
46025   int eMode2 = eMode;             /* Mode to pass to walCheckpoint() */
46026
46027   assert( pWal->ckptLock==0 );
46028   assert( pWal->writeLock==0 );
46029
46030   WALTRACE(("WAL%p: checkpoint begins\n", pWal));
46031   rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1);
46032   if( rc ){
46033     /* Usually this is SQLITE_BUSY meaning that another thread or process
46034     ** is already running a checkpoint, or maybe a recovery.  But it might
46035     ** also be SQLITE_IOERR. */
46036     return rc;
46037   }
46038   pWal->ckptLock = 1;
46039
46040   /* If this is a blocking-checkpoint, then obtain the write-lock as well
46041   ** to prevent any writers from running while the checkpoint is underway.
46042   ** This has to be done before the call to walIndexReadHdr() below.
46043   **
46044   ** If the writer lock cannot be obtained, then a passive checkpoint is
46045   ** run instead. Since the checkpointer is not holding the writer lock,
46046   ** there is no point in blocking waiting for any readers. Assuming no 
46047   ** other error occurs, this function will return SQLITE_BUSY to the caller.
46048   */
46049   if( eMode!=SQLITE_CHECKPOINT_PASSIVE ){
46050     rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_WRITE_LOCK, 1);
46051     if( rc==SQLITE_OK ){
46052       pWal->writeLock = 1;
46053     }else if( rc==SQLITE_BUSY ){
46054       eMode2 = SQLITE_CHECKPOINT_PASSIVE;
46055       rc = SQLITE_OK;
46056     }
46057   }
46058
46059   /* Read the wal-index header. */
46060   if( rc==SQLITE_OK ){
46061     rc = walIndexReadHdr(pWal, &isChanged);
46062   }
46063
46064   /* Copy data from the log to the database file. */
46065   if( rc==SQLITE_OK ){
46066     if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){
46067       rc = SQLITE_CORRUPT_BKPT;
46068     }else{
46069       rc = walCheckpoint(pWal, eMode2, xBusy, pBusyArg, sync_flags, zBuf);
46070     }
46071
46072     /* If no error occurred, set the output variables. */
46073     if( rc==SQLITE_OK || rc==SQLITE_BUSY ){
46074       if( pnLog ) *pnLog = (int)pWal->hdr.mxFrame;
46075       if( pnCkpt ) *pnCkpt = (int)(walCkptInfo(pWal)->nBackfill);
46076     }
46077   }
46078
46079   if( isChanged ){
46080     /* If a new wal-index header was loaded before the checkpoint was 
46081     ** performed, then the pager-cache associated with pWal is now
46082     ** out of date. So zero the cached wal-index header to ensure that
46083     ** next time the pager opens a snapshot on this database it knows that
46084     ** the cache needs to be reset.
46085     */
46086     memset(&pWal->hdr, 0, sizeof(WalIndexHdr));
46087   }
46088
46089   /* Release the locks. */
46090   sqlite3WalEndWriteTransaction(pWal);
46091   walUnlockExclusive(pWal, WAL_CKPT_LOCK, 1);
46092   pWal->ckptLock = 0;
46093   WALTRACE(("WAL%p: checkpoint %s\n", pWal, rc ? "failed" : "ok"));
46094   return (rc==SQLITE_OK && eMode!=eMode2 ? SQLITE_BUSY : rc);
46095 }
46096
46097 /* Return the value to pass to a sqlite3_wal_hook callback, the
46098 ** number of frames in the WAL at the point of the last commit since
46099 ** sqlite3WalCallback() was called.  If no commits have occurred since
46100 ** the last call, then return 0.
46101 */
46102 SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal){
46103   u32 ret = 0;
46104   if( pWal ){
46105     ret = pWal->iCallback;
46106     pWal->iCallback = 0;
46107   }
46108   return (int)ret;
46109 }
46110
46111 /*
46112 ** This function is called to change the WAL subsystem into or out
46113 ** of locking_mode=EXCLUSIVE.
46114 **
46115 ** If op is zero, then attempt to change from locking_mode=EXCLUSIVE
46116 ** into locking_mode=NORMAL.  This means that we must acquire a lock
46117 ** on the pWal->readLock byte.  If the WAL is already in locking_mode=NORMAL
46118 ** or if the acquisition of the lock fails, then return 0.  If the
46119 ** transition out of exclusive-mode is successful, return 1.  This
46120 ** operation must occur while the pager is still holding the exclusive
46121 ** lock on the main database file.
46122 **
46123 ** If op is one, then change from locking_mode=NORMAL into 
46124 ** locking_mode=EXCLUSIVE.  This means that the pWal->readLock must
46125 ** be released.  Return 1 if the transition is made and 0 if the
46126 ** WAL is already in exclusive-locking mode - meaning that this
46127 ** routine is a no-op.  The pager must already hold the exclusive lock
46128 ** on the main database file before invoking this operation.
46129 **
46130 ** If op is negative, then do a dry-run of the op==1 case but do
46131 ** not actually change anything. The pager uses this to see if it
46132 ** should acquire the database exclusive lock prior to invoking
46133 ** the op==1 case.
46134 */
46135 SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){
46136   int rc;
46137   assert( pWal->writeLock==0 );
46138   assert( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE || op==-1 );
46139
46140   /* pWal->readLock is usually set, but might be -1 if there was a 
46141   ** prior error while attempting to acquire are read-lock. This cannot 
46142   ** happen if the connection is actually in exclusive mode (as no xShmLock
46143   ** locks are taken in this case). Nor should the pager attempt to
46144   ** upgrade to exclusive-mode following such an error.
46145   */
46146   assert( pWal->readLock>=0 || pWal->lockError );
46147   assert( pWal->readLock>=0 || (op<=0 && pWal->exclusiveMode==0) );
46148
46149   if( op==0 ){
46150     if( pWal->exclusiveMode ){
46151       pWal->exclusiveMode = 0;
46152       if( walLockShared(pWal, WAL_READ_LOCK(pWal->readLock))!=SQLITE_OK ){
46153         pWal->exclusiveMode = 1;
46154       }
46155       rc = pWal->exclusiveMode==0;
46156     }else{
46157       /* Already in locking_mode=NORMAL */
46158       rc = 0;
46159     }
46160   }else if( op>0 ){
46161     assert( pWal->exclusiveMode==0 );
46162     assert( pWal->readLock>=0 );
46163     walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock));
46164     pWal->exclusiveMode = 1;
46165     rc = 1;
46166   }else{
46167     rc = pWal->exclusiveMode==0;
46168   }
46169   return rc;
46170 }
46171
46172 /* 
46173 ** Return true if the argument is non-NULL and the WAL module is using
46174 ** heap-memory for the wal-index. Otherwise, if the argument is NULL or the
46175 ** WAL module is using shared-memory, return false. 
46176 */
46177 SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal){
46178   return (pWal && pWal->exclusiveMode==WAL_HEAPMEMORY_MODE );
46179 }
46180
46181 #endif /* #ifndef SQLITE_OMIT_WAL */
46182
46183 /************** End of wal.c *************************************************/
46184 /************** Begin file btmutex.c *****************************************/
46185 /*
46186 ** 2007 August 27
46187 **
46188 ** The author disclaims copyright to this source code.  In place of
46189 ** a legal notice, here is a blessing:
46190 **
46191 **    May you do good and not evil.
46192 **    May you find forgiveness for yourself and forgive others.
46193 **    May you share freely, never taking more than you give.
46194 **
46195 *************************************************************************
46196 **
46197 ** This file contains code used to implement mutexes on Btree objects.
46198 ** This code really belongs in btree.c.  But btree.c is getting too
46199 ** big and we want to break it down some.  This packaged seemed like
46200 ** a good breakout.
46201 */
46202 /************** Include btreeInt.h in the middle of btmutex.c ****************/
46203 /************** Begin file btreeInt.h ****************************************/
46204 /*
46205 ** 2004 April 6
46206 **
46207 ** The author disclaims copyright to this source code.  In place of
46208 ** a legal notice, here is a blessing:
46209 **
46210 **    May you do good and not evil.
46211 **    May you find forgiveness for yourself and forgive others.
46212 **    May you share freely, never taking more than you give.
46213 **
46214 *************************************************************************
46215 ** This file implements a external (disk-based) database using BTrees.
46216 ** For a detailed discussion of BTrees, refer to
46217 **
46218 **     Donald E. Knuth, THE ART OF COMPUTER PROGRAMMING, Volume 3:
46219 **     "Sorting And Searching", pages 473-480. Addison-Wesley
46220 **     Publishing Company, Reading, Massachusetts.
46221 **
46222 ** The basic idea is that each page of the file contains N database
46223 ** entries and N+1 pointers to subpages.
46224 **
46225 **   ----------------------------------------------------------------
46226 **   |  Ptr(0) | Key(0) | Ptr(1) | Key(1) | ... | Key(N-1) | Ptr(N) |
46227 **   ----------------------------------------------------------------
46228 **
46229 ** All of the keys on the page that Ptr(0) points to have values less
46230 ** than Key(0).  All of the keys on page Ptr(1) and its subpages have
46231 ** values greater than Key(0) and less than Key(1).  All of the keys
46232 ** on Ptr(N) and its subpages have values greater than Key(N-1).  And
46233 ** so forth.
46234 **
46235 ** Finding a particular key requires reading O(log(M)) pages from the 
46236 ** disk where M is the number of entries in the tree.
46237 **
46238 ** In this implementation, a single file can hold one or more separate 
46239 ** BTrees.  Each BTree is identified by the index of its root page.  The
46240 ** key and data for any entry are combined to form the "payload".  A
46241 ** fixed amount of payload can be carried directly on the database
46242 ** page.  If the payload is larger than the preset amount then surplus
46243 ** bytes are stored on overflow pages.  The payload for an entry
46244 ** and the preceding pointer are combined to form a "Cell".  Each 
46245 ** page has a small header which contains the Ptr(N) pointer and other
46246 ** information such as the size of key and data.
46247 **
46248 ** FORMAT DETAILS
46249 **
46250 ** The file is divided into pages.  The first page is called page 1,
46251 ** the second is page 2, and so forth.  A page number of zero indicates
46252 ** "no such page".  The page size can be any power of 2 between 512 and 65536.
46253 ** Each page can be either a btree page, a freelist page, an overflow
46254 ** page, or a pointer-map page.
46255 **
46256 ** The first page is always a btree page.  The first 100 bytes of the first
46257 ** page contain a special header (the "file header") that describes the file.
46258 ** The format of the file header is as follows:
46259 **
46260 **   OFFSET   SIZE    DESCRIPTION
46261 **      0      16     Header string: "SQLite format 3\000"
46262 **     16       2     Page size in bytes.  
46263 **     18       1     File format write version
46264 **     19       1     File format read version
46265 **     20       1     Bytes of unused space at the end of each page
46266 **     21       1     Max embedded payload fraction
46267 **     22       1     Min embedded payload fraction
46268 **     23       1     Min leaf payload fraction
46269 **     24       4     File change counter
46270 **     28       4     Reserved for future use
46271 **     32       4     First freelist page
46272 **     36       4     Number of freelist pages in the file
46273 **     40      60     15 4-byte meta values passed to higher layers
46274 **
46275 **     40       4     Schema cookie
46276 **     44       4     File format of schema layer
46277 **     48       4     Size of page cache
46278 **     52       4     Largest root-page (auto/incr_vacuum)
46279 **     56       4     1=UTF-8 2=UTF16le 3=UTF16be
46280 **     60       4     User version
46281 **     64       4     Incremental vacuum mode
46282 **     68       4     unused
46283 **     72       4     unused
46284 **     76       4     unused
46285 **
46286 ** All of the integer values are big-endian (most significant byte first).
46287 **
46288 ** The file change counter is incremented when the database is changed
46289 ** This counter allows other processes to know when the file has changed
46290 ** and thus when they need to flush their cache.
46291 **
46292 ** The max embedded payload fraction is the amount of the total usable
46293 ** space in a page that can be consumed by a single cell for standard
46294 ** B-tree (non-LEAFDATA) tables.  A value of 255 means 100%.  The default
46295 ** is to limit the maximum cell size so that at least 4 cells will fit
46296 ** on one page.  Thus the default max embedded payload fraction is 64.
46297 **
46298 ** If the payload for a cell is larger than the max payload, then extra
46299 ** payload is spilled to overflow pages.  Once an overflow page is allocated,
46300 ** as many bytes as possible are moved into the overflow pages without letting
46301 ** the cell size drop below the min embedded payload fraction.
46302 **
46303 ** The min leaf payload fraction is like the min embedded payload fraction
46304 ** except that it applies to leaf nodes in a LEAFDATA tree.  The maximum
46305 ** payload fraction for a LEAFDATA tree is always 100% (or 255) and it
46306 ** not specified in the header.
46307 **
46308 ** Each btree pages is divided into three sections:  The header, the
46309 ** cell pointer array, and the cell content area.  Page 1 also has a 100-byte
46310 ** file header that occurs before the page header.
46311 **
46312 **      |----------------|
46313 **      | file header    |   100 bytes.  Page 1 only.
46314 **      |----------------|
46315 **      | page header    |   8 bytes for leaves.  12 bytes for interior nodes
46316 **      |----------------|
46317 **      | cell pointer   |   |  2 bytes per cell.  Sorted order.
46318 **      | array          |   |  Grows downward
46319 **      |                |   v
46320 **      |----------------|
46321 **      | unallocated    |
46322 **      | space          |
46323 **      |----------------|   ^  Grows upwards
46324 **      | cell content   |   |  Arbitrary order interspersed with freeblocks.
46325 **      | area           |   |  and free space fragments.
46326 **      |----------------|
46327 **
46328 ** The page headers looks like this:
46329 **
46330 **   OFFSET   SIZE     DESCRIPTION
46331 **      0       1      Flags. 1: intkey, 2: zerodata, 4: leafdata, 8: leaf
46332 **      1       2      byte offset to the first freeblock
46333 **      3       2      number of cells on this page
46334 **      5       2      first byte of the cell content area
46335 **      7       1      number of fragmented free bytes
46336 **      8       4      Right child (the Ptr(N) value).  Omitted on leaves.
46337 **
46338 ** The flags define the format of this btree page.  The leaf flag means that
46339 ** this page has no children.  The zerodata flag means that this page carries
46340 ** only keys and no data.  The intkey flag means that the key is a integer
46341 ** which is stored in the key size entry of the cell header rather than in
46342 ** the payload area.
46343 **
46344 ** The cell pointer array begins on the first byte after the page header.
46345 ** The cell pointer array contains zero or more 2-byte numbers which are
46346 ** offsets from the beginning of the page to the cell content in the cell
46347 ** content area.  The cell pointers occur in sorted order.  The system strives
46348 ** to keep free space after the last cell pointer so that new cells can
46349 ** be easily added without having to defragment the page.
46350 **
46351 ** Cell content is stored at the very end of the page and grows toward the
46352 ** beginning of the page.
46353 **
46354 ** Unused space within the cell content area is collected into a linked list of
46355 ** freeblocks.  Each freeblock is at least 4 bytes in size.  The byte offset
46356 ** to the first freeblock is given in the header.  Freeblocks occur in
46357 ** increasing order.  Because a freeblock must be at least 4 bytes in size,
46358 ** any group of 3 or fewer unused bytes in the cell content area cannot
46359 ** exist on the freeblock chain.  A group of 3 or fewer free bytes is called
46360 ** a fragment.  The total number of bytes in all fragments is recorded.
46361 ** in the page header at offset 7.
46362 **
46363 **    SIZE    DESCRIPTION
46364 **      2     Byte offset of the next freeblock
46365 **      2     Bytes in this freeblock
46366 **
46367 ** Cells are of variable length.  Cells are stored in the cell content area at
46368 ** the end of the page.  Pointers to the cells are in the cell pointer array
46369 ** that immediately follows the page header.  Cells is not necessarily
46370 ** contiguous or in order, but cell pointers are contiguous and in order.
46371 **
46372 ** Cell content makes use of variable length integers.  A variable
46373 ** length integer is 1 to 9 bytes where the lower 7 bits of each 
46374 ** byte are used.  The integer consists of all bytes that have bit 8 set and
46375 ** the first byte with bit 8 clear.  The most significant byte of the integer
46376 ** appears first.  A variable-length integer may not be more than 9 bytes long.
46377 ** As a special case, all 8 bytes of the 9th byte are used as data.  This
46378 ** allows a 64-bit integer to be encoded in 9 bytes.
46379 **
46380 **    0x00                      becomes  0x00000000
46381 **    0x7f                      becomes  0x0000007f
46382 **    0x81 0x00                 becomes  0x00000080
46383 **    0x82 0x00                 becomes  0x00000100
46384 **    0x80 0x7f                 becomes  0x0000007f
46385 **    0x8a 0x91 0xd1 0xac 0x78  becomes  0x12345678
46386 **    0x81 0x81 0x81 0x81 0x01  becomes  0x10204081
46387 **
46388 ** Variable length integers are used for rowids and to hold the number of
46389 ** bytes of key and data in a btree cell.
46390 **
46391 ** The content of a cell looks like this:
46392 **
46393 **    SIZE    DESCRIPTION
46394 **      4     Page number of the left child. Omitted if leaf flag is set.
46395 **     var    Number of bytes of data. Omitted if the zerodata flag is set.
46396 **     var    Number of bytes of key. Or the key itself if intkey flag is set.
46397 **      *     Payload
46398 **      4     First page of the overflow chain.  Omitted if no overflow
46399 **
46400 ** Overflow pages form a linked list.  Each page except the last is completely
46401 ** filled with data (pagesize - 4 bytes).  The last page can have as little
46402 ** as 1 byte of data.
46403 **
46404 **    SIZE    DESCRIPTION
46405 **      4     Page number of next overflow page
46406 **      *     Data
46407 **
46408 ** Freelist pages come in two subtypes: trunk pages and leaf pages.  The
46409 ** file header points to the first in a linked list of trunk page.  Each trunk
46410 ** page points to multiple leaf pages.  The content of a leaf page is
46411 ** unspecified.  A trunk page looks like this:
46412 **
46413 **    SIZE    DESCRIPTION
46414 **      4     Page number of next trunk page
46415 **      4     Number of leaf pointers on this page
46416 **      *     zero or more pages numbers of leaves
46417 */
46418
46419
46420 /* The following value is the maximum cell size assuming a maximum page
46421 ** size give above.
46422 */
46423 #define MX_CELL_SIZE(pBt)  ((int)(pBt->pageSize-8))
46424
46425 /* The maximum number of cells on a single page of the database.  This
46426 ** assumes a minimum cell size of 6 bytes  (4 bytes for the cell itself
46427 ** plus 2 bytes for the index to the cell in the page header).  Such
46428 ** small cells will be rare, but they are possible.
46429 */
46430 #define MX_CELL(pBt) ((pBt->pageSize-8)/6)
46431
46432 /* Forward declarations */
46433 typedef struct MemPage MemPage;
46434 typedef struct BtLock BtLock;
46435
46436 /*
46437 ** This is a magic string that appears at the beginning of every
46438 ** SQLite database in order to identify the file as a real database.
46439 **
46440 ** You can change this value at compile-time by specifying a
46441 ** -DSQLITE_FILE_HEADER="..." on the compiler command-line.  The
46442 ** header must be exactly 16 bytes including the zero-terminator so
46443 ** the string itself should be 15 characters long.  If you change
46444 ** the header, then your custom library will not be able to read 
46445 ** databases generated by the standard tools and the standard tools
46446 ** will not be able to read databases created by your custom library.
46447 */
46448 #ifndef SQLITE_FILE_HEADER /* 123456789 123456 */
46449 #  define SQLITE_FILE_HEADER "SQLite format 3"
46450 #endif
46451
46452 /*
46453 ** Page type flags.  An ORed combination of these flags appear as the
46454 ** first byte of on-disk image of every BTree page.
46455 */
46456 #define PTF_INTKEY    0x01
46457 #define PTF_ZERODATA  0x02
46458 #define PTF_LEAFDATA  0x04
46459 #define PTF_LEAF      0x08
46460
46461 /*
46462 ** As each page of the file is loaded into memory, an instance of the following
46463 ** structure is appended and initialized to zero.  This structure stores
46464 ** information about the page that is decoded from the raw file page.
46465 **
46466 ** The pParent field points back to the parent page.  This allows us to
46467 ** walk up the BTree from any leaf to the root.  Care must be taken to
46468 ** unref() the parent page pointer when this page is no longer referenced.
46469 ** The pageDestructor() routine handles that chore.
46470 **
46471 ** Access to all fields of this structure is controlled by the mutex
46472 ** stored in MemPage.pBt->mutex.
46473 */
46474 struct MemPage {
46475   u8 isInit;           /* True if previously initialized. MUST BE FIRST! */
46476   u8 nOverflow;        /* Number of overflow cell bodies in aCell[] */
46477   u8 intKey;           /* True if intkey flag is set */
46478   u8 leaf;             /* True if leaf flag is set */
46479   u8 hasData;          /* True if this page stores data */
46480   u8 hdrOffset;        /* 100 for page 1.  0 otherwise */
46481   u8 childPtrSize;     /* 0 if leaf==1.  4 if leaf==0 */
46482   u16 maxLocal;        /* Copy of BtShared.maxLocal or BtShared.maxLeaf */
46483   u16 minLocal;        /* Copy of BtShared.minLocal or BtShared.minLeaf */
46484   u16 cellOffset;      /* Index in aData of first cell pointer */
46485   u16 nFree;           /* Number of free bytes on the page */
46486   u16 nCell;           /* Number of cells on this page, local and ovfl */
46487   u16 maskPage;        /* Mask for page offset */
46488   struct _OvflCell {   /* Cells that will not fit on aData[] */
46489     u8 *pCell;          /* Pointers to the body of the overflow cell */
46490     u16 idx;            /* Insert this cell before idx-th non-overflow cell */
46491   } aOvfl[5];
46492   BtShared *pBt;       /* Pointer to BtShared that this page is part of */
46493   u8 *aData;           /* Pointer to disk image of the page data */
46494   DbPage *pDbPage;     /* Pager page handle */
46495   Pgno pgno;           /* Page number for this page */
46496 };
46497
46498 /*
46499 ** The in-memory image of a disk page has the auxiliary information appended
46500 ** to the end.  EXTRA_SIZE is the number of bytes of space needed to hold
46501 ** that extra information.
46502 */
46503 #define EXTRA_SIZE sizeof(MemPage)
46504
46505 /*
46506 ** A linked list of the following structures is stored at BtShared.pLock.
46507 ** Locks are added (or upgraded from READ_LOCK to WRITE_LOCK) when a cursor 
46508 ** is opened on the table with root page BtShared.iTable. Locks are removed
46509 ** from this list when a transaction is committed or rolled back, or when
46510 ** a btree handle is closed.
46511 */
46512 struct BtLock {
46513   Btree *pBtree;        /* Btree handle holding this lock */
46514   Pgno iTable;          /* Root page of table */
46515   u8 eLock;             /* READ_LOCK or WRITE_LOCK */
46516   BtLock *pNext;        /* Next in BtShared.pLock list */
46517 };
46518
46519 /* Candidate values for BtLock.eLock */
46520 #define READ_LOCK     1
46521 #define WRITE_LOCK    2
46522
46523 /* A Btree handle
46524 **
46525 ** A database connection contains a pointer to an instance of
46526 ** this object for every database file that it has open.  This structure
46527 ** is opaque to the database connection.  The database connection cannot
46528 ** see the internals of this structure and only deals with pointers to
46529 ** this structure.
46530 **
46531 ** For some database files, the same underlying database cache might be 
46532 ** shared between multiple connections.  In that case, each connection
46533 ** has it own instance of this object.  But each instance of this object
46534 ** points to the same BtShared object.  The database cache and the
46535 ** schema associated with the database file are all contained within
46536 ** the BtShared object.
46537 **
46538 ** All fields in this structure are accessed under sqlite3.mutex.
46539 ** The pBt pointer itself may not be changed while there exists cursors 
46540 ** in the referenced BtShared that point back to this Btree since those
46541 ** cursors have to go through this Btree to find their BtShared and
46542 ** they often do so without holding sqlite3.mutex.
46543 */
46544 struct Btree {
46545   sqlite3 *db;       /* The database connection holding this btree */
46546   BtShared *pBt;     /* Sharable content of this btree */
46547   u8 inTrans;        /* TRANS_NONE, TRANS_READ or TRANS_WRITE */
46548   u8 sharable;       /* True if we can share pBt with another db */
46549   u8 locked;         /* True if db currently has pBt locked */
46550   int wantToLock;    /* Number of nested calls to sqlite3BtreeEnter() */
46551   int nBackup;       /* Number of backup operations reading this btree */
46552   Btree *pNext;      /* List of other sharable Btrees from the same db */
46553   Btree *pPrev;      /* Back pointer of the same list */
46554 #ifndef SQLITE_OMIT_SHARED_CACHE
46555   BtLock lock;       /* Object used to lock page 1 */
46556 #endif
46557 };
46558
46559 /*
46560 ** Btree.inTrans may take one of the following values.
46561 **
46562 ** If the shared-data extension is enabled, there may be multiple users
46563 ** of the Btree structure. At most one of these may open a write transaction,
46564 ** but any number may have active read transactions.
46565 */
46566 #define TRANS_NONE  0
46567 #define TRANS_READ  1
46568 #define TRANS_WRITE 2
46569
46570 /*
46571 ** An instance of this object represents a single database file.
46572 ** 
46573 ** A single database file can be in use as the same time by two
46574 ** or more database connections.  When two or more connections are
46575 ** sharing the same database file, each connection has it own
46576 ** private Btree object for the file and each of those Btrees points
46577 ** to this one BtShared object.  BtShared.nRef is the number of
46578 ** connections currently sharing this database file.
46579 **
46580 ** Fields in this structure are accessed under the BtShared.mutex
46581 ** mutex, except for nRef and pNext which are accessed under the
46582 ** global SQLITE_MUTEX_STATIC_MASTER mutex.  The pPager field
46583 ** may not be modified once it is initially set as long as nRef>0.
46584 ** The pSchema field may be set once under BtShared.mutex and
46585 ** thereafter is unchanged as long as nRef>0.
46586 **
46587 ** isPending:
46588 **
46589 **   If a BtShared client fails to obtain a write-lock on a database
46590 **   table (because there exists one or more read-locks on the table),
46591 **   the shared-cache enters 'pending-lock' state and isPending is
46592 **   set to true.
46593 **
46594 **   The shared-cache leaves the 'pending lock' state when either of
46595 **   the following occur:
46596 **
46597 **     1) The current writer (BtShared.pWriter) concludes its transaction, OR
46598 **     2) The number of locks held by other connections drops to zero.
46599 **
46600 **   while in the 'pending-lock' state, no connection may start a new
46601 **   transaction.
46602 **
46603 **   This feature is included to help prevent writer-starvation.
46604 */
46605 struct BtShared {
46606   Pager *pPager;        /* The page cache */
46607   sqlite3 *db;          /* Database connection currently using this Btree */
46608   BtCursor *pCursor;    /* A list of all open cursors */
46609   MemPage *pPage1;      /* First page of the database */
46610   u8 readOnly;          /* True if the underlying file is readonly */
46611   u8 pageSizeFixed;     /* True if the page size can no longer be changed */
46612   u8 secureDelete;      /* True if secure_delete is enabled */
46613   u8 initiallyEmpty;    /* Database is empty at start of transaction */
46614   u8 openFlags;         /* Flags to sqlite3BtreeOpen() */
46615 #ifndef SQLITE_OMIT_AUTOVACUUM
46616   u8 autoVacuum;        /* True if auto-vacuum is enabled */
46617   u8 incrVacuum;        /* True if incr-vacuum is enabled */
46618 #endif
46619   u8 inTransaction;     /* Transaction state */
46620   u8 doNotUseWAL;       /* If true, do not open write-ahead-log file */
46621   u16 maxLocal;         /* Maximum local payload in non-LEAFDATA tables */
46622   u16 minLocal;         /* Minimum local payload in non-LEAFDATA tables */
46623   u16 maxLeaf;          /* Maximum local payload in a LEAFDATA table */
46624   u16 minLeaf;          /* Minimum local payload in a LEAFDATA table */
46625   u32 pageSize;         /* Total number of bytes on a page */
46626   u32 usableSize;       /* Number of usable bytes on each page */
46627   int nTransaction;     /* Number of open transactions (read + write) */
46628   u32 nPage;            /* Number of pages in the database */
46629   void *pSchema;        /* Pointer to space allocated by sqlite3BtreeSchema() */
46630   void (*xFreeSchema)(void*);  /* Destructor for BtShared.pSchema */
46631   sqlite3_mutex *mutex; /* Non-recursive mutex required to access this object */
46632   Bitvec *pHasContent;  /* Set of pages moved to free-list this transaction */
46633 #ifndef SQLITE_OMIT_SHARED_CACHE
46634   int nRef;             /* Number of references to this structure */
46635   BtShared *pNext;      /* Next on a list of sharable BtShared structs */
46636   BtLock *pLock;        /* List of locks held on this shared-btree struct */
46637   Btree *pWriter;       /* Btree with currently open write transaction */
46638   u8 isExclusive;       /* True if pWriter has an EXCLUSIVE lock on the db */
46639   u8 isPending;         /* If waiting for read-locks to clear */
46640 #endif
46641   u8 *pTmpSpace;        /* BtShared.pageSize bytes of space for tmp use */
46642 };
46643
46644 /*
46645 ** An instance of the following structure is used to hold information
46646 ** about a cell.  The parseCellPtr() function fills in this structure
46647 ** based on information extract from the raw disk page.
46648 */
46649 typedef struct CellInfo CellInfo;
46650 struct CellInfo {
46651   i64 nKey;      /* The key for INTKEY tables, or number of bytes in key */
46652   u8 *pCell;     /* Pointer to the start of cell content */
46653   u32 nData;     /* Number of bytes of data */
46654   u32 nPayload;  /* Total amount of payload */
46655   u16 nHeader;   /* Size of the cell content header in bytes */
46656   u16 nLocal;    /* Amount of payload held locally */
46657   u16 iOverflow; /* Offset to overflow page number.  Zero if no overflow */
46658   u16 nSize;     /* Size of the cell content on the main b-tree page */
46659 };
46660
46661 /*
46662 ** Maximum depth of an SQLite B-Tree structure. Any B-Tree deeper than
46663 ** this will be declared corrupt. This value is calculated based on a
46664 ** maximum database size of 2^31 pages a minimum fanout of 2 for a
46665 ** root-node and 3 for all other internal nodes.
46666 **
46667 ** If a tree that appears to be taller than this is encountered, it is
46668 ** assumed that the database is corrupt.
46669 */
46670 #define BTCURSOR_MAX_DEPTH 20
46671
46672 /*
46673 ** A cursor is a pointer to a particular entry within a particular
46674 ** b-tree within a database file.
46675 **
46676 ** The entry is identified by its MemPage and the index in
46677 ** MemPage.aCell[] of the entry.
46678 **
46679 ** A single database file can shared by two more database connections,
46680 ** but cursors cannot be shared.  Each cursor is associated with a
46681 ** particular database connection identified BtCursor.pBtree.db.
46682 **
46683 ** Fields in this structure are accessed under the BtShared.mutex
46684 ** found at self->pBt->mutex. 
46685 */
46686 struct BtCursor {
46687   Btree *pBtree;            /* The Btree to which this cursor belongs */
46688   BtShared *pBt;            /* The BtShared this cursor points to */
46689   BtCursor *pNext, *pPrev;  /* Forms a linked list of all cursors */
46690   struct KeyInfo *pKeyInfo; /* Argument passed to comparison function */
46691   Pgno pgnoRoot;            /* The root page of this tree */
46692   sqlite3_int64 cachedRowid; /* Next rowid cache.  0 means not valid */
46693   CellInfo info;            /* A parse of the cell we are pointing at */
46694   i64 nKey;        /* Size of pKey, or last integer key */
46695   void *pKey;      /* Saved key that was cursor's last known position */
46696   int skipNext;    /* Prev() is noop if negative. Next() is noop if positive */
46697   u8 wrFlag;                /* True if writable */
46698   u8 atLast;                /* Cursor pointing to the last entry */
46699   u8 validNKey;             /* True if info.nKey is valid */
46700   u8 eState;                /* One of the CURSOR_XXX constants (see below) */
46701 #ifndef SQLITE_OMIT_INCRBLOB
46702   Pgno *aOverflow;          /* Cache of overflow page locations */
46703   u8 isIncrblobHandle;      /* True if this cursor is an incr. io handle */
46704 #endif
46705   i16 iPage;                            /* Index of current page in apPage */
46706   u16 aiIdx[BTCURSOR_MAX_DEPTH];        /* Current index in apPage[i] */
46707   MemPage *apPage[BTCURSOR_MAX_DEPTH];  /* Pages from root to current page */
46708 };
46709
46710 /*
46711 ** Potential values for BtCursor.eState.
46712 **
46713 ** CURSOR_VALID:
46714 **   Cursor points to a valid entry. getPayload() etc. may be called.
46715 **
46716 ** CURSOR_INVALID:
46717 **   Cursor does not point to a valid entry. This can happen (for example) 
46718 **   because the table is empty or because BtreeCursorFirst() has not been
46719 **   called.
46720 **
46721 ** CURSOR_REQUIRESEEK:
46722 **   The table that this cursor was opened on still exists, but has been 
46723 **   modified since the cursor was last used. The cursor position is saved
46724 **   in variables BtCursor.pKey and BtCursor.nKey. When a cursor is in 
46725 **   this state, restoreCursorPosition() can be called to attempt to
46726 **   seek the cursor to the saved position.
46727 **
46728 ** CURSOR_FAULT:
46729 **   A unrecoverable error (an I/O error or a malloc failure) has occurred
46730 **   on a different connection that shares the BtShared cache with this
46731 **   cursor.  The error has left the cache in an inconsistent state.
46732 **   Do nothing else with this cursor.  Any attempt to use the cursor
46733 **   should return the error code stored in BtCursor.skip
46734 */
46735 #define CURSOR_INVALID           0
46736 #define CURSOR_VALID             1
46737 #define CURSOR_REQUIRESEEK       2
46738 #define CURSOR_FAULT             3
46739
46740 /* 
46741 ** The database page the PENDING_BYTE occupies. This page is never used.
46742 */
46743 # define PENDING_BYTE_PAGE(pBt) PAGER_MJ_PGNO(pBt)
46744
46745 /*
46746 ** These macros define the location of the pointer-map entry for a 
46747 ** database page. The first argument to each is the number of usable
46748 ** bytes on each page of the database (often 1024). The second is the
46749 ** page number to look up in the pointer map.
46750 **
46751 ** PTRMAP_PAGENO returns the database page number of the pointer-map
46752 ** page that stores the required pointer. PTRMAP_PTROFFSET returns
46753 ** the offset of the requested map entry.
46754 **
46755 ** If the pgno argument passed to PTRMAP_PAGENO is a pointer-map page,
46756 ** then pgno is returned. So (pgno==PTRMAP_PAGENO(pgsz, pgno)) can be
46757 ** used to test if pgno is a pointer-map page. PTRMAP_ISPAGE implements
46758 ** this test.
46759 */
46760 #define PTRMAP_PAGENO(pBt, pgno) ptrmapPageno(pBt, pgno)
46761 #define PTRMAP_PTROFFSET(pgptrmap, pgno) (5*(pgno-pgptrmap-1))
46762 #define PTRMAP_ISPAGE(pBt, pgno) (PTRMAP_PAGENO((pBt),(pgno))==(pgno))
46763
46764 /*
46765 ** The pointer map is a lookup table that identifies the parent page for
46766 ** each child page in the database file.  The parent page is the page that
46767 ** contains a pointer to the child.  Every page in the database contains
46768 ** 0 or 1 parent pages.  (In this context 'database page' refers
46769 ** to any page that is not part of the pointer map itself.)  Each pointer map
46770 ** entry consists of a single byte 'type' and a 4 byte parent page number.
46771 ** The PTRMAP_XXX identifiers below are the valid types.
46772 **
46773 ** The purpose of the pointer map is to facility moving pages from one
46774 ** position in the file to another as part of autovacuum.  When a page
46775 ** is moved, the pointer in its parent must be updated to point to the
46776 ** new location.  The pointer map is used to locate the parent page quickly.
46777 **
46778 ** PTRMAP_ROOTPAGE: The database page is a root-page. The page-number is not
46779 **                  used in this case.
46780 **
46781 ** PTRMAP_FREEPAGE: The database page is an unused (free) page. The page-number 
46782 **                  is not used in this case.
46783 **
46784 ** PTRMAP_OVERFLOW1: The database page is the first page in a list of 
46785 **                   overflow pages. The page number identifies the page that
46786 **                   contains the cell with a pointer to this overflow page.
46787 **
46788 ** PTRMAP_OVERFLOW2: The database page is the second or later page in a list of
46789 **                   overflow pages. The page-number identifies the previous
46790 **                   page in the overflow page list.
46791 **
46792 ** PTRMAP_BTREE: The database page is a non-root btree page. The page number
46793 **               identifies the parent page in the btree.
46794 */
46795 #define PTRMAP_ROOTPAGE 1
46796 #define PTRMAP_FREEPAGE 2
46797 #define PTRMAP_OVERFLOW1 3
46798 #define PTRMAP_OVERFLOW2 4
46799 #define PTRMAP_BTREE 5
46800
46801 /* A bunch of assert() statements to check the transaction state variables
46802 ** of handle p (type Btree*) are internally consistent.
46803 */
46804 #define btreeIntegrity(p) \
46805   assert( p->pBt->inTransaction!=TRANS_NONE || p->pBt->nTransaction==0 ); \
46806   assert( p->pBt->inTransaction>=p->inTrans ); 
46807
46808
46809 /*
46810 ** The ISAUTOVACUUM macro is used within balance_nonroot() to determine
46811 ** if the database supports auto-vacuum or not. Because it is used
46812 ** within an expression that is an argument to another macro 
46813 ** (sqliteMallocRaw), it is not possible to use conditional compilation.
46814 ** So, this macro is defined instead.
46815 */
46816 #ifndef SQLITE_OMIT_AUTOVACUUM
46817 #define ISAUTOVACUUM (pBt->autoVacuum)
46818 #else
46819 #define ISAUTOVACUUM 0
46820 #endif
46821
46822
46823 /*
46824 ** This structure is passed around through all the sanity checking routines
46825 ** in order to keep track of some global state information.
46826 */
46827 typedef struct IntegrityCk IntegrityCk;
46828 struct IntegrityCk {
46829   BtShared *pBt;    /* The tree being checked out */
46830   Pager *pPager;    /* The associated pager.  Also accessible by pBt->pPager */
46831   Pgno nPage;       /* Number of pages in the database */
46832   int *anRef;       /* Number of times each page is referenced */
46833   int mxErr;        /* Stop accumulating errors when this reaches zero */
46834   int nErr;         /* Number of messages written to zErrMsg so far */
46835   int mallocFailed; /* A memory allocation error has occurred */
46836   StrAccum errMsg;  /* Accumulate the error message text here */
46837 };
46838
46839 /*
46840 ** Read or write a two- and four-byte big-endian integer values.
46841 */
46842 #define get2byte(x)   ((x)[0]<<8 | (x)[1])
46843 #define put2byte(p,v) ((p)[0] = (u8)((v)>>8), (p)[1] = (u8)(v))
46844 #define get4byte sqlite3Get4byte
46845 #define put4byte sqlite3Put4byte
46846
46847 /************** End of btreeInt.h ********************************************/
46848 /************** Continuing where we left off in btmutex.c ********************/
46849 #ifndef SQLITE_OMIT_SHARED_CACHE
46850 #if SQLITE_THREADSAFE
46851
46852 /*
46853 ** Obtain the BtShared mutex associated with B-Tree handle p. Also,
46854 ** set BtShared.db to the database handle associated with p and the
46855 ** p->locked boolean to true.
46856 */
46857 static void lockBtreeMutex(Btree *p){
46858   assert( p->locked==0 );
46859   assert( sqlite3_mutex_notheld(p->pBt->mutex) );
46860   assert( sqlite3_mutex_held(p->db->mutex) );
46861
46862   sqlite3_mutex_enter(p->pBt->mutex);
46863   p->pBt->db = p->db;
46864   p->locked = 1;
46865 }
46866
46867 /*
46868 ** Release the BtShared mutex associated with B-Tree handle p and
46869 ** clear the p->locked boolean.
46870 */
46871 static void unlockBtreeMutex(Btree *p){
46872   BtShared *pBt = p->pBt;
46873   assert( p->locked==1 );
46874   assert( sqlite3_mutex_held(pBt->mutex) );
46875   assert( sqlite3_mutex_held(p->db->mutex) );
46876   assert( p->db==pBt->db );
46877
46878   sqlite3_mutex_leave(pBt->mutex);
46879   p->locked = 0;
46880 }
46881
46882 /*
46883 ** Enter a mutex on the given BTree object.
46884 **
46885 ** If the object is not sharable, then no mutex is ever required
46886 ** and this routine is a no-op.  The underlying mutex is non-recursive.
46887 ** But we keep a reference count in Btree.wantToLock so the behavior
46888 ** of this interface is recursive.
46889 **
46890 ** To avoid deadlocks, multiple Btrees are locked in the same order
46891 ** by all database connections.  The p->pNext is a list of other
46892 ** Btrees belonging to the same database connection as the p Btree
46893 ** which need to be locked after p.  If we cannot get a lock on
46894 ** p, then first unlock all of the others on p->pNext, then wait
46895 ** for the lock to become available on p, then relock all of the
46896 ** subsequent Btrees that desire a lock.
46897 */
46898 SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
46899   Btree *pLater;
46900
46901   /* Some basic sanity checking on the Btree.  The list of Btrees
46902   ** connected by pNext and pPrev should be in sorted order by
46903   ** Btree.pBt value. All elements of the list should belong to
46904   ** the same connection. Only shared Btrees are on the list. */
46905   assert( p->pNext==0 || p->pNext->pBt>p->pBt );
46906   assert( p->pPrev==0 || p->pPrev->pBt<p->pBt );
46907   assert( p->pNext==0 || p->pNext->db==p->db );
46908   assert( p->pPrev==0 || p->pPrev->db==p->db );
46909   assert( p->sharable || (p->pNext==0 && p->pPrev==0) );
46910
46911   /* Check for locking consistency */
46912   assert( !p->locked || p->wantToLock>0 );
46913   assert( p->sharable || p->wantToLock==0 );
46914
46915   /* We should already hold a lock on the database connection */
46916   assert( sqlite3_mutex_held(p->db->mutex) );
46917
46918   /* Unless the database is sharable and unlocked, then BtShared.db
46919   ** should already be set correctly. */
46920   assert( (p->locked==0 && p->sharable) || p->pBt->db==p->db );
46921
46922   if( !p->sharable ) return;
46923   p->wantToLock++;
46924   if( p->locked ) return;
46925
46926   /* In most cases, we should be able to acquire the lock we
46927   ** want without having to go throught the ascending lock
46928   ** procedure that follows.  Just be sure not to block.
46929   */
46930   if( sqlite3_mutex_try(p->pBt->mutex)==SQLITE_OK ){
46931     p->pBt->db = p->db;
46932     p->locked = 1;
46933     return;
46934   }
46935
46936   /* To avoid deadlock, first release all locks with a larger
46937   ** BtShared address.  Then acquire our lock.  Then reacquire
46938   ** the other BtShared locks that we used to hold in ascending
46939   ** order.
46940   */
46941   for(pLater=p->pNext; pLater; pLater=pLater->pNext){
46942     assert( pLater->sharable );
46943     assert( pLater->pNext==0 || pLater->pNext->pBt>pLater->pBt );
46944     assert( !pLater->locked || pLater->wantToLock>0 );
46945     if( pLater->locked ){
46946       unlockBtreeMutex(pLater);
46947     }
46948   }
46949   lockBtreeMutex(p);
46950   for(pLater=p->pNext; pLater; pLater=pLater->pNext){
46951     if( pLater->wantToLock ){
46952       lockBtreeMutex(pLater);
46953     }
46954   }
46955 }
46956
46957 /*
46958 ** Exit the recursive mutex on a Btree.
46959 */
46960 SQLITE_PRIVATE void sqlite3BtreeLeave(Btree *p){
46961   if( p->sharable ){
46962     assert( p->wantToLock>0 );
46963     p->wantToLock--;
46964     if( p->wantToLock==0 ){
46965       unlockBtreeMutex(p);
46966     }
46967   }
46968 }
46969
46970 #ifndef NDEBUG
46971 /*
46972 ** Return true if the BtShared mutex is held on the btree, or if the
46973 ** B-Tree is not marked as sharable.
46974 **
46975 ** This routine is used only from within assert() statements.
46976 */
46977 SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree *p){
46978   assert( p->sharable==0 || p->locked==0 || p->wantToLock>0 );
46979   assert( p->sharable==0 || p->locked==0 || p->db==p->pBt->db );
46980   assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->pBt->mutex) );
46981   assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->db->mutex) );
46982
46983   return (p->sharable==0 || p->locked);
46984 }
46985 #endif
46986
46987
46988 #ifndef SQLITE_OMIT_INCRBLOB
46989 /*
46990 ** Enter and leave a mutex on a Btree given a cursor owned by that
46991 ** Btree.  These entry points are used by incremental I/O and can be
46992 ** omitted if that module is not used.
46993 */
46994 SQLITE_PRIVATE void sqlite3BtreeEnterCursor(BtCursor *pCur){
46995   sqlite3BtreeEnter(pCur->pBtree);
46996 }
46997 SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor *pCur){
46998   sqlite3BtreeLeave(pCur->pBtree);
46999 }
47000 #endif /* SQLITE_OMIT_INCRBLOB */
47001
47002
47003 /*
47004 ** Enter the mutex on every Btree associated with a database
47005 ** connection.  This is needed (for example) prior to parsing
47006 ** a statement since we will be comparing table and column names
47007 ** against all schemas and we do not want those schemas being
47008 ** reset out from under us.
47009 **
47010 ** There is a corresponding leave-all procedures.
47011 **
47012 ** Enter the mutexes in accending order by BtShared pointer address
47013 ** to avoid the possibility of deadlock when two threads with
47014 ** two or more btrees in common both try to lock all their btrees
47015 ** at the same instant.
47016 */
47017 SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){
47018   int i;
47019   Btree *p;
47020   assert( sqlite3_mutex_held(db->mutex) );
47021   for(i=0; i<db->nDb; i++){
47022     p = db->aDb[i].pBt;
47023     if( p ) sqlite3BtreeEnter(p);
47024   }
47025 }
47026 SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3 *db){
47027   int i;
47028   Btree *p;
47029   assert( sqlite3_mutex_held(db->mutex) );
47030   for(i=0; i<db->nDb; i++){
47031     p = db->aDb[i].pBt;
47032     if( p ) sqlite3BtreeLeave(p);
47033   }
47034 }
47035
47036 /*
47037 ** Return true if a particular Btree requires a lock.  Return FALSE if
47038 ** no lock is ever required since it is not sharable.
47039 */
47040 SQLITE_PRIVATE int sqlite3BtreeSharable(Btree *p){
47041   return p->sharable;
47042 }
47043
47044 #ifndef NDEBUG
47045 /*
47046 ** Return true if the current thread holds the database connection
47047 ** mutex and all required BtShared mutexes.
47048 **
47049 ** This routine is used inside assert() statements only.
47050 */
47051 SQLITE_PRIVATE int sqlite3BtreeHoldsAllMutexes(sqlite3 *db){
47052   int i;
47053   if( !sqlite3_mutex_held(db->mutex) ){
47054     return 0;
47055   }
47056   for(i=0; i<db->nDb; i++){
47057     Btree *p;
47058     p = db->aDb[i].pBt;
47059     if( p && p->sharable &&
47060          (p->wantToLock==0 || !sqlite3_mutex_held(p->pBt->mutex)) ){
47061       return 0;
47062     }
47063   }
47064   return 1;
47065 }
47066 #endif /* NDEBUG */
47067
47068 #ifndef NDEBUG
47069 /*
47070 ** Return true if the correct mutexes are held for accessing the
47071 ** db->aDb[iDb].pSchema structure.  The mutexes required for schema
47072 ** access are:
47073 **
47074 **   (1) The mutex on db
47075 **   (2) if iDb!=1, then the mutex on db->aDb[iDb].pBt.
47076 **
47077 ** If pSchema is not NULL, then iDb is computed from pSchema and
47078 ** db using sqlite3SchemaToIndex().
47079 */
47080 SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){
47081   Btree *p;
47082   assert( db!=0 );
47083   if( pSchema ) iDb = sqlite3SchemaToIndex(db, pSchema);
47084   assert( iDb>=0 && iDb<db->nDb );
47085   if( !sqlite3_mutex_held(db->mutex) ) return 0;
47086   if( iDb==1 ) return 1;
47087   p = db->aDb[iDb].pBt;
47088   assert( p!=0 );
47089   return p->sharable==0 || p->locked==1;
47090 }
47091 #endif /* NDEBUG */
47092
47093 #else /* SQLITE_THREADSAFE>0 above.  SQLITE_THREADSAFE==0 below */
47094 /*
47095 ** The following are special cases for mutex enter routines for use
47096 ** in single threaded applications that use shared cache.  Except for
47097 ** these two routines, all mutex operations are no-ops in that case and
47098 ** are null #defines in btree.h.
47099 **
47100 ** If shared cache is disabled, then all btree mutex routines, including
47101 ** the ones below, are no-ops and are null #defines in btree.h.
47102 */
47103
47104 SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
47105   p->pBt->db = p->db;
47106 }
47107 SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){
47108   int i;
47109   for(i=0; i<db->nDb; i++){
47110     Btree *p = db->aDb[i].pBt;
47111     if( p ){
47112       p->pBt->db = p->db;
47113     }
47114   }
47115 }
47116 #endif /* if SQLITE_THREADSAFE */
47117 #endif /* ifndef SQLITE_OMIT_SHARED_CACHE */
47118
47119 /************** End of btmutex.c *********************************************/
47120 /************** Begin file btree.c *******************************************/
47121 /*
47122 ** 2004 April 6
47123 **
47124 ** The author disclaims copyright to this source code.  In place of
47125 ** a legal notice, here is a blessing:
47126 **
47127 **    May you do good and not evil.
47128 **    May you find forgiveness for yourself and forgive others.
47129 **    May you share freely, never taking more than you give.
47130 **
47131 *************************************************************************
47132 ** This file implements a external (disk-based) database using BTrees.
47133 ** See the header comment on "btreeInt.h" for additional information.
47134 ** Including a description of file format and an overview of operation.
47135 */
47136
47137 /*
47138 ** The header string that appears at the beginning of every
47139 ** SQLite database.
47140 */
47141 static const char zMagicHeader[] = SQLITE_FILE_HEADER;
47142
47143 /*
47144 ** Set this global variable to 1 to enable tracing using the TRACE
47145 ** macro.
47146 */
47147 #if 0
47148 int sqlite3BtreeTrace=1;  /* True to enable tracing */
47149 # define TRACE(X)  if(sqlite3BtreeTrace){printf X;fflush(stdout);}
47150 #else
47151 # define TRACE(X)
47152 #endif
47153
47154 /*
47155 ** Extract a 2-byte big-endian integer from an array of unsigned bytes.
47156 ** But if the value is zero, make it 65536.
47157 **
47158 ** This routine is used to extract the "offset to cell content area" value
47159 ** from the header of a btree page.  If the page size is 65536 and the page
47160 ** is empty, the offset should be 65536, but the 2-byte value stores zero.
47161 ** This routine makes the necessary adjustment to 65536.
47162 */
47163 #define get2byteNotZero(X)  (((((int)get2byte(X))-1)&0xffff)+1)
47164
47165 #ifndef SQLITE_OMIT_SHARED_CACHE
47166 /*
47167 ** A list of BtShared objects that are eligible for participation
47168 ** in shared cache.  This variable has file scope during normal builds,
47169 ** but the test harness needs to access it so we make it global for 
47170 ** test builds.
47171 **
47172 ** Access to this variable is protected by SQLITE_MUTEX_STATIC_MASTER.
47173 */
47174 #ifdef SQLITE_TEST
47175 SQLITE_PRIVATE BtShared *SQLITE_WSD sqlite3SharedCacheList = 0;
47176 #else
47177 static BtShared *SQLITE_WSD sqlite3SharedCacheList = 0;
47178 #endif
47179 #endif /* SQLITE_OMIT_SHARED_CACHE */
47180
47181 #ifndef SQLITE_OMIT_SHARED_CACHE
47182 /*
47183 ** Enable or disable the shared pager and schema features.
47184 **
47185 ** This routine has no effect on existing database connections.
47186 ** The shared cache setting effects only future calls to
47187 ** sqlite3_open(), sqlite3_open16(), or sqlite3_open_v2().
47188 */
47189 SQLITE_API int sqlite3_enable_shared_cache(int enable){
47190   sqlite3GlobalConfig.sharedCacheEnabled = enable;
47191   return SQLITE_OK;
47192 }
47193 #endif
47194
47195
47196
47197 #ifdef SQLITE_OMIT_SHARED_CACHE
47198   /*
47199   ** The functions querySharedCacheTableLock(), setSharedCacheTableLock(),
47200   ** and clearAllSharedCacheTableLocks()
47201   ** manipulate entries in the BtShared.pLock linked list used to store
47202   ** shared-cache table level locks. If the library is compiled with the
47203   ** shared-cache feature disabled, then there is only ever one user
47204   ** of each BtShared structure and so this locking is not necessary. 
47205   ** So define the lock related functions as no-ops.
47206   */
47207   #define querySharedCacheTableLock(a,b,c) SQLITE_OK
47208   #define setSharedCacheTableLock(a,b,c) SQLITE_OK
47209   #define clearAllSharedCacheTableLocks(a)
47210   #define downgradeAllSharedCacheTableLocks(a)
47211   #define hasSharedCacheTableLock(a,b,c,d) 1
47212   #define hasReadConflicts(a, b) 0
47213 #endif
47214
47215 #ifndef SQLITE_OMIT_SHARED_CACHE
47216
47217 #ifdef SQLITE_DEBUG
47218 /*
47219 **** This function is only used as part of an assert() statement. ***
47220 **
47221 ** Check to see if pBtree holds the required locks to read or write to the 
47222 ** table with root page iRoot.   Return 1 if it does and 0 if not.
47223 **
47224 ** For example, when writing to a table with root-page iRoot via 
47225 ** Btree connection pBtree:
47226 **
47227 **    assert( hasSharedCacheTableLock(pBtree, iRoot, 0, WRITE_LOCK) );
47228 **
47229 ** When writing to an index that resides in a sharable database, the 
47230 ** caller should have first obtained a lock specifying the root page of
47231 ** the corresponding table. This makes things a bit more complicated,
47232 ** as this module treats each table as a separate structure. To determine
47233 ** the table corresponding to the index being written, this
47234 ** function has to search through the database schema.
47235 **
47236 ** Instead of a lock on the table/index rooted at page iRoot, the caller may
47237 ** hold a write-lock on the schema table (root page 1). This is also
47238 ** acceptable.
47239 */
47240 static int hasSharedCacheTableLock(
47241   Btree *pBtree,         /* Handle that must hold lock */
47242   Pgno iRoot,            /* Root page of b-tree */
47243   int isIndex,           /* True if iRoot is the root of an index b-tree */
47244   int eLockType          /* Required lock type (READ_LOCK or WRITE_LOCK) */
47245 ){
47246   Schema *pSchema = (Schema *)pBtree->pBt->pSchema;
47247   Pgno iTab = 0;
47248   BtLock *pLock;
47249
47250   /* If this database is not shareable, or if the client is reading
47251   ** and has the read-uncommitted flag set, then no lock is required. 
47252   ** Return true immediately.
47253   */
47254   if( (pBtree->sharable==0)
47255    || (eLockType==READ_LOCK && (pBtree->db->flags & SQLITE_ReadUncommitted))
47256   ){
47257     return 1;
47258   }
47259
47260   /* If the client is reading  or writing an index and the schema is
47261   ** not loaded, then it is too difficult to actually check to see if
47262   ** the correct locks are held.  So do not bother - just return true.
47263   ** This case does not come up very often anyhow.
47264   */
47265   if( isIndex && (!pSchema || (pSchema->flags&DB_SchemaLoaded)==0) ){
47266     return 1;
47267   }
47268
47269   /* Figure out the root-page that the lock should be held on. For table
47270   ** b-trees, this is just the root page of the b-tree being read or
47271   ** written. For index b-trees, it is the root page of the associated
47272   ** table.  */
47273   if( isIndex ){
47274     HashElem *p;
47275     for(p=sqliteHashFirst(&pSchema->idxHash); p; p=sqliteHashNext(p)){
47276       Index *pIdx = (Index *)sqliteHashData(p);
47277       if( pIdx->tnum==(int)iRoot ){
47278         iTab = pIdx->pTable->tnum;
47279       }
47280     }
47281   }else{
47282     iTab = iRoot;
47283   }
47284
47285   /* Search for the required lock. Either a write-lock on root-page iTab, a 
47286   ** write-lock on the schema table, or (if the client is reading) a
47287   ** read-lock on iTab will suffice. Return 1 if any of these are found.  */
47288   for(pLock=pBtree->pBt->pLock; pLock; pLock=pLock->pNext){
47289     if( pLock->pBtree==pBtree 
47290      && (pLock->iTable==iTab || (pLock->eLock==WRITE_LOCK && pLock->iTable==1))
47291      && pLock->eLock>=eLockType 
47292     ){
47293       return 1;
47294     }
47295   }
47296
47297   /* Failed to find the required lock. */
47298   return 0;
47299 }
47300 #endif /* SQLITE_DEBUG */
47301
47302 #ifdef SQLITE_DEBUG
47303 /*
47304 **** This function may be used as part of assert() statements only. ****
47305 **
47306 ** Return true if it would be illegal for pBtree to write into the
47307 ** table or index rooted at iRoot because other shared connections are
47308 ** simultaneously reading that same table or index.
47309 **
47310 ** It is illegal for pBtree to write if some other Btree object that
47311 ** shares the same BtShared object is currently reading or writing
47312 ** the iRoot table.  Except, if the other Btree object has the
47313 ** read-uncommitted flag set, then it is OK for the other object to
47314 ** have a read cursor.
47315 **
47316 ** For example, before writing to any part of the table or index
47317 ** rooted at page iRoot, one should call:
47318 **
47319 **    assert( !hasReadConflicts(pBtree, iRoot) );
47320 */
47321 static int hasReadConflicts(Btree *pBtree, Pgno iRoot){
47322   BtCursor *p;
47323   for(p=pBtree->pBt->pCursor; p; p=p->pNext){
47324     if( p->pgnoRoot==iRoot 
47325      && p->pBtree!=pBtree
47326      && 0==(p->pBtree->db->flags & SQLITE_ReadUncommitted)
47327     ){
47328       return 1;
47329     }
47330   }
47331   return 0;
47332 }
47333 #endif    /* #ifdef SQLITE_DEBUG */
47334
47335 /*
47336 ** Query to see if Btree handle p may obtain a lock of type eLock 
47337 ** (READ_LOCK or WRITE_LOCK) on the table with root-page iTab. Return
47338 ** SQLITE_OK if the lock may be obtained (by calling
47339 ** setSharedCacheTableLock()), or SQLITE_LOCKED if not.
47340 */
47341 static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){
47342   BtShared *pBt = p->pBt;
47343   BtLock *pIter;
47344
47345   assert( sqlite3BtreeHoldsMutex(p) );
47346   assert( eLock==READ_LOCK || eLock==WRITE_LOCK );
47347   assert( p->db!=0 );
47348   assert( !(p->db->flags&SQLITE_ReadUncommitted)||eLock==WRITE_LOCK||iTab==1 );
47349   
47350   /* If requesting a write-lock, then the Btree must have an open write
47351   ** transaction on this file. And, obviously, for this to be so there 
47352   ** must be an open write transaction on the file itself.
47353   */
47354   assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) );
47355   assert( eLock==READ_LOCK || pBt->inTransaction==TRANS_WRITE );
47356   
47357   /* This routine is a no-op if the shared-cache is not enabled */
47358   if( !p->sharable ){
47359     return SQLITE_OK;
47360   }
47361
47362   /* If some other connection is holding an exclusive lock, the
47363   ** requested lock may not be obtained.
47364   */
47365   if( pBt->pWriter!=p && pBt->isExclusive ){
47366     sqlite3ConnectionBlocked(p->db, pBt->pWriter->db);
47367     return SQLITE_LOCKED_SHAREDCACHE;
47368   }
47369
47370   for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
47371     /* The condition (pIter->eLock!=eLock) in the following if(...) 
47372     ** statement is a simplification of:
47373     **
47374     **   (eLock==WRITE_LOCK || pIter->eLock==WRITE_LOCK)
47375     **
47376     ** since we know that if eLock==WRITE_LOCK, then no other connection
47377     ** may hold a WRITE_LOCK on any table in this file (since there can
47378     ** only be a single writer).
47379     */
47380     assert( pIter->eLock==READ_LOCK || pIter->eLock==WRITE_LOCK );
47381     assert( eLock==READ_LOCK || pIter->pBtree==p || pIter->eLock==READ_LOCK);
47382     if( pIter->pBtree!=p && pIter->iTable==iTab && pIter->eLock!=eLock ){
47383       sqlite3ConnectionBlocked(p->db, pIter->pBtree->db);
47384       if( eLock==WRITE_LOCK ){
47385         assert( p==pBt->pWriter );
47386         pBt->isPending = 1;
47387       }
47388       return SQLITE_LOCKED_SHAREDCACHE;
47389     }
47390   }
47391   return SQLITE_OK;
47392 }
47393 #endif /* !SQLITE_OMIT_SHARED_CACHE */
47394
47395 #ifndef SQLITE_OMIT_SHARED_CACHE
47396 /*
47397 ** Add a lock on the table with root-page iTable to the shared-btree used
47398 ** by Btree handle p. Parameter eLock must be either READ_LOCK or 
47399 ** WRITE_LOCK.
47400 **
47401 ** This function assumes the following:
47402 **
47403 **   (a) The specified Btree object p is connected to a sharable
47404 **       database (one with the BtShared.sharable flag set), and
47405 **
47406 **   (b) No other Btree objects hold a lock that conflicts
47407 **       with the requested lock (i.e. querySharedCacheTableLock() has
47408 **       already been called and returned SQLITE_OK).
47409 **
47410 ** SQLITE_OK is returned if the lock is added successfully. SQLITE_NOMEM 
47411 ** is returned if a malloc attempt fails.
47412 */
47413 static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){
47414   BtShared *pBt = p->pBt;
47415   BtLock *pLock = 0;
47416   BtLock *pIter;
47417
47418   assert( sqlite3BtreeHoldsMutex(p) );
47419   assert( eLock==READ_LOCK || eLock==WRITE_LOCK );
47420   assert( p->db!=0 );
47421
47422   /* A connection with the read-uncommitted flag set will never try to
47423   ** obtain a read-lock using this function. The only read-lock obtained
47424   ** by a connection in read-uncommitted mode is on the sqlite_master 
47425   ** table, and that lock is obtained in BtreeBeginTrans().  */
47426   assert( 0==(p->db->flags&SQLITE_ReadUncommitted) || eLock==WRITE_LOCK );
47427
47428   /* This function should only be called on a sharable b-tree after it 
47429   ** has been determined that no other b-tree holds a conflicting lock.  */
47430   assert( p->sharable );
47431   assert( SQLITE_OK==querySharedCacheTableLock(p, iTable, eLock) );
47432
47433   /* First search the list for an existing lock on this table. */
47434   for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
47435     if( pIter->iTable==iTable && pIter->pBtree==p ){
47436       pLock = pIter;
47437       break;
47438     }
47439   }
47440
47441   /* If the above search did not find a BtLock struct associating Btree p
47442   ** with table iTable, allocate one and link it into the list.
47443   */
47444   if( !pLock ){
47445     pLock = (BtLock *)sqlite3MallocZero(sizeof(BtLock));
47446     if( !pLock ){
47447       return SQLITE_NOMEM;
47448     }
47449     pLock->iTable = iTable;
47450     pLock->pBtree = p;
47451     pLock->pNext = pBt->pLock;
47452     pBt->pLock = pLock;
47453   }
47454
47455   /* Set the BtLock.eLock variable to the maximum of the current lock
47456   ** and the requested lock. This means if a write-lock was already held
47457   ** and a read-lock requested, we don't incorrectly downgrade the lock.
47458   */
47459   assert( WRITE_LOCK>READ_LOCK );
47460   if( eLock>pLock->eLock ){
47461     pLock->eLock = eLock;
47462   }
47463
47464   return SQLITE_OK;
47465 }
47466 #endif /* !SQLITE_OMIT_SHARED_CACHE */
47467
47468 #ifndef SQLITE_OMIT_SHARED_CACHE
47469 /*
47470 ** Release all the table locks (locks obtained via calls to
47471 ** the setSharedCacheTableLock() procedure) held by Btree object p.
47472 **
47473 ** This function assumes that Btree p has an open read or write 
47474 ** transaction. If it does not, then the BtShared.isPending variable
47475 ** may be incorrectly cleared.
47476 */
47477 static void clearAllSharedCacheTableLocks(Btree *p){
47478   BtShared *pBt = p->pBt;
47479   BtLock **ppIter = &pBt->pLock;
47480
47481   assert( sqlite3BtreeHoldsMutex(p) );
47482   assert( p->sharable || 0==*ppIter );
47483   assert( p->inTrans>0 );
47484
47485   while( *ppIter ){
47486     BtLock *pLock = *ppIter;
47487     assert( pBt->isExclusive==0 || pBt->pWriter==pLock->pBtree );
47488     assert( pLock->pBtree->inTrans>=pLock->eLock );
47489     if( pLock->pBtree==p ){
47490       *ppIter = pLock->pNext;
47491       assert( pLock->iTable!=1 || pLock==&p->lock );
47492       if( pLock->iTable!=1 ){
47493         sqlite3_free(pLock);
47494       }
47495     }else{
47496       ppIter = &pLock->pNext;
47497     }
47498   }
47499
47500   assert( pBt->isPending==0 || pBt->pWriter );
47501   if( pBt->pWriter==p ){
47502     pBt->pWriter = 0;
47503     pBt->isExclusive = 0;
47504     pBt->isPending = 0;
47505   }else if( pBt->nTransaction==2 ){
47506     /* This function is called when Btree p is concluding its 
47507     ** transaction. If there currently exists a writer, and p is not
47508     ** that writer, then the number of locks held by connections other
47509     ** than the writer must be about to drop to zero. In this case
47510     ** set the isPending flag to 0.
47511     **
47512     ** If there is not currently a writer, then BtShared.isPending must
47513     ** be zero already. So this next line is harmless in that case.
47514     */
47515     pBt->isPending = 0;
47516   }
47517 }
47518
47519 /*
47520 ** This function changes all write-locks held by Btree p into read-locks.
47521 */
47522 static void downgradeAllSharedCacheTableLocks(Btree *p){
47523   BtShared *pBt = p->pBt;
47524   if( pBt->pWriter==p ){
47525     BtLock *pLock;
47526     pBt->pWriter = 0;
47527     pBt->isExclusive = 0;
47528     pBt->isPending = 0;
47529     for(pLock=pBt->pLock; pLock; pLock=pLock->pNext){
47530       assert( pLock->eLock==READ_LOCK || pLock->pBtree==p );
47531       pLock->eLock = READ_LOCK;
47532     }
47533   }
47534 }
47535
47536 #endif /* SQLITE_OMIT_SHARED_CACHE */
47537
47538 static void releasePage(MemPage *pPage);  /* Forward reference */
47539
47540 /*
47541 ***** This routine is used inside of assert() only ****
47542 **
47543 ** Verify that the cursor holds the mutex on its BtShared
47544 */
47545 #ifdef SQLITE_DEBUG
47546 static int cursorHoldsMutex(BtCursor *p){
47547   return sqlite3_mutex_held(p->pBt->mutex);
47548 }
47549 #endif
47550
47551
47552 #ifndef SQLITE_OMIT_INCRBLOB
47553 /*
47554 ** Invalidate the overflow page-list cache for cursor pCur, if any.
47555 */
47556 static void invalidateOverflowCache(BtCursor *pCur){
47557   assert( cursorHoldsMutex(pCur) );
47558   sqlite3_free(pCur->aOverflow);
47559   pCur->aOverflow = 0;
47560 }
47561
47562 /*
47563 ** Invalidate the overflow page-list cache for all cursors opened
47564 ** on the shared btree structure pBt.
47565 */
47566 static void invalidateAllOverflowCache(BtShared *pBt){
47567   BtCursor *p;
47568   assert( sqlite3_mutex_held(pBt->mutex) );
47569   for(p=pBt->pCursor; p; p=p->pNext){
47570     invalidateOverflowCache(p);
47571   }
47572 }
47573
47574 /*
47575 ** This function is called before modifying the contents of a table
47576 ** to invalidate any incrblob cursors that are open on the
47577 ** row or one of the rows being modified.
47578 **
47579 ** If argument isClearTable is true, then the entire contents of the
47580 ** table is about to be deleted. In this case invalidate all incrblob
47581 ** cursors open on any row within the table with root-page pgnoRoot.
47582 **
47583 ** Otherwise, if argument isClearTable is false, then the row with
47584 ** rowid iRow is being replaced or deleted. In this case invalidate
47585 ** only those incrblob cursors open on that specific row.
47586 */
47587 static void invalidateIncrblobCursors(
47588   Btree *pBtree,          /* The database file to check */
47589   i64 iRow,               /* The rowid that might be changing */
47590   int isClearTable        /* True if all rows are being deleted */
47591 ){
47592   BtCursor *p;
47593   BtShared *pBt = pBtree->pBt;
47594   assert( sqlite3BtreeHoldsMutex(pBtree) );
47595   for(p=pBt->pCursor; p; p=p->pNext){
47596     if( p->isIncrblobHandle && (isClearTable || p->info.nKey==iRow) ){
47597       p->eState = CURSOR_INVALID;
47598     }
47599   }
47600 }
47601
47602 #else
47603   /* Stub functions when INCRBLOB is omitted */
47604   #define invalidateOverflowCache(x)
47605   #define invalidateAllOverflowCache(x)
47606   #define invalidateIncrblobCursors(x,y,z)
47607 #endif /* SQLITE_OMIT_INCRBLOB */
47608
47609 /*
47610 ** Set bit pgno of the BtShared.pHasContent bitvec. This is called 
47611 ** when a page that previously contained data becomes a free-list leaf 
47612 ** page.
47613 **
47614 ** The BtShared.pHasContent bitvec exists to work around an obscure
47615 ** bug caused by the interaction of two useful IO optimizations surrounding
47616 ** free-list leaf pages:
47617 **
47618 **   1) When all data is deleted from a page and the page becomes
47619 **      a free-list leaf page, the page is not written to the database
47620 **      (as free-list leaf pages contain no meaningful data). Sometimes
47621 **      such a page is not even journalled (as it will not be modified,
47622 **      why bother journalling it?).
47623 **
47624 **   2) When a free-list leaf page is reused, its content is not read
47625 **      from the database or written to the journal file (why should it
47626 **      be, if it is not at all meaningful?).
47627 **
47628 ** By themselves, these optimizations work fine and provide a handy
47629 ** performance boost to bulk delete or insert operations. However, if
47630 ** a page is moved to the free-list and then reused within the same
47631 ** transaction, a problem comes up. If the page is not journalled when
47632 ** it is moved to the free-list and it is also not journalled when it
47633 ** is extracted from the free-list and reused, then the original data
47634 ** may be lost. In the event of a rollback, it may not be possible
47635 ** to restore the database to its original configuration.
47636 **
47637 ** The solution is the BtShared.pHasContent bitvec. Whenever a page is 
47638 ** moved to become a free-list leaf page, the corresponding bit is
47639 ** set in the bitvec. Whenever a leaf page is extracted from the free-list,
47640 ** optimization 2 above is omitted if the corresponding bit is already
47641 ** set in BtShared.pHasContent. The contents of the bitvec are cleared
47642 ** at the end of every transaction.
47643 */
47644 static int btreeSetHasContent(BtShared *pBt, Pgno pgno){
47645   int rc = SQLITE_OK;
47646   if( !pBt->pHasContent ){
47647     assert( pgno<=pBt->nPage );
47648     pBt->pHasContent = sqlite3BitvecCreate(pBt->nPage);
47649     if( !pBt->pHasContent ){
47650       rc = SQLITE_NOMEM;
47651     }
47652   }
47653   if( rc==SQLITE_OK && pgno<=sqlite3BitvecSize(pBt->pHasContent) ){
47654     rc = sqlite3BitvecSet(pBt->pHasContent, pgno);
47655   }
47656   return rc;
47657 }
47658
47659 /*
47660 ** Query the BtShared.pHasContent vector.
47661 **
47662 ** This function is called when a free-list leaf page is removed from the
47663 ** free-list for reuse. It returns false if it is safe to retrieve the
47664 ** page from the pager layer with the 'no-content' flag set. True otherwise.
47665 */
47666 static int btreeGetHasContent(BtShared *pBt, Pgno pgno){
47667   Bitvec *p = pBt->pHasContent;
47668   return (p && (pgno>sqlite3BitvecSize(p) || sqlite3BitvecTest(p, pgno)));
47669 }
47670
47671 /*
47672 ** Clear (destroy) the BtShared.pHasContent bitvec. This should be
47673 ** invoked at the conclusion of each write-transaction.
47674 */
47675 static void btreeClearHasContent(BtShared *pBt){
47676   sqlite3BitvecDestroy(pBt->pHasContent);
47677   pBt->pHasContent = 0;
47678 }
47679
47680 /*
47681 ** Save the current cursor position in the variables BtCursor.nKey 
47682 ** and BtCursor.pKey. The cursor's state is set to CURSOR_REQUIRESEEK.
47683 **
47684 ** The caller must ensure that the cursor is valid (has eState==CURSOR_VALID)
47685 ** prior to calling this routine.  
47686 */
47687 static int saveCursorPosition(BtCursor *pCur){
47688   int rc;
47689
47690   assert( CURSOR_VALID==pCur->eState );
47691   assert( 0==pCur->pKey );
47692   assert( cursorHoldsMutex(pCur) );
47693
47694   rc = sqlite3BtreeKeySize(pCur, &pCur->nKey);
47695   assert( rc==SQLITE_OK );  /* KeySize() cannot fail */
47696
47697   /* If this is an intKey table, then the above call to BtreeKeySize()
47698   ** stores the integer key in pCur->nKey. In this case this value is
47699   ** all that is required. Otherwise, if pCur is not open on an intKey
47700   ** table, then malloc space for and store the pCur->nKey bytes of key 
47701   ** data.
47702   */
47703   if( 0==pCur->apPage[0]->intKey ){
47704     void *pKey = sqlite3Malloc( (int)pCur->nKey );
47705     if( pKey ){
47706       rc = sqlite3BtreeKey(pCur, 0, (int)pCur->nKey, pKey);
47707       if( rc==SQLITE_OK ){
47708         pCur->pKey = pKey;
47709       }else{
47710         sqlite3_free(pKey);
47711       }
47712     }else{
47713       rc = SQLITE_NOMEM;
47714     }
47715   }
47716   assert( !pCur->apPage[0]->intKey || !pCur->pKey );
47717
47718   if( rc==SQLITE_OK ){
47719     int i;
47720     for(i=0; i<=pCur->iPage; i++){
47721       releasePage(pCur->apPage[i]);
47722       pCur->apPage[i] = 0;
47723     }
47724     pCur->iPage = -1;
47725     pCur->eState = CURSOR_REQUIRESEEK;
47726   }
47727
47728   invalidateOverflowCache(pCur);
47729   return rc;
47730 }
47731
47732 /*
47733 ** Save the positions of all cursors (except pExcept) that are open on
47734 ** the table  with root-page iRoot. Usually, this is called just before cursor
47735 ** pExcept is used to modify the table (BtreeDelete() or BtreeInsert()).
47736 */
47737 static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){
47738   BtCursor *p;
47739   assert( sqlite3_mutex_held(pBt->mutex) );
47740   assert( pExcept==0 || pExcept->pBt==pBt );
47741   for(p=pBt->pCursor; p; p=p->pNext){
47742     if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) && 
47743         p->eState==CURSOR_VALID ){
47744       int rc = saveCursorPosition(p);
47745       if( SQLITE_OK!=rc ){
47746         return rc;
47747       }
47748     }
47749   }
47750   return SQLITE_OK;
47751 }
47752
47753 /*
47754 ** Clear the current cursor position.
47755 */
47756 SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *pCur){
47757   assert( cursorHoldsMutex(pCur) );
47758   sqlite3_free(pCur->pKey);
47759   pCur->pKey = 0;
47760   pCur->eState = CURSOR_INVALID;
47761 }
47762
47763 /*
47764 ** In this version of BtreeMoveto, pKey is a packed index record
47765 ** such as is generated by the OP_MakeRecord opcode.  Unpack the
47766 ** record and then call BtreeMovetoUnpacked() to do the work.
47767 */
47768 static int btreeMoveto(
47769   BtCursor *pCur,     /* Cursor open on the btree to be searched */
47770   const void *pKey,   /* Packed key if the btree is an index */
47771   i64 nKey,           /* Integer key for tables.  Size of pKey for indices */
47772   int bias,           /* Bias search to the high end */
47773   int *pRes           /* Write search results here */
47774 ){
47775   int rc;                    /* Status code */
47776   UnpackedRecord *pIdxKey;   /* Unpacked index key */
47777   char aSpace[150];          /* Temp space for pIdxKey - to avoid a malloc */
47778
47779   if( pKey ){
47780     assert( nKey==(i64)(int)nKey );
47781     pIdxKey = sqlite3VdbeRecordUnpack(pCur->pKeyInfo, (int)nKey, pKey,
47782                                       aSpace, sizeof(aSpace));
47783     if( pIdxKey==0 ) return SQLITE_NOMEM;
47784   }else{
47785     pIdxKey = 0;
47786   }
47787   rc = sqlite3BtreeMovetoUnpacked(pCur, pIdxKey, nKey, bias, pRes);
47788   if( pKey ){
47789     sqlite3VdbeDeleteUnpackedRecord(pIdxKey);
47790   }
47791   return rc;
47792 }
47793
47794 /*
47795 ** Restore the cursor to the position it was in (or as close to as possible)
47796 ** when saveCursorPosition() was called. Note that this call deletes the 
47797 ** saved position info stored by saveCursorPosition(), so there can be
47798 ** at most one effective restoreCursorPosition() call after each 
47799 ** saveCursorPosition().
47800 */
47801 static int btreeRestoreCursorPosition(BtCursor *pCur){
47802   int rc;
47803   assert( cursorHoldsMutex(pCur) );
47804   assert( pCur->eState>=CURSOR_REQUIRESEEK );
47805   if( pCur->eState==CURSOR_FAULT ){
47806     return pCur->skipNext;
47807   }
47808   pCur->eState = CURSOR_INVALID;
47809   rc = btreeMoveto(pCur, pCur->pKey, pCur->nKey, 0, &pCur->skipNext);
47810   if( rc==SQLITE_OK ){
47811     sqlite3_free(pCur->pKey);
47812     pCur->pKey = 0;
47813     assert( pCur->eState==CURSOR_VALID || pCur->eState==CURSOR_INVALID );
47814   }
47815   return rc;
47816 }
47817
47818 #define restoreCursorPosition(p) \
47819   (p->eState>=CURSOR_REQUIRESEEK ? \
47820          btreeRestoreCursorPosition(p) : \
47821          SQLITE_OK)
47822
47823 /*
47824 ** Determine whether or not a cursor has moved from the position it
47825 ** was last placed at.  Cursors can move when the row they are pointing
47826 ** at is deleted out from under them.
47827 **
47828 ** This routine returns an error code if something goes wrong.  The
47829 ** integer *pHasMoved is set to one if the cursor has moved and 0 if not.
47830 */
47831 SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor *pCur, int *pHasMoved){
47832   int rc;
47833
47834   rc = restoreCursorPosition(pCur);
47835   if( rc ){
47836     *pHasMoved = 1;
47837     return rc;
47838   }
47839   if( pCur->eState!=CURSOR_VALID || pCur->skipNext!=0 ){
47840     *pHasMoved = 1;
47841   }else{
47842     *pHasMoved = 0;
47843   }
47844   return SQLITE_OK;
47845 }
47846
47847 #ifndef SQLITE_OMIT_AUTOVACUUM
47848 /*
47849 ** Given a page number of a regular database page, return the page
47850 ** number for the pointer-map page that contains the entry for the
47851 ** input page number.
47852 **
47853 ** Return 0 (not a valid page) for pgno==1 since there is
47854 ** no pointer map associated with page 1.  The integrity_check logic
47855 ** requires that ptrmapPageno(*,1)!=1.
47856 */
47857 static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){
47858   int nPagesPerMapPage;
47859   Pgno iPtrMap, ret;
47860   assert( sqlite3_mutex_held(pBt->mutex) );
47861   if( pgno<2 ) return 0;
47862   nPagesPerMapPage = (pBt->usableSize/5)+1;
47863   iPtrMap = (pgno-2)/nPagesPerMapPage;
47864   ret = (iPtrMap*nPagesPerMapPage) + 2; 
47865   if( ret==PENDING_BYTE_PAGE(pBt) ){
47866     ret++;
47867   }
47868   return ret;
47869 }
47870
47871 /*
47872 ** Write an entry into the pointer map.
47873 **
47874 ** This routine updates the pointer map entry for page number 'key'
47875 ** so that it maps to type 'eType' and parent page number 'pgno'.
47876 **
47877 ** If *pRC is initially non-zero (non-SQLITE_OK) then this routine is
47878 ** a no-op.  If an error occurs, the appropriate error code is written
47879 ** into *pRC.
47880 */
47881 static void ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent, int *pRC){
47882   DbPage *pDbPage;  /* The pointer map page */
47883   u8 *pPtrmap;      /* The pointer map data */
47884   Pgno iPtrmap;     /* The pointer map page number */
47885   int offset;       /* Offset in pointer map page */
47886   int rc;           /* Return code from subfunctions */
47887
47888   if( *pRC ) return;
47889
47890   assert( sqlite3_mutex_held(pBt->mutex) );
47891   /* The master-journal page number must never be used as a pointer map page */
47892   assert( 0==PTRMAP_ISPAGE(pBt, PENDING_BYTE_PAGE(pBt)) );
47893
47894   assert( pBt->autoVacuum );
47895   if( key==0 ){
47896     *pRC = SQLITE_CORRUPT_BKPT;
47897     return;
47898   }
47899   iPtrmap = PTRMAP_PAGENO(pBt, key);
47900   rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage);
47901   if( rc!=SQLITE_OK ){
47902     *pRC = rc;
47903     return;
47904   }
47905   offset = PTRMAP_PTROFFSET(iPtrmap, key);
47906   if( offset<0 ){
47907     *pRC = SQLITE_CORRUPT_BKPT;
47908     goto ptrmap_exit;
47909   }
47910   pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage);
47911
47912   if( eType!=pPtrmap[offset] || get4byte(&pPtrmap[offset+1])!=parent ){
47913     TRACE(("PTRMAP_UPDATE: %d->(%d,%d)\n", key, eType, parent));
47914     *pRC= rc = sqlite3PagerWrite(pDbPage);
47915     if( rc==SQLITE_OK ){
47916       pPtrmap[offset] = eType;
47917       put4byte(&pPtrmap[offset+1], parent);
47918     }
47919   }
47920
47921 ptrmap_exit:
47922   sqlite3PagerUnref(pDbPage);
47923 }
47924
47925 /*
47926 ** Read an entry from the pointer map.
47927 **
47928 ** This routine retrieves the pointer map entry for page 'key', writing
47929 ** the type and parent page number to *pEType and *pPgno respectively.
47930 ** An error code is returned if something goes wrong, otherwise SQLITE_OK.
47931 */
47932 static int ptrmapGet(BtShared *pBt, Pgno key, u8 *pEType, Pgno *pPgno){
47933   DbPage *pDbPage;   /* The pointer map page */
47934   int iPtrmap;       /* Pointer map page index */
47935   u8 *pPtrmap;       /* Pointer map page data */
47936   int offset;        /* Offset of entry in pointer map */
47937   int rc;
47938
47939   assert( sqlite3_mutex_held(pBt->mutex) );
47940
47941   iPtrmap = PTRMAP_PAGENO(pBt, key);
47942   rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage);
47943   if( rc!=0 ){
47944     return rc;
47945   }
47946   pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage);
47947
47948   offset = PTRMAP_PTROFFSET(iPtrmap, key);
47949   assert( pEType!=0 );
47950   *pEType = pPtrmap[offset];
47951   if( pPgno ) *pPgno = get4byte(&pPtrmap[offset+1]);
47952
47953   sqlite3PagerUnref(pDbPage);
47954   if( *pEType<1 || *pEType>5 ) return SQLITE_CORRUPT_BKPT;
47955   return SQLITE_OK;
47956 }
47957
47958 #else /* if defined SQLITE_OMIT_AUTOVACUUM */
47959   #define ptrmapPut(w,x,y,z,rc)
47960   #define ptrmapGet(w,x,y,z) SQLITE_OK
47961   #define ptrmapPutOvflPtr(x, y, rc)
47962 #endif
47963
47964 /*
47965 ** Given a btree page and a cell index (0 means the first cell on
47966 ** the page, 1 means the second cell, and so forth) return a pointer
47967 ** to the cell content.
47968 **
47969 ** This routine works only for pages that do not contain overflow cells.
47970 */
47971 #define findCell(P,I) \
47972   ((P)->aData + ((P)->maskPage & get2byte(&(P)->aData[(P)->cellOffset+2*(I)])))
47973
47974 /*
47975 ** This a more complex version of findCell() that works for
47976 ** pages that do contain overflow cells.
47977 */
47978 static u8 *findOverflowCell(MemPage *pPage, int iCell){
47979   int i;
47980   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
47981   for(i=pPage->nOverflow-1; i>=0; i--){
47982     int k;
47983     struct _OvflCell *pOvfl;
47984     pOvfl = &pPage->aOvfl[i];
47985     k = pOvfl->idx;
47986     if( k<=iCell ){
47987       if( k==iCell ){
47988         return pOvfl->pCell;
47989       }
47990       iCell--;
47991     }
47992   }
47993   return findCell(pPage, iCell);
47994 }
47995
47996 /*
47997 ** Parse a cell content block and fill in the CellInfo structure.  There
47998 ** are two versions of this function.  btreeParseCell() takes a 
47999 ** cell index as the second argument and btreeParseCellPtr() 
48000 ** takes a pointer to the body of the cell as its second argument.
48001 **
48002 ** Within this file, the parseCell() macro can be called instead of
48003 ** btreeParseCellPtr(). Using some compilers, this will be faster.
48004 */
48005 static void btreeParseCellPtr(
48006   MemPage *pPage,         /* Page containing the cell */
48007   u8 *pCell,              /* Pointer to the cell text. */
48008   CellInfo *pInfo         /* Fill in this structure */
48009 ){
48010   u16 n;                  /* Number bytes in cell content header */
48011   u32 nPayload;           /* Number of bytes of cell payload */
48012
48013   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
48014
48015   pInfo->pCell = pCell;
48016   assert( pPage->leaf==0 || pPage->leaf==1 );
48017   n = pPage->childPtrSize;
48018   assert( n==4-4*pPage->leaf );
48019   if( pPage->intKey ){
48020     if( pPage->hasData ){
48021       n += getVarint32(&pCell[n], nPayload);
48022     }else{
48023       nPayload = 0;
48024     }
48025     n += getVarint(&pCell[n], (u64*)&pInfo->nKey);
48026     pInfo->nData = nPayload;
48027   }else{
48028     pInfo->nData = 0;
48029     n += getVarint32(&pCell[n], nPayload);
48030     pInfo->nKey = nPayload;
48031   }
48032   pInfo->nPayload = nPayload;
48033   pInfo->nHeader = n;
48034   testcase( nPayload==pPage->maxLocal );
48035   testcase( nPayload==pPage->maxLocal+1 );
48036   if( likely(nPayload<=pPage->maxLocal) ){
48037     /* This is the (easy) common case where the entire payload fits
48038     ** on the local page.  No overflow is required.
48039     */
48040     if( (pInfo->nSize = (u16)(n+nPayload))<4 ) pInfo->nSize = 4;
48041     pInfo->nLocal = (u16)nPayload;
48042     pInfo->iOverflow = 0;
48043   }else{
48044     /* If the payload will not fit completely on the local page, we have
48045     ** to decide how much to store locally and how much to spill onto
48046     ** overflow pages.  The strategy is to minimize the amount of unused
48047     ** space on overflow pages while keeping the amount of local storage
48048     ** in between minLocal and maxLocal.
48049     **
48050     ** Warning:  changing the way overflow payload is distributed in any
48051     ** way will result in an incompatible file format.
48052     */
48053     int minLocal;  /* Minimum amount of payload held locally */
48054     int maxLocal;  /* Maximum amount of payload held locally */
48055     int surplus;   /* Overflow payload available for local storage */
48056
48057     minLocal = pPage->minLocal;
48058     maxLocal = pPage->maxLocal;
48059     surplus = minLocal + (nPayload - minLocal)%(pPage->pBt->usableSize - 4);
48060     testcase( surplus==maxLocal );
48061     testcase( surplus==maxLocal+1 );
48062     if( surplus <= maxLocal ){
48063       pInfo->nLocal = (u16)surplus;
48064     }else{
48065       pInfo->nLocal = (u16)minLocal;
48066     }
48067     pInfo->iOverflow = (u16)(pInfo->nLocal + n);
48068     pInfo->nSize = pInfo->iOverflow + 4;
48069   }
48070 }
48071 #define parseCell(pPage, iCell, pInfo) \
48072   btreeParseCellPtr((pPage), findCell((pPage), (iCell)), (pInfo))
48073 static void btreeParseCell(
48074   MemPage *pPage,         /* Page containing the cell */
48075   int iCell,              /* The cell index.  First cell is 0 */
48076   CellInfo *pInfo         /* Fill in this structure */
48077 ){
48078   parseCell(pPage, iCell, pInfo);
48079 }
48080
48081 /*
48082 ** Compute the total number of bytes that a Cell needs in the cell
48083 ** data area of the btree-page.  The return number includes the cell
48084 ** data header and the local payload, but not any overflow page or
48085 ** the space used by the cell pointer.
48086 */
48087 static u16 cellSizePtr(MemPage *pPage, u8 *pCell){
48088   u8 *pIter = &pCell[pPage->childPtrSize];
48089   u32 nSize;
48090
48091 #ifdef SQLITE_DEBUG
48092   /* The value returned by this function should always be the same as
48093   ** the (CellInfo.nSize) value found by doing a full parse of the
48094   ** cell. If SQLITE_DEBUG is defined, an assert() at the bottom of
48095   ** this function verifies that this invariant is not violated. */
48096   CellInfo debuginfo;
48097   btreeParseCellPtr(pPage, pCell, &debuginfo);
48098 #endif
48099
48100   if( pPage->intKey ){
48101     u8 *pEnd;
48102     if( pPage->hasData ){
48103       pIter += getVarint32(pIter, nSize);
48104     }else{
48105       nSize = 0;
48106     }
48107
48108     /* pIter now points at the 64-bit integer key value, a variable length 
48109     ** integer. The following block moves pIter to point at the first byte
48110     ** past the end of the key value. */
48111     pEnd = &pIter[9];
48112     while( (*pIter++)&0x80 && pIter<pEnd );
48113   }else{
48114     pIter += getVarint32(pIter, nSize);
48115   }
48116
48117   testcase( nSize==pPage->maxLocal );
48118   testcase( nSize==pPage->maxLocal+1 );
48119   if( nSize>pPage->maxLocal ){
48120     int minLocal = pPage->minLocal;
48121     nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4);
48122     testcase( nSize==pPage->maxLocal );
48123     testcase( nSize==pPage->maxLocal+1 );
48124     if( nSize>pPage->maxLocal ){
48125       nSize = minLocal;
48126     }
48127     nSize += 4;
48128   }
48129   nSize += (u32)(pIter - pCell);
48130
48131   /* The minimum size of any cell is 4 bytes. */
48132   if( nSize<4 ){
48133     nSize = 4;
48134   }
48135
48136   assert( nSize==debuginfo.nSize );
48137   return (u16)nSize;
48138 }
48139
48140 #ifdef SQLITE_DEBUG
48141 /* This variation on cellSizePtr() is used inside of assert() statements
48142 ** only. */
48143 static u16 cellSize(MemPage *pPage, int iCell){
48144   return cellSizePtr(pPage, findCell(pPage, iCell));
48145 }
48146 #endif
48147
48148 #ifndef SQLITE_OMIT_AUTOVACUUM
48149 /*
48150 ** If the cell pCell, part of page pPage contains a pointer
48151 ** to an overflow page, insert an entry into the pointer-map
48152 ** for the overflow page.
48153 */
48154 static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){
48155   CellInfo info;
48156   if( *pRC ) return;
48157   assert( pCell!=0 );
48158   btreeParseCellPtr(pPage, pCell, &info);
48159   assert( (info.nData+(pPage->intKey?0:info.nKey))==info.nPayload );
48160   if( info.iOverflow ){
48161     Pgno ovfl = get4byte(&pCell[info.iOverflow]);
48162     ptrmapPut(pPage->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, pRC);
48163   }
48164 }
48165 #endif
48166
48167
48168 /*
48169 ** Defragment the page given.  All Cells are moved to the
48170 ** end of the page and all free space is collected into one
48171 ** big FreeBlk that occurs in between the header and cell
48172 ** pointer array and the cell content area.
48173 */
48174 static int defragmentPage(MemPage *pPage){
48175   int i;                     /* Loop counter */
48176   int pc;                    /* Address of a i-th cell */
48177   int hdr;                   /* Offset to the page header */
48178   int size;                  /* Size of a cell */
48179   int usableSize;            /* Number of usable bytes on a page */
48180   int cellOffset;            /* Offset to the cell pointer array */
48181   int cbrk;                  /* Offset to the cell content area */
48182   int nCell;                 /* Number of cells on the page */
48183   unsigned char *data;       /* The page data */
48184   unsigned char *temp;       /* Temp area for cell content */
48185   int iCellFirst;            /* First allowable cell index */
48186   int iCellLast;             /* Last possible cell index */
48187
48188
48189   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
48190   assert( pPage->pBt!=0 );
48191   assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE );
48192   assert( pPage->nOverflow==0 );
48193   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
48194   temp = sqlite3PagerTempSpace(pPage->pBt->pPager);
48195   data = pPage->aData;
48196   hdr = pPage->hdrOffset;
48197   cellOffset = pPage->cellOffset;
48198   nCell = pPage->nCell;
48199   assert( nCell==get2byte(&data[hdr+3]) );
48200   usableSize = pPage->pBt->usableSize;
48201   cbrk = get2byte(&data[hdr+5]);
48202   memcpy(&temp[cbrk], &data[cbrk], usableSize - cbrk);
48203   cbrk = usableSize;
48204   iCellFirst = cellOffset + 2*nCell;
48205   iCellLast = usableSize - 4;
48206   for(i=0; i<nCell; i++){
48207     u8 *pAddr;     /* The i-th cell pointer */
48208     pAddr = &data[cellOffset + i*2];
48209     pc = get2byte(pAddr);
48210     testcase( pc==iCellFirst );
48211     testcase( pc==iCellLast );
48212 #if !defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
48213     /* These conditions have already been verified in btreeInitPage()
48214     ** if SQLITE_ENABLE_OVERSIZE_CELL_CHECK is defined 
48215     */
48216     if( pc<iCellFirst || pc>iCellLast ){
48217       return SQLITE_CORRUPT_BKPT;
48218     }
48219 #endif
48220     assert( pc>=iCellFirst && pc<=iCellLast );
48221     size = cellSizePtr(pPage, &temp[pc]);
48222     cbrk -= size;
48223 #if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
48224     if( cbrk<iCellFirst ){
48225       return SQLITE_CORRUPT_BKPT;
48226     }
48227 #else
48228     if( cbrk<iCellFirst || pc+size>usableSize ){
48229       return SQLITE_CORRUPT_BKPT;
48230     }
48231 #endif
48232     assert( cbrk+size<=usableSize && cbrk>=iCellFirst );
48233     testcase( cbrk+size==usableSize );
48234     testcase( pc+size==usableSize );
48235     memcpy(&data[cbrk], &temp[pc], size);
48236     put2byte(pAddr, cbrk);
48237   }
48238   assert( cbrk>=iCellFirst );
48239   put2byte(&data[hdr+5], cbrk);
48240   data[hdr+1] = 0;
48241   data[hdr+2] = 0;
48242   data[hdr+7] = 0;
48243   memset(&data[iCellFirst], 0, cbrk-iCellFirst);
48244   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
48245   if( cbrk-iCellFirst!=pPage->nFree ){
48246     return SQLITE_CORRUPT_BKPT;
48247   }
48248   return SQLITE_OK;
48249 }
48250
48251 /*
48252 ** Allocate nByte bytes of space from within the B-Tree page passed
48253 ** as the first argument. Write into *pIdx the index into pPage->aData[]
48254 ** of the first byte of allocated space. Return either SQLITE_OK or
48255 ** an error code (usually SQLITE_CORRUPT).
48256 **
48257 ** The caller guarantees that there is sufficient space to make the
48258 ** allocation.  This routine might need to defragment in order to bring
48259 ** all the space together, however.  This routine will avoid using
48260 ** the first two bytes past the cell pointer area since presumably this
48261 ** allocation is being made in order to insert a new cell, so we will
48262 ** also end up needing a new cell pointer.
48263 */
48264 static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
48265   const int hdr = pPage->hdrOffset;    /* Local cache of pPage->hdrOffset */
48266   u8 * const data = pPage->aData;      /* Local cache of pPage->aData */
48267   int nFrag;                           /* Number of fragmented bytes on pPage */
48268   int top;                             /* First byte of cell content area */
48269   int gap;        /* First byte of gap between cell pointers and cell content */
48270   int rc;         /* Integer return code */
48271   int usableSize; /* Usable size of the page */
48272   
48273   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
48274   assert( pPage->pBt );
48275   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
48276   assert( nByte>=0 );  /* Minimum cell size is 4 */
48277   assert( pPage->nFree>=nByte );
48278   assert( pPage->nOverflow==0 );
48279   usableSize = pPage->pBt->usableSize;
48280   assert( nByte < usableSize-8 );
48281
48282   nFrag = data[hdr+7];
48283   assert( pPage->cellOffset == hdr + 12 - 4*pPage->leaf );
48284   gap = pPage->cellOffset + 2*pPage->nCell;
48285   top = get2byteNotZero(&data[hdr+5]);
48286   if( gap>top ) return SQLITE_CORRUPT_BKPT;
48287   testcase( gap+2==top );
48288   testcase( gap+1==top );
48289   testcase( gap==top );
48290
48291   if( nFrag>=60 ){
48292     /* Always defragment highly fragmented pages */
48293     rc = defragmentPage(pPage);
48294     if( rc ) return rc;
48295     top = get2byteNotZero(&data[hdr+5]);
48296   }else if( gap+2<=top ){
48297     /* Search the freelist looking for a free slot big enough to satisfy 
48298     ** the request. The allocation is made from the first free slot in 
48299     ** the list that is large enough to accomadate it.
48300     */
48301     int pc, addr;
48302     for(addr=hdr+1; (pc = get2byte(&data[addr]))>0; addr=pc){
48303       int size;            /* Size of the free slot */
48304       if( pc>usableSize-4 || pc<addr+4 ){
48305         return SQLITE_CORRUPT_BKPT;
48306       }
48307       size = get2byte(&data[pc+2]);
48308       if( size>=nByte ){
48309         int x = size - nByte;
48310         testcase( x==4 );
48311         testcase( x==3 );
48312         if( x<4 ){
48313           /* Remove the slot from the free-list. Update the number of
48314           ** fragmented bytes within the page. */
48315           memcpy(&data[addr], &data[pc], 2);
48316           data[hdr+7] = (u8)(nFrag + x);
48317         }else if( size+pc > usableSize ){
48318           return SQLITE_CORRUPT_BKPT;
48319         }else{
48320           /* The slot remains on the free-list. Reduce its size to account
48321           ** for the portion used by the new allocation. */
48322           put2byte(&data[pc+2], x);
48323         }
48324         *pIdx = pc + x;
48325         return SQLITE_OK;
48326       }
48327     }
48328   }
48329
48330   /* Check to make sure there is enough space in the gap to satisfy
48331   ** the allocation.  If not, defragment.
48332   */
48333   testcase( gap+2+nByte==top );
48334   if( gap+2+nByte>top ){
48335     rc = defragmentPage(pPage);
48336     if( rc ) return rc;
48337     top = get2byteNotZero(&data[hdr+5]);
48338     assert( gap+nByte<=top );
48339   }
48340
48341
48342   /* Allocate memory from the gap in between the cell pointer array
48343   ** and the cell content area.  The btreeInitPage() call has already
48344   ** validated the freelist.  Given that the freelist is valid, there
48345   ** is no way that the allocation can extend off the end of the page.
48346   ** The assert() below verifies the previous sentence.
48347   */
48348   top -= nByte;
48349   put2byte(&data[hdr+5], top);
48350   assert( top+nByte <= (int)pPage->pBt->usableSize );
48351   *pIdx = top;
48352   return SQLITE_OK;
48353 }
48354
48355 /*
48356 ** Return a section of the pPage->aData to the freelist.
48357 ** The first byte of the new free block is pPage->aDisk[start]
48358 ** and the size of the block is "size" bytes.
48359 **
48360 ** Most of the effort here is involved in coalesing adjacent
48361 ** free blocks into a single big free block.
48362 */
48363 static int freeSpace(MemPage *pPage, int start, int size){
48364   int addr, pbegin, hdr;
48365   int iLast;                        /* Largest possible freeblock offset */
48366   unsigned char *data = pPage->aData;
48367
48368   assert( pPage->pBt!=0 );
48369   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
48370   assert( start>=pPage->hdrOffset+6+pPage->childPtrSize );
48371   assert( (start + size) <= (int)pPage->pBt->usableSize );
48372   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
48373   assert( size>=0 );   /* Minimum cell size is 4 */
48374
48375   if( pPage->pBt->secureDelete ){
48376     /* Overwrite deleted information with zeros when the secure_delete
48377     ** option is enabled */
48378     memset(&data[start], 0, size);
48379   }
48380
48381   /* Add the space back into the linked list of freeblocks.  Note that
48382   ** even though the freeblock list was checked by btreeInitPage(),
48383   ** btreeInitPage() did not detect overlapping cells or
48384   ** freeblocks that overlapped cells.   Nor does it detect when the
48385   ** cell content area exceeds the value in the page header.  If these
48386   ** situations arise, then subsequent insert operations might corrupt
48387   ** the freelist.  So we do need to check for corruption while scanning
48388   ** the freelist.
48389   */
48390   hdr = pPage->hdrOffset;
48391   addr = hdr + 1;
48392   iLast = pPage->pBt->usableSize - 4;
48393   assert( start<=iLast );
48394   while( (pbegin = get2byte(&data[addr]))<start && pbegin>0 ){
48395     if( pbegin<addr+4 ){
48396       return SQLITE_CORRUPT_BKPT;
48397     }
48398     addr = pbegin;
48399   }
48400   if( pbegin>iLast ){
48401     return SQLITE_CORRUPT_BKPT;
48402   }
48403   assert( pbegin>addr || pbegin==0 );
48404   put2byte(&data[addr], start);
48405   put2byte(&data[start], pbegin);
48406   put2byte(&data[start+2], size);
48407   pPage->nFree = pPage->nFree + (u16)size;
48408
48409   /* Coalesce adjacent free blocks */
48410   addr = hdr + 1;
48411   while( (pbegin = get2byte(&data[addr]))>0 ){
48412     int pnext, psize, x;
48413     assert( pbegin>addr );
48414     assert( pbegin <= (int)pPage->pBt->usableSize-4 );
48415     pnext = get2byte(&data[pbegin]);
48416     psize = get2byte(&data[pbegin+2]);
48417     if( pbegin + psize + 3 >= pnext && pnext>0 ){
48418       int frag = pnext - (pbegin+psize);
48419       if( (frag<0) || (frag>(int)data[hdr+7]) ){
48420         return SQLITE_CORRUPT_BKPT;
48421       }
48422       data[hdr+7] -= (u8)frag;
48423       x = get2byte(&data[pnext]);
48424       put2byte(&data[pbegin], x);
48425       x = pnext + get2byte(&data[pnext+2]) - pbegin;
48426       put2byte(&data[pbegin+2], x);
48427     }else{
48428       addr = pbegin;
48429     }
48430   }
48431
48432   /* If the cell content area begins with a freeblock, remove it. */
48433   if( data[hdr+1]==data[hdr+5] && data[hdr+2]==data[hdr+6] ){
48434     int top;
48435     pbegin = get2byte(&data[hdr+1]);
48436     memcpy(&data[hdr+1], &data[pbegin], 2);
48437     top = get2byte(&data[hdr+5]) + get2byte(&data[pbegin+2]);
48438     put2byte(&data[hdr+5], top);
48439   }
48440   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
48441   return SQLITE_OK;
48442 }
48443
48444 /*
48445 ** Decode the flags byte (the first byte of the header) for a page
48446 ** and initialize fields of the MemPage structure accordingly.
48447 **
48448 ** Only the following combinations are supported.  Anything different
48449 ** indicates a corrupt database files:
48450 **
48451 **         PTF_ZERODATA
48452 **         PTF_ZERODATA | PTF_LEAF
48453 **         PTF_LEAFDATA | PTF_INTKEY
48454 **         PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF
48455 */
48456 static int decodeFlags(MemPage *pPage, int flagByte){
48457   BtShared *pBt;     /* A copy of pPage->pBt */
48458
48459   assert( pPage->hdrOffset==(pPage->pgno==1 ? 100 : 0) );
48460   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
48461   pPage->leaf = (u8)(flagByte>>3);  assert( PTF_LEAF == 1<<3 );
48462   flagByte &= ~PTF_LEAF;
48463   pPage->childPtrSize = 4-4*pPage->leaf;
48464   pBt = pPage->pBt;
48465   if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
48466     pPage->intKey = 1;
48467     pPage->hasData = pPage->leaf;
48468     pPage->maxLocal = pBt->maxLeaf;
48469     pPage->minLocal = pBt->minLeaf;
48470   }else if( flagByte==PTF_ZERODATA ){
48471     pPage->intKey = 0;
48472     pPage->hasData = 0;
48473     pPage->maxLocal = pBt->maxLocal;
48474     pPage->minLocal = pBt->minLocal;
48475   }else{
48476     return SQLITE_CORRUPT_BKPT;
48477   }
48478   return SQLITE_OK;
48479 }
48480
48481 /*
48482 ** Initialize the auxiliary information for a disk block.
48483 **
48484 ** Return SQLITE_OK on success.  If we see that the page does
48485 ** not contain a well-formed database page, then return 
48486 ** SQLITE_CORRUPT.  Note that a return of SQLITE_OK does not
48487 ** guarantee that the page is well-formed.  It only shows that
48488 ** we failed to detect any corruption.
48489 */
48490 static int btreeInitPage(MemPage *pPage){
48491
48492   assert( pPage->pBt!=0 );
48493   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
48494   assert( pPage->pgno==sqlite3PagerPagenumber(pPage->pDbPage) );
48495   assert( pPage == sqlite3PagerGetExtra(pPage->pDbPage) );
48496   assert( pPage->aData == sqlite3PagerGetData(pPage->pDbPage) );
48497
48498   if( !pPage->isInit ){
48499     u16 pc;            /* Address of a freeblock within pPage->aData[] */
48500     u8 hdr;            /* Offset to beginning of page header */
48501     u8 *data;          /* Equal to pPage->aData */
48502     BtShared *pBt;        /* The main btree structure */
48503     int usableSize;    /* Amount of usable space on each page */
48504     u16 cellOffset;    /* Offset from start of page to first cell pointer */
48505     int nFree;         /* Number of unused bytes on the page */
48506     int top;           /* First byte of the cell content area */
48507     int iCellFirst;    /* First allowable cell or freeblock offset */
48508     int iCellLast;     /* Last possible cell or freeblock offset */
48509
48510     pBt = pPage->pBt;
48511
48512     hdr = pPage->hdrOffset;
48513     data = pPage->aData;
48514     if( decodeFlags(pPage, data[hdr]) ) return SQLITE_CORRUPT_BKPT;
48515     assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
48516     pPage->maskPage = (u16)(pBt->pageSize - 1);
48517     pPage->nOverflow = 0;
48518     usableSize = pBt->usableSize;
48519     pPage->cellOffset = cellOffset = hdr + 12 - 4*pPage->leaf;
48520     top = get2byteNotZero(&data[hdr+5]);
48521     pPage->nCell = get2byte(&data[hdr+3]);
48522     if( pPage->nCell>MX_CELL(pBt) ){
48523       /* To many cells for a single page.  The page must be corrupt */
48524       return SQLITE_CORRUPT_BKPT;
48525     }
48526     testcase( pPage->nCell==MX_CELL(pBt) );
48527
48528     /* A malformed database page might cause us to read past the end
48529     ** of page when parsing a cell.  
48530     **
48531     ** The following block of code checks early to see if a cell extends
48532     ** past the end of a page boundary and causes SQLITE_CORRUPT to be 
48533     ** returned if it does.
48534     */
48535     iCellFirst = cellOffset + 2*pPage->nCell;
48536     iCellLast = usableSize - 4;
48537 #if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
48538     {
48539       int i;            /* Index into the cell pointer array */
48540       int sz;           /* Size of a cell */
48541
48542       if( !pPage->leaf ) iCellLast--;
48543       for(i=0; i<pPage->nCell; i++){
48544         pc = get2byte(&data[cellOffset+i*2]);
48545         testcase( pc==iCellFirst );
48546         testcase( pc==iCellLast );
48547         if( pc<iCellFirst || pc>iCellLast ){
48548           return SQLITE_CORRUPT_BKPT;
48549         }
48550         sz = cellSizePtr(pPage, &data[pc]);
48551         testcase( pc+sz==usableSize );
48552         if( pc+sz>usableSize ){
48553           return SQLITE_CORRUPT_BKPT;
48554         }
48555       }
48556       if( !pPage->leaf ) iCellLast++;
48557     }  
48558 #endif
48559
48560     /* Compute the total free space on the page */
48561     pc = get2byte(&data[hdr+1]);
48562     nFree = data[hdr+7] + top;
48563     while( pc>0 ){
48564       u16 next, size;
48565       if( pc<iCellFirst || pc>iCellLast ){
48566         /* Start of free block is off the page */
48567         return SQLITE_CORRUPT_BKPT; 
48568       }
48569       next = get2byte(&data[pc]);
48570       size = get2byte(&data[pc+2]);
48571       if( (next>0 && next<=pc+size+3) || pc+size>usableSize ){
48572         /* Free blocks must be in ascending order. And the last byte of
48573         ** the free-block must lie on the database page.  */
48574         return SQLITE_CORRUPT_BKPT; 
48575       }
48576       nFree = nFree + size;
48577       pc = next;
48578     }
48579
48580     /* At this point, nFree contains the sum of the offset to the start
48581     ** of the cell-content area plus the number of free bytes within
48582     ** the cell-content area. If this is greater than the usable-size
48583     ** of the page, then the page must be corrupted. This check also
48584     ** serves to verify that the offset to the start of the cell-content
48585     ** area, according to the page header, lies within the page.
48586     */
48587     if( nFree>usableSize ){
48588       return SQLITE_CORRUPT_BKPT; 
48589     }
48590     pPage->nFree = (u16)(nFree - iCellFirst);
48591     pPage->isInit = 1;
48592   }
48593   return SQLITE_OK;
48594 }
48595
48596 /*
48597 ** Set up a raw page so that it looks like a database page holding
48598 ** no entries.
48599 */
48600 static void zeroPage(MemPage *pPage, int flags){
48601   unsigned char *data = pPage->aData;
48602   BtShared *pBt = pPage->pBt;
48603   u8 hdr = pPage->hdrOffset;
48604   u16 first;
48605
48606   assert( sqlite3PagerPagenumber(pPage->pDbPage)==pPage->pgno );
48607   assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );
48608   assert( sqlite3PagerGetData(pPage->pDbPage) == data );
48609   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
48610   assert( sqlite3_mutex_held(pBt->mutex) );
48611   if( pBt->secureDelete ){
48612     memset(&data[hdr], 0, pBt->usableSize - hdr);
48613   }
48614   data[hdr] = (char)flags;
48615   first = hdr + 8 + 4*((flags&PTF_LEAF)==0 ?1:0);
48616   memset(&data[hdr+1], 0, 4);
48617   data[hdr+7] = 0;
48618   put2byte(&data[hdr+5], pBt->usableSize);
48619   pPage->nFree = (u16)(pBt->usableSize - first);
48620   decodeFlags(pPage, flags);
48621   pPage->hdrOffset = hdr;
48622   pPage->cellOffset = first;
48623   pPage->nOverflow = 0;
48624   assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
48625   pPage->maskPage = (u16)(pBt->pageSize - 1);
48626   pPage->nCell = 0;
48627   pPage->isInit = 1;
48628 }
48629
48630
48631 /*
48632 ** Convert a DbPage obtained from the pager into a MemPage used by
48633 ** the btree layer.
48634 */
48635 static MemPage *btreePageFromDbPage(DbPage *pDbPage, Pgno pgno, BtShared *pBt){
48636   MemPage *pPage = (MemPage*)sqlite3PagerGetExtra(pDbPage);
48637   pPage->aData = sqlite3PagerGetData(pDbPage);
48638   pPage->pDbPage = pDbPage;
48639   pPage->pBt = pBt;
48640   pPage->pgno = pgno;
48641   pPage->hdrOffset = pPage->pgno==1 ? 100 : 0;
48642   return pPage; 
48643 }
48644
48645 /*
48646 ** Get a page from the pager.  Initialize the MemPage.pBt and
48647 ** MemPage.aData elements if needed.
48648 **
48649 ** If the noContent flag is set, it means that we do not care about
48650 ** the content of the page at this time.  So do not go to the disk
48651 ** to fetch the content.  Just fill in the content with zeros for now.
48652 ** If in the future we call sqlite3PagerWrite() on this page, that
48653 ** means we have started to be concerned about content and the disk
48654 ** read should occur at that point.
48655 */
48656 static int btreeGetPage(
48657   BtShared *pBt,       /* The btree */
48658   Pgno pgno,           /* Number of the page to fetch */
48659   MemPage **ppPage,    /* Return the page in this parameter */
48660   int noContent        /* Do not load page content if true */
48661 ){
48662   int rc;
48663   DbPage *pDbPage;
48664
48665   assert( sqlite3_mutex_held(pBt->mutex) );
48666   rc = sqlite3PagerAcquire(pBt->pPager, pgno, (DbPage**)&pDbPage, noContent);
48667   if( rc ) return rc;
48668   *ppPage = btreePageFromDbPage(pDbPage, pgno, pBt);
48669   return SQLITE_OK;
48670 }
48671
48672 /*
48673 ** Retrieve a page from the pager cache. If the requested page is not
48674 ** already in the pager cache return NULL. Initialize the MemPage.pBt and
48675 ** MemPage.aData elements if needed.
48676 */
48677 static MemPage *btreePageLookup(BtShared *pBt, Pgno pgno){
48678   DbPage *pDbPage;
48679   assert( sqlite3_mutex_held(pBt->mutex) );
48680   pDbPage = sqlite3PagerLookup(pBt->pPager, pgno);
48681   if( pDbPage ){
48682     return btreePageFromDbPage(pDbPage, pgno, pBt);
48683   }
48684   return 0;
48685 }
48686
48687 /*
48688 ** Return the size of the database file in pages. If there is any kind of
48689 ** error, return ((unsigned int)-1).
48690 */
48691 static Pgno btreePagecount(BtShared *pBt){
48692   return pBt->nPage;
48693 }
48694 SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree *p){
48695   assert( sqlite3BtreeHoldsMutex(p) );
48696   assert( ((p->pBt->nPage)&0x8000000)==0 );
48697   return (int)btreePagecount(p->pBt);
48698 }
48699
48700 /*
48701 ** Get a page from the pager and initialize it.  This routine is just a
48702 ** convenience wrapper around separate calls to btreeGetPage() and 
48703 ** btreeInitPage().
48704 **
48705 ** If an error occurs, then the value *ppPage is set to is undefined. It
48706 ** may remain unchanged, or it may be set to an invalid value.
48707 */
48708 static int getAndInitPage(
48709   BtShared *pBt,          /* The database file */
48710   Pgno pgno,           /* Number of the page to get */
48711   MemPage **ppPage     /* Write the page pointer here */
48712 ){
48713   int rc;
48714   assert( sqlite3_mutex_held(pBt->mutex) );
48715
48716   if( pgno>btreePagecount(pBt) ){
48717     rc = SQLITE_CORRUPT_BKPT;
48718   }else{
48719     rc = btreeGetPage(pBt, pgno, ppPage, 0);
48720     if( rc==SQLITE_OK ){
48721       rc = btreeInitPage(*ppPage);
48722       if( rc!=SQLITE_OK ){
48723         releasePage(*ppPage);
48724       }
48725     }
48726   }
48727
48728   testcase( pgno==0 );
48729   assert( pgno!=0 || rc==SQLITE_CORRUPT );
48730   return rc;
48731 }
48732
48733 /*
48734 ** Release a MemPage.  This should be called once for each prior
48735 ** call to btreeGetPage.
48736 */
48737 static void releasePage(MemPage *pPage){
48738   if( pPage ){
48739     assert( pPage->aData );
48740     assert( pPage->pBt );
48741     assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );
48742     assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData );
48743     assert( sqlite3_mutex_held(pPage->pBt->mutex) );
48744     sqlite3PagerUnref(pPage->pDbPage);
48745   }
48746 }
48747
48748 /*
48749 ** During a rollback, when the pager reloads information into the cache
48750 ** so that the cache is restored to its original state at the start of
48751 ** the transaction, for each page restored this routine is called.
48752 **
48753 ** This routine needs to reset the extra data section at the end of the
48754 ** page to agree with the restored data.
48755 */
48756 static void pageReinit(DbPage *pData){
48757   MemPage *pPage;
48758   pPage = (MemPage *)sqlite3PagerGetExtra(pData);
48759   assert( sqlite3PagerPageRefcount(pData)>0 );
48760   if( pPage->isInit ){
48761     assert( sqlite3_mutex_held(pPage->pBt->mutex) );
48762     pPage->isInit = 0;
48763     if( sqlite3PagerPageRefcount(pData)>1 ){
48764       /* pPage might not be a btree page;  it might be an overflow page
48765       ** or ptrmap page or a free page.  In those cases, the following
48766       ** call to btreeInitPage() will likely return SQLITE_CORRUPT.
48767       ** But no harm is done by this.  And it is very important that
48768       ** btreeInitPage() be called on every btree page so we make
48769       ** the call for every page that comes in for re-initing. */
48770       btreeInitPage(pPage);
48771     }
48772   }
48773 }
48774
48775 /*
48776 ** Invoke the busy handler for a btree.
48777 */
48778 static int btreeInvokeBusyHandler(void *pArg){
48779   BtShared *pBt = (BtShared*)pArg;
48780   assert( pBt->db );
48781   assert( sqlite3_mutex_held(pBt->db->mutex) );
48782   return sqlite3InvokeBusyHandler(&pBt->db->busyHandler);
48783 }
48784
48785 /*
48786 ** Open a database file.
48787 ** 
48788 ** zFilename is the name of the database file.  If zFilename is NULL
48789 ** then an ephemeral database is created.  The ephemeral database might
48790 ** be exclusively in memory, or it might use a disk-based memory cache.
48791 ** Either way, the ephemeral database will be automatically deleted 
48792 ** when sqlite3BtreeClose() is called.
48793 **
48794 ** If zFilename is ":memory:" then an in-memory database is created
48795 ** that is automatically destroyed when it is closed.
48796 **
48797 ** The "flags" parameter is a bitmask that might contain bits
48798 ** BTREE_OMIT_JOURNAL and/or BTREE_NO_READLOCK.  The BTREE_NO_READLOCK
48799 ** bit is also set if the SQLITE_NoReadlock flags is set in db->flags.
48800 ** These flags are passed through into sqlite3PagerOpen() and must
48801 ** be the same values as PAGER_OMIT_JOURNAL and PAGER_NO_READLOCK.
48802 **
48803 ** If the database is already opened in the same database connection
48804 ** and we are in shared cache mode, then the open will fail with an
48805 ** SQLITE_CONSTRAINT error.  We cannot allow two or more BtShared
48806 ** objects in the same database connection since doing so will lead
48807 ** to problems with locking.
48808 */
48809 SQLITE_PRIVATE int sqlite3BtreeOpen(
48810   const char *zFilename,  /* Name of the file containing the BTree database */
48811   sqlite3 *db,            /* Associated database handle */
48812   Btree **ppBtree,        /* Pointer to new Btree object written here */
48813   int flags,              /* Options */
48814   int vfsFlags            /* Flags passed through to sqlite3_vfs.xOpen() */
48815 ){
48816   sqlite3_vfs *pVfs;             /* The VFS to use for this btree */
48817   BtShared *pBt = 0;             /* Shared part of btree structure */
48818   Btree *p;                      /* Handle to return */
48819   sqlite3_mutex *mutexOpen = 0;  /* Prevents a race condition. Ticket #3537 */
48820   int rc = SQLITE_OK;            /* Result code from this function */
48821   u8 nReserve;                   /* Byte of unused space on each page */
48822   unsigned char zDbHeader[100];  /* Database header content */
48823
48824   /* True if opening an ephemeral, temporary database */
48825   const int isTempDb = zFilename==0 || zFilename[0]==0;
48826
48827   /* Set the variable isMemdb to true for an in-memory database, or 
48828   ** false for a file-based database.
48829   */
48830 #ifdef SQLITE_OMIT_MEMORYDB
48831   const int isMemdb = 0;
48832 #else
48833   const int isMemdb = (zFilename && strcmp(zFilename, ":memory:")==0)
48834                        || (isTempDb && sqlite3TempInMemory(db));
48835 #endif
48836
48837   assert( db!=0 );
48838   assert( sqlite3_mutex_held(db->mutex) );
48839   assert( (flags&0xff)==flags );   /* flags fit in 8 bits */
48840
48841   /* Only a BTREE_SINGLE database can be BTREE_UNORDERED */
48842   assert( (flags & BTREE_UNORDERED)==0 || (flags & BTREE_SINGLE)!=0 );
48843
48844   /* A BTREE_SINGLE database is always a temporary and/or ephemeral */
48845   assert( (flags & BTREE_SINGLE)==0 || isTempDb );
48846
48847   if( db->flags & SQLITE_NoReadlock ){
48848     flags |= BTREE_NO_READLOCK;
48849   }
48850   if( isMemdb ){
48851     flags |= BTREE_MEMORY;
48852   }
48853   if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (isMemdb || isTempDb) ){
48854     vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB;
48855   }
48856   pVfs = db->pVfs;
48857   p = sqlite3MallocZero(sizeof(Btree));
48858   if( !p ){
48859     return SQLITE_NOMEM;
48860   }
48861   p->inTrans = TRANS_NONE;
48862   p->db = db;
48863 #ifndef SQLITE_OMIT_SHARED_CACHE
48864   p->lock.pBtree = p;
48865   p->lock.iTable = 1;
48866 #endif
48867
48868 #if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
48869   /*
48870   ** If this Btree is a candidate for shared cache, try to find an
48871   ** existing BtShared object that we can share with
48872   */
48873   if( isMemdb==0 && isTempDb==0 ){
48874     if( vfsFlags & SQLITE_OPEN_SHAREDCACHE ){
48875       int nFullPathname = pVfs->mxPathname+1;
48876       char *zFullPathname = sqlite3Malloc(nFullPathname);
48877       sqlite3_mutex *mutexShared;
48878       p->sharable = 1;
48879       if( !zFullPathname ){
48880         sqlite3_free(p);
48881         return SQLITE_NOMEM;
48882       }
48883       sqlite3OsFullPathname(pVfs, zFilename, nFullPathname, zFullPathname);
48884       mutexOpen = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_OPEN);
48885       sqlite3_mutex_enter(mutexOpen);
48886       mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
48887       sqlite3_mutex_enter(mutexShared);
48888       for(pBt=GLOBAL(BtShared*,sqlite3SharedCacheList); pBt; pBt=pBt->pNext){
48889         assert( pBt->nRef>0 );
48890         if( 0==strcmp(zFullPathname, sqlite3PagerFilename(pBt->pPager))
48891                  && sqlite3PagerVfs(pBt->pPager)==pVfs ){
48892           int iDb;
48893           for(iDb=db->nDb-1; iDb>=0; iDb--){
48894             Btree *pExisting = db->aDb[iDb].pBt;
48895             if( pExisting && pExisting->pBt==pBt ){
48896               sqlite3_mutex_leave(mutexShared);
48897               sqlite3_mutex_leave(mutexOpen);
48898               sqlite3_free(zFullPathname);
48899               sqlite3_free(p);
48900               return SQLITE_CONSTRAINT;
48901             }
48902           }
48903           p->pBt = pBt;
48904           pBt->nRef++;
48905           break;
48906         }
48907       }
48908       sqlite3_mutex_leave(mutexShared);
48909       sqlite3_free(zFullPathname);
48910     }
48911 #ifdef SQLITE_DEBUG
48912     else{
48913       /* In debug mode, we mark all persistent databases as sharable
48914       ** even when they are not.  This exercises the locking code and
48915       ** gives more opportunity for asserts(sqlite3_mutex_held())
48916       ** statements to find locking problems.
48917       */
48918       p->sharable = 1;
48919     }
48920 #endif
48921   }
48922 #endif
48923   if( pBt==0 ){
48924     /*
48925     ** The following asserts make sure that structures used by the btree are
48926     ** the right size.  This is to guard against size changes that result
48927     ** when compiling on a different architecture.
48928     */
48929     assert( sizeof(i64)==8 || sizeof(i64)==4 );
48930     assert( sizeof(u64)==8 || sizeof(u64)==4 );
48931     assert( sizeof(u32)==4 );
48932     assert( sizeof(u16)==2 );
48933     assert( sizeof(Pgno)==4 );
48934   
48935     pBt = sqlite3MallocZero( sizeof(*pBt) );
48936     if( pBt==0 ){
48937       rc = SQLITE_NOMEM;
48938       goto btree_open_out;
48939     }
48940     rc = sqlite3PagerOpen(pVfs, &pBt->pPager, zFilename,
48941                           EXTRA_SIZE, flags, vfsFlags, pageReinit);
48942     if( rc==SQLITE_OK ){
48943       rc = sqlite3PagerReadFileheader(pBt->pPager,sizeof(zDbHeader),zDbHeader);
48944     }
48945     if( rc!=SQLITE_OK ){
48946       goto btree_open_out;
48947     }
48948     pBt->openFlags = (u8)flags;
48949     pBt->db = db;
48950     sqlite3PagerSetBusyhandler(pBt->pPager, btreeInvokeBusyHandler, pBt);
48951     p->pBt = pBt;
48952   
48953     pBt->pCursor = 0;
48954     pBt->pPage1 = 0;
48955     pBt->readOnly = sqlite3PagerIsreadonly(pBt->pPager);
48956 #ifdef SQLITE_SECURE_DELETE
48957     pBt->secureDelete = 1;
48958 #endif
48959     pBt->pageSize = (zDbHeader[16]<<8) | (zDbHeader[17]<<16);
48960     if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE
48961          || ((pBt->pageSize-1)&pBt->pageSize)!=0 ){
48962       pBt->pageSize = 0;
48963 #ifndef SQLITE_OMIT_AUTOVACUUM
48964       /* If the magic name ":memory:" will create an in-memory database, then
48965       ** leave the autoVacuum mode at 0 (do not auto-vacuum), even if
48966       ** SQLITE_DEFAULT_AUTOVACUUM is true. On the other hand, if
48967       ** SQLITE_OMIT_MEMORYDB has been defined, then ":memory:" is just a
48968       ** regular file-name. In this case the auto-vacuum applies as per normal.
48969       */
48970       if( zFilename && !isMemdb ){
48971         pBt->autoVacuum = (SQLITE_DEFAULT_AUTOVACUUM ? 1 : 0);
48972         pBt->incrVacuum = (SQLITE_DEFAULT_AUTOVACUUM==2 ? 1 : 0);
48973       }
48974 #endif
48975       nReserve = 0;
48976     }else{
48977       nReserve = zDbHeader[20];
48978       pBt->pageSizeFixed = 1;
48979 #ifndef SQLITE_OMIT_AUTOVACUUM
48980       pBt->autoVacuum = (get4byte(&zDbHeader[36 + 4*4])?1:0);
48981       pBt->incrVacuum = (get4byte(&zDbHeader[36 + 7*4])?1:0);
48982 #endif
48983     }
48984     rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve);
48985     if( rc ) goto btree_open_out;
48986     pBt->usableSize = pBt->pageSize - nReserve;
48987     assert( (pBt->pageSize & 7)==0 );  /* 8-byte alignment of pageSize */
48988    
48989 #if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
48990     /* Add the new BtShared object to the linked list sharable BtShareds.
48991     */
48992     if( p->sharable ){
48993       sqlite3_mutex *mutexShared;
48994       pBt->nRef = 1;
48995       mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
48996       if( SQLITE_THREADSAFE && sqlite3GlobalConfig.bCoreMutex ){
48997         pBt->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_FAST);
48998         if( pBt->mutex==0 ){
48999           rc = SQLITE_NOMEM;
49000           db->mallocFailed = 0;
49001           goto btree_open_out;
49002         }
49003       }
49004       sqlite3_mutex_enter(mutexShared);
49005       pBt->pNext = GLOBAL(BtShared*,sqlite3SharedCacheList);
49006       GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt;
49007       sqlite3_mutex_leave(mutexShared);
49008     }
49009 #endif
49010   }
49011
49012 #if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
49013   /* If the new Btree uses a sharable pBtShared, then link the new
49014   ** Btree into the list of all sharable Btrees for the same connection.
49015   ** The list is kept in ascending order by pBt address.
49016   */
49017   if( p->sharable ){
49018     int i;
49019     Btree *pSib;
49020     for(i=0; i<db->nDb; i++){
49021       if( (pSib = db->aDb[i].pBt)!=0 && pSib->sharable ){
49022         while( pSib->pPrev ){ pSib = pSib->pPrev; }
49023         if( p->pBt<pSib->pBt ){
49024           p->pNext = pSib;
49025           p->pPrev = 0;
49026           pSib->pPrev = p;
49027         }else{
49028           while( pSib->pNext && pSib->pNext->pBt<p->pBt ){
49029             pSib = pSib->pNext;
49030           }
49031           p->pNext = pSib->pNext;
49032           p->pPrev = pSib;
49033           if( p->pNext ){
49034             p->pNext->pPrev = p;
49035           }
49036           pSib->pNext = p;
49037         }
49038         break;
49039       }
49040     }
49041   }
49042 #endif
49043   *ppBtree = p;
49044
49045 btree_open_out:
49046   if( rc!=SQLITE_OK ){
49047     if( pBt && pBt->pPager ){
49048       sqlite3PagerClose(pBt->pPager);
49049     }
49050     sqlite3_free(pBt);
49051     sqlite3_free(p);
49052     *ppBtree = 0;
49053   }else{
49054     /* If the B-Tree was successfully opened, set the pager-cache size to the
49055     ** default value. Except, when opening on an existing shared pager-cache,
49056     ** do not change the pager-cache size.
49057     */
49058     if( sqlite3BtreeSchema(p, 0, 0)==0 ){
49059       sqlite3PagerSetCachesize(p->pBt->pPager, SQLITE_DEFAULT_CACHE_SIZE);
49060     }
49061   }
49062   if( mutexOpen ){
49063     assert( sqlite3_mutex_held(mutexOpen) );
49064     sqlite3_mutex_leave(mutexOpen);
49065   }
49066   return rc;
49067 }
49068
49069 /*
49070 ** Decrement the BtShared.nRef counter.  When it reaches zero,
49071 ** remove the BtShared structure from the sharing list.  Return
49072 ** true if the BtShared.nRef counter reaches zero and return
49073 ** false if it is still positive.
49074 */
49075 static int removeFromSharingList(BtShared *pBt){
49076 #ifndef SQLITE_OMIT_SHARED_CACHE
49077   sqlite3_mutex *pMaster;
49078   BtShared *pList;
49079   int removed = 0;
49080
49081   assert( sqlite3_mutex_notheld(pBt->mutex) );
49082   pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
49083   sqlite3_mutex_enter(pMaster);
49084   pBt->nRef--;
49085   if( pBt->nRef<=0 ){
49086     if( GLOBAL(BtShared*,sqlite3SharedCacheList)==pBt ){
49087       GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt->pNext;
49088     }else{
49089       pList = GLOBAL(BtShared*,sqlite3SharedCacheList);
49090       while( ALWAYS(pList) && pList->pNext!=pBt ){
49091         pList=pList->pNext;
49092       }
49093       if( ALWAYS(pList) ){
49094         pList->pNext = pBt->pNext;
49095       }
49096     }
49097     if( SQLITE_THREADSAFE ){
49098       sqlite3_mutex_free(pBt->mutex);
49099     }
49100     removed = 1;
49101   }
49102   sqlite3_mutex_leave(pMaster);
49103   return removed;
49104 #else
49105   return 1;
49106 #endif
49107 }
49108
49109 /*
49110 ** Make sure pBt->pTmpSpace points to an allocation of 
49111 ** MX_CELL_SIZE(pBt) bytes.
49112 */
49113 static void allocateTempSpace(BtShared *pBt){
49114   if( !pBt->pTmpSpace ){
49115     pBt->pTmpSpace = sqlite3PageMalloc( pBt->pageSize );
49116   }
49117 }
49118
49119 /*
49120 ** Free the pBt->pTmpSpace allocation
49121 */
49122 static void freeTempSpace(BtShared *pBt){
49123   sqlite3PageFree( pBt->pTmpSpace);
49124   pBt->pTmpSpace = 0;
49125 }
49126
49127 /*
49128 ** Close an open database and invalidate all cursors.
49129 */
49130 SQLITE_PRIVATE int sqlite3BtreeClose(Btree *p){
49131   BtShared *pBt = p->pBt;
49132   BtCursor *pCur;
49133
49134   /* Close all cursors opened via this handle.  */
49135   assert( sqlite3_mutex_held(p->db->mutex) );
49136   sqlite3BtreeEnter(p);
49137   pCur = pBt->pCursor;
49138   while( pCur ){
49139     BtCursor *pTmp = pCur;
49140     pCur = pCur->pNext;
49141     if( pTmp->pBtree==p ){
49142       sqlite3BtreeCloseCursor(pTmp);
49143     }
49144   }
49145
49146   /* Rollback any active transaction and free the handle structure.
49147   ** The call to sqlite3BtreeRollback() drops any table-locks held by
49148   ** this handle.
49149   */
49150   sqlite3BtreeRollback(p);
49151   sqlite3BtreeLeave(p);
49152
49153   /* If there are still other outstanding references to the shared-btree
49154   ** structure, return now. The remainder of this procedure cleans 
49155   ** up the shared-btree.
49156   */
49157   assert( p->wantToLock==0 && p->locked==0 );
49158   if( !p->sharable || removeFromSharingList(pBt) ){
49159     /* The pBt is no longer on the sharing list, so we can access
49160     ** it without having to hold the mutex.
49161     **
49162     ** Clean out and delete the BtShared object.
49163     */
49164     assert( !pBt->pCursor );
49165     sqlite3PagerClose(pBt->pPager);
49166     if( pBt->xFreeSchema && pBt->pSchema ){
49167       pBt->xFreeSchema(pBt->pSchema);
49168     }
49169     sqlite3DbFree(0, pBt->pSchema);
49170     freeTempSpace(pBt);
49171     sqlite3_free(pBt);
49172   }
49173
49174 #ifndef SQLITE_OMIT_SHARED_CACHE
49175   assert( p->wantToLock==0 );
49176   assert( p->locked==0 );
49177   if( p->pPrev ) p->pPrev->pNext = p->pNext;
49178   if( p->pNext ) p->pNext->pPrev = p->pPrev;
49179 #endif
49180
49181   sqlite3_free(p);
49182   return SQLITE_OK;
49183 }
49184
49185 /*
49186 ** Change the limit on the number of pages allowed in the cache.
49187 **
49188 ** The maximum number of cache pages is set to the absolute
49189 ** value of mxPage.  If mxPage is negative, the pager will
49190 ** operate asynchronously - it will not stop to do fsync()s
49191 ** to insure data is written to the disk surface before
49192 ** continuing.  Transactions still work if synchronous is off,
49193 ** and the database cannot be corrupted if this program
49194 ** crashes.  But if the operating system crashes or there is
49195 ** an abrupt power failure when synchronous is off, the database
49196 ** could be left in an inconsistent and unrecoverable state.
49197 ** Synchronous is on by default so database corruption is not
49198 ** normally a worry.
49199 */
49200 SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree *p, int mxPage){
49201   BtShared *pBt = p->pBt;
49202   assert( sqlite3_mutex_held(p->db->mutex) );
49203   sqlite3BtreeEnter(p);
49204   sqlite3PagerSetCachesize(pBt->pPager, mxPage);
49205   sqlite3BtreeLeave(p);
49206   return SQLITE_OK;
49207 }
49208
49209 /*
49210 ** Change the way data is synced to disk in order to increase or decrease
49211 ** how well the database resists damage due to OS crashes and power
49212 ** failures.  Level 1 is the same as asynchronous (no syncs() occur and
49213 ** there is a high probability of damage)  Level 2 is the default.  There
49214 ** is a very low but non-zero probability of damage.  Level 3 reduces the
49215 ** probability of damage to near zero but with a write performance reduction.
49216 */
49217 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
49218 SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(
49219   Btree *p,              /* The btree to set the safety level on */
49220   int level,             /* PRAGMA synchronous.  1=OFF, 2=NORMAL, 3=FULL */
49221   int fullSync,          /* PRAGMA fullfsync. */
49222   int ckptFullSync       /* PRAGMA checkpoint_fullfync */
49223 ){
49224   BtShared *pBt = p->pBt;
49225   assert( sqlite3_mutex_held(p->db->mutex) );
49226   assert( level>=1 && level<=3 );
49227   sqlite3BtreeEnter(p);
49228   sqlite3PagerSetSafetyLevel(pBt->pPager, level, fullSync, ckptFullSync);
49229   sqlite3BtreeLeave(p);
49230   return SQLITE_OK;
49231 }
49232 #endif
49233
49234 /*
49235 ** Return TRUE if the given btree is set to safety level 1.  In other
49236 ** words, return TRUE if no sync() occurs on the disk files.
49237 */
49238 SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree *p){
49239   BtShared *pBt = p->pBt;
49240   int rc;
49241   assert( sqlite3_mutex_held(p->db->mutex) );  
49242   sqlite3BtreeEnter(p);
49243   assert( pBt && pBt->pPager );
49244   rc = sqlite3PagerNosync(pBt->pPager);
49245   sqlite3BtreeLeave(p);
49246   return rc;
49247 }
49248
49249 /*
49250 ** Change the default pages size and the number of reserved bytes per page.
49251 ** Or, if the page size has already been fixed, return SQLITE_READONLY 
49252 ** without changing anything.
49253 **
49254 ** The page size must be a power of 2 between 512 and 65536.  If the page
49255 ** size supplied does not meet this constraint then the page size is not
49256 ** changed.
49257 **
49258 ** Page sizes are constrained to be a power of two so that the region
49259 ** of the database file used for locking (beginning at PENDING_BYTE,
49260 ** the first byte past the 1GB boundary, 0x40000000) needs to occur
49261 ** at the beginning of a page.
49262 **
49263 ** If parameter nReserve is less than zero, then the number of reserved
49264 ** bytes per page is left unchanged.
49265 **
49266 ** If the iFix!=0 then the pageSizeFixed flag is set so that the page size
49267 ** and autovacuum mode can no longer be changed.
49268 */
49269 SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int pageSize, int nReserve, int iFix){
49270   int rc = SQLITE_OK;
49271   BtShared *pBt = p->pBt;
49272   assert( nReserve>=-1 && nReserve<=255 );
49273   sqlite3BtreeEnter(p);
49274   if( pBt->pageSizeFixed ){
49275     sqlite3BtreeLeave(p);
49276     return SQLITE_READONLY;
49277   }
49278   if( nReserve<0 ){
49279     nReserve = pBt->pageSize - pBt->usableSize;
49280   }
49281   assert( nReserve>=0 && nReserve<=255 );
49282   if( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE &&
49283         ((pageSize-1)&pageSize)==0 ){
49284     assert( (pageSize & 7)==0 );
49285     assert( !pBt->pPage1 && !pBt->pCursor );
49286     pBt->pageSize = (u32)pageSize;
49287     freeTempSpace(pBt);
49288   }
49289   rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve);
49290   pBt->usableSize = pBt->pageSize - (u16)nReserve;
49291   if( iFix ) pBt->pageSizeFixed = 1;
49292   sqlite3BtreeLeave(p);
49293   return rc;
49294 }
49295
49296 /*
49297 ** Return the currently defined page size
49298 */
49299 SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree *p){
49300   return p->pBt->pageSize;
49301 }
49302
49303 #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) || !defined(SQLITE_OMIT_VACUUM)
49304 /*
49305 ** Return the number of bytes of space at the end of every page that
49306 ** are intentually left unused.  This is the "reserved" space that is
49307 ** sometimes used by extensions.
49308 */
49309 SQLITE_PRIVATE int sqlite3BtreeGetReserve(Btree *p){
49310   int n;
49311   sqlite3BtreeEnter(p);
49312   n = p->pBt->pageSize - p->pBt->usableSize;
49313   sqlite3BtreeLeave(p);
49314   return n;
49315 }
49316
49317 /*
49318 ** Set the maximum page count for a database if mxPage is positive.
49319 ** No changes are made if mxPage is 0 or negative.
49320 ** Regardless of the value of mxPage, return the maximum page count.
49321 */
49322 SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree *p, int mxPage){
49323   int n;
49324   sqlite3BtreeEnter(p);
49325   n = sqlite3PagerMaxPageCount(p->pBt->pPager, mxPage);
49326   sqlite3BtreeLeave(p);
49327   return n;
49328 }
49329
49330 /*
49331 ** Set the secureDelete flag if newFlag is 0 or 1.  If newFlag is -1,
49332 ** then make no changes.  Always return the value of the secureDelete
49333 ** setting after the change.
49334 */
49335 SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree *p, int newFlag){
49336   int b;
49337   if( p==0 ) return 0;
49338   sqlite3BtreeEnter(p);
49339   if( newFlag>=0 ){
49340     p->pBt->secureDelete = (newFlag!=0) ? 1 : 0;
49341   } 
49342   b = p->pBt->secureDelete;
49343   sqlite3BtreeLeave(p);
49344   return b;
49345 }
49346 #endif /* !defined(SQLITE_OMIT_PAGER_PRAGMAS) || !defined(SQLITE_OMIT_VACUUM) */
49347
49348 /*
49349 ** Change the 'auto-vacuum' property of the database. If the 'autoVacuum'
49350 ** parameter is non-zero, then auto-vacuum mode is enabled. If zero, it
49351 ** is disabled. The default value for the auto-vacuum property is 
49352 ** determined by the SQLITE_DEFAULT_AUTOVACUUM macro.
49353 */
49354 SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *p, int autoVacuum){
49355 #ifdef SQLITE_OMIT_AUTOVACUUM
49356   return SQLITE_READONLY;
49357 #else
49358   BtShared *pBt = p->pBt;
49359   int rc = SQLITE_OK;
49360   u8 av = (u8)autoVacuum;
49361
49362   sqlite3BtreeEnter(p);
49363   if( pBt->pageSizeFixed && (av ?1:0)!=pBt->autoVacuum ){
49364     rc = SQLITE_READONLY;
49365   }else{
49366     pBt->autoVacuum = av ?1:0;
49367     pBt->incrVacuum = av==2 ?1:0;
49368   }
49369   sqlite3BtreeLeave(p);
49370   return rc;
49371 #endif
49372 }
49373
49374 /*
49375 ** Return the value of the 'auto-vacuum' property. If auto-vacuum is 
49376 ** enabled 1 is returned. Otherwise 0.
49377 */
49378 SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *p){
49379 #ifdef SQLITE_OMIT_AUTOVACUUM
49380   return BTREE_AUTOVACUUM_NONE;
49381 #else
49382   int rc;
49383   sqlite3BtreeEnter(p);
49384   rc = (
49385     (!p->pBt->autoVacuum)?BTREE_AUTOVACUUM_NONE:
49386     (!p->pBt->incrVacuum)?BTREE_AUTOVACUUM_FULL:
49387     BTREE_AUTOVACUUM_INCR
49388   );
49389   sqlite3BtreeLeave(p);
49390   return rc;
49391 #endif
49392 }
49393
49394
49395 /*
49396 ** Get a reference to pPage1 of the database file.  This will
49397 ** also acquire a readlock on that file.
49398 **
49399 ** SQLITE_OK is returned on success.  If the file is not a
49400 ** well-formed database file, then SQLITE_CORRUPT is returned.
49401 ** SQLITE_BUSY is returned if the database is locked.  SQLITE_NOMEM
49402 ** is returned if we run out of memory. 
49403 */
49404 static int lockBtree(BtShared *pBt){
49405   int rc;              /* Result code from subfunctions */
49406   MemPage *pPage1;     /* Page 1 of the database file */
49407   int nPage;           /* Number of pages in the database */
49408   int nPageFile = 0;   /* Number of pages in the database file */
49409   int nPageHeader;     /* Number of pages in the database according to hdr */
49410
49411   assert( sqlite3_mutex_held(pBt->mutex) );
49412   assert( pBt->pPage1==0 );
49413   rc = sqlite3PagerSharedLock(pBt->pPager);
49414   if( rc!=SQLITE_OK ) return rc;
49415   rc = btreeGetPage(pBt, 1, &pPage1, 0);
49416   if( rc!=SQLITE_OK ) return rc;
49417
49418   /* Do some checking to help insure the file we opened really is
49419   ** a valid database file. 
49420   */
49421   nPage = nPageHeader = get4byte(28+(u8*)pPage1->aData);
49422   sqlite3PagerPagecount(pBt->pPager, &nPageFile);
49423   if( nPage==0 || memcmp(24+(u8*)pPage1->aData, 92+(u8*)pPage1->aData,4)!=0 ){
49424     nPage = nPageFile;
49425   }
49426   if( nPage>0 ){
49427     u32 pageSize;
49428     u32 usableSize;
49429     u8 *page1 = pPage1->aData;
49430     rc = SQLITE_NOTADB;
49431     if( memcmp(page1, zMagicHeader, 16)!=0 ){
49432       goto page1_init_failed;
49433     }
49434
49435 #ifdef SQLITE_OMIT_WAL
49436     if( page1[18]>1 ){
49437       pBt->readOnly = 1;
49438     }
49439     if( page1[19]>1 ){
49440       goto page1_init_failed;
49441     }
49442 #else
49443     if( page1[18]>2 ){
49444       pBt->readOnly = 1;
49445     }
49446     if( page1[19]>2 ){
49447       goto page1_init_failed;
49448     }
49449
49450     /* If the write version is set to 2, this database should be accessed
49451     ** in WAL mode. If the log is not already open, open it now. Then 
49452     ** return SQLITE_OK and return without populating BtShared.pPage1.
49453     ** The caller detects this and calls this function again. This is
49454     ** required as the version of page 1 currently in the page1 buffer
49455     ** may not be the latest version - there may be a newer one in the log
49456     ** file.
49457     */
49458     if( page1[19]==2 && pBt->doNotUseWAL==0 ){
49459       int isOpen = 0;
49460       rc = sqlite3PagerOpenWal(pBt->pPager, &isOpen);
49461       if( rc!=SQLITE_OK ){
49462         goto page1_init_failed;
49463       }else if( isOpen==0 ){
49464         releasePage(pPage1);
49465         return SQLITE_OK;
49466       }
49467       rc = SQLITE_NOTADB;
49468     }
49469 #endif
49470
49471     /* The maximum embedded fraction must be exactly 25%.  And the minimum
49472     ** embedded fraction must be 12.5% for both leaf-data and non-leaf-data.
49473     ** The original design allowed these amounts to vary, but as of
49474     ** version 3.6.0, we require them to be fixed.
49475     */
49476     if( memcmp(&page1[21], "\100\040\040",3)!=0 ){
49477       goto page1_init_failed;
49478     }
49479     pageSize = (page1[16]<<8) | (page1[17]<<16);
49480     if( ((pageSize-1)&pageSize)!=0
49481      || pageSize>SQLITE_MAX_PAGE_SIZE 
49482      || pageSize<=256 
49483     ){
49484       goto page1_init_failed;
49485     }
49486     assert( (pageSize & 7)==0 );
49487     usableSize = pageSize - page1[20];
49488     if( (u32)pageSize!=pBt->pageSize ){
49489       /* After reading the first page of the database assuming a page size
49490       ** of BtShared.pageSize, we have discovered that the page-size is
49491       ** actually pageSize. Unlock the database, leave pBt->pPage1 at
49492       ** zero and return SQLITE_OK. The caller will call this function
49493       ** again with the correct page-size.
49494       */
49495       releasePage(pPage1);
49496       pBt->usableSize = usableSize;
49497       pBt->pageSize = pageSize;
49498       freeTempSpace(pBt);
49499       rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize,
49500                                    pageSize-usableSize);
49501       return rc;
49502     }
49503     if( (pBt->db->flags & SQLITE_RecoveryMode)==0 && nPage>nPageFile ){
49504       rc = SQLITE_CORRUPT_BKPT;
49505       goto page1_init_failed;
49506     }
49507     if( usableSize<480 ){
49508       goto page1_init_failed;
49509     }
49510     pBt->pageSize = pageSize;
49511     pBt->usableSize = usableSize;
49512 #ifndef SQLITE_OMIT_AUTOVACUUM
49513     pBt->autoVacuum = (get4byte(&page1[36 + 4*4])?1:0);
49514     pBt->incrVacuum = (get4byte(&page1[36 + 7*4])?1:0);
49515 #endif
49516   }
49517
49518   /* maxLocal is the maximum amount of payload to store locally for
49519   ** a cell.  Make sure it is small enough so that at least minFanout
49520   ** cells can will fit on one page.  We assume a 10-byte page header.
49521   ** Besides the payload, the cell must store:
49522   **     2-byte pointer to the cell
49523   **     4-byte child pointer
49524   **     9-byte nKey value
49525   **     4-byte nData value
49526   **     4-byte overflow page pointer
49527   ** So a cell consists of a 2-byte pointer, a header which is as much as
49528   ** 17 bytes long, 0 to N bytes of payload, and an optional 4 byte overflow
49529   ** page pointer.
49530   */
49531   pBt->maxLocal = (u16)((pBt->usableSize-12)*64/255 - 23);
49532   pBt->minLocal = (u16)((pBt->usableSize-12)*32/255 - 23);
49533   pBt->maxLeaf = (u16)(pBt->usableSize - 35);
49534   pBt->minLeaf = (u16)((pBt->usableSize-12)*32/255 - 23);
49535   assert( pBt->maxLeaf + 23 <= MX_CELL_SIZE(pBt) );
49536   pBt->pPage1 = pPage1;
49537   pBt->nPage = nPage;
49538   return SQLITE_OK;
49539
49540 page1_init_failed:
49541   releasePage(pPage1);
49542   pBt->pPage1 = 0;
49543   return rc;
49544 }
49545
49546 /*
49547 ** If there are no outstanding cursors and we are not in the middle
49548 ** of a transaction but there is a read lock on the database, then
49549 ** this routine unrefs the first page of the database file which 
49550 ** has the effect of releasing the read lock.
49551 **
49552 ** If there is a transaction in progress, this routine is a no-op.
49553 */
49554 static void unlockBtreeIfUnused(BtShared *pBt){
49555   assert( sqlite3_mutex_held(pBt->mutex) );
49556   assert( pBt->pCursor==0 || pBt->inTransaction>TRANS_NONE );
49557   if( pBt->inTransaction==TRANS_NONE && pBt->pPage1!=0 ){
49558     assert( pBt->pPage1->aData );
49559     assert( sqlite3PagerRefcount(pBt->pPager)==1 );
49560     assert( pBt->pPage1->aData );
49561     releasePage(pBt->pPage1);
49562     pBt->pPage1 = 0;
49563   }
49564 }
49565
49566 /*
49567 ** If pBt points to an empty file then convert that empty file
49568 ** into a new empty database by initializing the first page of
49569 ** the database.
49570 */
49571 static int newDatabase(BtShared *pBt){
49572   MemPage *pP1;
49573   unsigned char *data;
49574   int rc;
49575
49576   assert( sqlite3_mutex_held(pBt->mutex) );
49577   if( pBt->nPage>0 ){
49578     return SQLITE_OK;
49579   }
49580   pP1 = pBt->pPage1;
49581   assert( pP1!=0 );
49582   data = pP1->aData;
49583   rc = sqlite3PagerWrite(pP1->pDbPage);
49584   if( rc ) return rc;
49585   memcpy(data, zMagicHeader, sizeof(zMagicHeader));
49586   assert( sizeof(zMagicHeader)==16 );
49587   data[16] = (u8)((pBt->pageSize>>8)&0xff);
49588   data[17] = (u8)((pBt->pageSize>>16)&0xff);
49589   data[18] = 1;
49590   data[19] = 1;
49591   assert( pBt->usableSize<=pBt->pageSize && pBt->usableSize+255>=pBt->pageSize);
49592   data[20] = (u8)(pBt->pageSize - pBt->usableSize);
49593   data[21] = 64;
49594   data[22] = 32;
49595   data[23] = 32;
49596   memset(&data[24], 0, 100-24);
49597   zeroPage(pP1, PTF_INTKEY|PTF_LEAF|PTF_LEAFDATA );
49598   pBt->pageSizeFixed = 1;
49599 #ifndef SQLITE_OMIT_AUTOVACUUM
49600   assert( pBt->autoVacuum==1 || pBt->autoVacuum==0 );
49601   assert( pBt->incrVacuum==1 || pBt->incrVacuum==0 );
49602   put4byte(&data[36 + 4*4], pBt->autoVacuum);
49603   put4byte(&data[36 + 7*4], pBt->incrVacuum);
49604 #endif
49605   pBt->nPage = 1;
49606   data[31] = 1;
49607   return SQLITE_OK;
49608 }
49609
49610 /*
49611 ** Attempt to start a new transaction. A write-transaction
49612 ** is started if the second argument is nonzero, otherwise a read-
49613 ** transaction.  If the second argument is 2 or more and exclusive
49614 ** transaction is started, meaning that no other process is allowed
49615 ** to access the database.  A preexisting transaction may not be
49616 ** upgraded to exclusive by calling this routine a second time - the
49617 ** exclusivity flag only works for a new transaction.
49618 **
49619 ** A write-transaction must be started before attempting any 
49620 ** changes to the database.  None of the following routines 
49621 ** will work unless a transaction is started first:
49622 **
49623 **      sqlite3BtreeCreateTable()
49624 **      sqlite3BtreeCreateIndex()
49625 **      sqlite3BtreeClearTable()
49626 **      sqlite3BtreeDropTable()
49627 **      sqlite3BtreeInsert()
49628 **      sqlite3BtreeDelete()
49629 **      sqlite3BtreeUpdateMeta()
49630 **
49631 ** If an initial attempt to acquire the lock fails because of lock contention
49632 ** and the database was previously unlocked, then invoke the busy handler
49633 ** if there is one.  But if there was previously a read-lock, do not
49634 ** invoke the busy handler - just return SQLITE_BUSY.  SQLITE_BUSY is 
49635 ** returned when there is already a read-lock in order to avoid a deadlock.
49636 **
49637 ** Suppose there are two processes A and B.  A has a read lock and B has
49638 ** a reserved lock.  B tries to promote to exclusive but is blocked because
49639 ** of A's read lock.  A tries to promote to reserved but is blocked by B.
49640 ** One or the other of the two processes must give way or there can be
49641 ** no progress.  By returning SQLITE_BUSY and not invoking the busy callback
49642 ** when A already has a read lock, we encourage A to give up and let B
49643 ** proceed.
49644 */
49645 SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag){
49646   sqlite3 *pBlock = 0;
49647   BtShared *pBt = p->pBt;
49648   int rc = SQLITE_OK;
49649
49650   sqlite3BtreeEnter(p);
49651   btreeIntegrity(p);
49652
49653   /* If the btree is already in a write-transaction, or it
49654   ** is already in a read-transaction and a read-transaction
49655   ** is requested, this is a no-op.
49656   */
49657   if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){
49658     goto trans_begun;
49659   }
49660
49661   /* Write transactions are not possible on a read-only database */
49662   if( pBt->readOnly && wrflag ){
49663     rc = SQLITE_READONLY;
49664     goto trans_begun;
49665   }
49666
49667 #ifndef SQLITE_OMIT_SHARED_CACHE
49668   /* If another database handle has already opened a write transaction 
49669   ** on this shared-btree structure and a second write transaction is
49670   ** requested, return SQLITE_LOCKED.
49671   */
49672   if( (wrflag && pBt->inTransaction==TRANS_WRITE) || pBt->isPending ){
49673     pBlock = pBt->pWriter->db;
49674   }else if( wrflag>1 ){
49675     BtLock *pIter;
49676     for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
49677       if( pIter->pBtree!=p ){
49678         pBlock = pIter->pBtree->db;
49679         break;
49680       }
49681     }
49682   }
49683   if( pBlock ){
49684     sqlite3ConnectionBlocked(p->db, pBlock);
49685     rc = SQLITE_LOCKED_SHAREDCACHE;
49686     goto trans_begun;
49687   }
49688 #endif
49689
49690   /* Any read-only or read-write transaction implies a read-lock on 
49691   ** page 1. So if some other shared-cache client already has a write-lock 
49692   ** on page 1, the transaction cannot be opened. */
49693   rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK);
49694   if( SQLITE_OK!=rc ) goto trans_begun;
49695
49696   pBt->initiallyEmpty = (u8)(pBt->nPage==0);
49697   do {
49698     /* Call lockBtree() until either pBt->pPage1 is populated or
49699     ** lockBtree() returns something other than SQLITE_OK. lockBtree()
49700     ** may return SQLITE_OK but leave pBt->pPage1 set to 0 if after
49701     ** reading page 1 it discovers that the page-size of the database 
49702     ** file is not pBt->pageSize. In this case lockBtree() will update
49703     ** pBt->pageSize to the page-size of the file on disk.
49704     */
49705     while( pBt->pPage1==0 && SQLITE_OK==(rc = lockBtree(pBt)) );
49706
49707     if( rc==SQLITE_OK && wrflag ){
49708       if( pBt->readOnly ){
49709         rc = SQLITE_READONLY;
49710       }else{
49711         rc = sqlite3PagerBegin(pBt->pPager,wrflag>1,sqlite3TempInMemory(p->db));
49712         if( rc==SQLITE_OK ){
49713           rc = newDatabase(pBt);
49714         }
49715       }
49716     }
49717   
49718     if( rc!=SQLITE_OK ){
49719       unlockBtreeIfUnused(pBt);
49720     }
49721   }while( (rc&0xFF)==SQLITE_BUSY && pBt->inTransaction==TRANS_NONE &&
49722           btreeInvokeBusyHandler(pBt) );
49723
49724   if( rc==SQLITE_OK ){
49725     if( p->inTrans==TRANS_NONE ){
49726       pBt->nTransaction++;
49727 #ifndef SQLITE_OMIT_SHARED_CACHE
49728       if( p->sharable ){
49729         assert( p->lock.pBtree==p && p->lock.iTable==1 );
49730         p->lock.eLock = READ_LOCK;
49731         p->lock.pNext = pBt->pLock;
49732         pBt->pLock = &p->lock;
49733       }
49734 #endif
49735     }
49736     p->inTrans = (wrflag?TRANS_WRITE:TRANS_READ);
49737     if( p->inTrans>pBt->inTransaction ){
49738       pBt->inTransaction = p->inTrans;
49739     }
49740     if( wrflag ){
49741       MemPage *pPage1 = pBt->pPage1;
49742 #ifndef SQLITE_OMIT_SHARED_CACHE
49743       assert( !pBt->pWriter );
49744       pBt->pWriter = p;
49745       pBt->isExclusive = (u8)(wrflag>1);
49746 #endif
49747
49748       /* If the db-size header field is incorrect (as it may be if an old
49749       ** client has been writing the database file), update it now. Doing
49750       ** this sooner rather than later means the database size can safely 
49751       ** re-read the database size from page 1 if a savepoint or transaction
49752       ** rollback occurs within the transaction.
49753       */
49754       if( pBt->nPage!=get4byte(&pPage1->aData[28]) ){
49755         rc = sqlite3PagerWrite(pPage1->pDbPage);
49756         if( rc==SQLITE_OK ){
49757           put4byte(&pPage1->aData[28], pBt->nPage);
49758         }
49759       }
49760     }
49761   }
49762
49763
49764 trans_begun:
49765   if( rc==SQLITE_OK && wrflag ){
49766     /* This call makes sure that the pager has the correct number of
49767     ** open savepoints. If the second parameter is greater than 0 and
49768     ** the sub-journal is not already open, then it will be opened here.
49769     */
49770     rc = sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint);
49771   }
49772
49773   btreeIntegrity(p);
49774   sqlite3BtreeLeave(p);
49775   return rc;
49776 }
49777
49778 #ifndef SQLITE_OMIT_AUTOVACUUM
49779
49780 /*
49781 ** Set the pointer-map entries for all children of page pPage. Also, if
49782 ** pPage contains cells that point to overflow pages, set the pointer
49783 ** map entries for the overflow pages as well.
49784 */
49785 static int setChildPtrmaps(MemPage *pPage){
49786   int i;                             /* Counter variable */
49787   int nCell;                         /* Number of cells in page pPage */
49788   int rc;                            /* Return code */
49789   BtShared *pBt = pPage->pBt;
49790   u8 isInitOrig = pPage->isInit;
49791   Pgno pgno = pPage->pgno;
49792
49793   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
49794   rc = btreeInitPage(pPage);
49795   if( rc!=SQLITE_OK ){
49796     goto set_child_ptrmaps_out;
49797   }
49798   nCell = pPage->nCell;
49799
49800   for(i=0; i<nCell; i++){
49801     u8 *pCell = findCell(pPage, i);
49802
49803     ptrmapPutOvflPtr(pPage, pCell, &rc);
49804
49805     if( !pPage->leaf ){
49806       Pgno childPgno = get4byte(pCell);
49807       ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc);
49808     }
49809   }
49810
49811   if( !pPage->leaf ){
49812     Pgno childPgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
49813     ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc);
49814   }
49815
49816 set_child_ptrmaps_out:
49817   pPage->isInit = isInitOrig;
49818   return rc;
49819 }
49820
49821 /*
49822 ** Somewhere on pPage is a pointer to page iFrom.  Modify this pointer so
49823 ** that it points to iTo. Parameter eType describes the type of pointer to
49824 ** be modified, as  follows:
49825 **
49826 ** PTRMAP_BTREE:     pPage is a btree-page. The pointer points at a child 
49827 **                   page of pPage.
49828 **
49829 ** PTRMAP_OVERFLOW1: pPage is a btree-page. The pointer points at an overflow
49830 **                   page pointed to by one of the cells on pPage.
49831 **
49832 ** PTRMAP_OVERFLOW2: pPage is an overflow-page. The pointer points at the next
49833 **                   overflow page in the list.
49834 */
49835 static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){
49836   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
49837   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
49838   if( eType==PTRMAP_OVERFLOW2 ){
49839     /* The pointer is always the first 4 bytes of the page in this case.  */
49840     if( get4byte(pPage->aData)!=iFrom ){
49841       return SQLITE_CORRUPT_BKPT;
49842     }
49843     put4byte(pPage->aData, iTo);
49844   }else{
49845     u8 isInitOrig = pPage->isInit;
49846     int i;
49847     int nCell;
49848
49849     btreeInitPage(pPage);
49850     nCell = pPage->nCell;
49851
49852     for(i=0; i<nCell; i++){
49853       u8 *pCell = findCell(pPage, i);
49854       if( eType==PTRMAP_OVERFLOW1 ){
49855         CellInfo info;
49856         btreeParseCellPtr(pPage, pCell, &info);
49857         if( info.iOverflow ){
49858           if( iFrom==get4byte(&pCell[info.iOverflow]) ){
49859             put4byte(&pCell[info.iOverflow], iTo);
49860             break;
49861           }
49862         }
49863       }else{
49864         if( get4byte(pCell)==iFrom ){
49865           put4byte(pCell, iTo);
49866           break;
49867         }
49868       }
49869     }
49870   
49871     if( i==nCell ){
49872       if( eType!=PTRMAP_BTREE || 
49873           get4byte(&pPage->aData[pPage->hdrOffset+8])!=iFrom ){
49874         return SQLITE_CORRUPT_BKPT;
49875       }
49876       put4byte(&pPage->aData[pPage->hdrOffset+8], iTo);
49877     }
49878
49879     pPage->isInit = isInitOrig;
49880   }
49881   return SQLITE_OK;
49882 }
49883
49884
49885 /*
49886 ** Move the open database page pDbPage to location iFreePage in the 
49887 ** database. The pDbPage reference remains valid.
49888 **
49889 ** The isCommit flag indicates that there is no need to remember that
49890 ** the journal needs to be sync()ed before database page pDbPage->pgno 
49891 ** can be written to. The caller has already promised not to write to that
49892 ** page.
49893 */
49894 static int relocatePage(
49895   BtShared *pBt,           /* Btree */
49896   MemPage *pDbPage,        /* Open page to move */
49897   u8 eType,                /* Pointer map 'type' entry for pDbPage */
49898   Pgno iPtrPage,           /* Pointer map 'page-no' entry for pDbPage */
49899   Pgno iFreePage,          /* The location to move pDbPage to */
49900   int isCommit             /* isCommit flag passed to sqlite3PagerMovepage */
49901 ){
49902   MemPage *pPtrPage;   /* The page that contains a pointer to pDbPage */
49903   Pgno iDbPage = pDbPage->pgno;
49904   Pager *pPager = pBt->pPager;
49905   int rc;
49906
49907   assert( eType==PTRMAP_OVERFLOW2 || eType==PTRMAP_OVERFLOW1 || 
49908       eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE );
49909   assert( sqlite3_mutex_held(pBt->mutex) );
49910   assert( pDbPage->pBt==pBt );
49911
49912   /* Move page iDbPage from its current location to page number iFreePage */
49913   TRACE(("AUTOVACUUM: Moving %d to free page %d (ptr page %d type %d)\n", 
49914       iDbPage, iFreePage, iPtrPage, eType));
49915   rc = sqlite3PagerMovepage(pPager, pDbPage->pDbPage, iFreePage, isCommit);
49916   if( rc!=SQLITE_OK ){
49917     return rc;
49918   }
49919   pDbPage->pgno = iFreePage;
49920
49921   /* If pDbPage was a btree-page, then it may have child pages and/or cells
49922   ** that point to overflow pages. The pointer map entries for all these
49923   ** pages need to be changed.
49924   **
49925   ** If pDbPage is an overflow page, then the first 4 bytes may store a
49926   ** pointer to a subsequent overflow page. If this is the case, then
49927   ** the pointer map needs to be updated for the subsequent overflow page.
49928   */
49929   if( eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE ){
49930     rc = setChildPtrmaps(pDbPage);
49931     if( rc!=SQLITE_OK ){
49932       return rc;
49933     }
49934   }else{
49935     Pgno nextOvfl = get4byte(pDbPage->aData);
49936     if( nextOvfl!=0 ){
49937       ptrmapPut(pBt, nextOvfl, PTRMAP_OVERFLOW2, iFreePage, &rc);
49938       if( rc!=SQLITE_OK ){
49939         return rc;
49940       }
49941     }
49942   }
49943
49944   /* Fix the database pointer on page iPtrPage that pointed at iDbPage so
49945   ** that it points at iFreePage. Also fix the pointer map entry for
49946   ** iPtrPage.
49947   */
49948   if( eType!=PTRMAP_ROOTPAGE ){
49949     rc = btreeGetPage(pBt, iPtrPage, &pPtrPage, 0);
49950     if( rc!=SQLITE_OK ){
49951       return rc;
49952     }
49953     rc = sqlite3PagerWrite(pPtrPage->pDbPage);
49954     if( rc!=SQLITE_OK ){
49955       releasePage(pPtrPage);
49956       return rc;
49957     }
49958     rc = modifyPagePointer(pPtrPage, iDbPage, iFreePage, eType);
49959     releasePage(pPtrPage);
49960     if( rc==SQLITE_OK ){
49961       ptrmapPut(pBt, iFreePage, eType, iPtrPage, &rc);
49962     }
49963   }
49964   return rc;
49965 }
49966
49967 /* Forward declaration required by incrVacuumStep(). */
49968 static int allocateBtreePage(BtShared *, MemPage **, Pgno *, Pgno, u8);
49969
49970 /*
49971 ** Perform a single step of an incremental-vacuum. If successful,
49972 ** return SQLITE_OK. If there is no work to do (and therefore no
49973 ** point in calling this function again), return SQLITE_DONE.
49974 **
49975 ** More specificly, this function attempts to re-organize the 
49976 ** database so that the last page of the file currently in use
49977 ** is no longer in use.
49978 **
49979 ** If the nFin parameter is non-zero, this function assumes
49980 ** that the caller will keep calling incrVacuumStep() until
49981 ** it returns SQLITE_DONE or an error, and that nFin is the
49982 ** number of pages the database file will contain after this 
49983 ** process is complete.  If nFin is zero, it is assumed that
49984 ** incrVacuumStep() will be called a finite amount of times
49985 ** which may or may not empty the freelist.  A full autovacuum
49986 ** has nFin>0.  A "PRAGMA incremental_vacuum" has nFin==0.
49987 */
49988 static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg){
49989   Pgno nFreeList;           /* Number of pages still on the free-list */
49990   int rc;
49991
49992   assert( sqlite3_mutex_held(pBt->mutex) );
49993   assert( iLastPg>nFin );
49994
49995   if( !PTRMAP_ISPAGE(pBt, iLastPg) && iLastPg!=PENDING_BYTE_PAGE(pBt) ){
49996     u8 eType;
49997     Pgno iPtrPage;
49998
49999     nFreeList = get4byte(&pBt->pPage1->aData[36]);
50000     if( nFreeList==0 ){
50001       return SQLITE_DONE;
50002     }
50003
50004     rc = ptrmapGet(pBt, iLastPg, &eType, &iPtrPage);
50005     if( rc!=SQLITE_OK ){
50006       return rc;
50007     }
50008     if( eType==PTRMAP_ROOTPAGE ){
50009       return SQLITE_CORRUPT_BKPT;
50010     }
50011
50012     if( eType==PTRMAP_FREEPAGE ){
50013       if( nFin==0 ){
50014         /* Remove the page from the files free-list. This is not required
50015         ** if nFin is non-zero. In that case, the free-list will be
50016         ** truncated to zero after this function returns, so it doesn't 
50017         ** matter if it still contains some garbage entries.
50018         */
50019         Pgno iFreePg;
50020         MemPage *pFreePg;
50021         rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, 1);
50022         if( rc!=SQLITE_OK ){
50023           return rc;
50024         }
50025         assert( iFreePg==iLastPg );
50026         releasePage(pFreePg);
50027       }
50028     } else {
50029       Pgno iFreePg;             /* Index of free page to move pLastPg to */
50030       MemPage *pLastPg;
50031
50032       rc = btreeGetPage(pBt, iLastPg, &pLastPg, 0);
50033       if( rc!=SQLITE_OK ){
50034         return rc;
50035       }
50036
50037       /* If nFin is zero, this loop runs exactly once and page pLastPg
50038       ** is swapped with the first free page pulled off the free list.
50039       **
50040       ** On the other hand, if nFin is greater than zero, then keep
50041       ** looping until a free-page located within the first nFin pages
50042       ** of the file is found.
50043       */
50044       do {
50045         MemPage *pFreePg;
50046         rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, 0, 0);
50047         if( rc!=SQLITE_OK ){
50048           releasePage(pLastPg);
50049           return rc;
50050         }
50051         releasePage(pFreePg);
50052       }while( nFin!=0 && iFreePg>nFin );
50053       assert( iFreePg<iLastPg );
50054       
50055       rc = sqlite3PagerWrite(pLastPg->pDbPage);
50056       if( rc==SQLITE_OK ){
50057         rc = relocatePage(pBt, pLastPg, eType, iPtrPage, iFreePg, nFin!=0);
50058       }
50059       releasePage(pLastPg);
50060       if( rc!=SQLITE_OK ){
50061         return rc;
50062       }
50063     }
50064   }
50065
50066   if( nFin==0 ){
50067     iLastPg--;
50068     while( iLastPg==PENDING_BYTE_PAGE(pBt)||PTRMAP_ISPAGE(pBt, iLastPg) ){
50069       if( PTRMAP_ISPAGE(pBt, iLastPg) ){
50070         MemPage *pPg;
50071         rc = btreeGetPage(pBt, iLastPg, &pPg, 0);
50072         if( rc!=SQLITE_OK ){
50073           return rc;
50074         }
50075         rc = sqlite3PagerWrite(pPg->pDbPage);
50076         releasePage(pPg);
50077         if( rc!=SQLITE_OK ){
50078           return rc;
50079         }
50080       }
50081       iLastPg--;
50082     }
50083     sqlite3PagerTruncateImage(pBt->pPager, iLastPg);
50084     pBt->nPage = iLastPg;
50085   }
50086   return SQLITE_OK;
50087 }
50088
50089 /*
50090 ** A write-transaction must be opened before calling this function.
50091 ** It performs a single unit of work towards an incremental vacuum.
50092 **
50093 ** If the incremental vacuum is finished after this function has run,
50094 ** SQLITE_DONE is returned. If it is not finished, but no error occurred,
50095 ** SQLITE_OK is returned. Otherwise an SQLite error code. 
50096 */
50097 SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *p){
50098   int rc;
50099   BtShared *pBt = p->pBt;
50100
50101   sqlite3BtreeEnter(p);
50102   assert( pBt->inTransaction==TRANS_WRITE && p->inTrans==TRANS_WRITE );
50103   if( !pBt->autoVacuum ){
50104     rc = SQLITE_DONE;
50105   }else{
50106     invalidateAllOverflowCache(pBt);
50107     rc = incrVacuumStep(pBt, 0, btreePagecount(pBt));
50108     if( rc==SQLITE_OK ){
50109       rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
50110       put4byte(&pBt->pPage1->aData[28], pBt->nPage);
50111     }
50112   }
50113   sqlite3BtreeLeave(p);
50114   return rc;
50115 }
50116
50117 /*
50118 ** This routine is called prior to sqlite3PagerCommit when a transaction
50119 ** is commited for an auto-vacuum database.
50120 **
50121 ** If SQLITE_OK is returned, then *pnTrunc is set to the number of pages
50122 ** the database file should be truncated to during the commit process. 
50123 ** i.e. the database has been reorganized so that only the first *pnTrunc
50124 ** pages are in use.
50125 */
50126 static int autoVacuumCommit(BtShared *pBt){
50127   int rc = SQLITE_OK;
50128   Pager *pPager = pBt->pPager;
50129   VVA_ONLY( int nRef = sqlite3PagerRefcount(pPager) );
50130
50131   assert( sqlite3_mutex_held(pBt->mutex) );
50132   invalidateAllOverflowCache(pBt);
50133   assert(pBt->autoVacuum);
50134   if( !pBt->incrVacuum ){
50135     Pgno nFin;         /* Number of pages in database after autovacuuming */
50136     Pgno nFree;        /* Number of pages on the freelist initially */
50137     Pgno nPtrmap;      /* Number of PtrMap pages to be freed */
50138     Pgno iFree;        /* The next page to be freed */
50139     int nEntry;        /* Number of entries on one ptrmap page */
50140     Pgno nOrig;        /* Database size before freeing */
50141
50142     nOrig = btreePagecount(pBt);
50143     if( PTRMAP_ISPAGE(pBt, nOrig) || nOrig==PENDING_BYTE_PAGE(pBt) ){
50144       /* It is not possible to create a database for which the final page
50145       ** is either a pointer-map page or the pending-byte page. If one
50146       ** is encountered, this indicates corruption.
50147       */
50148       return SQLITE_CORRUPT_BKPT;
50149     }
50150
50151     nFree = get4byte(&pBt->pPage1->aData[36]);
50152     nEntry = pBt->usableSize/5;
50153     nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+nEntry)/nEntry;
50154     nFin = nOrig - nFree - nPtrmap;
50155     if( nOrig>PENDING_BYTE_PAGE(pBt) && nFin<PENDING_BYTE_PAGE(pBt) ){
50156       nFin--;
50157     }
50158     while( PTRMAP_ISPAGE(pBt, nFin) || nFin==PENDING_BYTE_PAGE(pBt) ){
50159       nFin--;
50160     }
50161     if( nFin>nOrig ) return SQLITE_CORRUPT_BKPT;
50162
50163     for(iFree=nOrig; iFree>nFin && rc==SQLITE_OK; iFree--){
50164       rc = incrVacuumStep(pBt, nFin, iFree);
50165     }
50166     if( (rc==SQLITE_DONE || rc==SQLITE_OK) && nFree>0 ){
50167       rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
50168       put4byte(&pBt->pPage1->aData[32], 0);
50169       put4byte(&pBt->pPage1->aData[36], 0);
50170       put4byte(&pBt->pPage1->aData[28], nFin);
50171       sqlite3PagerTruncateImage(pBt->pPager, nFin);
50172       pBt->nPage = nFin;
50173     }
50174     if( rc!=SQLITE_OK ){
50175       sqlite3PagerRollback(pPager);
50176     }
50177   }
50178
50179   assert( nRef==sqlite3PagerRefcount(pPager) );
50180   return rc;
50181 }
50182
50183 #else /* ifndef SQLITE_OMIT_AUTOVACUUM */
50184 # define setChildPtrmaps(x) SQLITE_OK
50185 #endif
50186
50187 /*
50188 ** This routine does the first phase of a two-phase commit.  This routine
50189 ** causes a rollback journal to be created (if it does not already exist)
50190 ** and populated with enough information so that if a power loss occurs
50191 ** the database can be restored to its original state by playing back
50192 ** the journal.  Then the contents of the journal are flushed out to
50193 ** the disk.  After the journal is safely on oxide, the changes to the
50194 ** database are written into the database file and flushed to oxide.
50195 ** At the end of this call, the rollback journal still exists on the
50196 ** disk and we are still holding all locks, so the transaction has not
50197 ** committed.  See sqlite3BtreeCommitPhaseTwo() for the second phase of the
50198 ** commit process.
50199 **
50200 ** This call is a no-op if no write-transaction is currently active on pBt.
50201 **
50202 ** Otherwise, sync the database file for the btree pBt. zMaster points to
50203 ** the name of a master journal file that should be written into the
50204 ** individual journal file, or is NULL, indicating no master journal file 
50205 ** (single database transaction).
50206 **
50207 ** When this is called, the master journal should already have been
50208 ** created, populated with this journal pointer and synced to disk.
50209 **
50210 ** Once this is routine has returned, the only thing required to commit
50211 ** the write-transaction for this database file is to delete the journal.
50212 */
50213 SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree *p, const char *zMaster){
50214   int rc = SQLITE_OK;
50215   if( p->inTrans==TRANS_WRITE ){
50216     BtShared *pBt = p->pBt;
50217     sqlite3BtreeEnter(p);
50218 #ifndef SQLITE_OMIT_AUTOVACUUM
50219     if( pBt->autoVacuum ){
50220       rc = autoVacuumCommit(pBt);
50221       if( rc!=SQLITE_OK ){
50222         sqlite3BtreeLeave(p);
50223         return rc;
50224       }
50225     }
50226 #endif
50227     rc = sqlite3PagerCommitPhaseOne(pBt->pPager, zMaster, 0);
50228     sqlite3BtreeLeave(p);
50229   }
50230   return rc;
50231 }
50232
50233 /*
50234 ** This function is called from both BtreeCommitPhaseTwo() and BtreeRollback()
50235 ** at the conclusion of a transaction.
50236 */
50237 static void btreeEndTransaction(Btree *p){
50238   BtShared *pBt = p->pBt;
50239   assert( sqlite3BtreeHoldsMutex(p) );
50240
50241   btreeClearHasContent(pBt);
50242   if( p->inTrans>TRANS_NONE && p->db->activeVdbeCnt>1 ){
50243     /* If there are other active statements that belong to this database
50244     ** handle, downgrade to a read-only transaction. The other statements
50245     ** may still be reading from the database.  */
50246     downgradeAllSharedCacheTableLocks(p);
50247     p->inTrans = TRANS_READ;
50248   }else{
50249     /* If the handle had any kind of transaction open, decrement the 
50250     ** transaction count of the shared btree. If the transaction count 
50251     ** reaches 0, set the shared state to TRANS_NONE. The unlockBtreeIfUnused()
50252     ** call below will unlock the pager.  */
50253     if( p->inTrans!=TRANS_NONE ){
50254       clearAllSharedCacheTableLocks(p);
50255       pBt->nTransaction--;
50256       if( 0==pBt->nTransaction ){
50257         pBt->inTransaction = TRANS_NONE;
50258       }
50259     }
50260
50261     /* Set the current transaction state to TRANS_NONE and unlock the 
50262     ** pager if this call closed the only read or write transaction.  */
50263     p->inTrans = TRANS_NONE;
50264     unlockBtreeIfUnused(pBt);
50265   }
50266
50267   btreeIntegrity(p);
50268 }
50269
50270 /*
50271 ** Commit the transaction currently in progress.
50272 **
50273 ** This routine implements the second phase of a 2-phase commit.  The
50274 ** sqlite3BtreeCommitPhaseOne() routine does the first phase and should
50275 ** be invoked prior to calling this routine.  The sqlite3BtreeCommitPhaseOne()
50276 ** routine did all the work of writing information out to disk and flushing the
50277 ** contents so that they are written onto the disk platter.  All this
50278 ** routine has to do is delete or truncate or zero the header in the
50279 ** the rollback journal (which causes the transaction to commit) and
50280 ** drop locks.
50281 **
50282 ** Normally, if an error occurs while the pager layer is attempting to 
50283 ** finalize the underlying journal file, this function returns an error and
50284 ** the upper layer will attempt a rollback. However, if the second argument
50285 ** is non-zero then this b-tree transaction is part of a multi-file 
50286 ** transaction. In this case, the transaction has already been committed 
50287 ** (by deleting a master journal file) and the caller will ignore this 
50288 ** functions return code. So, even if an error occurs in the pager layer,
50289 ** reset the b-tree objects internal state to indicate that the write
50290 ** transaction has been closed. This is quite safe, as the pager will have
50291 ** transitioned to the error state.
50292 **
50293 ** This will release the write lock on the database file.  If there
50294 ** are no active cursors, it also releases the read lock.
50295 */
50296 SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree *p, int bCleanup){
50297
50298   if( p->inTrans==TRANS_NONE ) return SQLITE_OK;
50299   sqlite3BtreeEnter(p);
50300   btreeIntegrity(p);
50301
50302   /* If the handle has a write-transaction open, commit the shared-btrees 
50303   ** transaction and set the shared state to TRANS_READ.
50304   */
50305   if( p->inTrans==TRANS_WRITE ){
50306     int rc;
50307     BtShared *pBt = p->pBt;
50308     assert( pBt->inTransaction==TRANS_WRITE );
50309     assert( pBt->nTransaction>0 );
50310     rc = sqlite3PagerCommitPhaseTwo(pBt->pPager);
50311     if( rc!=SQLITE_OK && bCleanup==0 ){
50312       sqlite3BtreeLeave(p);
50313       return rc;
50314     }
50315     pBt->inTransaction = TRANS_READ;
50316   }
50317
50318   btreeEndTransaction(p);
50319   sqlite3BtreeLeave(p);
50320   return SQLITE_OK;
50321 }
50322
50323 /*
50324 ** Do both phases of a commit.
50325 */
50326 SQLITE_PRIVATE int sqlite3BtreeCommit(Btree *p){
50327   int rc;
50328   sqlite3BtreeEnter(p);
50329   rc = sqlite3BtreeCommitPhaseOne(p, 0);
50330   if( rc==SQLITE_OK ){
50331     rc = sqlite3BtreeCommitPhaseTwo(p, 0);
50332   }
50333   sqlite3BtreeLeave(p);
50334   return rc;
50335 }
50336
50337 #ifndef NDEBUG
50338 /*
50339 ** Return the number of write-cursors open on this handle. This is for use
50340 ** in assert() expressions, so it is only compiled if NDEBUG is not
50341 ** defined.
50342 **
50343 ** For the purposes of this routine, a write-cursor is any cursor that
50344 ** is capable of writing to the databse.  That means the cursor was
50345 ** originally opened for writing and the cursor has not be disabled
50346 ** by having its state changed to CURSOR_FAULT.
50347 */
50348 static int countWriteCursors(BtShared *pBt){
50349   BtCursor *pCur;
50350   int r = 0;
50351   for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){
50352     if( pCur->wrFlag && pCur->eState!=CURSOR_FAULT ) r++; 
50353   }
50354   return r;
50355 }
50356 #endif
50357
50358 /*
50359 ** This routine sets the state to CURSOR_FAULT and the error
50360 ** code to errCode for every cursor on BtShared that pBtree
50361 ** references.
50362 **
50363 ** Every cursor is tripped, including cursors that belong
50364 ** to other database connections that happen to be sharing
50365 ** the cache with pBtree.
50366 **
50367 ** This routine gets called when a rollback occurs.
50368 ** All cursors using the same cache must be tripped
50369 ** to prevent them from trying to use the btree after
50370 ** the rollback.  The rollback may have deleted tables
50371 ** or moved root pages, so it is not sufficient to
50372 ** save the state of the cursor.  The cursor must be
50373 ** invalidated.
50374 */
50375 SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode){
50376   BtCursor *p;
50377   sqlite3BtreeEnter(pBtree);
50378   for(p=pBtree->pBt->pCursor; p; p=p->pNext){
50379     int i;
50380     sqlite3BtreeClearCursor(p);
50381     p->eState = CURSOR_FAULT;
50382     p->skipNext = errCode;
50383     for(i=0; i<=p->iPage; i++){
50384       releasePage(p->apPage[i]);
50385       p->apPage[i] = 0;
50386     }
50387   }
50388   sqlite3BtreeLeave(pBtree);
50389 }
50390
50391 /*
50392 ** Rollback the transaction in progress.  All cursors will be
50393 ** invalided by this operation.  Any attempt to use a cursor
50394 ** that was open at the beginning of this operation will result
50395 ** in an error.
50396 **
50397 ** This will release the write lock on the database file.  If there
50398 ** are no active cursors, it also releases the read lock.
50399 */
50400 SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p){
50401   int rc;
50402   BtShared *pBt = p->pBt;
50403   MemPage *pPage1;
50404
50405   sqlite3BtreeEnter(p);
50406   rc = saveAllCursors(pBt, 0, 0);
50407 #ifndef SQLITE_OMIT_SHARED_CACHE
50408   if( rc!=SQLITE_OK ){
50409     /* This is a horrible situation. An IO or malloc() error occurred whilst
50410     ** trying to save cursor positions. If this is an automatic rollback (as
50411     ** the result of a constraint, malloc() failure or IO error) then 
50412     ** the cache may be internally inconsistent (not contain valid trees) so
50413     ** we cannot simply return the error to the caller. Instead, abort 
50414     ** all queries that may be using any of the cursors that failed to save.
50415     */
50416     sqlite3BtreeTripAllCursors(p, rc);
50417   }
50418 #endif
50419   btreeIntegrity(p);
50420
50421   if( p->inTrans==TRANS_WRITE ){
50422     int rc2;
50423
50424     assert( TRANS_WRITE==pBt->inTransaction );
50425     rc2 = sqlite3PagerRollback(pBt->pPager);
50426     if( rc2!=SQLITE_OK ){
50427       rc = rc2;
50428     }
50429
50430     /* The rollback may have destroyed the pPage1->aData value.  So
50431     ** call btreeGetPage() on page 1 again to make
50432     ** sure pPage1->aData is set correctly. */
50433     if( btreeGetPage(pBt, 1, &pPage1, 0)==SQLITE_OK ){
50434       int nPage = get4byte(28+(u8*)pPage1->aData);
50435       testcase( nPage==0 );
50436       if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage);
50437       testcase( pBt->nPage!=nPage );
50438       pBt->nPage = nPage;
50439       releasePage(pPage1);
50440     }
50441     assert( countWriteCursors(pBt)==0 );
50442     pBt->inTransaction = TRANS_READ;
50443   }
50444
50445   btreeEndTransaction(p);
50446   sqlite3BtreeLeave(p);
50447   return rc;
50448 }
50449
50450 /*
50451 ** Start a statement subtransaction. The subtransaction can can be rolled
50452 ** back independently of the main transaction. You must start a transaction 
50453 ** before starting a subtransaction. The subtransaction is ended automatically 
50454 ** if the main transaction commits or rolls back.
50455 **
50456 ** Statement subtransactions are used around individual SQL statements
50457 ** that are contained within a BEGIN...COMMIT block.  If a constraint
50458 ** error occurs within the statement, the effect of that one statement
50459 ** can be rolled back without having to rollback the entire transaction.
50460 **
50461 ** A statement sub-transaction is implemented as an anonymous savepoint. The
50462 ** value passed as the second parameter is the total number of savepoints,
50463 ** including the new anonymous savepoint, open on the B-Tree. i.e. if there
50464 ** are no active savepoints and no other statement-transactions open,
50465 ** iStatement is 1. This anonymous savepoint can be released or rolled back
50466 ** using the sqlite3BtreeSavepoint() function.
50467 */
50468 SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree *p, int iStatement){
50469   int rc;
50470   BtShared *pBt = p->pBt;
50471   sqlite3BtreeEnter(p);
50472   assert( p->inTrans==TRANS_WRITE );
50473   assert( pBt->readOnly==0 );
50474   assert( iStatement>0 );
50475   assert( iStatement>p->db->nSavepoint );
50476   assert( pBt->inTransaction==TRANS_WRITE );
50477   /* At the pager level, a statement transaction is a savepoint with
50478   ** an index greater than all savepoints created explicitly using
50479   ** SQL statements. It is illegal to open, release or rollback any
50480   ** such savepoints while the statement transaction savepoint is active.
50481   */
50482   rc = sqlite3PagerOpenSavepoint(pBt->pPager, iStatement);
50483   sqlite3BtreeLeave(p);
50484   return rc;
50485 }
50486
50487 /*
50488 ** The second argument to this function, op, is always SAVEPOINT_ROLLBACK
50489 ** or SAVEPOINT_RELEASE. This function either releases or rolls back the
50490 ** savepoint identified by parameter iSavepoint, depending on the value 
50491 ** of op.
50492 **
50493 ** Normally, iSavepoint is greater than or equal to zero. However, if op is
50494 ** SAVEPOINT_ROLLBACK, then iSavepoint may also be -1. In this case the 
50495 ** contents of the entire transaction are rolled back. This is different
50496 ** from a normal transaction rollback, as no locks are released and the
50497 ** transaction remains open.
50498 */
50499 SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){
50500   int rc = SQLITE_OK;
50501   if( p && p->inTrans==TRANS_WRITE ){
50502     BtShared *pBt = p->pBt;
50503     assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK );
50504     assert( iSavepoint>=0 || (iSavepoint==-1 && op==SAVEPOINT_ROLLBACK) );
50505     sqlite3BtreeEnter(p);
50506     rc = sqlite3PagerSavepoint(pBt->pPager, op, iSavepoint);
50507     if( rc==SQLITE_OK ){
50508       if( iSavepoint<0 && pBt->initiallyEmpty ) pBt->nPage = 0;
50509       rc = newDatabase(pBt);
50510       pBt->nPage = get4byte(28 + pBt->pPage1->aData);
50511
50512       /* The database size was written into the offset 28 of the header
50513       ** when the transaction started, so we know that the value at offset
50514       ** 28 is nonzero. */
50515       assert( pBt->nPage>0 );
50516     }
50517     sqlite3BtreeLeave(p);
50518   }
50519   return rc;
50520 }
50521
50522 /*
50523 ** Create a new cursor for the BTree whose root is on the page
50524 ** iTable. If a read-only cursor is requested, it is assumed that
50525 ** the caller already has at least a read-only transaction open
50526 ** on the database already. If a write-cursor is requested, then
50527 ** the caller is assumed to have an open write transaction.
50528 **
50529 ** If wrFlag==0, then the cursor can only be used for reading.
50530 ** If wrFlag==1, then the cursor can be used for reading or for
50531 ** writing if other conditions for writing are also met.  These
50532 ** are the conditions that must be met in order for writing to
50533 ** be allowed:
50534 **
50535 ** 1:  The cursor must have been opened with wrFlag==1
50536 **
50537 ** 2:  Other database connections that share the same pager cache
50538 **     but which are not in the READ_UNCOMMITTED state may not have
50539 **     cursors open with wrFlag==0 on the same table.  Otherwise
50540 **     the changes made by this write cursor would be visible to
50541 **     the read cursors in the other database connection.
50542 **
50543 ** 3:  The database must be writable (not on read-only media)
50544 **
50545 ** 4:  There must be an active transaction.
50546 **
50547 ** No checking is done to make sure that page iTable really is the
50548 ** root page of a b-tree.  If it is not, then the cursor acquired
50549 ** will not work correctly.
50550 **
50551 ** It is assumed that the sqlite3BtreeCursorZero() has been called
50552 ** on pCur to initialize the memory space prior to invoking this routine.
50553 */
50554 static int btreeCursor(
50555   Btree *p,                              /* The btree */
50556   int iTable,                            /* Root page of table to open */
50557   int wrFlag,                            /* 1 to write. 0 read-only */
50558   struct KeyInfo *pKeyInfo,              /* First arg to comparison function */
50559   BtCursor *pCur                         /* Space for new cursor */
50560 ){
50561   BtShared *pBt = p->pBt;                /* Shared b-tree handle */
50562
50563   assert( sqlite3BtreeHoldsMutex(p) );
50564   assert( wrFlag==0 || wrFlag==1 );
50565
50566   /* The following assert statements verify that if this is a sharable 
50567   ** b-tree database, the connection is holding the required table locks, 
50568   ** and that no other connection has any open cursor that conflicts with 
50569   ** this lock.  */
50570   assert( hasSharedCacheTableLock(p, iTable, pKeyInfo!=0, wrFlag+1) );
50571   assert( wrFlag==0 || !hasReadConflicts(p, iTable) );
50572
50573   /* Assert that the caller has opened the required transaction. */
50574   assert( p->inTrans>TRANS_NONE );
50575   assert( wrFlag==0 || p->inTrans==TRANS_WRITE );
50576   assert( pBt->pPage1 && pBt->pPage1->aData );
50577
50578   if( NEVER(wrFlag && pBt->readOnly) ){
50579     return SQLITE_READONLY;
50580   }
50581   if( iTable==1 && btreePagecount(pBt)==0 ){
50582     return SQLITE_EMPTY;
50583   }
50584
50585   /* Now that no other errors can occur, finish filling in the BtCursor
50586   ** variables and link the cursor into the BtShared list.  */
50587   pCur->pgnoRoot = (Pgno)iTable;
50588   pCur->iPage = -1;
50589   pCur->pKeyInfo = pKeyInfo;
50590   pCur->pBtree = p;
50591   pCur->pBt = pBt;
50592   pCur->wrFlag = (u8)wrFlag;
50593   pCur->pNext = pBt->pCursor;
50594   if( pCur->pNext ){
50595     pCur->pNext->pPrev = pCur;
50596   }
50597   pBt->pCursor = pCur;
50598   pCur->eState = CURSOR_INVALID;
50599   pCur->cachedRowid = 0;
50600   return SQLITE_OK;
50601 }
50602 SQLITE_PRIVATE int sqlite3BtreeCursor(
50603   Btree *p,                                   /* The btree */
50604   int iTable,                                 /* Root page of table to open */
50605   int wrFlag,                                 /* 1 to write. 0 read-only */
50606   struct KeyInfo *pKeyInfo,                   /* First arg to xCompare() */
50607   BtCursor *pCur                              /* Write new cursor here */
50608 ){
50609   int rc;
50610   sqlite3BtreeEnter(p);
50611   rc = btreeCursor(p, iTable, wrFlag, pKeyInfo, pCur);
50612   sqlite3BtreeLeave(p);
50613   return rc;
50614 }
50615
50616 /*
50617 ** Return the size of a BtCursor object in bytes.
50618 **
50619 ** This interfaces is needed so that users of cursors can preallocate
50620 ** sufficient storage to hold a cursor.  The BtCursor object is opaque
50621 ** to users so they cannot do the sizeof() themselves - they must call
50622 ** this routine.
50623 */
50624 SQLITE_PRIVATE int sqlite3BtreeCursorSize(void){
50625   return ROUND8(sizeof(BtCursor));
50626 }
50627
50628 /*
50629 ** Initialize memory that will be converted into a BtCursor object.
50630 **
50631 ** The simple approach here would be to memset() the entire object
50632 ** to zero.  But it turns out that the apPage[] and aiIdx[] arrays
50633 ** do not need to be zeroed and they are large, so we can save a lot
50634 ** of run-time by skipping the initialization of those elements.
50635 */
50636 SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor *p){
50637   memset(p, 0, offsetof(BtCursor, iPage));
50638 }
50639
50640 /*
50641 ** Set the cached rowid value of every cursor in the same database file
50642 ** as pCur and having the same root page number as pCur.  The value is
50643 ** set to iRowid.
50644 **
50645 ** Only positive rowid values are considered valid for this cache.
50646 ** The cache is initialized to zero, indicating an invalid cache.
50647 ** A btree will work fine with zero or negative rowids.  We just cannot
50648 ** cache zero or negative rowids, which means tables that use zero or
50649 ** negative rowids might run a little slower.  But in practice, zero
50650 ** or negative rowids are very uncommon so this should not be a problem.
50651 */
50652 SQLITE_PRIVATE void sqlite3BtreeSetCachedRowid(BtCursor *pCur, sqlite3_int64 iRowid){
50653   BtCursor *p;
50654   for(p=pCur->pBt->pCursor; p; p=p->pNext){
50655     if( p->pgnoRoot==pCur->pgnoRoot ) p->cachedRowid = iRowid;
50656   }
50657   assert( pCur->cachedRowid==iRowid );
50658 }
50659
50660 /*
50661 ** Return the cached rowid for the given cursor.  A negative or zero
50662 ** return value indicates that the rowid cache is invalid and should be
50663 ** ignored.  If the rowid cache has never before been set, then a
50664 ** zero is returned.
50665 */
50666 SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeGetCachedRowid(BtCursor *pCur){
50667   return pCur->cachedRowid;
50668 }
50669
50670 /*
50671 ** Close a cursor.  The read lock on the database file is released
50672 ** when the last cursor is closed.
50673 */
50674 SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
50675   Btree *pBtree = pCur->pBtree;
50676   if( pBtree ){
50677     int i;
50678     BtShared *pBt = pCur->pBt;
50679     sqlite3BtreeEnter(pBtree);
50680     sqlite3BtreeClearCursor(pCur);
50681     if( pCur->pPrev ){
50682       pCur->pPrev->pNext = pCur->pNext;
50683     }else{
50684       pBt->pCursor = pCur->pNext;
50685     }
50686     if( pCur->pNext ){
50687       pCur->pNext->pPrev = pCur->pPrev;
50688     }
50689     for(i=0; i<=pCur->iPage; i++){
50690       releasePage(pCur->apPage[i]);
50691     }
50692     unlockBtreeIfUnused(pBt);
50693     invalidateOverflowCache(pCur);
50694     /* sqlite3_free(pCur); */
50695     sqlite3BtreeLeave(pBtree);
50696   }
50697   return SQLITE_OK;
50698 }
50699
50700 /*
50701 ** Make sure the BtCursor* given in the argument has a valid
50702 ** BtCursor.info structure.  If it is not already valid, call
50703 ** btreeParseCell() to fill it in.
50704 **
50705 ** BtCursor.info is a cache of the information in the current cell.
50706 ** Using this cache reduces the number of calls to btreeParseCell().
50707 **
50708 ** 2007-06-25:  There is a bug in some versions of MSVC that cause the
50709 ** compiler to crash when getCellInfo() is implemented as a macro.
50710 ** But there is a measureable speed advantage to using the macro on gcc
50711 ** (when less compiler optimizations like -Os or -O0 are used and the
50712 ** compiler is not doing agressive inlining.)  So we use a real function
50713 ** for MSVC and a macro for everything else.  Ticket #2457.
50714 */
50715 #ifndef NDEBUG
50716   static void assertCellInfo(BtCursor *pCur){
50717     CellInfo info;
50718     int iPage = pCur->iPage;
50719     memset(&info, 0, sizeof(info));
50720     btreeParseCell(pCur->apPage[iPage], pCur->aiIdx[iPage], &info);
50721     assert( memcmp(&info, &pCur->info, sizeof(info))==0 );
50722   }
50723 #else
50724   #define assertCellInfo(x)
50725 #endif
50726 #ifdef _MSC_VER
50727   /* Use a real function in MSVC to work around bugs in that compiler. */
50728   static void getCellInfo(BtCursor *pCur){
50729     if( pCur->info.nSize==0 ){
50730       int iPage = pCur->iPage;
50731       btreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info);
50732       pCur->validNKey = 1;
50733     }else{
50734       assertCellInfo(pCur);
50735     }
50736   }
50737 #else /* if not _MSC_VER */
50738   /* Use a macro in all other compilers so that the function is inlined */
50739 #define getCellInfo(pCur)                                                      \
50740   if( pCur->info.nSize==0 ){                                                   \
50741     int iPage = pCur->iPage;                                                   \
50742     btreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info); \
50743     pCur->validNKey = 1;                                                       \
50744   }else{                                                                       \
50745     assertCellInfo(pCur);                                                      \
50746   }
50747 #endif /* _MSC_VER */
50748
50749 #ifndef NDEBUG  /* The next routine used only within assert() statements */
50750 /*
50751 ** Return true if the given BtCursor is valid.  A valid cursor is one
50752 ** that is currently pointing to a row in a (non-empty) table.
50753 ** This is a verification routine is used only within assert() statements.
50754 */
50755 SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor *pCur){
50756   return pCur && pCur->eState==CURSOR_VALID;
50757 }
50758 #endif /* NDEBUG */
50759
50760 /*
50761 ** Set *pSize to the size of the buffer needed to hold the value of
50762 ** the key for the current entry.  If the cursor is not pointing
50763 ** to a valid entry, *pSize is set to 0. 
50764 **
50765 ** For a table with the INTKEY flag set, this routine returns the key
50766 ** itself, not the number of bytes in the key.
50767 **
50768 ** The caller must position the cursor prior to invoking this routine.
50769 ** 
50770 ** This routine cannot fail.  It always returns SQLITE_OK.  
50771 */
50772 SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor *pCur, i64 *pSize){
50773   assert( cursorHoldsMutex(pCur) );
50774   assert( pCur->eState==CURSOR_INVALID || pCur->eState==CURSOR_VALID );
50775   if( pCur->eState!=CURSOR_VALID ){
50776     *pSize = 0;
50777   }else{
50778     getCellInfo(pCur);
50779     *pSize = pCur->info.nKey;
50780   }
50781   return SQLITE_OK;
50782 }
50783
50784 /*
50785 ** Set *pSize to the number of bytes of data in the entry the
50786 ** cursor currently points to.
50787 **
50788 ** The caller must guarantee that the cursor is pointing to a non-NULL
50789 ** valid entry.  In other words, the calling procedure must guarantee
50790 ** that the cursor has Cursor.eState==CURSOR_VALID.
50791 **
50792 ** Failure is not possible.  This function always returns SQLITE_OK.
50793 ** It might just as well be a procedure (returning void) but we continue
50794 ** to return an integer result code for historical reasons.
50795 */
50796 SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor *pCur, u32 *pSize){
50797   assert( cursorHoldsMutex(pCur) );
50798   assert( pCur->eState==CURSOR_VALID );
50799   getCellInfo(pCur);
50800   *pSize = pCur->info.nData;
50801   return SQLITE_OK;
50802 }
50803
50804 /*
50805 ** Given the page number of an overflow page in the database (parameter
50806 ** ovfl), this function finds the page number of the next page in the 
50807 ** linked list of overflow pages. If possible, it uses the auto-vacuum
50808 ** pointer-map data instead of reading the content of page ovfl to do so. 
50809 **
50810 ** If an error occurs an SQLite error code is returned. Otherwise:
50811 **
50812 ** The page number of the next overflow page in the linked list is 
50813 ** written to *pPgnoNext. If page ovfl is the last page in its linked 
50814 ** list, *pPgnoNext is set to zero. 
50815 **
50816 ** If ppPage is not NULL, and a reference to the MemPage object corresponding
50817 ** to page number pOvfl was obtained, then *ppPage is set to point to that
50818 ** reference. It is the responsibility of the caller to call releasePage()
50819 ** on *ppPage to free the reference. In no reference was obtained (because
50820 ** the pointer-map was used to obtain the value for *pPgnoNext), then
50821 ** *ppPage is set to zero.
50822 */
50823 static int getOverflowPage(
50824   BtShared *pBt,               /* The database file */
50825   Pgno ovfl,                   /* Current overflow page number */
50826   MemPage **ppPage,            /* OUT: MemPage handle (may be NULL) */
50827   Pgno *pPgnoNext              /* OUT: Next overflow page number */
50828 ){
50829   Pgno next = 0;
50830   MemPage *pPage = 0;
50831   int rc = SQLITE_OK;
50832
50833   assert( sqlite3_mutex_held(pBt->mutex) );
50834   assert(pPgnoNext);
50835
50836 #ifndef SQLITE_OMIT_AUTOVACUUM
50837   /* Try to find the next page in the overflow list using the
50838   ** autovacuum pointer-map pages. Guess that the next page in 
50839   ** the overflow list is page number (ovfl+1). If that guess turns 
50840   ** out to be wrong, fall back to loading the data of page 
50841   ** number ovfl to determine the next page number.
50842   */
50843   if( pBt->autoVacuum ){
50844     Pgno pgno;
50845     Pgno iGuess = ovfl+1;
50846     u8 eType;
50847
50848     while( PTRMAP_ISPAGE(pBt, iGuess) || iGuess==PENDING_BYTE_PAGE(pBt) ){
50849       iGuess++;
50850     }
50851
50852     if( iGuess<=btreePagecount(pBt) ){
50853       rc = ptrmapGet(pBt, iGuess, &eType, &pgno);
50854       if( rc==SQLITE_OK && eType==PTRMAP_OVERFLOW2 && pgno==ovfl ){
50855         next = iGuess;
50856         rc = SQLITE_DONE;
50857       }
50858     }
50859   }
50860 #endif
50861
50862   assert( next==0 || rc==SQLITE_DONE );
50863   if( rc==SQLITE_OK ){
50864     rc = btreeGetPage(pBt, ovfl, &pPage, 0);
50865     assert( rc==SQLITE_OK || pPage==0 );
50866     if( rc==SQLITE_OK ){
50867       next = get4byte(pPage->aData);
50868     }
50869   }
50870
50871   *pPgnoNext = next;
50872   if( ppPage ){
50873     *ppPage = pPage;
50874   }else{
50875     releasePage(pPage);
50876   }
50877   return (rc==SQLITE_DONE ? SQLITE_OK : rc);
50878 }
50879
50880 /*
50881 ** Copy data from a buffer to a page, or from a page to a buffer.
50882 **
50883 ** pPayload is a pointer to data stored on database page pDbPage.
50884 ** If argument eOp is false, then nByte bytes of data are copied
50885 ** from pPayload to the buffer pointed at by pBuf. If eOp is true,
50886 ** then sqlite3PagerWrite() is called on pDbPage and nByte bytes
50887 ** of data are copied from the buffer pBuf to pPayload.
50888 **
50889 ** SQLITE_OK is returned on success, otherwise an error code.
50890 */
50891 static int copyPayload(
50892   void *pPayload,           /* Pointer to page data */
50893   void *pBuf,               /* Pointer to buffer */
50894   int nByte,                /* Number of bytes to copy */
50895   int eOp,                  /* 0 -> copy from page, 1 -> copy to page */
50896   DbPage *pDbPage           /* Page containing pPayload */
50897 ){
50898   if( eOp ){
50899     /* Copy data from buffer to page (a write operation) */
50900     int rc = sqlite3PagerWrite(pDbPage);
50901     if( rc!=SQLITE_OK ){
50902       return rc;
50903     }
50904     memcpy(pPayload, pBuf, nByte);
50905   }else{
50906     /* Copy data from page to buffer (a read operation) */
50907     memcpy(pBuf, pPayload, nByte);
50908   }
50909   return SQLITE_OK;
50910 }
50911
50912 /*
50913 ** This function is used to read or overwrite payload information
50914 ** for the entry that the pCur cursor is pointing to. If the eOp
50915 ** parameter is 0, this is a read operation (data copied into
50916 ** buffer pBuf). If it is non-zero, a write (data copied from
50917 ** buffer pBuf).
50918 **
50919 ** A total of "amt" bytes are read or written beginning at "offset".
50920 ** Data is read to or from the buffer pBuf.
50921 **
50922 ** The content being read or written might appear on the main page
50923 ** or be scattered out on multiple overflow pages.
50924 **
50925 ** If the BtCursor.isIncrblobHandle flag is set, and the current
50926 ** cursor entry uses one or more overflow pages, this function
50927 ** allocates space for and lazily popluates the overflow page-list 
50928 ** cache array (BtCursor.aOverflow). Subsequent calls use this
50929 ** cache to make seeking to the supplied offset more efficient.
50930 **
50931 ** Once an overflow page-list cache has been allocated, it may be
50932 ** invalidated if some other cursor writes to the same table, or if
50933 ** the cursor is moved to a different row. Additionally, in auto-vacuum
50934 ** mode, the following events may invalidate an overflow page-list cache.
50935 **
50936 **   * An incremental vacuum,
50937 **   * A commit in auto_vacuum="full" mode,
50938 **   * Creating a table (may require moving an overflow page).
50939 */
50940 static int accessPayload(
50941   BtCursor *pCur,      /* Cursor pointing to entry to read from */
50942   u32 offset,          /* Begin reading this far into payload */
50943   u32 amt,             /* Read this many bytes */
50944   unsigned char *pBuf, /* Write the bytes into this buffer */ 
50945   int eOp              /* zero to read. non-zero to write. */
50946 ){
50947   unsigned char *aPayload;
50948   int rc = SQLITE_OK;
50949   u32 nKey;
50950   int iIdx = 0;
50951   MemPage *pPage = pCur->apPage[pCur->iPage]; /* Btree page of current entry */
50952   BtShared *pBt = pCur->pBt;                  /* Btree this cursor belongs to */
50953
50954   assert( pPage );
50955   assert( pCur->eState==CURSOR_VALID );
50956   assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
50957   assert( cursorHoldsMutex(pCur) );
50958
50959   getCellInfo(pCur);
50960   aPayload = pCur->info.pCell + pCur->info.nHeader;
50961   nKey = (pPage->intKey ? 0 : (int)pCur->info.nKey);
50962
50963   if( NEVER(offset+amt > nKey+pCur->info.nData) 
50964    || &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize]
50965   ){
50966     /* Trying to read or write past the end of the data is an error */
50967     return SQLITE_CORRUPT_BKPT;
50968   }
50969
50970   /* Check if data must be read/written to/from the btree page itself. */
50971   if( offset<pCur->info.nLocal ){
50972     int a = amt;
50973     if( a+offset>pCur->info.nLocal ){
50974       a = pCur->info.nLocal - offset;
50975     }
50976     rc = copyPayload(&aPayload[offset], pBuf, a, eOp, pPage->pDbPage);
50977     offset = 0;
50978     pBuf += a;
50979     amt -= a;
50980   }else{
50981     offset -= pCur->info.nLocal;
50982   }
50983
50984   if( rc==SQLITE_OK && amt>0 ){
50985     const u32 ovflSize = pBt->usableSize - 4;  /* Bytes content per ovfl page */
50986     Pgno nextPage;
50987
50988     nextPage = get4byte(&aPayload[pCur->info.nLocal]);
50989
50990 #ifndef SQLITE_OMIT_INCRBLOB
50991     /* If the isIncrblobHandle flag is set and the BtCursor.aOverflow[]
50992     ** has not been allocated, allocate it now. The array is sized at
50993     ** one entry for each overflow page in the overflow chain. The
50994     ** page number of the first overflow page is stored in aOverflow[0],
50995     ** etc. A value of 0 in the aOverflow[] array means "not yet known"
50996     ** (the cache is lazily populated).
50997     */
50998     if( pCur->isIncrblobHandle && !pCur->aOverflow ){
50999       int nOvfl = (pCur->info.nPayload-pCur->info.nLocal+ovflSize-1)/ovflSize;
51000       pCur->aOverflow = (Pgno *)sqlite3MallocZero(sizeof(Pgno)*nOvfl);
51001       /* nOvfl is always positive.  If it were zero, fetchPayload would have
51002       ** been used instead of this routine. */
51003       if( ALWAYS(nOvfl) && !pCur->aOverflow ){
51004         rc = SQLITE_NOMEM;
51005       }
51006     }
51007
51008     /* If the overflow page-list cache has been allocated and the
51009     ** entry for the first required overflow page is valid, skip
51010     ** directly to it.
51011     */
51012     if( pCur->aOverflow && pCur->aOverflow[offset/ovflSize] ){
51013       iIdx = (offset/ovflSize);
51014       nextPage = pCur->aOverflow[iIdx];
51015       offset = (offset%ovflSize);
51016     }
51017 #endif
51018
51019     for( ; rc==SQLITE_OK && amt>0 && nextPage; iIdx++){
51020
51021 #ifndef SQLITE_OMIT_INCRBLOB
51022       /* If required, populate the overflow page-list cache. */
51023       if( pCur->aOverflow ){
51024         assert(!pCur->aOverflow[iIdx] || pCur->aOverflow[iIdx]==nextPage);
51025         pCur->aOverflow[iIdx] = nextPage;
51026       }
51027 #endif
51028
51029       if( offset>=ovflSize ){
51030         /* The only reason to read this page is to obtain the page
51031         ** number for the next page in the overflow chain. The page
51032         ** data is not required. So first try to lookup the overflow
51033         ** page-list cache, if any, then fall back to the getOverflowPage()
51034         ** function.
51035         */
51036 #ifndef SQLITE_OMIT_INCRBLOB
51037         if( pCur->aOverflow && pCur->aOverflow[iIdx+1] ){
51038           nextPage = pCur->aOverflow[iIdx+1];
51039         } else 
51040 #endif
51041           rc = getOverflowPage(pBt, nextPage, 0, &nextPage);
51042         offset -= ovflSize;
51043       }else{
51044         /* Need to read this page properly. It contains some of the
51045         ** range of data that is being read (eOp==0) or written (eOp!=0).
51046         */
51047         DbPage *pDbPage;
51048         int a = amt;
51049         rc = sqlite3PagerGet(pBt->pPager, nextPage, &pDbPage);
51050         if( rc==SQLITE_OK ){
51051           aPayload = sqlite3PagerGetData(pDbPage);
51052           nextPage = get4byte(aPayload);
51053           if( a + offset > ovflSize ){
51054             a = ovflSize - offset;
51055           }
51056           rc = copyPayload(&aPayload[offset+4], pBuf, a, eOp, pDbPage);
51057           sqlite3PagerUnref(pDbPage);
51058           offset = 0;
51059           amt -= a;
51060           pBuf += a;
51061         }
51062       }
51063     }
51064   }
51065
51066   if( rc==SQLITE_OK && amt>0 ){
51067     return SQLITE_CORRUPT_BKPT;
51068   }
51069   return rc;
51070 }
51071
51072 /*
51073 ** Read part of the key associated with cursor pCur.  Exactly
51074 ** "amt" bytes will be transfered into pBuf[].  The transfer
51075 ** begins at "offset".
51076 **
51077 ** The caller must ensure that pCur is pointing to a valid row
51078 ** in the table.
51079 **
51080 ** Return SQLITE_OK on success or an error code if anything goes
51081 ** wrong.  An error is returned if "offset+amt" is larger than
51082 ** the available payload.
51083 */
51084 SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
51085   assert( cursorHoldsMutex(pCur) );
51086   assert( pCur->eState==CURSOR_VALID );
51087   assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] );
51088   assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
51089   return accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0);
51090 }
51091
51092 /*
51093 ** Read part of the data associated with cursor pCur.  Exactly
51094 ** "amt" bytes will be transfered into pBuf[].  The transfer
51095 ** begins at "offset".
51096 **
51097 ** Return SQLITE_OK on success or an error code if anything goes
51098 ** wrong.  An error is returned if "offset+amt" is larger than
51099 ** the available payload.
51100 */
51101 SQLITE_PRIVATE int sqlite3BtreeData(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
51102   int rc;
51103
51104 #ifndef SQLITE_OMIT_INCRBLOB
51105   if ( pCur->eState==CURSOR_INVALID ){
51106     return SQLITE_ABORT;
51107   }
51108 #endif
51109
51110   assert( cursorHoldsMutex(pCur) );
51111   rc = restoreCursorPosition(pCur);
51112   if( rc==SQLITE_OK ){
51113     assert( pCur->eState==CURSOR_VALID );
51114     assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] );
51115     assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
51116     rc = accessPayload(pCur, offset, amt, pBuf, 0);
51117   }
51118   return rc;
51119 }
51120
51121 /*
51122 ** Return a pointer to payload information from the entry that the 
51123 ** pCur cursor is pointing to.  The pointer is to the beginning of
51124 ** the key if skipKey==0 and it points to the beginning of data if
51125 ** skipKey==1.  The number of bytes of available key/data is written
51126 ** into *pAmt.  If *pAmt==0, then the value returned will not be
51127 ** a valid pointer.
51128 **
51129 ** This routine is an optimization.  It is common for the entire key
51130 ** and data to fit on the local page and for there to be no overflow
51131 ** pages.  When that is so, this routine can be used to access the
51132 ** key and data without making a copy.  If the key and/or data spills
51133 ** onto overflow pages, then accessPayload() must be used to reassemble
51134 ** the key/data and copy it into a preallocated buffer.
51135 **
51136 ** The pointer returned by this routine looks directly into the cached
51137 ** page of the database.  The data might change or move the next time
51138 ** any btree routine is called.
51139 */
51140 static const unsigned char *fetchPayload(
51141   BtCursor *pCur,      /* Cursor pointing to entry to read from */
51142   int *pAmt,           /* Write the number of available bytes here */
51143   int skipKey          /* read beginning at data if this is true */
51144 ){
51145   unsigned char *aPayload;
51146   MemPage *pPage;
51147   u32 nKey;
51148   u32 nLocal;
51149
51150   assert( pCur!=0 && pCur->iPage>=0 && pCur->apPage[pCur->iPage]);
51151   assert( pCur->eState==CURSOR_VALID );
51152   assert( cursorHoldsMutex(pCur) );
51153   pPage = pCur->apPage[pCur->iPage];
51154   assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
51155   if( NEVER(pCur->info.nSize==0) ){
51156     btreeParseCell(pCur->apPage[pCur->iPage], pCur->aiIdx[pCur->iPage],
51157                    &pCur->info);
51158   }
51159   aPayload = pCur->info.pCell;
51160   aPayload += pCur->info.nHeader;
51161   if( pPage->intKey ){
51162     nKey = 0;
51163   }else{
51164     nKey = (int)pCur->info.nKey;
51165   }
51166   if( skipKey ){
51167     aPayload += nKey;
51168     nLocal = pCur->info.nLocal - nKey;
51169   }else{
51170     nLocal = pCur->info.nLocal;
51171     assert( nLocal<=nKey );
51172   }
51173   *pAmt = nLocal;
51174   return aPayload;
51175 }
51176
51177
51178 /*
51179 ** For the entry that cursor pCur is point to, return as
51180 ** many bytes of the key or data as are available on the local
51181 ** b-tree page.  Write the number of available bytes into *pAmt.
51182 **
51183 ** The pointer returned is ephemeral.  The key/data may move
51184 ** or be destroyed on the next call to any Btree routine,
51185 ** including calls from other threads against the same cache.
51186 ** Hence, a mutex on the BtShared should be held prior to calling
51187 ** this routine.
51188 **
51189 ** These routines is used to get quick access to key and data
51190 ** in the common case where no overflow pages are used.
51191 */
51192 SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor *pCur, int *pAmt){
51193   const void *p = 0;
51194   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
51195   assert( cursorHoldsMutex(pCur) );
51196   if( ALWAYS(pCur->eState==CURSOR_VALID) ){
51197     p = (const void*)fetchPayload(pCur, pAmt, 0);
51198   }
51199   return p;
51200 }
51201 SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor *pCur, int *pAmt){
51202   const void *p = 0;
51203   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
51204   assert( cursorHoldsMutex(pCur) );
51205   if( ALWAYS(pCur->eState==CURSOR_VALID) ){
51206     p = (const void*)fetchPayload(pCur, pAmt, 1);
51207   }
51208   return p;
51209 }
51210
51211
51212 /*
51213 ** Move the cursor down to a new child page.  The newPgno argument is the
51214 ** page number of the child page to move to.
51215 **
51216 ** This function returns SQLITE_CORRUPT if the page-header flags field of
51217 ** the new child page does not match the flags field of the parent (i.e.
51218 ** if an intkey page appears to be the parent of a non-intkey page, or
51219 ** vice-versa).
51220 */
51221 static int moveToChild(BtCursor *pCur, u32 newPgno){
51222   int rc;
51223   int i = pCur->iPage;
51224   MemPage *pNewPage;
51225   BtShared *pBt = pCur->pBt;
51226
51227   assert( cursorHoldsMutex(pCur) );
51228   assert( pCur->eState==CURSOR_VALID );
51229   assert( pCur->iPage<BTCURSOR_MAX_DEPTH );
51230   if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){
51231     return SQLITE_CORRUPT_BKPT;
51232   }
51233   rc = getAndInitPage(pBt, newPgno, &pNewPage);
51234   if( rc ) return rc;
51235   pCur->apPage[i+1] = pNewPage;
51236   pCur->aiIdx[i+1] = 0;
51237   pCur->iPage++;
51238
51239   pCur->info.nSize = 0;
51240   pCur->validNKey = 0;
51241   if( pNewPage->nCell<1 || pNewPage->intKey!=pCur->apPage[i]->intKey ){
51242     return SQLITE_CORRUPT_BKPT;
51243   }
51244   return SQLITE_OK;
51245 }
51246
51247 #ifndef NDEBUG
51248 /*
51249 ** Page pParent is an internal (non-leaf) tree page. This function 
51250 ** asserts that page number iChild is the left-child if the iIdx'th
51251 ** cell in page pParent. Or, if iIdx is equal to the total number of
51252 ** cells in pParent, that page number iChild is the right-child of
51253 ** the page.
51254 */
51255 static void assertParentIndex(MemPage *pParent, int iIdx, Pgno iChild){
51256   assert( iIdx<=pParent->nCell );
51257   if( iIdx==pParent->nCell ){
51258     assert( get4byte(&pParent->aData[pParent->hdrOffset+8])==iChild );
51259   }else{
51260     assert( get4byte(findCell(pParent, iIdx))==iChild );
51261   }
51262 }
51263 #else
51264 #  define assertParentIndex(x,y,z) 
51265 #endif
51266
51267 /*
51268 ** Move the cursor up to the parent page.
51269 **
51270 ** pCur->idx is set to the cell index that contains the pointer
51271 ** to the page we are coming from.  If we are coming from the
51272 ** right-most child page then pCur->idx is set to one more than
51273 ** the largest cell index.
51274 */
51275 static void moveToParent(BtCursor *pCur){
51276   assert( cursorHoldsMutex(pCur) );
51277   assert( pCur->eState==CURSOR_VALID );
51278   assert( pCur->iPage>0 );
51279   assert( pCur->apPage[pCur->iPage] );
51280   assertParentIndex(
51281     pCur->apPage[pCur->iPage-1], 
51282     pCur->aiIdx[pCur->iPage-1], 
51283     pCur->apPage[pCur->iPage]->pgno
51284   );
51285   releasePage(pCur->apPage[pCur->iPage]);
51286   pCur->iPage--;
51287   pCur->info.nSize = 0;
51288   pCur->validNKey = 0;
51289 }
51290
51291 /*
51292 ** Move the cursor to point to the root page of its b-tree structure.
51293 **
51294 ** If the table has a virtual root page, then the cursor is moved to point
51295 ** to the virtual root page instead of the actual root page. A table has a
51296 ** virtual root page when the actual root page contains no cells and a 
51297 ** single child page. This can only happen with the table rooted at page 1.
51298 **
51299 ** If the b-tree structure is empty, the cursor state is set to 
51300 ** CURSOR_INVALID. Otherwise, the cursor is set to point to the first
51301 ** cell located on the root (or virtual root) page and the cursor state
51302 ** is set to CURSOR_VALID.
51303 **
51304 ** If this function returns successfully, it may be assumed that the
51305 ** page-header flags indicate that the [virtual] root-page is the expected 
51306 ** kind of b-tree page (i.e. if when opening the cursor the caller did not
51307 ** specify a KeyInfo structure the flags byte is set to 0x05 or 0x0D,
51308 ** indicating a table b-tree, or if the caller did specify a KeyInfo 
51309 ** structure the flags byte is set to 0x02 or 0x0A, indicating an index
51310 ** b-tree).
51311 */
51312 static int moveToRoot(BtCursor *pCur){
51313   MemPage *pRoot;
51314   int rc = SQLITE_OK;
51315   Btree *p = pCur->pBtree;
51316   BtShared *pBt = p->pBt;
51317
51318   assert( cursorHoldsMutex(pCur) );
51319   assert( CURSOR_INVALID < CURSOR_REQUIRESEEK );
51320   assert( CURSOR_VALID   < CURSOR_REQUIRESEEK );
51321   assert( CURSOR_FAULT   > CURSOR_REQUIRESEEK );
51322   if( pCur->eState>=CURSOR_REQUIRESEEK ){
51323     if( pCur->eState==CURSOR_FAULT ){
51324       assert( pCur->skipNext!=SQLITE_OK );
51325       return pCur->skipNext;
51326     }
51327     sqlite3BtreeClearCursor(pCur);
51328   }
51329
51330   if( pCur->iPage>=0 ){
51331     int i;
51332     for(i=1; i<=pCur->iPage; i++){
51333       releasePage(pCur->apPage[i]);
51334     }
51335     pCur->iPage = 0;
51336   }else{
51337     rc = getAndInitPage(pBt, pCur->pgnoRoot, &pCur->apPage[0]);
51338     if( rc!=SQLITE_OK ){
51339       pCur->eState = CURSOR_INVALID;
51340       return rc;
51341     }
51342     pCur->iPage = 0;
51343
51344     /* If pCur->pKeyInfo is not NULL, then the caller that opened this cursor
51345     ** expected to open it on an index b-tree. Otherwise, if pKeyInfo is
51346     ** NULL, the caller expects a table b-tree. If this is not the case,
51347     ** return an SQLITE_CORRUPT error.  */
51348     assert( pCur->apPage[0]->intKey==1 || pCur->apPage[0]->intKey==0 );
51349     if( (pCur->pKeyInfo==0)!=pCur->apPage[0]->intKey ){
51350       return SQLITE_CORRUPT_BKPT;
51351     }
51352   }
51353
51354   /* Assert that the root page is of the correct type. This must be the
51355   ** case as the call to this function that loaded the root-page (either
51356   ** this call or a previous invocation) would have detected corruption 
51357   ** if the assumption were not true, and it is not possible for the flags 
51358   ** byte to have been modified while this cursor is holding a reference
51359   ** to the page.  */
51360   pRoot = pCur->apPage[0];
51361   assert( pRoot->pgno==pCur->pgnoRoot );
51362   assert( pRoot->isInit && (pCur->pKeyInfo==0)==pRoot->intKey );
51363
51364   pCur->aiIdx[0] = 0;
51365   pCur->info.nSize = 0;
51366   pCur->atLast = 0;
51367   pCur->validNKey = 0;
51368
51369   if( pRoot->nCell==0 && !pRoot->leaf ){
51370     Pgno subpage;
51371     if( pRoot->pgno!=1 ) return SQLITE_CORRUPT_BKPT;
51372     subpage = get4byte(&pRoot->aData[pRoot->hdrOffset+8]);
51373     pCur->eState = CURSOR_VALID;
51374     rc = moveToChild(pCur, subpage);
51375   }else{
51376     pCur->eState = ((pRoot->nCell>0)?CURSOR_VALID:CURSOR_INVALID);
51377   }
51378   return rc;
51379 }
51380
51381 /*
51382 ** Move the cursor down to the left-most leaf entry beneath the
51383 ** entry to which it is currently pointing.
51384 **
51385 ** The left-most leaf is the one with the smallest key - the first
51386 ** in ascending order.
51387 */
51388 static int moveToLeftmost(BtCursor *pCur){
51389   Pgno pgno;
51390   int rc = SQLITE_OK;
51391   MemPage *pPage;
51392
51393   assert( cursorHoldsMutex(pCur) );
51394   assert( pCur->eState==CURSOR_VALID );
51395   while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){
51396     assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
51397     pgno = get4byte(findCell(pPage, pCur->aiIdx[pCur->iPage]));
51398     rc = moveToChild(pCur, pgno);
51399   }
51400   return rc;
51401 }
51402
51403 /*
51404 ** Move the cursor down to the right-most leaf entry beneath the
51405 ** page to which it is currently pointing.  Notice the difference
51406 ** between moveToLeftmost() and moveToRightmost().  moveToLeftmost()
51407 ** finds the left-most entry beneath the *entry* whereas moveToRightmost()
51408 ** finds the right-most entry beneath the *page*.
51409 **
51410 ** The right-most entry is the one with the largest key - the last
51411 ** key in ascending order.
51412 */
51413 static int moveToRightmost(BtCursor *pCur){
51414   Pgno pgno;
51415   int rc = SQLITE_OK;
51416   MemPage *pPage = 0;
51417
51418   assert( cursorHoldsMutex(pCur) );
51419   assert( pCur->eState==CURSOR_VALID );
51420   while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){
51421     pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
51422     pCur->aiIdx[pCur->iPage] = pPage->nCell;
51423     rc = moveToChild(pCur, pgno);
51424   }
51425   if( rc==SQLITE_OK ){
51426     pCur->aiIdx[pCur->iPage] = pPage->nCell-1;
51427     pCur->info.nSize = 0;
51428     pCur->validNKey = 0;
51429   }
51430   return rc;
51431 }
51432
51433 /* Move the cursor to the first entry in the table.  Return SQLITE_OK
51434 ** on success.  Set *pRes to 0 if the cursor actually points to something
51435 ** or set *pRes to 1 if the table is empty.
51436 */
51437 SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){
51438   int rc;
51439
51440   assert( cursorHoldsMutex(pCur) );
51441   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
51442   rc = moveToRoot(pCur);
51443   if( rc==SQLITE_OK ){
51444     if( pCur->eState==CURSOR_INVALID ){
51445       assert( pCur->apPage[pCur->iPage]->nCell==0 );
51446       *pRes = 1;
51447     }else{
51448       assert( pCur->apPage[pCur->iPage]->nCell>0 );
51449       *pRes = 0;
51450       rc = moveToLeftmost(pCur);
51451     }
51452   }
51453   return rc;
51454 }
51455
51456 /* Move the cursor to the last entry in the table.  Return SQLITE_OK
51457 ** on success.  Set *pRes to 0 if the cursor actually points to something
51458 ** or set *pRes to 1 if the table is empty.
51459 */
51460 SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
51461   int rc;
51462  
51463   assert( cursorHoldsMutex(pCur) );
51464   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
51465
51466   /* If the cursor already points to the last entry, this is a no-op. */
51467   if( CURSOR_VALID==pCur->eState && pCur->atLast ){
51468 #ifdef SQLITE_DEBUG
51469     /* This block serves to assert() that the cursor really does point 
51470     ** to the last entry in the b-tree. */
51471     int ii;
51472     for(ii=0; ii<pCur->iPage; ii++){
51473       assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell );
51474     }
51475     assert( pCur->aiIdx[pCur->iPage]==pCur->apPage[pCur->iPage]->nCell-1 );
51476     assert( pCur->apPage[pCur->iPage]->leaf );
51477 #endif
51478     return SQLITE_OK;
51479   }
51480
51481   rc = moveToRoot(pCur);
51482   if( rc==SQLITE_OK ){
51483     if( CURSOR_INVALID==pCur->eState ){
51484       assert( pCur->apPage[pCur->iPage]->nCell==0 );
51485       *pRes = 1;
51486     }else{
51487       assert( pCur->eState==CURSOR_VALID );
51488       *pRes = 0;
51489       rc = moveToRightmost(pCur);
51490       pCur->atLast = rc==SQLITE_OK ?1:0;
51491     }
51492   }
51493   return rc;
51494 }
51495
51496 /* Move the cursor so that it points to an entry near the key 
51497 ** specified by pIdxKey or intKey.   Return a success code.
51498 **
51499 ** For INTKEY tables, the intKey parameter is used.  pIdxKey 
51500 ** must be NULL.  For index tables, pIdxKey is used and intKey
51501 ** is ignored.
51502 **
51503 ** If an exact match is not found, then the cursor is always
51504 ** left pointing at a leaf page which would hold the entry if it
51505 ** were present.  The cursor might point to an entry that comes
51506 ** before or after the key.
51507 **
51508 ** An integer is written into *pRes which is the result of
51509 ** comparing the key with the entry to which the cursor is 
51510 ** pointing.  The meaning of the integer written into
51511 ** *pRes is as follows:
51512 **
51513 **     *pRes<0      The cursor is left pointing at an entry that
51514 **                  is smaller than intKey/pIdxKey or if the table is empty
51515 **                  and the cursor is therefore left point to nothing.
51516 **
51517 **     *pRes==0     The cursor is left pointing at an entry that
51518 **                  exactly matches intKey/pIdxKey.
51519 **
51520 **     *pRes>0      The cursor is left pointing at an entry that
51521 **                  is larger than intKey/pIdxKey.
51522 **
51523 */
51524 SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
51525   BtCursor *pCur,          /* The cursor to be moved */
51526   UnpackedRecord *pIdxKey, /* Unpacked index key */
51527   i64 intKey,              /* The table key */
51528   int biasRight,           /* If true, bias the search to the high end */
51529   int *pRes                /* Write search results here */
51530 ){
51531   int rc;
51532
51533   assert( cursorHoldsMutex(pCur) );
51534   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
51535   assert( pRes );
51536   assert( (pIdxKey==0)==(pCur->pKeyInfo==0) );
51537
51538   /* If the cursor is already positioned at the point we are trying
51539   ** to move to, then just return without doing any work */
51540   if( pCur->eState==CURSOR_VALID && pCur->validNKey 
51541    && pCur->apPage[0]->intKey 
51542   ){
51543     if( pCur->info.nKey==intKey ){
51544       *pRes = 0;
51545       return SQLITE_OK;
51546     }
51547     if( pCur->atLast && pCur->info.nKey<intKey ){
51548       *pRes = -1;
51549       return SQLITE_OK;
51550     }
51551   }
51552
51553   rc = moveToRoot(pCur);
51554   if( rc ){
51555     return rc;
51556   }
51557   assert( pCur->apPage[pCur->iPage] );
51558   assert( pCur->apPage[pCur->iPage]->isInit );
51559   assert( pCur->apPage[pCur->iPage]->nCell>0 || pCur->eState==CURSOR_INVALID );
51560   if( pCur->eState==CURSOR_INVALID ){
51561     *pRes = -1;
51562     assert( pCur->apPage[pCur->iPage]->nCell==0 );
51563     return SQLITE_OK;
51564   }
51565   assert( pCur->apPage[0]->intKey || pIdxKey );
51566   for(;;){
51567     int lwr, upr;
51568     Pgno chldPg;
51569     MemPage *pPage = pCur->apPage[pCur->iPage];
51570     int c;
51571
51572     /* pPage->nCell must be greater than zero. If this is the root-page
51573     ** the cursor would have been INVALID above and this for(;;) loop
51574     ** not run. If this is not the root-page, then the moveToChild() routine
51575     ** would have already detected db corruption. Similarly, pPage must
51576     ** be the right kind (index or table) of b-tree page. Otherwise
51577     ** a moveToChild() or moveToRoot() call would have detected corruption.  */
51578     assert( pPage->nCell>0 );
51579     assert( pPage->intKey==(pIdxKey==0) );
51580     lwr = 0;
51581     upr = pPage->nCell-1;
51582     if( biasRight ){
51583       pCur->aiIdx[pCur->iPage] = (u16)upr;
51584     }else{
51585       pCur->aiIdx[pCur->iPage] = (u16)((upr+lwr)/2);
51586     }
51587     for(;;){
51588       int idx = pCur->aiIdx[pCur->iPage]; /* Index of current cell in pPage */
51589       u8 *pCell;                          /* Pointer to current cell in pPage */
51590
51591       pCur->info.nSize = 0;
51592       pCell = findCell(pPage, idx) + pPage->childPtrSize;
51593       if( pPage->intKey ){
51594         i64 nCellKey;
51595         if( pPage->hasData ){
51596           u32 dummy;
51597           pCell += getVarint32(pCell, dummy);
51598         }
51599         getVarint(pCell, (u64*)&nCellKey);
51600         if( nCellKey==intKey ){
51601           c = 0;
51602         }else if( nCellKey<intKey ){
51603           c = -1;
51604         }else{
51605           assert( nCellKey>intKey );
51606           c = +1;
51607         }
51608         pCur->validNKey = 1;
51609         pCur->info.nKey = nCellKey;
51610       }else{
51611         /* The maximum supported page-size is 65536 bytes. This means that
51612         ** the maximum number of record bytes stored on an index B-Tree
51613         ** page is less than 16384 bytes and may be stored as a 2-byte
51614         ** varint. This information is used to attempt to avoid parsing 
51615         ** the entire cell by checking for the cases where the record is 
51616         ** stored entirely within the b-tree page by inspecting the first 
51617         ** 2 bytes of the cell.
51618         */
51619         int nCell = pCell[0];
51620         if( !(nCell & 0x80) && nCell<=pPage->maxLocal ){
51621           /* This branch runs if the record-size field of the cell is a
51622           ** single byte varint and the record fits entirely on the main
51623           ** b-tree page.  */
51624           c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[1], pIdxKey);
51625         }else if( !(pCell[1] & 0x80) 
51626           && (nCell = ((nCell&0x7f)<<7) + pCell[1])<=pPage->maxLocal
51627         ){
51628           /* The record-size field is a 2 byte varint and the record 
51629           ** fits entirely on the main b-tree page.  */
51630           c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[2], pIdxKey);
51631         }else{
51632           /* The record flows over onto one or more overflow pages. In
51633           ** this case the whole cell needs to be parsed, a buffer allocated
51634           ** and accessPayload() used to retrieve the record into the
51635           ** buffer before VdbeRecordCompare() can be called. */
51636           void *pCellKey;
51637           u8 * const pCellBody = pCell - pPage->childPtrSize;
51638           btreeParseCellPtr(pPage, pCellBody, &pCur->info);
51639           nCell = (int)pCur->info.nKey;
51640           pCellKey = sqlite3Malloc( nCell );
51641           if( pCellKey==0 ){
51642             rc = SQLITE_NOMEM;
51643             goto moveto_finish;
51644           }
51645           rc = accessPayload(pCur, 0, nCell, (unsigned char*)pCellKey, 0);
51646           if( rc ){
51647             sqlite3_free(pCellKey);
51648             goto moveto_finish;
51649           }
51650           c = sqlite3VdbeRecordCompare(nCell, pCellKey, pIdxKey);
51651           sqlite3_free(pCellKey);
51652         }
51653       }
51654       if( c==0 ){
51655         if( pPage->intKey && !pPage->leaf ){
51656           lwr = idx;
51657           upr = lwr - 1;
51658           break;
51659         }else{
51660           *pRes = 0;
51661           rc = SQLITE_OK;
51662           goto moveto_finish;
51663         }
51664       }
51665       if( c<0 ){
51666         lwr = idx+1;
51667       }else{
51668         upr = idx-1;
51669       }
51670       if( lwr>upr ){
51671         break;
51672       }
51673       pCur->aiIdx[pCur->iPage] = (u16)((lwr+upr)/2);
51674     }
51675     assert( lwr==upr+1 );
51676     assert( pPage->isInit );
51677     if( pPage->leaf ){
51678       chldPg = 0;
51679     }else if( lwr>=pPage->nCell ){
51680       chldPg = get4byte(&pPage->aData[pPage->hdrOffset+8]);
51681     }else{
51682       chldPg = get4byte(findCell(pPage, lwr));
51683     }
51684     if( chldPg==0 ){
51685       assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
51686       *pRes = c;
51687       rc = SQLITE_OK;
51688       goto moveto_finish;
51689     }
51690     pCur->aiIdx[pCur->iPage] = (u16)lwr;
51691     pCur->info.nSize = 0;
51692     pCur->validNKey = 0;
51693     rc = moveToChild(pCur, chldPg);
51694     if( rc ) goto moveto_finish;
51695   }
51696 moveto_finish:
51697   return rc;
51698 }
51699
51700
51701 /*
51702 ** Return TRUE if the cursor is not pointing at an entry of the table.
51703 **
51704 ** TRUE will be returned after a call to sqlite3BtreeNext() moves
51705 ** past the last entry in the table or sqlite3BtreePrev() moves past
51706 ** the first entry.  TRUE is also returned if the table is empty.
51707 */
51708 SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){
51709   /* TODO: What if the cursor is in CURSOR_REQUIRESEEK but all table entries
51710   ** have been deleted? This API will need to change to return an error code
51711   ** as well as the boolean result value.
51712   */
51713   return (CURSOR_VALID!=pCur->eState);
51714 }
51715
51716 /*
51717 ** Advance the cursor to the next entry in the database.  If
51718 ** successful then set *pRes=0.  If the cursor
51719 ** was already pointing to the last entry in the database before
51720 ** this routine was called, then set *pRes=1.
51721 */
51722 SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
51723   int rc;
51724   int idx;
51725   MemPage *pPage;
51726
51727   assert( cursorHoldsMutex(pCur) );
51728   rc = restoreCursorPosition(pCur);
51729   if( rc!=SQLITE_OK ){
51730     return rc;
51731   }
51732   assert( pRes!=0 );
51733   if( CURSOR_INVALID==pCur->eState ){
51734     *pRes = 1;
51735     return SQLITE_OK;
51736   }
51737   if( pCur->skipNext>0 ){
51738     pCur->skipNext = 0;
51739     *pRes = 0;
51740     return SQLITE_OK;
51741   }
51742   pCur->skipNext = 0;
51743
51744   pPage = pCur->apPage[pCur->iPage];
51745   idx = ++pCur->aiIdx[pCur->iPage];
51746   assert( pPage->isInit );
51747   assert( idx<=pPage->nCell );
51748
51749   pCur->info.nSize = 0;
51750   pCur->validNKey = 0;
51751   if( idx>=pPage->nCell ){
51752     if( !pPage->leaf ){
51753       rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8]));
51754       if( rc ) return rc;
51755       rc = moveToLeftmost(pCur);
51756       *pRes = 0;
51757       return rc;
51758     }
51759     do{
51760       if( pCur->iPage==0 ){
51761         *pRes = 1;
51762         pCur->eState = CURSOR_INVALID;
51763         return SQLITE_OK;
51764       }
51765       moveToParent(pCur);
51766       pPage = pCur->apPage[pCur->iPage];
51767     }while( pCur->aiIdx[pCur->iPage]>=pPage->nCell );
51768     *pRes = 0;
51769     if( pPage->intKey ){
51770       rc = sqlite3BtreeNext(pCur, pRes);
51771     }else{
51772       rc = SQLITE_OK;
51773     }
51774     return rc;
51775   }
51776   *pRes = 0;
51777   if( pPage->leaf ){
51778     return SQLITE_OK;
51779   }
51780   rc = moveToLeftmost(pCur);
51781   return rc;
51782 }
51783
51784
51785 /*
51786 ** Step the cursor to the back to the previous entry in the database.  If
51787 ** successful then set *pRes=0.  If the cursor
51788 ** was already pointing to the first entry in the database before
51789 ** this routine was called, then set *pRes=1.
51790 */
51791 SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
51792   int rc;
51793   MemPage *pPage;
51794
51795   assert( cursorHoldsMutex(pCur) );
51796   rc = restoreCursorPosition(pCur);
51797   if( rc!=SQLITE_OK ){
51798     return rc;
51799   }
51800   pCur->atLast = 0;
51801   if( CURSOR_INVALID==pCur->eState ){
51802     *pRes = 1;
51803     return SQLITE_OK;
51804   }
51805   if( pCur->skipNext<0 ){
51806     pCur->skipNext = 0;
51807     *pRes = 0;
51808     return SQLITE_OK;
51809   }
51810   pCur->skipNext = 0;
51811
51812   pPage = pCur->apPage[pCur->iPage];
51813   assert( pPage->isInit );
51814   if( !pPage->leaf ){
51815     int idx = pCur->aiIdx[pCur->iPage];
51816     rc = moveToChild(pCur, get4byte(findCell(pPage, idx)));
51817     if( rc ){
51818       return rc;
51819     }
51820     rc = moveToRightmost(pCur);
51821   }else{
51822     while( pCur->aiIdx[pCur->iPage]==0 ){
51823       if( pCur->iPage==0 ){
51824         pCur->eState = CURSOR_INVALID;
51825         *pRes = 1;
51826         return SQLITE_OK;
51827       }
51828       moveToParent(pCur);
51829     }
51830     pCur->info.nSize = 0;
51831     pCur->validNKey = 0;
51832
51833     pCur->aiIdx[pCur->iPage]--;
51834     pPage = pCur->apPage[pCur->iPage];
51835     if( pPage->intKey && !pPage->leaf ){
51836       rc = sqlite3BtreePrevious(pCur, pRes);
51837     }else{
51838       rc = SQLITE_OK;
51839     }
51840   }
51841   *pRes = 0;
51842   return rc;
51843 }
51844
51845 /*
51846 ** Allocate a new page from the database file.
51847 **
51848 ** The new page is marked as dirty.  (In other words, sqlite3PagerWrite()
51849 ** has already been called on the new page.)  The new page has also
51850 ** been referenced and the calling routine is responsible for calling
51851 ** sqlite3PagerUnref() on the new page when it is done.
51852 **
51853 ** SQLITE_OK is returned on success.  Any other return value indicates
51854 ** an error.  *ppPage and *pPgno are undefined in the event of an error.
51855 ** Do not invoke sqlite3PagerUnref() on *ppPage if an error is returned.
51856 **
51857 ** If the "nearby" parameter is not 0, then a (feeble) effort is made to 
51858 ** locate a page close to the page number "nearby".  This can be used in an
51859 ** attempt to keep related pages close to each other in the database file,
51860 ** which in turn can make database access faster.
51861 **
51862 ** If the "exact" parameter is not 0, and the page-number nearby exists 
51863 ** anywhere on the free-list, then it is guarenteed to be returned. This
51864 ** is only used by auto-vacuum databases when allocating a new table.
51865 */
51866 static int allocateBtreePage(
51867   BtShared *pBt, 
51868   MemPage **ppPage, 
51869   Pgno *pPgno, 
51870   Pgno nearby,
51871   u8 exact
51872 ){
51873   MemPage *pPage1;
51874   int rc;
51875   u32 n;     /* Number of pages on the freelist */
51876   u32 k;     /* Number of leaves on the trunk of the freelist */
51877   MemPage *pTrunk = 0;
51878   MemPage *pPrevTrunk = 0;
51879   Pgno mxPage;     /* Total size of the database file */
51880
51881   assert( sqlite3_mutex_held(pBt->mutex) );
51882   pPage1 = pBt->pPage1;
51883   mxPage = btreePagecount(pBt);
51884   n = get4byte(&pPage1->aData[36]);
51885   testcase( n==mxPage-1 );
51886   if( n>=mxPage ){
51887     return SQLITE_CORRUPT_BKPT;
51888   }
51889   if( n>0 ){
51890     /* There are pages on the freelist.  Reuse one of those pages. */
51891     Pgno iTrunk;
51892     u8 searchList = 0; /* If the free-list must be searched for 'nearby' */
51893     
51894     /* If the 'exact' parameter was true and a query of the pointer-map
51895     ** shows that the page 'nearby' is somewhere on the free-list, then
51896     ** the entire-list will be searched for that page.
51897     */
51898 #ifndef SQLITE_OMIT_AUTOVACUUM
51899     if( exact && nearby<=mxPage ){
51900       u8 eType;
51901       assert( nearby>0 );
51902       assert( pBt->autoVacuum );
51903       rc = ptrmapGet(pBt, nearby, &eType, 0);
51904       if( rc ) return rc;
51905       if( eType==PTRMAP_FREEPAGE ){
51906         searchList = 1;
51907       }
51908       *pPgno = nearby;
51909     }
51910 #endif
51911
51912     /* Decrement the free-list count by 1. Set iTrunk to the index of the
51913     ** first free-list trunk page. iPrevTrunk is initially 1.
51914     */
51915     rc = sqlite3PagerWrite(pPage1->pDbPage);
51916     if( rc ) return rc;
51917     put4byte(&pPage1->aData[36], n-1);
51918
51919     /* The code within this loop is run only once if the 'searchList' variable
51920     ** is not true. Otherwise, it runs once for each trunk-page on the
51921     ** free-list until the page 'nearby' is located.
51922     */
51923     do {
51924       pPrevTrunk = pTrunk;
51925       if( pPrevTrunk ){
51926         iTrunk = get4byte(&pPrevTrunk->aData[0]);
51927       }else{
51928         iTrunk = get4byte(&pPage1->aData[32]);
51929       }
51930       testcase( iTrunk==mxPage );
51931       if( iTrunk>mxPage ){
51932         rc = SQLITE_CORRUPT_BKPT;
51933       }else{
51934         rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0);
51935       }
51936       if( rc ){
51937         pTrunk = 0;
51938         goto end_allocate_page;
51939       }
51940
51941       k = get4byte(&pTrunk->aData[4]); /* # of leaves on this trunk page */
51942       if( k==0 && !searchList ){
51943         /* The trunk has no leaves and the list is not being searched. 
51944         ** So extract the trunk page itself and use it as the newly 
51945         ** allocated page */
51946         assert( pPrevTrunk==0 );
51947         rc = sqlite3PagerWrite(pTrunk->pDbPage);
51948         if( rc ){
51949           goto end_allocate_page;
51950         }
51951         *pPgno = iTrunk;
51952         memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4);
51953         *ppPage = pTrunk;
51954         pTrunk = 0;
51955         TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1));
51956       }else if( k>(u32)(pBt->usableSize/4 - 2) ){
51957         /* Value of k is out of range.  Database corruption */
51958         rc = SQLITE_CORRUPT_BKPT;
51959         goto end_allocate_page;
51960 #ifndef SQLITE_OMIT_AUTOVACUUM
51961       }else if( searchList && nearby==iTrunk ){
51962         /* The list is being searched and this trunk page is the page
51963         ** to allocate, regardless of whether it has leaves.
51964         */
51965         assert( *pPgno==iTrunk );
51966         *ppPage = pTrunk;
51967         searchList = 0;
51968         rc = sqlite3PagerWrite(pTrunk->pDbPage);
51969         if( rc ){
51970           goto end_allocate_page;
51971         }
51972         if( k==0 ){
51973           if( !pPrevTrunk ){
51974             memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4);
51975           }else{
51976             rc = sqlite3PagerWrite(pPrevTrunk->pDbPage);
51977             if( rc!=SQLITE_OK ){
51978               goto end_allocate_page;
51979             }
51980             memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4);
51981           }
51982         }else{
51983           /* The trunk page is required by the caller but it contains 
51984           ** pointers to free-list leaves. The first leaf becomes a trunk
51985           ** page in this case.
51986           */
51987           MemPage *pNewTrunk;
51988           Pgno iNewTrunk = get4byte(&pTrunk->aData[8]);
51989           if( iNewTrunk>mxPage ){ 
51990             rc = SQLITE_CORRUPT_BKPT;
51991             goto end_allocate_page;
51992           }
51993           testcase( iNewTrunk==mxPage );
51994           rc = btreeGetPage(pBt, iNewTrunk, &pNewTrunk, 0);
51995           if( rc!=SQLITE_OK ){
51996             goto end_allocate_page;
51997           }
51998           rc = sqlite3PagerWrite(pNewTrunk->pDbPage);
51999           if( rc!=SQLITE_OK ){
52000             releasePage(pNewTrunk);
52001             goto end_allocate_page;
52002           }
52003           memcpy(&pNewTrunk->aData[0], &pTrunk->aData[0], 4);
52004           put4byte(&pNewTrunk->aData[4], k-1);
52005           memcpy(&pNewTrunk->aData[8], &pTrunk->aData[12], (k-1)*4);
52006           releasePage(pNewTrunk);
52007           if( !pPrevTrunk ){
52008             assert( sqlite3PagerIswriteable(pPage1->pDbPage) );
52009             put4byte(&pPage1->aData[32], iNewTrunk);
52010           }else{
52011             rc = sqlite3PagerWrite(pPrevTrunk->pDbPage);
52012             if( rc ){
52013               goto end_allocate_page;
52014             }
52015             put4byte(&pPrevTrunk->aData[0], iNewTrunk);
52016           }
52017         }
52018         pTrunk = 0;
52019         TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1));
52020 #endif
52021       }else if( k>0 ){
52022         /* Extract a leaf from the trunk */
52023         u32 closest;
52024         Pgno iPage;
52025         unsigned char *aData = pTrunk->aData;
52026         if( nearby>0 ){
52027           u32 i;
52028           int dist;
52029           closest = 0;
52030           dist = sqlite3AbsInt32(get4byte(&aData[8]) - nearby);
52031           for(i=1; i<k; i++){
52032             int d2 = sqlite3AbsInt32(get4byte(&aData[8+i*4]) - nearby);
52033             if( d2<dist ){
52034               closest = i;
52035               dist = d2;
52036             }
52037           }
52038         }else{
52039           closest = 0;
52040         }
52041
52042         iPage = get4byte(&aData[8+closest*4]);
52043         testcase( iPage==mxPage );
52044         if( iPage>mxPage ){
52045           rc = SQLITE_CORRUPT_BKPT;
52046           goto end_allocate_page;
52047         }
52048         testcase( iPage==mxPage );
52049         if( !searchList || iPage==nearby ){
52050           int noContent;
52051           *pPgno = iPage;
52052           TRACE(("ALLOCATE: %d was leaf %d of %d on trunk %d"
52053                  ": %d more free pages\n",
52054                  *pPgno, closest+1, k, pTrunk->pgno, n-1));
52055           rc = sqlite3PagerWrite(pTrunk->pDbPage);
52056           if( rc ) goto end_allocate_page;
52057           if( closest<k-1 ){
52058             memcpy(&aData[8+closest*4], &aData[4+k*4], 4);
52059           }
52060           put4byte(&aData[4], k-1);
52061           noContent = !btreeGetHasContent(pBt, *pPgno);
52062           rc = btreeGetPage(pBt, *pPgno, ppPage, noContent);
52063           if( rc==SQLITE_OK ){
52064             rc = sqlite3PagerWrite((*ppPage)->pDbPage);
52065             if( rc!=SQLITE_OK ){
52066               releasePage(*ppPage);
52067             }
52068           }
52069           searchList = 0;
52070         }
52071       }
52072       releasePage(pPrevTrunk);
52073       pPrevTrunk = 0;
52074     }while( searchList );
52075   }else{
52076     /* There are no pages on the freelist, so create a new page at the
52077     ** end of the file */
52078     rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
52079     if( rc ) return rc;
52080     pBt->nPage++;
52081     if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ) pBt->nPage++;
52082
52083 #ifndef SQLITE_OMIT_AUTOVACUUM
52084     if( pBt->autoVacuum && PTRMAP_ISPAGE(pBt, pBt->nPage) ){
52085       /* If *pPgno refers to a pointer-map page, allocate two new pages
52086       ** at the end of the file instead of one. The first allocated page
52087       ** becomes a new pointer-map page, the second is used by the caller.
52088       */
52089       MemPage *pPg = 0;
52090       TRACE(("ALLOCATE: %d from end of file (pointer-map page)\n", pBt->nPage));
52091       assert( pBt->nPage!=PENDING_BYTE_PAGE(pBt) );
52092       rc = btreeGetPage(pBt, pBt->nPage, &pPg, 1);
52093       if( rc==SQLITE_OK ){
52094         rc = sqlite3PagerWrite(pPg->pDbPage);
52095         releasePage(pPg);
52096       }
52097       if( rc ) return rc;
52098       pBt->nPage++;
52099       if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ){ pBt->nPage++; }
52100     }
52101 #endif
52102     put4byte(28 + (u8*)pBt->pPage1->aData, pBt->nPage);
52103     *pPgno = pBt->nPage;
52104
52105     assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );
52106     rc = btreeGetPage(pBt, *pPgno, ppPage, 1);
52107     if( rc ) return rc;
52108     rc = sqlite3PagerWrite((*ppPage)->pDbPage);
52109     if( rc!=SQLITE_OK ){
52110       releasePage(*ppPage);
52111     }
52112     TRACE(("ALLOCATE: %d from end of file\n", *pPgno));
52113   }
52114
52115   assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );
52116
52117 end_allocate_page:
52118   releasePage(pTrunk);
52119   releasePage(pPrevTrunk);
52120   if( rc==SQLITE_OK ){
52121     if( sqlite3PagerPageRefcount((*ppPage)->pDbPage)>1 ){
52122       releasePage(*ppPage);
52123       return SQLITE_CORRUPT_BKPT;
52124     }
52125     (*ppPage)->isInit = 0;
52126   }else{
52127     *ppPage = 0;
52128   }
52129   assert( rc!=SQLITE_OK || sqlite3PagerIswriteable((*ppPage)->pDbPage) );
52130   return rc;
52131 }
52132
52133 /*
52134 ** This function is used to add page iPage to the database file free-list. 
52135 ** It is assumed that the page is not already a part of the free-list.
52136 **
52137 ** The value passed as the second argument to this function is optional.
52138 ** If the caller happens to have a pointer to the MemPage object 
52139 ** corresponding to page iPage handy, it may pass it as the second value. 
52140 ** Otherwise, it may pass NULL.
52141 **
52142 ** If a pointer to a MemPage object is passed as the second argument,
52143 ** its reference count is not altered by this function.
52144 */
52145 static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){
52146   MemPage *pTrunk = 0;                /* Free-list trunk page */
52147   Pgno iTrunk = 0;                    /* Page number of free-list trunk page */ 
52148   MemPage *pPage1 = pBt->pPage1;      /* Local reference to page 1 */
52149   MemPage *pPage;                     /* Page being freed. May be NULL. */
52150   int rc;                             /* Return Code */
52151   int nFree;                          /* Initial number of pages on free-list */
52152
52153   assert( sqlite3_mutex_held(pBt->mutex) );
52154   assert( iPage>1 );
52155   assert( !pMemPage || pMemPage->pgno==iPage );
52156
52157   if( pMemPage ){
52158     pPage = pMemPage;
52159     sqlite3PagerRef(pPage->pDbPage);
52160   }else{
52161     pPage = btreePageLookup(pBt, iPage);
52162   }
52163
52164   /* Increment the free page count on pPage1 */
52165   rc = sqlite3PagerWrite(pPage1->pDbPage);
52166   if( rc ) goto freepage_out;
52167   nFree = get4byte(&pPage1->aData[36]);
52168   put4byte(&pPage1->aData[36], nFree+1);
52169
52170   if( pBt->secureDelete ){
52171     /* If the secure_delete option is enabled, then
52172     ** always fully overwrite deleted information with zeros.
52173     */
52174     if( (!pPage && ((rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0) )
52175      ||            ((rc = sqlite3PagerWrite(pPage->pDbPage))!=0)
52176     ){
52177       goto freepage_out;
52178     }
52179     memset(pPage->aData, 0, pPage->pBt->pageSize);
52180   }
52181
52182   /* If the database supports auto-vacuum, write an entry in the pointer-map
52183   ** to indicate that the page is free.
52184   */
52185   if( ISAUTOVACUUM ){
52186     ptrmapPut(pBt, iPage, PTRMAP_FREEPAGE, 0, &rc);
52187     if( rc ) goto freepage_out;
52188   }
52189
52190   /* Now manipulate the actual database free-list structure. There are two
52191   ** possibilities. If the free-list is currently empty, or if the first
52192   ** trunk page in the free-list is full, then this page will become a
52193   ** new free-list trunk page. Otherwise, it will become a leaf of the
52194   ** first trunk page in the current free-list. This block tests if it
52195   ** is possible to add the page as a new free-list leaf.
52196   */
52197   if( nFree!=0 ){
52198     u32 nLeaf;                /* Initial number of leaf cells on trunk page */
52199
52200     iTrunk = get4byte(&pPage1->aData[32]);
52201     rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0);
52202     if( rc!=SQLITE_OK ){
52203       goto freepage_out;
52204     }
52205
52206     nLeaf = get4byte(&pTrunk->aData[4]);
52207     assert( pBt->usableSize>32 );
52208     if( nLeaf > (u32)pBt->usableSize/4 - 2 ){
52209       rc = SQLITE_CORRUPT_BKPT;
52210       goto freepage_out;
52211     }
52212     if( nLeaf < (u32)pBt->usableSize/4 - 8 ){
52213       /* In this case there is room on the trunk page to insert the page
52214       ** being freed as a new leaf.
52215       **
52216       ** Note that the trunk page is not really full until it contains
52217       ** usableSize/4 - 2 entries, not usableSize/4 - 8 entries as we have
52218       ** coded.  But due to a coding error in versions of SQLite prior to
52219       ** 3.6.0, databases with freelist trunk pages holding more than
52220       ** usableSize/4 - 8 entries will be reported as corrupt.  In order
52221       ** to maintain backwards compatibility with older versions of SQLite,
52222       ** we will continue to restrict the number of entries to usableSize/4 - 8
52223       ** for now.  At some point in the future (once everyone has upgraded
52224       ** to 3.6.0 or later) we should consider fixing the conditional above
52225       ** to read "usableSize/4-2" instead of "usableSize/4-8".
52226       */
52227       rc = sqlite3PagerWrite(pTrunk->pDbPage);
52228       if( rc==SQLITE_OK ){
52229         put4byte(&pTrunk->aData[4], nLeaf+1);
52230         put4byte(&pTrunk->aData[8+nLeaf*4], iPage);
52231         if( pPage && !pBt->secureDelete ){
52232           sqlite3PagerDontWrite(pPage->pDbPage);
52233         }
52234         rc = btreeSetHasContent(pBt, iPage);
52235       }
52236       TRACE(("FREE-PAGE: %d leaf on trunk page %d\n",pPage->pgno,pTrunk->pgno));
52237       goto freepage_out;
52238     }
52239   }
52240
52241   /* If control flows to this point, then it was not possible to add the
52242   ** the page being freed as a leaf page of the first trunk in the free-list.
52243   ** Possibly because the free-list is empty, or possibly because the 
52244   ** first trunk in the free-list is full. Either way, the page being freed
52245   ** will become the new first trunk page in the free-list.
52246   */
52247   if( pPage==0 && SQLITE_OK!=(rc = btreeGetPage(pBt, iPage, &pPage, 0)) ){
52248     goto freepage_out;
52249   }
52250   rc = sqlite3PagerWrite(pPage->pDbPage);
52251   if( rc!=SQLITE_OK ){
52252     goto freepage_out;
52253   }
52254   put4byte(pPage->aData, iTrunk);
52255   put4byte(&pPage->aData[4], 0);
52256   put4byte(&pPage1->aData[32], iPage);
52257   TRACE(("FREE-PAGE: %d new trunk page replacing %d\n", pPage->pgno, iTrunk));
52258
52259 freepage_out:
52260   if( pPage ){
52261     pPage->isInit = 0;
52262   }
52263   releasePage(pPage);
52264   releasePage(pTrunk);
52265   return rc;
52266 }
52267 static void freePage(MemPage *pPage, int *pRC){
52268   if( (*pRC)==SQLITE_OK ){
52269     *pRC = freePage2(pPage->pBt, pPage, pPage->pgno);
52270   }
52271 }
52272
52273 /*
52274 ** Free any overflow pages associated with the given Cell.
52275 */
52276 static int clearCell(MemPage *pPage, unsigned char *pCell){
52277   BtShared *pBt = pPage->pBt;
52278   CellInfo info;
52279   Pgno ovflPgno;
52280   int rc;
52281   int nOvfl;
52282   u32 ovflPageSize;
52283
52284   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
52285   btreeParseCellPtr(pPage, pCell, &info);
52286   if( info.iOverflow==0 ){
52287     return SQLITE_OK;  /* No overflow pages. Return without doing anything */
52288   }
52289   ovflPgno = get4byte(&pCell[info.iOverflow]);
52290   assert( pBt->usableSize > 4 );
52291   ovflPageSize = pBt->usableSize - 4;
52292   nOvfl = (info.nPayload - info.nLocal + ovflPageSize - 1)/ovflPageSize;
52293   assert( ovflPgno==0 || nOvfl>0 );
52294   while( nOvfl-- ){
52295     Pgno iNext = 0;
52296     MemPage *pOvfl = 0;
52297     if( ovflPgno<2 || ovflPgno>btreePagecount(pBt) ){
52298       /* 0 is not a legal page number and page 1 cannot be an 
52299       ** overflow page. Therefore if ovflPgno<2 or past the end of the 
52300       ** file the database must be corrupt. */
52301       return SQLITE_CORRUPT_BKPT;
52302     }
52303     if( nOvfl ){
52304       rc = getOverflowPage(pBt, ovflPgno, &pOvfl, &iNext);
52305       if( rc ) return rc;
52306     }
52307
52308     if( ( pOvfl || ((pOvfl = btreePageLookup(pBt, ovflPgno))!=0) )
52309      && sqlite3PagerPageRefcount(pOvfl->pDbPage)!=1
52310     ){
52311       /* There is no reason any cursor should have an outstanding reference 
52312       ** to an overflow page belonging to a cell that is being deleted/updated.
52313       ** So if there exists more than one reference to this page, then it 
52314       ** must not really be an overflow page and the database must be corrupt. 
52315       ** It is helpful to detect this before calling freePage2(), as 
52316       ** freePage2() may zero the page contents if secure-delete mode is
52317       ** enabled. If this 'overflow' page happens to be a page that the
52318       ** caller is iterating through or using in some other way, this
52319       ** can be problematic.
52320       */
52321       rc = SQLITE_CORRUPT_BKPT;
52322     }else{
52323       rc = freePage2(pBt, pOvfl, ovflPgno);
52324     }
52325
52326     if( pOvfl ){
52327       sqlite3PagerUnref(pOvfl->pDbPage);
52328     }
52329     if( rc ) return rc;
52330     ovflPgno = iNext;
52331   }
52332   return SQLITE_OK;
52333 }
52334
52335 /*
52336 ** Create the byte sequence used to represent a cell on page pPage
52337 ** and write that byte sequence into pCell[].  Overflow pages are
52338 ** allocated and filled in as necessary.  The calling procedure
52339 ** is responsible for making sure sufficient space has been allocated
52340 ** for pCell[].
52341 **
52342 ** Note that pCell does not necessary need to point to the pPage->aData
52343 ** area.  pCell might point to some temporary storage.  The cell will
52344 ** be constructed in this temporary area then copied into pPage->aData
52345 ** later.
52346 */
52347 static int fillInCell(
52348   MemPage *pPage,                /* The page that contains the cell */
52349   unsigned char *pCell,          /* Complete text of the cell */
52350   const void *pKey, i64 nKey,    /* The key */
52351   const void *pData,int nData,   /* The data */
52352   int nZero,                     /* Extra zero bytes to append to pData */
52353   int *pnSize                    /* Write cell size here */
52354 ){
52355   int nPayload;
52356   const u8 *pSrc;
52357   int nSrc, n, rc;
52358   int spaceLeft;
52359   MemPage *pOvfl = 0;
52360   MemPage *pToRelease = 0;
52361   unsigned char *pPrior;
52362   unsigned char *pPayload;
52363   BtShared *pBt = pPage->pBt;
52364   Pgno pgnoOvfl = 0;
52365   int nHeader;
52366   CellInfo info;
52367
52368   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
52369
52370   /* pPage is not necessarily writeable since pCell might be auxiliary
52371   ** buffer space that is separate from the pPage buffer area */
52372   assert( pCell<pPage->aData || pCell>=&pPage->aData[pBt->pageSize]
52373             || sqlite3PagerIswriteable(pPage->pDbPage) );
52374
52375   /* Fill in the header. */
52376   nHeader = 0;
52377   if( !pPage->leaf ){
52378     nHeader += 4;
52379   }
52380   if( pPage->hasData ){
52381     nHeader += putVarint(&pCell[nHeader], nData+nZero);
52382   }else{
52383     nData = nZero = 0;
52384   }
52385   nHeader += putVarint(&pCell[nHeader], *(u64*)&nKey);
52386   btreeParseCellPtr(pPage, pCell, &info);
52387   assert( info.nHeader==nHeader );
52388   assert( info.nKey==nKey );
52389   assert( info.nData==(u32)(nData+nZero) );
52390   
52391   /* Fill in the payload */
52392   nPayload = nData + nZero;
52393   if( pPage->intKey ){
52394     pSrc = pData;
52395     nSrc = nData;
52396     nData = 0;
52397   }else{ 
52398     if( NEVER(nKey>0x7fffffff || pKey==0) ){
52399       return SQLITE_CORRUPT_BKPT;
52400     }
52401     nPayload += (int)nKey;
52402     pSrc = pKey;
52403     nSrc = (int)nKey;
52404   }
52405   *pnSize = info.nSize;
52406   spaceLeft = info.nLocal;
52407   pPayload = &pCell[nHeader];
52408   pPrior = &pCell[info.iOverflow];
52409
52410   while( nPayload>0 ){
52411     if( spaceLeft==0 ){
52412 #ifndef SQLITE_OMIT_AUTOVACUUM
52413       Pgno pgnoPtrmap = pgnoOvfl; /* Overflow page pointer-map entry page */
52414       if( pBt->autoVacuum ){
52415         do{
52416           pgnoOvfl++;
52417         } while( 
52418           PTRMAP_ISPAGE(pBt, pgnoOvfl) || pgnoOvfl==PENDING_BYTE_PAGE(pBt) 
52419         );
52420       }
52421 #endif
52422       rc = allocateBtreePage(pBt, &pOvfl, &pgnoOvfl, pgnoOvfl, 0);
52423 #ifndef SQLITE_OMIT_AUTOVACUUM
52424       /* If the database supports auto-vacuum, and the second or subsequent
52425       ** overflow page is being allocated, add an entry to the pointer-map
52426       ** for that page now. 
52427       **
52428       ** If this is the first overflow page, then write a partial entry 
52429       ** to the pointer-map. If we write nothing to this pointer-map slot,
52430       ** then the optimistic overflow chain processing in clearCell()
52431       ** may misinterpret the uninitialised values and delete the
52432       ** wrong pages from the database.
52433       */
52434       if( pBt->autoVacuum && rc==SQLITE_OK ){
52435         u8 eType = (pgnoPtrmap?PTRMAP_OVERFLOW2:PTRMAP_OVERFLOW1);
52436         ptrmapPut(pBt, pgnoOvfl, eType, pgnoPtrmap, &rc);
52437         if( rc ){
52438           releasePage(pOvfl);
52439         }
52440       }
52441 #endif
52442       if( rc ){
52443         releasePage(pToRelease);
52444         return rc;
52445       }
52446
52447       /* If pToRelease is not zero than pPrior points into the data area
52448       ** of pToRelease.  Make sure pToRelease is still writeable. */
52449       assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );
52450
52451       /* If pPrior is part of the data area of pPage, then make sure pPage
52452       ** is still writeable */
52453       assert( pPrior<pPage->aData || pPrior>=&pPage->aData[pBt->pageSize]
52454             || sqlite3PagerIswriteable(pPage->pDbPage) );
52455
52456       put4byte(pPrior, pgnoOvfl);
52457       releasePage(pToRelease);
52458       pToRelease = pOvfl;
52459       pPrior = pOvfl->aData;
52460       put4byte(pPrior, 0);
52461       pPayload = &pOvfl->aData[4];
52462       spaceLeft = pBt->usableSize - 4;
52463     }
52464     n = nPayload;
52465     if( n>spaceLeft ) n = spaceLeft;
52466
52467     /* If pToRelease is not zero than pPayload points into the data area
52468     ** of pToRelease.  Make sure pToRelease is still writeable. */
52469     assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );
52470
52471     /* If pPayload is part of the data area of pPage, then make sure pPage
52472     ** is still writeable */
52473     assert( pPayload<pPage->aData || pPayload>=&pPage->aData[pBt->pageSize]
52474             || sqlite3PagerIswriteable(pPage->pDbPage) );
52475
52476     if( nSrc>0 ){
52477       if( n>nSrc ) n = nSrc;
52478       assert( pSrc );
52479       memcpy(pPayload, pSrc, n);
52480     }else{
52481       memset(pPayload, 0, n);
52482     }
52483     nPayload -= n;
52484     pPayload += n;
52485     pSrc += n;
52486     nSrc -= n;
52487     spaceLeft -= n;
52488     if( nSrc==0 ){
52489       nSrc = nData;
52490       pSrc = pData;
52491     }
52492   }
52493   releasePage(pToRelease);
52494   return SQLITE_OK;
52495 }
52496
52497 /*
52498 ** Remove the i-th cell from pPage.  This routine effects pPage only.
52499 ** The cell content is not freed or deallocated.  It is assumed that
52500 ** the cell content has been copied someplace else.  This routine just
52501 ** removes the reference to the cell from pPage.
52502 **
52503 ** "sz" must be the number of bytes in the cell.
52504 */
52505 static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){
52506   int i;          /* Loop counter */
52507   u32 pc;         /* Offset to cell content of cell being deleted */
52508   u8 *data;       /* pPage->aData */
52509   u8 *ptr;        /* Used to move bytes around within data[] */
52510   int rc;         /* The return code */
52511   int hdr;        /* Beginning of the header.  0 most pages.  100 page 1 */
52512
52513   if( *pRC ) return;
52514
52515   assert( idx>=0 && idx<pPage->nCell );
52516   assert( sz==cellSize(pPage, idx) );
52517   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
52518   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
52519   data = pPage->aData;
52520   ptr = &data[pPage->cellOffset + 2*idx];
52521   pc = get2byte(ptr);
52522   hdr = pPage->hdrOffset;
52523   testcase( pc==get2byte(&data[hdr+5]) );
52524   testcase( pc+sz==pPage->pBt->usableSize );
52525   if( pc < (u32)get2byte(&data[hdr+5]) || pc+sz > pPage->pBt->usableSize ){
52526     *pRC = SQLITE_CORRUPT_BKPT;
52527     return;
52528   }
52529   rc = freeSpace(pPage, pc, sz);
52530   if( rc ){
52531     *pRC = rc;
52532     return;
52533   }
52534   for(i=idx+1; i<pPage->nCell; i++, ptr+=2){
52535     ptr[0] = ptr[2];
52536     ptr[1] = ptr[3];
52537   }
52538   pPage->nCell--;
52539   put2byte(&data[hdr+3], pPage->nCell);
52540   pPage->nFree += 2;
52541 }
52542
52543 /*
52544 ** Insert a new cell on pPage at cell index "i".  pCell points to the
52545 ** content of the cell.
52546 **
52547 ** If the cell content will fit on the page, then put it there.  If it
52548 ** will not fit, then make a copy of the cell content into pTemp if
52549 ** pTemp is not null.  Regardless of pTemp, allocate a new entry
52550 ** in pPage->aOvfl[] and make it point to the cell content (either
52551 ** in pTemp or the original pCell) and also record its index. 
52552 ** Allocating a new entry in pPage->aCell[] implies that 
52553 ** pPage->nOverflow is incremented.
52554 **
52555 ** If nSkip is non-zero, then do not copy the first nSkip bytes of the
52556 ** cell. The caller will overwrite them after this function returns. If
52557 ** nSkip is non-zero, then pCell may not point to an invalid memory location 
52558 ** (but pCell+nSkip is always valid).
52559 */
52560 static void insertCell(
52561   MemPage *pPage,   /* Page into which we are copying */
52562   int i,            /* New cell becomes the i-th cell of the page */
52563   u8 *pCell,        /* Content of the new cell */
52564   int sz,           /* Bytes of content in pCell */
52565   u8 *pTemp,        /* Temp storage space for pCell, if needed */
52566   Pgno iChild,      /* If non-zero, replace first 4 bytes with this value */
52567   int *pRC          /* Read and write return code from here */
52568 ){
52569   int idx = 0;      /* Where to write new cell content in data[] */
52570   int j;            /* Loop counter */
52571   int end;          /* First byte past the last cell pointer in data[] */
52572   int ins;          /* Index in data[] where new cell pointer is inserted */
52573   int cellOffset;   /* Address of first cell pointer in data[] */
52574   u8 *data;         /* The content of the whole page */
52575   u8 *ptr;          /* Used for moving information around in data[] */
52576
52577   int nSkip = (iChild ? 4 : 0);
52578
52579   if( *pRC ) return;
52580
52581   assert( i>=0 && i<=pPage->nCell+pPage->nOverflow );
52582   assert( pPage->nCell<=MX_CELL(pPage->pBt) && MX_CELL(pPage->pBt)<=10921 );
52583   assert( pPage->nOverflow<=ArraySize(pPage->aOvfl) );
52584   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
52585   /* The cell should normally be sized correctly.  However, when moving a
52586   ** malformed cell from a leaf page to an interior page, if the cell size
52587   ** wanted to be less than 4 but got rounded up to 4 on the leaf, then size
52588   ** might be less than 8 (leaf-size + pointer) on the interior node.  Hence
52589   ** the term after the || in the following assert(). */
52590   assert( sz==cellSizePtr(pPage, pCell) || (sz==8 && iChild>0) );
52591   if( pPage->nOverflow || sz+2>pPage->nFree ){
52592     if( pTemp ){
52593       memcpy(pTemp+nSkip, pCell+nSkip, sz-nSkip);
52594       pCell = pTemp;
52595     }
52596     if( iChild ){
52597       put4byte(pCell, iChild);
52598     }
52599     j = pPage->nOverflow++;
52600     assert( j<(int)(sizeof(pPage->aOvfl)/sizeof(pPage->aOvfl[0])) );
52601     pPage->aOvfl[j].pCell = pCell;
52602     pPage->aOvfl[j].idx = (u16)i;
52603   }else{
52604     int rc = sqlite3PagerWrite(pPage->pDbPage);
52605     if( rc!=SQLITE_OK ){
52606       *pRC = rc;
52607       return;
52608     }
52609     assert( sqlite3PagerIswriteable(pPage->pDbPage) );
52610     data = pPage->aData;
52611     cellOffset = pPage->cellOffset;
52612     end = cellOffset + 2*pPage->nCell;
52613     ins = cellOffset + 2*i;
52614     rc = allocateSpace(pPage, sz, &idx);
52615     if( rc ){ *pRC = rc; return; }
52616     /* The allocateSpace() routine guarantees the following two properties
52617     ** if it returns success */
52618     assert( idx >= end+2 );
52619     assert( idx+sz <= (int)pPage->pBt->usableSize );
52620     pPage->nCell++;
52621     pPage->nFree -= (u16)(2 + sz);
52622     memcpy(&data[idx+nSkip], pCell+nSkip, sz-nSkip);
52623     if( iChild ){
52624       put4byte(&data[idx], iChild);
52625     }
52626     for(j=end, ptr=&data[j]; j>ins; j-=2, ptr-=2){
52627       ptr[0] = ptr[-2];
52628       ptr[1] = ptr[-1];
52629     }
52630     put2byte(&data[ins], idx);
52631     put2byte(&data[pPage->hdrOffset+3], pPage->nCell);
52632 #ifndef SQLITE_OMIT_AUTOVACUUM
52633     if( pPage->pBt->autoVacuum ){
52634       /* The cell may contain a pointer to an overflow page. If so, write
52635       ** the entry for the overflow page into the pointer map.
52636       */
52637       ptrmapPutOvflPtr(pPage, pCell, pRC);
52638     }
52639 #endif
52640   }
52641 }
52642
52643 /*
52644 ** Add a list of cells to a page.  The page should be initially empty.
52645 ** The cells are guaranteed to fit on the page.
52646 */
52647 static void assemblePage(
52648   MemPage *pPage,   /* The page to be assemblied */
52649   int nCell,        /* The number of cells to add to this page */
52650   u8 **apCell,      /* Pointers to cell bodies */
52651   u16 *aSize        /* Sizes of the cells */
52652 ){
52653   int i;            /* Loop counter */
52654   u8 *pCellptr;     /* Address of next cell pointer */
52655   int cellbody;     /* Address of next cell body */
52656   u8 * const data = pPage->aData;             /* Pointer to data for pPage */
52657   const int hdr = pPage->hdrOffset;           /* Offset of header on pPage */
52658   const int nUsable = pPage->pBt->usableSize; /* Usable size of page */
52659
52660   assert( pPage->nOverflow==0 );
52661   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
52662   assert( nCell>=0 && nCell<=(int)MX_CELL(pPage->pBt)
52663             && (int)MX_CELL(pPage->pBt)<=10921);
52664   assert( sqlite3PagerIswriteable(pPage->pDbPage) );
52665
52666   /* Check that the page has just been zeroed by zeroPage() */
52667   assert( pPage->nCell==0 );
52668   assert( get2byteNotZero(&data[hdr+5])==nUsable );
52669
52670   pCellptr = &data[pPage->cellOffset + nCell*2];
52671   cellbody = nUsable;
52672   for(i=nCell-1; i>=0; i--){
52673     pCellptr -= 2;
52674     cellbody -= aSize[i];
52675     put2byte(pCellptr, cellbody);
52676     memcpy(&data[cellbody], apCell[i], aSize[i]);
52677   }
52678   put2byte(&data[hdr+3], nCell);
52679   put2byte(&data[hdr+5], cellbody);
52680   pPage->nFree -= (nCell*2 + nUsable - cellbody);
52681   pPage->nCell = (u16)nCell;
52682 }
52683
52684 /*
52685 ** The following parameters determine how many adjacent pages get involved
52686 ** in a balancing operation.  NN is the number of neighbors on either side
52687 ** of the page that participate in the balancing operation.  NB is the
52688 ** total number of pages that participate, including the target page and
52689 ** NN neighbors on either side.
52690 **
52691 ** The minimum value of NN is 1 (of course).  Increasing NN above 1
52692 ** (to 2 or 3) gives a modest improvement in SELECT and DELETE performance
52693 ** in exchange for a larger degradation in INSERT and UPDATE performance.
52694 ** The value of NN appears to give the best results overall.
52695 */
52696 #define NN 1             /* Number of neighbors on either side of pPage */
52697 #define NB (NN*2+1)      /* Total pages involved in the balance */
52698
52699
52700 #ifndef SQLITE_OMIT_QUICKBALANCE
52701 /*
52702 ** This version of balance() handles the common special case where
52703 ** a new entry is being inserted on the extreme right-end of the
52704 ** tree, in other words, when the new entry will become the largest
52705 ** entry in the tree.
52706 **
52707 ** Instead of trying to balance the 3 right-most leaf pages, just add
52708 ** a new page to the right-hand side and put the one new entry in
52709 ** that page.  This leaves the right side of the tree somewhat
52710 ** unbalanced.  But odds are that we will be inserting new entries
52711 ** at the end soon afterwards so the nearly empty page will quickly
52712 ** fill up.  On average.
52713 **
52714 ** pPage is the leaf page which is the right-most page in the tree.
52715 ** pParent is its parent.  pPage must have a single overflow entry
52716 ** which is also the right-most entry on the page.
52717 **
52718 ** The pSpace buffer is used to store a temporary copy of the divider
52719 ** cell that will be inserted into pParent. Such a cell consists of a 4
52720 ** byte page number followed by a variable length integer. In other
52721 ** words, at most 13 bytes. Hence the pSpace buffer must be at
52722 ** least 13 bytes in size.
52723 */
52724 static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){
52725   BtShared *const pBt = pPage->pBt;    /* B-Tree Database */
52726   MemPage *pNew;                       /* Newly allocated page */
52727   int rc;                              /* Return Code */
52728   Pgno pgnoNew;                        /* Page number of pNew */
52729
52730   assert( sqlite3_mutex_held(pPage->pBt->mutex) );
52731   assert( sqlite3PagerIswriteable(pParent->pDbPage) );
52732   assert( pPage->nOverflow==1 );
52733
52734   /* This error condition is now caught prior to reaching this function */
52735   if( pPage->nCell<=0 ) return SQLITE_CORRUPT_BKPT;
52736
52737   /* Allocate a new page. This page will become the right-sibling of 
52738   ** pPage. Make the parent page writable, so that the new divider cell
52739   ** may be inserted. If both these operations are successful, proceed.
52740   */
52741   rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0);
52742
52743   if( rc==SQLITE_OK ){
52744
52745     u8 *pOut = &pSpace[4];
52746     u8 *pCell = pPage->aOvfl[0].pCell;
52747     u16 szCell = cellSizePtr(pPage, pCell);
52748     u8 *pStop;
52749
52750     assert( sqlite3PagerIswriteable(pNew->pDbPage) );
52751     assert( pPage->aData[0]==(PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF) );
52752     zeroPage(pNew, PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF);
52753     assemblePage(pNew, 1, &pCell, &szCell);
52754
52755     /* If this is an auto-vacuum database, update the pointer map
52756     ** with entries for the new page, and any pointer from the 
52757     ** cell on the page to an overflow page. If either of these
52758     ** operations fails, the return code is set, but the contents
52759     ** of the parent page are still manipulated by thh code below.
52760     ** That is Ok, at this point the parent page is guaranteed to
52761     ** be marked as dirty. Returning an error code will cause a
52762     ** rollback, undoing any changes made to the parent page.
52763     */
52764     if( ISAUTOVACUUM ){
52765       ptrmapPut(pBt, pgnoNew, PTRMAP_BTREE, pParent->pgno, &rc);
52766       if( szCell>pNew->minLocal ){
52767         ptrmapPutOvflPtr(pNew, pCell, &rc);
52768       }
52769     }
52770   
52771     /* Create a divider cell to insert into pParent. The divider cell
52772     ** consists of a 4-byte page number (the page number of pPage) and
52773     ** a variable length key value (which must be the same value as the
52774     ** largest key on pPage).
52775     **
52776     ** To find the largest key value on pPage, first find the right-most 
52777     ** cell on pPage. The first two fields of this cell are the 
52778     ** record-length (a variable length integer at most 32-bits in size)
52779     ** and the key value (a variable length integer, may have any value).
52780     ** The first of the while(...) loops below skips over the record-length
52781     ** field. The second while(...) loop copies the key value from the
52782     ** cell on pPage into the pSpace buffer.
52783     */
52784     pCell = findCell(pPage, pPage->nCell-1);
52785     pStop = &pCell[9];
52786     while( (*(pCell++)&0x80) && pCell<pStop );
52787     pStop = &pCell[9];
52788     while( ((*(pOut++) = *(pCell++))&0x80) && pCell<pStop );
52789
52790     /* Insert the new divider cell into pParent. */
52791     insertCell(pParent, pParent->nCell, pSpace, (int)(pOut-pSpace),
52792                0, pPage->pgno, &rc);
52793
52794     /* Set the right-child pointer of pParent to point to the new page. */
52795     put4byte(&pParent->aData[pParent->hdrOffset+8], pgnoNew);
52796   
52797     /* Release the reference to the new page. */
52798     releasePage(pNew);
52799   }
52800
52801   return rc;
52802 }
52803 #endif /* SQLITE_OMIT_QUICKBALANCE */
52804
52805 #if 0
52806 /*
52807 ** This function does not contribute anything to the operation of SQLite.
52808 ** it is sometimes activated temporarily while debugging code responsible 
52809 ** for setting pointer-map entries.
52810 */
52811 static int ptrmapCheckPages(MemPage **apPage, int nPage){
52812   int i, j;
52813   for(i=0; i<nPage; i++){
52814     Pgno n;
52815     u8 e;
52816     MemPage *pPage = apPage[i];
52817     BtShared *pBt = pPage->pBt;
52818     assert( pPage->isInit );
52819
52820     for(j=0; j<pPage->nCell; j++){
52821       CellInfo info;
52822       u8 *z;
52823      
52824       z = findCell(pPage, j);
52825       btreeParseCellPtr(pPage, z, &info);
52826       if( info.iOverflow ){
52827         Pgno ovfl = get4byte(&z[info.iOverflow]);
52828         ptrmapGet(pBt, ovfl, &e, &n);
52829         assert( n==pPage->pgno && e==PTRMAP_OVERFLOW1 );
52830       }
52831       if( !pPage->leaf ){
52832         Pgno child = get4byte(z);
52833         ptrmapGet(pBt, child, &e, &n);
52834         assert( n==pPage->pgno && e==PTRMAP_BTREE );
52835       }
52836     }
52837     if( !pPage->leaf ){
52838       Pgno child = get4byte(&pPage->aData[pPage->hdrOffset+8]);
52839       ptrmapGet(pBt, child, &e, &n);
52840       assert( n==pPage->pgno && e==PTRMAP_BTREE );
52841     }
52842   }
52843   return 1;
52844 }
52845 #endif
52846
52847 /*
52848 ** This function is used to copy the contents of the b-tree node stored 
52849 ** on page pFrom to page pTo. If page pFrom was not a leaf page, then
52850 ** the pointer-map entries for each child page are updated so that the
52851 ** parent page stored in the pointer map is page pTo. If pFrom contained
52852 ** any cells with overflow page pointers, then the corresponding pointer
52853 ** map entries are also updated so that the parent page is page pTo.
52854 **
52855 ** If pFrom is currently carrying any overflow cells (entries in the
52856 ** MemPage.aOvfl[] array), they are not copied to pTo. 
52857 **
52858 ** Before returning, page pTo is reinitialized using btreeInitPage().
52859 **
52860 ** The performance of this function is not critical. It is only used by 
52861 ** the balance_shallower() and balance_deeper() procedures, neither of
52862 ** which are called often under normal circumstances.
52863 */
52864 static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){
52865   if( (*pRC)==SQLITE_OK ){
52866     BtShared * const pBt = pFrom->pBt;
52867     u8 * const aFrom = pFrom->aData;
52868     u8 * const aTo = pTo->aData;
52869     int const iFromHdr = pFrom->hdrOffset;
52870     int const iToHdr = ((pTo->pgno==1) ? 100 : 0);
52871     int rc;
52872     int iData;
52873   
52874   
52875     assert( pFrom->isInit );
52876     assert( pFrom->nFree>=iToHdr );
52877     assert( get2byte(&aFrom[iFromHdr+5]) <= (int)pBt->usableSize );
52878   
52879     /* Copy the b-tree node content from page pFrom to page pTo. */
52880     iData = get2byte(&aFrom[iFromHdr+5]);
52881     memcpy(&aTo[iData], &aFrom[iData], pBt->usableSize-iData);
52882     memcpy(&aTo[iToHdr], &aFrom[iFromHdr], pFrom->cellOffset + 2*pFrom->nCell);
52883   
52884     /* Reinitialize page pTo so that the contents of the MemPage structure
52885     ** match the new data. The initialization of pTo can actually fail under
52886     ** fairly obscure circumstances, even though it is a copy of initialized 
52887     ** page pFrom.
52888     */
52889     pTo->isInit = 0;
52890     rc = btreeInitPage(pTo);
52891     if( rc!=SQLITE_OK ){
52892       *pRC = rc;
52893       return;
52894     }
52895   
52896     /* If this is an auto-vacuum database, update the pointer-map entries
52897     ** for any b-tree or overflow pages that pTo now contains the pointers to.
52898     */
52899     if( ISAUTOVACUUM ){
52900       *pRC = setChildPtrmaps(pTo);
52901     }
52902   }
52903 }
52904
52905 /*
52906 ** This routine redistributes cells on the iParentIdx'th child of pParent
52907 ** (hereafter "the page") and up to 2 siblings so that all pages have about the
52908 ** same amount of free space. Usually a single sibling on either side of the
52909 ** page are used in the balancing, though both siblings might come from one
52910 ** side if the page is the first or last child of its parent. If the page 
52911 ** has fewer than 2 siblings (something which can only happen if the page
52912 ** is a root page or a child of a root page) then all available siblings
52913 ** participate in the balancing.
52914 **
52915 ** The number of siblings of the page might be increased or decreased by 
52916 ** one or two in an effort to keep pages nearly full but not over full. 
52917 **
52918 ** Note that when this routine is called, some of the cells on the page
52919 ** might not actually be stored in MemPage.aData[]. This can happen
52920 ** if the page is overfull. This routine ensures that all cells allocated
52921 ** to the page and its siblings fit into MemPage.aData[] before returning.
52922 **
52923 ** In the course of balancing the page and its siblings, cells may be
52924 ** inserted into or removed from the parent page (pParent). Doing so
52925 ** may cause the parent page to become overfull or underfull. If this
52926 ** happens, it is the responsibility of the caller to invoke the correct
52927 ** balancing routine to fix this problem (see the balance() routine). 
52928 **
52929 ** If this routine fails for any reason, it might leave the database
52930 ** in a corrupted state. So if this routine fails, the database should
52931 ** be rolled back.
52932 **
52933 ** The third argument to this function, aOvflSpace, is a pointer to a
52934 ** buffer big enough to hold one page. If while inserting cells into the parent
52935 ** page (pParent) the parent page becomes overfull, this buffer is
52936 ** used to store the parent's overflow cells. Because this function inserts
52937 ** a maximum of four divider cells into the parent page, and the maximum
52938 ** size of a cell stored within an internal node is always less than 1/4
52939 ** of the page-size, the aOvflSpace[] buffer is guaranteed to be large
52940 ** enough for all overflow cells.
52941 **
52942 ** If aOvflSpace is set to a null pointer, this function returns 
52943 ** SQLITE_NOMEM.
52944 */
52945 static int balance_nonroot(
52946   MemPage *pParent,               /* Parent page of siblings being balanced */
52947   int iParentIdx,                 /* Index of "the page" in pParent */
52948   u8 *aOvflSpace,                 /* page-size bytes of space for parent ovfl */
52949   int isRoot                      /* True if pParent is a root-page */
52950 ){
52951   BtShared *pBt;               /* The whole database */
52952   int nCell = 0;               /* Number of cells in apCell[] */
52953   int nMaxCells = 0;           /* Allocated size of apCell, szCell, aFrom. */
52954   int nNew = 0;                /* Number of pages in apNew[] */
52955   int nOld;                    /* Number of pages in apOld[] */
52956   int i, j, k;                 /* Loop counters */
52957   int nxDiv;                   /* Next divider slot in pParent->aCell[] */
52958   int rc = SQLITE_OK;          /* The return code */
52959   u16 leafCorrection;          /* 4 if pPage is a leaf.  0 if not */
52960   int leafData;                /* True if pPage is a leaf of a LEAFDATA tree */
52961   int usableSpace;             /* Bytes in pPage beyond the header */
52962   int pageFlags;               /* Value of pPage->aData[0] */
52963   int subtotal;                /* Subtotal of bytes in cells on one page */
52964   int iSpace1 = 0;             /* First unused byte of aSpace1[] */
52965   int iOvflSpace = 0;          /* First unused byte of aOvflSpace[] */
52966   int szScratch;               /* Size of scratch memory requested */
52967   MemPage *apOld[NB];          /* pPage and up to two siblings */
52968   MemPage *apCopy[NB];         /* Private copies of apOld[] pages */
52969   MemPage *apNew[NB+2];        /* pPage and up to NB siblings after balancing */
52970   u8 *pRight;                  /* Location in parent of right-sibling pointer */
52971   u8 *apDiv[NB-1];             /* Divider cells in pParent */
52972   int cntNew[NB+2];            /* Index in aCell[] of cell after i-th page */
52973   int szNew[NB+2];             /* Combined size of cells place on i-th page */
52974   u8 **apCell = 0;             /* All cells begin balanced */
52975   u16 *szCell;                 /* Local size of all cells in apCell[] */
52976   u8 *aSpace1;                 /* Space for copies of dividers cells */
52977   Pgno pgno;                   /* Temp var to store a page number in */
52978
52979   pBt = pParent->pBt;
52980   assert( sqlite3_mutex_held(pBt->mutex) );
52981   assert( sqlite3PagerIswriteable(pParent->pDbPage) );
52982
52983 #if 0
52984   TRACE(("BALANCE: begin page %d child of %d\n", pPage->pgno, pParent->pgno));
52985 #endif
52986
52987   /* At this point pParent may have at most one overflow cell. And if
52988   ** this overflow cell is present, it must be the cell with 
52989   ** index iParentIdx. This scenario comes about when this function
52990   ** is called (indirectly) from sqlite3BtreeDelete().
52991   */
52992   assert( pParent->nOverflow==0 || pParent->nOverflow==1 );
52993   assert( pParent->nOverflow==0 || pParent->aOvfl[0].idx==iParentIdx );
52994
52995   if( !aOvflSpace ){
52996     return SQLITE_NOMEM;
52997   }
52998
52999   /* Find the sibling pages to balance. Also locate the cells in pParent 
53000   ** that divide the siblings. An attempt is made to find NN siblings on 
53001   ** either side of pPage. More siblings are taken from one side, however, 
53002   ** if there are fewer than NN siblings on the other side. If pParent
53003   ** has NB or fewer children then all children of pParent are taken.  
53004   **
53005   ** This loop also drops the divider cells from the parent page. This
53006   ** way, the remainder of the function does not have to deal with any
53007   ** overflow cells in the parent page, since if any existed they will
53008   ** have already been removed.
53009   */
53010   i = pParent->nOverflow + pParent->nCell;
53011   if( i<2 ){
53012     nxDiv = 0;
53013     nOld = i+1;
53014   }else{
53015     nOld = 3;
53016     if( iParentIdx==0 ){                 
53017       nxDiv = 0;
53018     }else if( iParentIdx==i ){
53019       nxDiv = i-2;
53020     }else{
53021       nxDiv = iParentIdx-1;
53022     }
53023     i = 2;
53024   }
53025   if( (i+nxDiv-pParent->nOverflow)==pParent->nCell ){
53026     pRight = &pParent->aData[pParent->hdrOffset+8];
53027   }else{
53028     pRight = findCell(pParent, i+nxDiv-pParent->nOverflow);
53029   }
53030   pgno = get4byte(pRight);
53031   while( 1 ){
53032     rc = getAndInitPage(pBt, pgno, &apOld[i]);
53033     if( rc ){
53034       memset(apOld, 0, (i+1)*sizeof(MemPage*));
53035       goto balance_cleanup;
53036     }
53037     nMaxCells += 1+apOld[i]->nCell+apOld[i]->nOverflow;
53038     if( (i--)==0 ) break;
53039
53040     if( i+nxDiv==pParent->aOvfl[0].idx && pParent->nOverflow ){
53041       apDiv[i] = pParent->aOvfl[0].pCell;
53042       pgno = get4byte(apDiv[i]);
53043       szNew[i] = cellSizePtr(pParent, apDiv[i]);
53044       pParent->nOverflow = 0;
53045     }else{
53046       apDiv[i] = findCell(pParent, i+nxDiv-pParent->nOverflow);
53047       pgno = get4byte(apDiv[i]);
53048       szNew[i] = cellSizePtr(pParent, apDiv[i]);
53049
53050       /* Drop the cell from the parent page. apDiv[i] still points to
53051       ** the cell within the parent, even though it has been dropped.
53052       ** This is safe because dropping a cell only overwrites the first
53053       ** four bytes of it, and this function does not need the first
53054       ** four bytes of the divider cell. So the pointer is safe to use
53055       ** later on.  
53056       **
53057       ** Unless SQLite is compiled in secure-delete mode. In this case,
53058       ** the dropCell() routine will overwrite the entire cell with zeroes.
53059       ** In this case, temporarily copy the cell into the aOvflSpace[]
53060       ** buffer. It will be copied out again as soon as the aSpace[] buffer
53061       ** is allocated.  */
53062       if( pBt->secureDelete ){
53063         int iOff = SQLITE_PTR_TO_INT(apDiv[i]) - SQLITE_PTR_TO_INT(pParent->aData);
53064         if( (iOff+szNew[i])>(int)pBt->usableSize ){
53065           rc = SQLITE_CORRUPT_BKPT;
53066           memset(apOld, 0, (i+1)*sizeof(MemPage*));
53067           goto balance_cleanup;
53068         }else{
53069           memcpy(&aOvflSpace[iOff], apDiv[i], szNew[i]);
53070           apDiv[i] = &aOvflSpace[apDiv[i]-pParent->aData];
53071         }
53072       }
53073       dropCell(pParent, i+nxDiv-pParent->nOverflow, szNew[i], &rc);
53074     }
53075   }
53076
53077   /* Make nMaxCells a multiple of 4 in order to preserve 8-byte
53078   ** alignment */
53079   nMaxCells = (nMaxCells + 3)&~3;
53080
53081   /*
53082   ** Allocate space for memory structures
53083   */
53084   k = pBt->pageSize + ROUND8(sizeof(MemPage));
53085   szScratch =
53086        nMaxCells*sizeof(u8*)                       /* apCell */
53087      + nMaxCells*sizeof(u16)                       /* szCell */
53088      + pBt->pageSize                               /* aSpace1 */
53089      + k*nOld;                                     /* Page copies (apCopy) */
53090   apCell = sqlite3ScratchMalloc( szScratch ); 
53091   if( apCell==0 ){
53092     rc = SQLITE_NOMEM;
53093     goto balance_cleanup;
53094   }
53095   szCell = (u16*)&apCell[nMaxCells];
53096   aSpace1 = (u8*)&szCell[nMaxCells];
53097   assert( EIGHT_BYTE_ALIGNMENT(aSpace1) );
53098
53099   /*
53100   ** Load pointers to all cells on sibling pages and the divider cells
53101   ** into the local apCell[] array.  Make copies of the divider cells
53102   ** into space obtained from aSpace1[] and remove the the divider Cells
53103   ** from pParent.
53104   **
53105   ** If the siblings are on leaf pages, then the child pointers of the
53106   ** divider cells are stripped from the cells before they are copied
53107   ** into aSpace1[].  In this way, all cells in apCell[] are without
53108   ** child pointers.  If siblings are not leaves, then all cell in
53109   ** apCell[] include child pointers.  Either way, all cells in apCell[]
53110   ** are alike.
53111   **
53112   ** leafCorrection:  4 if pPage is a leaf.  0 if pPage is not a leaf.
53113   **       leafData:  1 if pPage holds key+data and pParent holds only keys.
53114   */
53115   leafCorrection = apOld[0]->leaf*4;
53116   leafData = apOld[0]->hasData;
53117   for(i=0; i<nOld; i++){
53118     int limit;
53119     
53120     /* Before doing anything else, take a copy of the i'th original sibling
53121     ** The rest of this function will use data from the copies rather
53122     ** that the original pages since the original pages will be in the
53123     ** process of being overwritten.  */
53124     MemPage *pOld = apCopy[i] = (MemPage*)&aSpace1[pBt->pageSize + k*i];
53125     memcpy(pOld, apOld[i], sizeof(MemPage));
53126     pOld->aData = (void*)&pOld[1];
53127     memcpy(pOld->aData, apOld[i]->aData, pBt->pageSize);
53128
53129     limit = pOld->nCell+pOld->nOverflow;
53130     for(j=0; j<limit; j++){
53131       assert( nCell<nMaxCells );
53132       apCell[nCell] = findOverflowCell(pOld, j);
53133       szCell[nCell] = cellSizePtr(pOld, apCell[nCell]);
53134       nCell++;
53135     }
53136     if( i<nOld-1 && !leafData){
53137       u16 sz = (u16)szNew[i];
53138       u8 *pTemp;
53139       assert( nCell<nMaxCells );
53140       szCell[nCell] = sz;
53141       pTemp = &aSpace1[iSpace1];
53142       iSpace1 += sz;
53143       assert( sz<=pBt->maxLocal+23 );
53144       assert( iSpace1 <= (int)pBt->pageSize );
53145       memcpy(pTemp, apDiv[i], sz);
53146       apCell[nCell] = pTemp+leafCorrection;
53147       assert( leafCorrection==0 || leafCorrection==4 );
53148       szCell[nCell] = szCell[nCell] - leafCorrection;
53149       if( !pOld->leaf ){
53150         assert( leafCorrection==0 );
53151         assert( pOld->hdrOffset==0 );
53152         /* The right pointer of the child page pOld becomes the left
53153         ** pointer of the divider cell */
53154         memcpy(apCell[nCell], &pOld->aData[8], 4);
53155       }else{
53156         assert( leafCorrection==4 );
53157         if( szCell[nCell]<4 ){
53158           /* Do not allow any cells smaller than 4 bytes. */
53159           szCell[nCell] = 4;
53160         }
53161       }
53162       nCell++;
53163     }
53164   }
53165
53166   /*
53167   ** Figure out the number of pages needed to hold all nCell cells.
53168   ** Store this number in "k".  Also compute szNew[] which is the total
53169   ** size of all cells on the i-th page and cntNew[] which is the index
53170   ** in apCell[] of the cell that divides page i from page i+1.  
53171   ** cntNew[k] should equal nCell.
53172   **
53173   ** Values computed by this block:
53174   **
53175   **           k: The total number of sibling pages
53176   **    szNew[i]: Spaced used on the i-th sibling page.
53177   **   cntNew[i]: Index in apCell[] and szCell[] for the first cell to
53178   **              the right of the i-th sibling page.
53179   ** usableSpace: Number of bytes of space available on each sibling.
53180   ** 
53181   */
53182   usableSpace = pBt->usableSize - 12 + leafCorrection;
53183   for(subtotal=k=i=0; i<nCell; i++){
53184     assert( i<nMaxCells );
53185     subtotal += szCell[i] + 2;
53186     if( subtotal > usableSpace ){
53187       szNew[k] = subtotal - szCell[i];
53188       cntNew[k] = i;
53189       if( leafData ){ i--; }
53190       subtotal = 0;
53191       k++;
53192       if( k>NB+1 ){ rc = SQLITE_CORRUPT_BKPT; goto balance_cleanup; }
53193     }
53194   }
53195   szNew[k] = subtotal;
53196   cntNew[k] = nCell;
53197   k++;
53198
53199   /*
53200   ** The packing computed by the previous block is biased toward the siblings
53201   ** on the left side.  The left siblings are always nearly full, while the
53202   ** right-most sibling might be nearly empty.  This block of code attempts
53203   ** to adjust the packing of siblings to get a better balance.
53204   **
53205   ** This adjustment is more than an optimization.  The packing above might
53206   ** be so out of balance as to be illegal.  For example, the right-most
53207   ** sibling might be completely empty.  This adjustment is not optional.
53208   */
53209   for(i=k-1; i>0; i--){
53210     int szRight = szNew[i];  /* Size of sibling on the right */
53211     int szLeft = szNew[i-1]; /* Size of sibling on the left */
53212     int r;              /* Index of right-most cell in left sibling */
53213     int d;              /* Index of first cell to the left of right sibling */
53214
53215     r = cntNew[i-1] - 1;
53216     d = r + 1 - leafData;
53217     assert( d<nMaxCells );
53218     assert( r<nMaxCells );
53219     while( szRight==0 || szRight+szCell[d]+2<=szLeft-(szCell[r]+2) ){
53220       szRight += szCell[d] + 2;
53221       szLeft -= szCell[r] + 2;
53222       cntNew[i-1]--;
53223       r = cntNew[i-1] - 1;
53224       d = r + 1 - leafData;
53225     }
53226     szNew[i] = szRight;
53227     szNew[i-1] = szLeft;
53228   }
53229
53230   /* Either we found one or more cells (cntnew[0])>0) or pPage is
53231   ** a virtual root page.  A virtual root page is when the real root
53232   ** page is page 1 and we are the only child of that page.
53233   */
53234   assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) );
53235
53236   TRACE(("BALANCE: old: %d %d %d  ",
53237     apOld[0]->pgno, 
53238     nOld>=2 ? apOld[1]->pgno : 0,
53239     nOld>=3 ? apOld[2]->pgno : 0
53240   ));
53241
53242   /*
53243   ** Allocate k new pages.  Reuse old pages where possible.
53244   */
53245   if( apOld[0]->pgno<=1 ){
53246     rc = SQLITE_CORRUPT_BKPT;
53247     goto balance_cleanup;
53248   }
53249   pageFlags = apOld[0]->aData[0];
53250   for(i=0; i<k; i++){
53251     MemPage *pNew;
53252     if( i<nOld ){
53253       pNew = apNew[i] = apOld[i];
53254       apOld[i] = 0;
53255       rc = sqlite3PagerWrite(pNew->pDbPage);
53256       nNew++;
53257       if( rc ) goto balance_cleanup;
53258     }else{
53259       assert( i>0 );
53260       rc = allocateBtreePage(pBt, &pNew, &pgno, pgno, 0);
53261       if( rc ) goto balance_cleanup;
53262       apNew[i] = pNew;
53263       nNew++;
53264
53265       /* Set the pointer-map entry for the new sibling page. */
53266       if( ISAUTOVACUUM ){
53267         ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc);
53268         if( rc!=SQLITE_OK ){
53269           goto balance_cleanup;
53270         }
53271       }
53272     }
53273   }
53274
53275   /* Free any old pages that were not reused as new pages.
53276   */
53277   while( i<nOld ){
53278     freePage(apOld[i], &rc);
53279     if( rc ) goto balance_cleanup;
53280     releasePage(apOld[i]);
53281     apOld[i] = 0;
53282     i++;
53283   }
53284
53285   /*
53286   ** Put the new pages in accending order.  This helps to
53287   ** keep entries in the disk file in order so that a scan
53288   ** of the table is a linear scan through the file.  That
53289   ** in turn helps the operating system to deliver pages
53290   ** from the disk more rapidly.
53291   **
53292   ** An O(n^2) insertion sort algorithm is used, but since
53293   ** n is never more than NB (a small constant), that should
53294   ** not be a problem.
53295   **
53296   ** When NB==3, this one optimization makes the database
53297   ** about 25% faster for large insertions and deletions.
53298   */
53299   for(i=0; i<k-1; i++){
53300     int minV = apNew[i]->pgno;
53301     int minI = i;
53302     for(j=i+1; j<k; j++){
53303       if( apNew[j]->pgno<(unsigned)minV ){
53304         minI = j;
53305         minV = apNew[j]->pgno;
53306       }
53307     }
53308     if( minI>i ){
53309       MemPage *pT;
53310       pT = apNew[i];
53311       apNew[i] = apNew[minI];
53312       apNew[minI] = pT;
53313     }
53314   }
53315   TRACE(("new: %d(%d) %d(%d) %d(%d) %d(%d) %d(%d)\n",
53316     apNew[0]->pgno, szNew[0],
53317     nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0,
53318     nNew>=3 ? apNew[2]->pgno : 0, nNew>=3 ? szNew[2] : 0,
53319     nNew>=4 ? apNew[3]->pgno : 0, nNew>=4 ? szNew[3] : 0,
53320     nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0));
53321
53322   assert( sqlite3PagerIswriteable(pParent->pDbPage) );
53323   put4byte(pRight, apNew[nNew-1]->pgno);
53324
53325   /*
53326   ** Evenly distribute the data in apCell[] across the new pages.
53327   ** Insert divider cells into pParent as necessary.
53328   */
53329   j = 0;
53330   for(i=0; i<nNew; i++){
53331     /* Assemble the new sibling page. */
53332     MemPage *pNew = apNew[i];
53333     assert( j<nMaxCells );
53334     zeroPage(pNew, pageFlags);
53335     assemblePage(pNew, cntNew[i]-j, &apCell[j], &szCell[j]);
53336     assert( pNew->nCell>0 || (nNew==1 && cntNew[0]==0) );
53337     assert( pNew->nOverflow==0 );
53338
53339     j = cntNew[i];
53340
53341     /* If the sibling page assembled above was not the right-most sibling,
53342     ** insert a divider cell into the parent page.
53343     */
53344     assert( i<nNew-1 || j==nCell );
53345     if( j<nCell ){
53346       u8 *pCell;
53347       u8 *pTemp;
53348       int sz;
53349
53350       assert( j<nMaxCells );
53351       pCell = apCell[j];
53352       sz = szCell[j] + leafCorrection;
53353       pTemp = &aOvflSpace[iOvflSpace];
53354       if( !pNew->leaf ){
53355         memcpy(&pNew->aData[8], pCell, 4);
53356       }else if( leafData ){
53357         /* If the tree is a leaf-data tree, and the siblings are leaves, 
53358         ** then there is no divider cell in apCell[]. Instead, the divider 
53359         ** cell consists of the integer key for the right-most cell of 
53360         ** the sibling-page assembled above only.
53361         */
53362         CellInfo info;
53363         j--;
53364         btreeParseCellPtr(pNew, apCell[j], &info);
53365         pCell = pTemp;
53366         sz = 4 + putVarint(&pCell[4], info.nKey);
53367         pTemp = 0;
53368       }else{
53369         pCell -= 4;
53370         /* Obscure case for non-leaf-data trees: If the cell at pCell was
53371         ** previously stored on a leaf node, and its reported size was 4
53372         ** bytes, then it may actually be smaller than this 
53373         ** (see btreeParseCellPtr(), 4 bytes is the minimum size of
53374         ** any cell). But it is important to pass the correct size to 
53375         ** insertCell(), so reparse the cell now.
53376         **
53377         ** Note that this can never happen in an SQLite data file, as all
53378         ** cells are at least 4 bytes. It only happens in b-trees used
53379         ** to evaluate "IN (SELECT ...)" and similar clauses.
53380         */
53381         if( szCell[j]==4 ){
53382           assert(leafCorrection==4);
53383           sz = cellSizePtr(pParent, pCell);
53384         }
53385       }
53386       iOvflSpace += sz;
53387       assert( sz<=pBt->maxLocal+23 );
53388       assert( iOvflSpace <= (int)pBt->pageSize );
53389       insertCell(pParent, nxDiv, pCell, sz, pTemp, pNew->pgno, &rc);
53390       if( rc!=SQLITE_OK ) goto balance_cleanup;
53391       assert( sqlite3PagerIswriteable(pParent->pDbPage) );
53392
53393       j++;
53394       nxDiv++;
53395     }
53396   }
53397   assert( j==nCell );
53398   assert( nOld>0 );
53399   assert( nNew>0 );
53400   if( (pageFlags & PTF_LEAF)==0 ){
53401     u8 *zChild = &apCopy[nOld-1]->aData[8];
53402     memcpy(&apNew[nNew-1]->aData[8], zChild, 4);
53403   }
53404
53405   if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){
53406     /* The root page of the b-tree now contains no cells. The only sibling
53407     ** page is the right-child of the parent. Copy the contents of the
53408     ** child page into the parent, decreasing the overall height of the
53409     ** b-tree structure by one. This is described as the "balance-shallower"
53410     ** sub-algorithm in some documentation.
53411     **
53412     ** If this is an auto-vacuum database, the call to copyNodeContent() 
53413     ** sets all pointer-map entries corresponding to database image pages 
53414     ** for which the pointer is stored within the content being copied.
53415     **
53416     ** The second assert below verifies that the child page is defragmented
53417     ** (it must be, as it was just reconstructed using assemblePage()). This
53418     ** is important if the parent page happens to be page 1 of the database
53419     ** image.  */
53420     assert( nNew==1 );
53421     assert( apNew[0]->nFree == 
53422         (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2) 
53423     );
53424     copyNodeContent(apNew[0], pParent, &rc);
53425     freePage(apNew[0], &rc);
53426   }else if( ISAUTOVACUUM ){
53427     /* Fix the pointer-map entries for all the cells that were shifted around. 
53428     ** There are several different types of pointer-map entries that need to
53429     ** be dealt with by this routine. Some of these have been set already, but
53430     ** many have not. The following is a summary:
53431     **
53432     **   1) The entries associated with new sibling pages that were not
53433     **      siblings when this function was called. These have already
53434     **      been set. We don't need to worry about old siblings that were
53435     **      moved to the free-list - the freePage() code has taken care
53436     **      of those.
53437     **
53438     **   2) The pointer-map entries associated with the first overflow
53439     **      page in any overflow chains used by new divider cells. These 
53440     **      have also already been taken care of by the insertCell() code.
53441     **
53442     **   3) If the sibling pages are not leaves, then the child pages of
53443     **      cells stored on the sibling pages may need to be updated.
53444     **
53445     **   4) If the sibling pages are not internal intkey nodes, then any
53446     **      overflow pages used by these cells may need to be updated
53447     **      (internal intkey nodes never contain pointers to overflow pages).
53448     **
53449     **   5) If the sibling pages are not leaves, then the pointer-map
53450     **      entries for the right-child pages of each sibling may need
53451     **      to be updated.
53452     **
53453     ** Cases 1 and 2 are dealt with above by other code. The next
53454     ** block deals with cases 3 and 4 and the one after that, case 5. Since
53455     ** setting a pointer map entry is a relatively expensive operation, this
53456     ** code only sets pointer map entries for child or overflow pages that have
53457     ** actually moved between pages.  */
53458     MemPage *pNew = apNew[0];
53459     MemPage *pOld = apCopy[0];
53460     int nOverflow = pOld->nOverflow;
53461     int iNextOld = pOld->nCell + nOverflow;
53462     int iOverflow = (nOverflow ? pOld->aOvfl[0].idx : -1);
53463     j = 0;                             /* Current 'old' sibling page */
53464     k = 0;                             /* Current 'new' sibling page */
53465     for(i=0; i<nCell; i++){
53466       int isDivider = 0;
53467       while( i==iNextOld ){
53468         /* Cell i is the cell immediately following the last cell on old
53469         ** sibling page j. If the siblings are not leaf pages of an
53470         ** intkey b-tree, then cell i was a divider cell. */
53471         pOld = apCopy[++j];
53472         iNextOld = i + !leafData + pOld->nCell + pOld->nOverflow;
53473         if( pOld->nOverflow ){
53474           nOverflow = pOld->nOverflow;
53475           iOverflow = i + !leafData + pOld->aOvfl[0].idx;
53476         }
53477         isDivider = !leafData;  
53478       }
53479
53480       assert(nOverflow>0 || iOverflow<i );
53481       assert(nOverflow<2 || pOld->aOvfl[0].idx==pOld->aOvfl[1].idx-1);
53482       assert(nOverflow<3 || pOld->aOvfl[1].idx==pOld->aOvfl[2].idx-1);
53483       if( i==iOverflow ){
53484         isDivider = 1;
53485         if( (--nOverflow)>0 ){
53486           iOverflow++;
53487         }
53488       }
53489
53490       if( i==cntNew[k] ){
53491         /* Cell i is the cell immediately following the last cell on new
53492         ** sibling page k. If the siblings are not leaf pages of an
53493         ** intkey b-tree, then cell i is a divider cell.  */
53494         pNew = apNew[++k];
53495         if( !leafData ) continue;
53496       }
53497       assert( j<nOld );
53498       assert( k<nNew );
53499
53500       /* If the cell was originally divider cell (and is not now) or
53501       ** an overflow cell, or if the cell was located on a different sibling
53502       ** page before the balancing, then the pointer map entries associated
53503       ** with any child or overflow pages need to be updated.  */
53504       if( isDivider || pOld->pgno!=pNew->pgno ){
53505         if( !leafCorrection ){
53506           ptrmapPut(pBt, get4byte(apCell[i]), PTRMAP_BTREE, pNew->pgno, &rc);
53507         }
53508         if( szCell[i]>pNew->minLocal ){
53509           ptrmapPutOvflPtr(pNew, apCell[i], &rc);
53510         }
53511       }
53512     }
53513
53514     if( !leafCorrection ){
53515       for(i=0; i<nNew; i++){
53516         u32 key = get4byte(&apNew[i]->aData[8]);
53517         ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc);
53518       }
53519     }
53520
53521 #if 0
53522     /* The ptrmapCheckPages() contains assert() statements that verify that
53523     ** all pointer map pages are set correctly. This is helpful while 
53524     ** debugging. This is usually disabled because a corrupt database may
53525     ** cause an assert() statement to fail.  */
53526     ptrmapCheckPages(apNew, nNew);
53527     ptrmapCheckPages(&pParent, 1);
53528 #endif
53529   }
53530
53531   assert( pParent->isInit );
53532   TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n",
53533           nOld, nNew, nCell));
53534
53535   /*
53536   ** Cleanup before returning.
53537   */
53538 balance_cleanup:
53539   sqlite3ScratchFree(apCell);
53540   for(i=0; i<nOld; i++){
53541     releasePage(apOld[i]);
53542   }
53543   for(i=0; i<nNew; i++){
53544     releasePage(apNew[i]);
53545   }
53546
53547   return rc;
53548 }
53549
53550
53551 /*
53552 ** This function is called when the root page of a b-tree structure is
53553 ** overfull (has one or more overflow pages).
53554 **
53555 ** A new child page is allocated and the contents of the current root
53556 ** page, including overflow cells, are copied into the child. The root
53557 ** page is then overwritten to make it an empty page with the right-child 
53558 ** pointer pointing to the new page.
53559 **
53560 ** Before returning, all pointer-map entries corresponding to pages 
53561 ** that the new child-page now contains pointers to are updated. The
53562 ** entry corresponding to the new right-child pointer of the root
53563 ** page is also updated.
53564 **
53565 ** If successful, *ppChild is set to contain a reference to the child 
53566 ** page and SQLITE_OK is returned. In this case the caller is required
53567 ** to call releasePage() on *ppChild exactly once. If an error occurs,
53568 ** an error code is returned and *ppChild is set to 0.
53569 */
53570 static int balance_deeper(MemPage *pRoot, MemPage **ppChild){
53571   int rc;                        /* Return value from subprocedures */
53572   MemPage *pChild = 0;           /* Pointer to a new child page */
53573   Pgno pgnoChild = 0;            /* Page number of the new child page */
53574   BtShared *pBt = pRoot->pBt;    /* The BTree */
53575
53576   assert( pRoot->nOverflow>0 );
53577   assert( sqlite3_mutex_held(pBt->mutex) );
53578
53579   /* Make pRoot, the root page of the b-tree, writable. Allocate a new 
53580   ** page that will become the new right-child of pPage. Copy the contents
53581   ** of the node stored on pRoot into the new child page.
53582   */
53583   rc = sqlite3PagerWrite(pRoot->pDbPage);
53584   if( rc==SQLITE_OK ){
53585     rc = allocateBtreePage(pBt,&pChild,&pgnoChild,pRoot->pgno,0);
53586     copyNodeContent(pRoot, pChild, &rc);
53587     if( ISAUTOVACUUM ){
53588       ptrmapPut(pBt, pgnoChild, PTRMAP_BTREE, pRoot->pgno, &rc);
53589     }
53590   }
53591   if( rc ){
53592     *ppChild = 0;
53593     releasePage(pChild);
53594     return rc;
53595   }
53596   assert( sqlite3PagerIswriteable(pChild->pDbPage) );
53597   assert( sqlite3PagerIswriteable(pRoot->pDbPage) );
53598   assert( pChild->nCell==pRoot->nCell );
53599
53600   TRACE(("BALANCE: copy root %d into %d\n", pRoot->pgno, pChild->pgno));
53601
53602   /* Copy the overflow cells from pRoot to pChild */
53603   memcpy(pChild->aOvfl, pRoot->aOvfl, pRoot->nOverflow*sizeof(pRoot->aOvfl[0]));
53604   pChild->nOverflow = pRoot->nOverflow;
53605
53606   /* Zero the contents of pRoot. Then install pChild as the right-child. */
53607   zeroPage(pRoot, pChild->aData[0] & ~PTF_LEAF);
53608   put4byte(&pRoot->aData[pRoot->hdrOffset+8], pgnoChild);
53609
53610   *ppChild = pChild;
53611   return SQLITE_OK;
53612 }
53613
53614 /*
53615 ** The page that pCur currently points to has just been modified in
53616 ** some way. This function figures out if this modification means the
53617 ** tree needs to be balanced, and if so calls the appropriate balancing 
53618 ** routine. Balancing routines are:
53619 **
53620 **   balance_quick()
53621 **   balance_deeper()
53622 **   balance_nonroot()
53623 */
53624 static int balance(BtCursor *pCur){
53625   int rc = SQLITE_OK;
53626   const int nMin = pCur->pBt->usableSize * 2 / 3;
53627   u8 aBalanceQuickSpace[13];
53628   u8 *pFree = 0;
53629
53630   TESTONLY( int balance_quick_called = 0 );
53631   TESTONLY( int balance_deeper_called = 0 );
53632
53633   do {
53634     int iPage = pCur->iPage;
53635     MemPage *pPage = pCur->apPage[iPage];
53636
53637     if( iPage==0 ){
53638       if( pPage->nOverflow ){
53639         /* The root page of the b-tree is overfull. In this case call the
53640         ** balance_deeper() function to create a new child for the root-page
53641         ** and copy the current contents of the root-page to it. The
53642         ** next iteration of the do-loop will balance the child page.
53643         */ 
53644         assert( (balance_deeper_called++)==0 );
53645         rc = balance_deeper(pPage, &pCur->apPage[1]);
53646         if( rc==SQLITE_OK ){
53647           pCur->iPage = 1;
53648           pCur->aiIdx[0] = 0;
53649           pCur->aiIdx[1] = 0;
53650           assert( pCur->apPage[1]->nOverflow );
53651         }
53652       }else{
53653         break;
53654       }
53655     }else if( pPage->nOverflow==0 && pPage->nFree<=nMin ){
53656       break;
53657     }else{
53658       MemPage * const pParent = pCur->apPage[iPage-1];
53659       int const iIdx = pCur->aiIdx[iPage-1];
53660
53661       rc = sqlite3PagerWrite(pParent->pDbPage);
53662       if( rc==SQLITE_OK ){
53663 #ifndef SQLITE_OMIT_QUICKBALANCE
53664         if( pPage->hasData
53665          && pPage->nOverflow==1
53666          && pPage->aOvfl[0].idx==pPage->nCell
53667          && pParent->pgno!=1
53668          && pParent->nCell==iIdx
53669         ){
53670           /* Call balance_quick() to create a new sibling of pPage on which
53671           ** to store the overflow cell. balance_quick() inserts a new cell
53672           ** into pParent, which may cause pParent overflow. If this
53673           ** happens, the next interation of the do-loop will balance pParent 
53674           ** use either balance_nonroot() or balance_deeper(). Until this
53675           ** happens, the overflow cell is stored in the aBalanceQuickSpace[]
53676           ** buffer. 
53677           **
53678           ** The purpose of the following assert() is to check that only a
53679           ** single call to balance_quick() is made for each call to this
53680           ** function. If this were not verified, a subtle bug involving reuse
53681           ** of the aBalanceQuickSpace[] might sneak in.
53682           */
53683           assert( (balance_quick_called++)==0 );
53684           rc = balance_quick(pParent, pPage, aBalanceQuickSpace);
53685         }else
53686 #endif
53687         {
53688           /* In this case, call balance_nonroot() to redistribute cells
53689           ** between pPage and up to 2 of its sibling pages. This involves
53690           ** modifying the contents of pParent, which may cause pParent to
53691           ** become overfull or underfull. The next iteration of the do-loop
53692           ** will balance the parent page to correct this.
53693           ** 
53694           ** If the parent page becomes overfull, the overflow cell or cells
53695           ** are stored in the pSpace buffer allocated immediately below. 
53696           ** A subsequent iteration of the do-loop will deal with this by
53697           ** calling balance_nonroot() (balance_deeper() may be called first,
53698           ** but it doesn't deal with overflow cells - just moves them to a
53699           ** different page). Once this subsequent call to balance_nonroot() 
53700           ** has completed, it is safe to release the pSpace buffer used by
53701           ** the previous call, as the overflow cell data will have been 
53702           ** copied either into the body of a database page or into the new
53703           ** pSpace buffer passed to the latter call to balance_nonroot().
53704           */
53705           u8 *pSpace = sqlite3PageMalloc(pCur->pBt->pageSize);
53706           rc = balance_nonroot(pParent, iIdx, pSpace, iPage==1);
53707           if( pFree ){
53708             /* If pFree is not NULL, it points to the pSpace buffer used 
53709             ** by a previous call to balance_nonroot(). Its contents are
53710             ** now stored either on real database pages or within the 
53711             ** new pSpace buffer, so it may be safely freed here. */
53712             sqlite3PageFree(pFree);
53713           }
53714
53715           /* The pSpace buffer will be freed after the next call to
53716           ** balance_nonroot(), or just before this function returns, whichever
53717           ** comes first. */
53718           pFree = pSpace;
53719         }
53720       }
53721
53722       pPage->nOverflow = 0;
53723
53724       /* The next iteration of the do-loop balances the parent page. */
53725       releasePage(pPage);
53726       pCur->iPage--;
53727     }
53728   }while( rc==SQLITE_OK );
53729
53730   if( pFree ){
53731     sqlite3PageFree(pFree);
53732   }
53733   return rc;
53734 }
53735
53736
53737 /*
53738 ** Insert a new record into the BTree.  The key is given by (pKey,nKey)
53739 ** and the data is given by (pData,nData).  The cursor is used only to
53740 ** define what table the record should be inserted into.  The cursor
53741 ** is left pointing at a random location.
53742 **
53743 ** For an INTKEY table, only the nKey value of the key is used.  pKey is
53744 ** ignored.  For a ZERODATA table, the pData and nData are both ignored.
53745 **
53746 ** If the seekResult parameter is non-zero, then a successful call to
53747 ** MovetoUnpacked() to seek cursor pCur to (pKey, nKey) has already
53748 ** been performed. seekResult is the search result returned (a negative
53749 ** number if pCur points at an entry that is smaller than (pKey, nKey), or
53750 ** a positive value if pCur points at an etry that is larger than 
53751 ** (pKey, nKey)). 
53752 **
53753 ** If the seekResult parameter is non-zero, then the caller guarantees that
53754 ** cursor pCur is pointing at the existing copy of a row that is to be
53755 ** overwritten.  If the seekResult parameter is 0, then cursor pCur may
53756 ** point to any entry or to no entry at all and so this function has to seek
53757 ** the cursor before the new key can be inserted.
53758 */
53759 SQLITE_PRIVATE int sqlite3BtreeInsert(
53760   BtCursor *pCur,                /* Insert data into the table of this cursor */
53761   const void *pKey, i64 nKey,    /* The key of the new record */
53762   const void *pData, int nData,  /* The data of the new record */
53763   int nZero,                     /* Number of extra 0 bytes to append to data */
53764   int appendBias,                /* True if this is likely an append */
53765   int seekResult                 /* Result of prior MovetoUnpacked() call */
53766 ){
53767   int rc;
53768   int loc = seekResult;          /* -1: before desired location  +1: after */
53769   int szNew = 0;
53770   int idx;
53771   MemPage *pPage;
53772   Btree *p = pCur->pBtree;
53773   BtShared *pBt = p->pBt;
53774   unsigned char *oldCell;
53775   unsigned char *newCell = 0;
53776
53777   if( pCur->eState==CURSOR_FAULT ){
53778     assert( pCur->skipNext!=SQLITE_OK );
53779     return pCur->skipNext;
53780   }
53781
53782   assert( cursorHoldsMutex(pCur) );
53783   assert( pCur->wrFlag && pBt->inTransaction==TRANS_WRITE && !pBt->readOnly );
53784   assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
53785
53786   /* Assert that the caller has been consistent. If this cursor was opened
53787   ** expecting an index b-tree, then the caller should be inserting blob
53788   ** keys with no associated data. If the cursor was opened expecting an
53789   ** intkey table, the caller should be inserting integer keys with a
53790   ** blob of associated data.  */
53791   assert( (pKey==0)==(pCur->pKeyInfo==0) );
53792
53793   /* If this is an insert into a table b-tree, invalidate any incrblob 
53794   ** cursors open on the row being replaced (assuming this is a replace
53795   ** operation - if it is not, the following is a no-op).  */
53796   if( pCur->pKeyInfo==0 ){
53797     invalidateIncrblobCursors(p, nKey, 0);
53798   }
53799
53800   /* Save the positions of any other cursors open on this table.
53801   **
53802   ** In some cases, the call to btreeMoveto() below is a no-op. For
53803   ** example, when inserting data into a table with auto-generated integer
53804   ** keys, the VDBE layer invokes sqlite3BtreeLast() to figure out the 
53805   ** integer key to use. It then calls this function to actually insert the 
53806   ** data into the intkey B-Tree. In this case btreeMoveto() recognizes
53807   ** that the cursor is already where it needs to be and returns without
53808   ** doing any work. To avoid thwarting these optimizations, it is important
53809   ** not to clear the cursor here.
53810   */
53811   rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur);
53812   if( rc ) return rc;
53813   if( !loc ){
53814     rc = btreeMoveto(pCur, pKey, nKey, appendBias, &loc);
53815     if( rc ) return rc;
53816   }
53817   assert( pCur->eState==CURSOR_VALID || (pCur->eState==CURSOR_INVALID && loc) );
53818
53819   pPage = pCur->apPage[pCur->iPage];
53820   assert( pPage->intKey || nKey>=0 );
53821   assert( pPage->leaf || !pPage->intKey );
53822
53823   TRACE(("INSERT: table=%d nkey=%lld ndata=%d page=%d %s\n",
53824           pCur->pgnoRoot, nKey, nData, pPage->pgno,
53825           loc==0 ? "overwrite" : "new entry"));
53826   assert( pPage->isInit );
53827   allocateTempSpace(pBt);
53828   newCell = pBt->pTmpSpace;
53829   if( newCell==0 ) return SQLITE_NOMEM;
53830   rc = fillInCell(pPage, newCell, pKey, nKey, pData, nData, nZero, &szNew);
53831   if( rc ) goto end_insert;
53832   assert( szNew==cellSizePtr(pPage, newCell) );
53833   assert( szNew <= MX_CELL_SIZE(pBt) );
53834   idx = pCur->aiIdx[pCur->iPage];
53835   if( loc==0 ){
53836     u16 szOld;
53837     assert( idx<pPage->nCell );
53838     rc = sqlite3PagerWrite(pPage->pDbPage);
53839     if( rc ){
53840       goto end_insert;
53841     }
53842     oldCell = findCell(pPage, idx);
53843     if( !pPage->leaf ){
53844       memcpy(newCell, oldCell, 4);
53845     }
53846     szOld = cellSizePtr(pPage, oldCell);
53847     rc = clearCell(pPage, oldCell);
53848     dropCell(pPage, idx, szOld, &rc);
53849     if( rc ) goto end_insert;
53850   }else if( loc<0 && pPage->nCell>0 ){
53851     assert( pPage->leaf );
53852     idx = ++pCur->aiIdx[pCur->iPage];
53853   }else{
53854     assert( pPage->leaf );
53855   }
53856   insertCell(pPage, idx, newCell, szNew, 0, 0, &rc);
53857   assert( rc!=SQLITE_OK || pPage->nCell>0 || pPage->nOverflow>0 );
53858
53859   /* If no error has occured and pPage has an overflow cell, call balance() 
53860   ** to redistribute the cells within the tree. Since balance() may move
53861   ** the cursor, zero the BtCursor.info.nSize and BtCursor.validNKey
53862   ** variables.
53863   **
53864   ** Previous versions of SQLite called moveToRoot() to move the cursor
53865   ** back to the root page as balance() used to invalidate the contents
53866   ** of BtCursor.apPage[] and BtCursor.aiIdx[]. Instead of doing that,
53867   ** set the cursor state to "invalid". This makes common insert operations
53868   ** slightly faster.
53869   **
53870   ** There is a subtle but important optimization here too. When inserting
53871   ** multiple records into an intkey b-tree using a single cursor (as can
53872   ** happen while processing an "INSERT INTO ... SELECT" statement), it
53873   ** is advantageous to leave the cursor pointing to the last entry in
53874   ** the b-tree if possible. If the cursor is left pointing to the last
53875   ** entry in the table, and the next row inserted has an integer key
53876   ** larger than the largest existing key, it is possible to insert the
53877   ** row without seeking the cursor. This can be a big performance boost.
53878   */
53879   pCur->info.nSize = 0;
53880   pCur->validNKey = 0;
53881   if( rc==SQLITE_OK && pPage->nOverflow ){
53882     rc = balance(pCur);
53883
53884     /* Must make sure nOverflow is reset to zero even if the balance()
53885     ** fails. Internal data structure corruption will result otherwise. 
53886     ** Also, set the cursor state to invalid. This stops saveCursorPosition()
53887     ** from trying to save the current position of the cursor.  */
53888     pCur->apPage[pCur->iPage]->nOverflow = 0;
53889     pCur->eState = CURSOR_INVALID;
53890   }
53891   assert( pCur->apPage[pCur->iPage]->nOverflow==0 );
53892
53893 end_insert:
53894   return rc;
53895 }
53896
53897 /*
53898 ** Delete the entry that the cursor is pointing to.  The cursor
53899 ** is left pointing at a arbitrary location.
53900 */
53901 SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur){
53902   Btree *p = pCur->pBtree;
53903   BtShared *pBt = p->pBt;              
53904   int rc;                              /* Return code */
53905   MemPage *pPage;                      /* Page to delete cell from */
53906   unsigned char *pCell;                /* Pointer to cell to delete */
53907   int iCellIdx;                        /* Index of cell to delete */
53908   int iCellDepth;                      /* Depth of node containing pCell */ 
53909
53910   assert( cursorHoldsMutex(pCur) );
53911   assert( pBt->inTransaction==TRANS_WRITE );
53912   assert( !pBt->readOnly );
53913   assert( pCur->wrFlag );
53914   assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
53915   assert( !hasReadConflicts(p, pCur->pgnoRoot) );
53916
53917   if( NEVER(pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell) 
53918    || NEVER(pCur->eState!=CURSOR_VALID)
53919   ){
53920     return SQLITE_ERROR;  /* Something has gone awry. */
53921   }
53922
53923   /* If this is a delete operation to remove a row from a table b-tree,
53924   ** invalidate any incrblob cursors open on the row being deleted.  */
53925   if( pCur->pKeyInfo==0 ){
53926     invalidateIncrblobCursors(p, pCur->info.nKey, 0);
53927   }
53928
53929   iCellDepth = pCur->iPage;
53930   iCellIdx = pCur->aiIdx[iCellDepth];
53931   pPage = pCur->apPage[iCellDepth];
53932   pCell = findCell(pPage, iCellIdx);
53933
53934   /* If the page containing the entry to delete is not a leaf page, move
53935   ** the cursor to the largest entry in the tree that is smaller than
53936   ** the entry being deleted. This cell will replace the cell being deleted
53937   ** from the internal node. The 'previous' entry is used for this instead
53938   ** of the 'next' entry, as the previous entry is always a part of the
53939   ** sub-tree headed by the child page of the cell being deleted. This makes
53940   ** balancing the tree following the delete operation easier.  */
53941   if( !pPage->leaf ){
53942     int notUsed;
53943     rc = sqlite3BtreePrevious(pCur, &notUsed);
53944     if( rc ) return rc;
53945   }
53946
53947   /* Save the positions of any other cursors open on this table before
53948   ** making any modifications. Make the page containing the entry to be 
53949   ** deleted writable. Then free any overflow pages associated with the 
53950   ** entry and finally remove the cell itself from within the page.  
53951   */
53952   rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur);
53953   if( rc ) return rc;
53954   rc = sqlite3PagerWrite(pPage->pDbPage);
53955   if( rc ) return rc;
53956   rc = clearCell(pPage, pCell);
53957   dropCell(pPage, iCellIdx, cellSizePtr(pPage, pCell), &rc);
53958   if( rc ) return rc;
53959
53960   /* If the cell deleted was not located on a leaf page, then the cursor
53961   ** is currently pointing to the largest entry in the sub-tree headed
53962   ** by the child-page of the cell that was just deleted from an internal
53963   ** node. The cell from the leaf node needs to be moved to the internal
53964   ** node to replace the deleted cell.  */
53965   if( !pPage->leaf ){
53966     MemPage *pLeaf = pCur->apPage[pCur->iPage];
53967     int nCell;
53968     Pgno n = pCur->apPage[iCellDepth+1]->pgno;
53969     unsigned char *pTmp;
53970
53971     pCell = findCell(pLeaf, pLeaf->nCell-1);
53972     nCell = cellSizePtr(pLeaf, pCell);
53973     assert( MX_CELL_SIZE(pBt) >= nCell );
53974
53975     allocateTempSpace(pBt);
53976     pTmp = pBt->pTmpSpace;
53977
53978     rc = sqlite3PagerWrite(pLeaf->pDbPage);
53979     insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n, &rc);
53980     dropCell(pLeaf, pLeaf->nCell-1, nCell, &rc);
53981     if( rc ) return rc;
53982   }
53983
53984   /* Balance the tree. If the entry deleted was located on a leaf page,
53985   ** then the cursor still points to that page. In this case the first
53986   ** call to balance() repairs the tree, and the if(...) condition is
53987   ** never true.
53988   **
53989   ** Otherwise, if the entry deleted was on an internal node page, then
53990   ** pCur is pointing to the leaf page from which a cell was removed to
53991   ** replace the cell deleted from the internal node. This is slightly
53992   ** tricky as the leaf node may be underfull, and the internal node may
53993   ** be either under or overfull. In this case run the balancing algorithm
53994   ** on the leaf node first. If the balance proceeds far enough up the
53995   ** tree that we can be sure that any problem in the internal node has
53996   ** been corrected, so be it. Otherwise, after balancing the leaf node,
53997   ** walk the cursor up the tree to the internal node and balance it as 
53998   ** well.  */
53999   rc = balance(pCur);
54000   if( rc==SQLITE_OK && pCur->iPage>iCellDepth ){
54001     while( pCur->iPage>iCellDepth ){
54002       releasePage(pCur->apPage[pCur->iPage--]);
54003     }
54004     rc = balance(pCur);
54005   }
54006
54007   if( rc==SQLITE_OK ){
54008     moveToRoot(pCur);
54009   }
54010   return rc;
54011 }
54012
54013 /*
54014 ** Create a new BTree table.  Write into *piTable the page
54015 ** number for the root page of the new table.
54016 **
54017 ** The type of type is determined by the flags parameter.  Only the
54018 ** following values of flags are currently in use.  Other values for
54019 ** flags might not work:
54020 **
54021 **     BTREE_INTKEY|BTREE_LEAFDATA     Used for SQL tables with rowid keys
54022 **     BTREE_ZERODATA                  Used for SQL indices
54023 */
54024 static int btreeCreateTable(Btree *p, int *piTable, int createTabFlags){
54025   BtShared *pBt = p->pBt;
54026   MemPage *pRoot;
54027   Pgno pgnoRoot;
54028   int rc;
54029   int ptfFlags;          /* Page-type flage for the root page of new table */
54030
54031   assert( sqlite3BtreeHoldsMutex(p) );
54032   assert( pBt->inTransaction==TRANS_WRITE );
54033   assert( !pBt->readOnly );
54034
54035 #ifdef SQLITE_OMIT_AUTOVACUUM
54036   rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0);
54037   if( rc ){
54038     return rc;
54039   }
54040 #else
54041   if( pBt->autoVacuum ){
54042     Pgno pgnoMove;      /* Move a page here to make room for the root-page */
54043     MemPage *pPageMove; /* The page to move to. */
54044
54045     /* Creating a new table may probably require moving an existing database
54046     ** to make room for the new tables root page. In case this page turns
54047     ** out to be an overflow page, delete all overflow page-map caches
54048     ** held by open cursors.
54049     */
54050     invalidateAllOverflowCache(pBt);
54051
54052     /* Read the value of meta[3] from the database to determine where the
54053     ** root page of the new table should go. meta[3] is the largest root-page
54054     ** created so far, so the new root-page is (meta[3]+1).
54055     */
54056     sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &pgnoRoot);
54057     pgnoRoot++;
54058
54059     /* The new root-page may not be allocated on a pointer-map page, or the
54060     ** PENDING_BYTE page.
54061     */
54062     while( pgnoRoot==PTRMAP_PAGENO(pBt, pgnoRoot) ||
54063         pgnoRoot==PENDING_BYTE_PAGE(pBt) ){
54064       pgnoRoot++;
54065     }
54066     assert( pgnoRoot>=3 );
54067
54068     /* Allocate a page. The page that currently resides at pgnoRoot will
54069     ** be moved to the allocated page (unless the allocated page happens
54070     ** to reside at pgnoRoot).
54071     */
54072     rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, 1);
54073     if( rc!=SQLITE_OK ){
54074       return rc;
54075     }
54076
54077     if( pgnoMove!=pgnoRoot ){
54078       /* pgnoRoot is the page that will be used for the root-page of
54079       ** the new table (assuming an error did not occur). But we were
54080       ** allocated pgnoMove. If required (i.e. if it was not allocated
54081       ** by extending the file), the current page at position pgnoMove
54082       ** is already journaled.
54083       */
54084       u8 eType = 0;
54085       Pgno iPtrPage = 0;
54086
54087       releasePage(pPageMove);
54088
54089       /* Move the page currently at pgnoRoot to pgnoMove. */
54090       rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0);
54091       if( rc!=SQLITE_OK ){
54092         return rc;
54093       }
54094       rc = ptrmapGet(pBt, pgnoRoot, &eType, &iPtrPage);
54095       if( eType==PTRMAP_ROOTPAGE || eType==PTRMAP_FREEPAGE ){
54096         rc = SQLITE_CORRUPT_BKPT;
54097       }
54098       if( rc!=SQLITE_OK ){
54099         releasePage(pRoot);
54100         return rc;
54101       }
54102       assert( eType!=PTRMAP_ROOTPAGE );
54103       assert( eType!=PTRMAP_FREEPAGE );
54104       rc = relocatePage(pBt, pRoot, eType, iPtrPage, pgnoMove, 0);
54105       releasePage(pRoot);
54106
54107       /* Obtain the page at pgnoRoot */
54108       if( rc!=SQLITE_OK ){
54109         return rc;
54110       }
54111       rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0);
54112       if( rc!=SQLITE_OK ){
54113         return rc;
54114       }
54115       rc = sqlite3PagerWrite(pRoot->pDbPage);
54116       if( rc!=SQLITE_OK ){
54117         releasePage(pRoot);
54118         return rc;
54119       }
54120     }else{
54121       pRoot = pPageMove;
54122     } 
54123
54124     /* Update the pointer-map and meta-data with the new root-page number. */
54125     ptrmapPut(pBt, pgnoRoot, PTRMAP_ROOTPAGE, 0, &rc);
54126     if( rc ){
54127       releasePage(pRoot);
54128       return rc;
54129     }
54130
54131     /* When the new root page was allocated, page 1 was made writable in
54132     ** order either to increase the database filesize, or to decrement the
54133     ** freelist count.  Hence, the sqlite3BtreeUpdateMeta() call cannot fail.
54134     */
54135     assert( sqlite3PagerIswriteable(pBt->pPage1->pDbPage) );
54136     rc = sqlite3BtreeUpdateMeta(p, 4, pgnoRoot);
54137     if( NEVER(rc) ){
54138       releasePage(pRoot);
54139       return rc;
54140     }
54141
54142   }else{
54143     rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0);
54144     if( rc ) return rc;
54145   }
54146 #endif
54147   assert( sqlite3PagerIswriteable(pRoot->pDbPage) );
54148   if( createTabFlags & BTREE_INTKEY ){
54149     ptfFlags = PTF_INTKEY | PTF_LEAFDATA | PTF_LEAF;
54150   }else{
54151     ptfFlags = PTF_ZERODATA | PTF_LEAF;
54152   }
54153   zeroPage(pRoot, ptfFlags);
54154   sqlite3PagerUnref(pRoot->pDbPage);
54155   assert( (pBt->openFlags & BTREE_SINGLE)==0 || pgnoRoot==2 );
54156   *piTable = (int)pgnoRoot;
54157   return SQLITE_OK;
54158 }
54159 SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree *p, int *piTable, int flags){
54160   int rc;
54161   sqlite3BtreeEnter(p);
54162   rc = btreeCreateTable(p, piTable, flags);
54163   sqlite3BtreeLeave(p);
54164   return rc;
54165 }
54166
54167 /*
54168 ** Erase the given database page and all its children.  Return
54169 ** the page to the freelist.
54170 */
54171 static int clearDatabasePage(
54172   BtShared *pBt,           /* The BTree that contains the table */
54173   Pgno pgno,               /* Page number to clear */
54174   int freePageFlag,        /* Deallocate page if true */
54175   int *pnChange            /* Add number of Cells freed to this counter */
54176 ){
54177   MemPage *pPage;
54178   int rc;
54179   unsigned char *pCell;
54180   int i;
54181
54182   assert( sqlite3_mutex_held(pBt->mutex) );
54183   if( pgno>btreePagecount(pBt) ){
54184     return SQLITE_CORRUPT_BKPT;
54185   }
54186
54187   rc = getAndInitPage(pBt, pgno, &pPage);
54188   if( rc ) return rc;
54189   for(i=0; i<pPage->nCell; i++){
54190     pCell = findCell(pPage, i);
54191     if( !pPage->leaf ){
54192       rc = clearDatabasePage(pBt, get4byte(pCell), 1, pnChange);
54193       if( rc ) goto cleardatabasepage_out;
54194     }
54195     rc = clearCell(pPage, pCell);
54196     if( rc ) goto cleardatabasepage_out;
54197   }
54198   if( !pPage->leaf ){
54199     rc = clearDatabasePage(pBt, get4byte(&pPage->aData[8]), 1, pnChange);
54200     if( rc ) goto cleardatabasepage_out;
54201   }else if( pnChange ){
54202     assert( pPage->intKey );
54203     *pnChange += pPage->nCell;
54204   }
54205   if( freePageFlag ){
54206     freePage(pPage, &rc);
54207   }else if( (rc = sqlite3PagerWrite(pPage->pDbPage))==0 ){
54208     zeroPage(pPage, pPage->aData[0] | PTF_LEAF);
54209   }
54210
54211 cleardatabasepage_out:
54212   releasePage(pPage);
54213   return rc;
54214 }
54215
54216 /*
54217 ** Delete all information from a single table in the database.  iTable is
54218 ** the page number of the root of the table.  After this routine returns,
54219 ** the root page is empty, but still exists.
54220 **
54221 ** This routine will fail with SQLITE_LOCKED if there are any open
54222 ** read cursors on the table.  Open write cursors are moved to the
54223 ** root of the table.
54224 **
54225 ** If pnChange is not NULL, then table iTable must be an intkey table. The
54226 ** integer value pointed to by pnChange is incremented by the number of
54227 ** entries in the table.
54228 */
54229 SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree *p, int iTable, int *pnChange){
54230   int rc;
54231   BtShared *pBt = p->pBt;
54232   sqlite3BtreeEnter(p);
54233   assert( p->inTrans==TRANS_WRITE );
54234
54235   /* Invalidate all incrblob cursors open on table iTable (assuming iTable
54236   ** is the root of a table b-tree - if it is not, the following call is
54237   ** a no-op).  */
54238   invalidateIncrblobCursors(p, 0, 1);
54239
54240   rc = saveAllCursors(pBt, (Pgno)iTable, 0);
54241   if( SQLITE_OK==rc ){
54242     rc = clearDatabasePage(pBt, (Pgno)iTable, 0, pnChange);
54243   }
54244   sqlite3BtreeLeave(p);
54245   return rc;
54246 }
54247
54248 /*
54249 ** Erase all information in a table and add the root of the table to
54250 ** the freelist.  Except, the root of the principle table (the one on
54251 ** page 1) is never added to the freelist.
54252 **
54253 ** This routine will fail with SQLITE_LOCKED if there are any open
54254 ** cursors on the table.
54255 **
54256 ** If AUTOVACUUM is enabled and the page at iTable is not the last
54257 ** root page in the database file, then the last root page 
54258 ** in the database file is moved into the slot formerly occupied by
54259 ** iTable and that last slot formerly occupied by the last root page
54260 ** is added to the freelist instead of iTable.  In this say, all
54261 ** root pages are kept at the beginning of the database file, which
54262 ** is necessary for AUTOVACUUM to work right.  *piMoved is set to the 
54263 ** page number that used to be the last root page in the file before
54264 ** the move.  If no page gets moved, *piMoved is set to 0.
54265 ** The last root page is recorded in meta[3] and the value of
54266 ** meta[3] is updated by this procedure.
54267 */
54268 static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){
54269   int rc;
54270   MemPage *pPage = 0;
54271   BtShared *pBt = p->pBt;
54272
54273   assert( sqlite3BtreeHoldsMutex(p) );
54274   assert( p->inTrans==TRANS_WRITE );
54275
54276   /* It is illegal to drop a table if any cursors are open on the
54277   ** database. This is because in auto-vacuum mode the backend may
54278   ** need to move another root-page to fill a gap left by the deleted
54279   ** root page. If an open cursor was using this page a problem would 
54280   ** occur.
54281   **
54282   ** This error is caught long before control reaches this point.
54283   */
54284   if( NEVER(pBt->pCursor) ){
54285     sqlite3ConnectionBlocked(p->db, pBt->pCursor->pBtree->db);
54286     return SQLITE_LOCKED_SHAREDCACHE;
54287   }
54288
54289   rc = btreeGetPage(pBt, (Pgno)iTable, &pPage, 0);
54290   if( rc ) return rc;
54291   rc = sqlite3BtreeClearTable(p, iTable, 0);
54292   if( rc ){
54293     releasePage(pPage);
54294     return rc;
54295   }
54296
54297   *piMoved = 0;
54298
54299   if( iTable>1 ){
54300 #ifdef SQLITE_OMIT_AUTOVACUUM
54301     freePage(pPage, &rc);
54302     releasePage(pPage);
54303 #else
54304     if( pBt->autoVacuum ){
54305       Pgno maxRootPgno;
54306       sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &maxRootPgno);
54307
54308       if( iTable==maxRootPgno ){
54309         /* If the table being dropped is the table with the largest root-page
54310         ** number in the database, put the root page on the free list. 
54311         */
54312         freePage(pPage, &rc);
54313         releasePage(pPage);
54314         if( rc!=SQLITE_OK ){
54315           return rc;
54316         }
54317       }else{
54318         /* The table being dropped does not have the largest root-page
54319         ** number in the database. So move the page that does into the 
54320         ** gap left by the deleted root-page.
54321         */
54322         MemPage *pMove;
54323         releasePage(pPage);
54324         rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0);
54325         if( rc!=SQLITE_OK ){
54326           return rc;
54327         }
54328         rc = relocatePage(pBt, pMove, PTRMAP_ROOTPAGE, 0, iTable, 0);
54329         releasePage(pMove);
54330         if( rc!=SQLITE_OK ){
54331           return rc;
54332         }
54333         pMove = 0;
54334         rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0);
54335         freePage(pMove, &rc);
54336         releasePage(pMove);
54337         if( rc!=SQLITE_OK ){
54338           return rc;
54339         }
54340         *piMoved = maxRootPgno;
54341       }
54342
54343       /* Set the new 'max-root-page' value in the database header. This
54344       ** is the old value less one, less one more if that happens to
54345       ** be a root-page number, less one again if that is the
54346       ** PENDING_BYTE_PAGE.
54347       */
54348       maxRootPgno--;
54349       while( maxRootPgno==PENDING_BYTE_PAGE(pBt)
54350              || PTRMAP_ISPAGE(pBt, maxRootPgno) ){
54351         maxRootPgno--;
54352       }
54353       assert( maxRootPgno!=PENDING_BYTE_PAGE(pBt) );
54354
54355       rc = sqlite3BtreeUpdateMeta(p, 4, maxRootPgno);
54356     }else{
54357       freePage(pPage, &rc);
54358       releasePage(pPage);
54359     }
54360 #endif
54361   }else{
54362     /* If sqlite3BtreeDropTable was called on page 1.
54363     ** This really never should happen except in a corrupt
54364     ** database. 
54365     */
54366     zeroPage(pPage, PTF_INTKEY|PTF_LEAF );
54367     releasePage(pPage);
54368   }
54369   return rc;  
54370 }
54371 SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){
54372   int rc;
54373   sqlite3BtreeEnter(p);
54374   rc = btreeDropTable(p, iTable, piMoved);
54375   sqlite3BtreeLeave(p);
54376   return rc;
54377 }
54378
54379
54380 /*
54381 ** This function may only be called if the b-tree connection already
54382 ** has a read or write transaction open on the database.
54383 **
54384 ** Read the meta-information out of a database file.  Meta[0]
54385 ** is the number of free pages currently in the database.  Meta[1]
54386 ** through meta[15] are available for use by higher layers.  Meta[0]
54387 ** is read-only, the others are read/write.
54388 ** 
54389 ** The schema layer numbers meta values differently.  At the schema
54390 ** layer (and the SetCookie and ReadCookie opcodes) the number of
54391 ** free pages is not visible.  So Cookie[0] is the same as Meta[1].
54392 */
54393 SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){
54394   BtShared *pBt = p->pBt;
54395
54396   sqlite3BtreeEnter(p);
54397   assert( p->inTrans>TRANS_NONE );
54398   assert( SQLITE_OK==querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK) );
54399   assert( pBt->pPage1 );
54400   assert( idx>=0 && idx<=15 );
54401
54402   *pMeta = get4byte(&pBt->pPage1->aData[36 + idx*4]);
54403
54404   /* If auto-vacuum is disabled in this build and this is an auto-vacuum
54405   ** database, mark the database as read-only.  */
54406 #ifdef SQLITE_OMIT_AUTOVACUUM
54407   if( idx==BTREE_LARGEST_ROOT_PAGE && *pMeta>0 ) pBt->readOnly = 1;
54408 #endif
54409
54410   sqlite3BtreeLeave(p);
54411 }
54412
54413 /*
54414 ** Write meta-information back into the database.  Meta[0] is
54415 ** read-only and may not be written.
54416 */
54417 SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree *p, int idx, u32 iMeta){
54418   BtShared *pBt = p->pBt;
54419   unsigned char *pP1;
54420   int rc;
54421   assert( idx>=1 && idx<=15 );
54422   sqlite3BtreeEnter(p);
54423   assert( p->inTrans==TRANS_WRITE );
54424   assert( pBt->pPage1!=0 );
54425   pP1 = pBt->pPage1->aData;
54426   rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
54427   if( rc==SQLITE_OK ){
54428     put4byte(&pP1[36 + idx*4], iMeta);
54429 #ifndef SQLITE_OMIT_AUTOVACUUM
54430     if( idx==BTREE_INCR_VACUUM ){
54431       assert( pBt->autoVacuum || iMeta==0 );
54432       assert( iMeta==0 || iMeta==1 );
54433       pBt->incrVacuum = (u8)iMeta;
54434     }
54435 #endif
54436   }
54437   sqlite3BtreeLeave(p);
54438   return rc;
54439 }
54440
54441 #ifndef SQLITE_OMIT_BTREECOUNT
54442 /*
54443 ** The first argument, pCur, is a cursor opened on some b-tree. Count the
54444 ** number of entries in the b-tree and write the result to *pnEntry.
54445 **
54446 ** SQLITE_OK is returned if the operation is successfully executed. 
54447 ** Otherwise, if an error is encountered (i.e. an IO error or database
54448 ** corruption) an SQLite error code is returned.
54449 */
54450 SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
54451   i64 nEntry = 0;                      /* Value to return in *pnEntry */
54452   int rc;                              /* Return code */
54453   rc = moveToRoot(pCur);
54454
54455   /* Unless an error occurs, the following loop runs one iteration for each
54456   ** page in the B-Tree structure (not including overflow pages). 
54457   */
54458   while( rc==SQLITE_OK ){
54459     int iIdx;                          /* Index of child node in parent */
54460     MemPage *pPage;                    /* Current page of the b-tree */
54461
54462     /* If this is a leaf page or the tree is not an int-key tree, then 
54463     ** this page contains countable entries. Increment the entry counter
54464     ** accordingly.
54465     */
54466     pPage = pCur->apPage[pCur->iPage];
54467     if( pPage->leaf || !pPage->intKey ){
54468       nEntry += pPage->nCell;
54469     }
54470
54471     /* pPage is a leaf node. This loop navigates the cursor so that it 
54472     ** points to the first interior cell that it points to the parent of
54473     ** the next page in the tree that has not yet been visited. The
54474     ** pCur->aiIdx[pCur->iPage] value is set to the index of the parent cell
54475     ** of the page, or to the number of cells in the page if the next page
54476     ** to visit is the right-child of its parent.
54477     **
54478     ** If all pages in the tree have been visited, return SQLITE_OK to the
54479     ** caller.
54480     */
54481     if( pPage->leaf ){
54482       do {
54483         if( pCur->iPage==0 ){
54484           /* All pages of the b-tree have been visited. Return successfully. */
54485           *pnEntry = nEntry;
54486           return SQLITE_OK;
54487         }
54488         moveToParent(pCur);
54489       }while ( pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell );
54490
54491       pCur->aiIdx[pCur->iPage]++;
54492       pPage = pCur->apPage[pCur->iPage];
54493     }
54494
54495     /* Descend to the child node of the cell that the cursor currently 
54496     ** points at. This is the right-child if (iIdx==pPage->nCell).
54497     */
54498     iIdx = pCur->aiIdx[pCur->iPage];
54499     if( iIdx==pPage->nCell ){
54500       rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8]));
54501     }else{
54502       rc = moveToChild(pCur, get4byte(findCell(pPage, iIdx)));
54503     }
54504   }
54505
54506   /* An error has occurred. Return an error code. */
54507   return rc;
54508 }
54509 #endif
54510
54511 /*
54512 ** Return the pager associated with a BTree.  This routine is used for
54513 ** testing and debugging only.
54514 */
54515 SQLITE_PRIVATE Pager *sqlite3BtreePager(Btree *p){
54516   return p->pBt->pPager;
54517 }
54518
54519 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
54520 /*
54521 ** Append a message to the error message string.
54522 */
54523 static void checkAppendMsg(
54524   IntegrityCk *pCheck,
54525   char *zMsg1,
54526   const char *zFormat,
54527   ...
54528 ){
54529   va_list ap;
54530   if( !pCheck->mxErr ) return;
54531   pCheck->mxErr--;
54532   pCheck->nErr++;
54533   va_start(ap, zFormat);
54534   if( pCheck->errMsg.nChar ){
54535     sqlite3StrAccumAppend(&pCheck->errMsg, "\n", 1);
54536   }
54537   if( zMsg1 ){
54538     sqlite3StrAccumAppend(&pCheck->errMsg, zMsg1, -1);
54539   }
54540   sqlite3VXPrintf(&pCheck->errMsg, 1, zFormat, ap);
54541   va_end(ap);
54542   if( pCheck->errMsg.mallocFailed ){
54543     pCheck->mallocFailed = 1;
54544   }
54545 }
54546 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
54547
54548 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
54549 /*
54550 ** Add 1 to the reference count for page iPage.  If this is the second
54551 ** reference to the page, add an error message to pCheck->zErrMsg.
54552 ** Return 1 if there are 2 ore more references to the page and 0 if
54553 ** if this is the first reference to the page.
54554 **
54555 ** Also check that the page number is in bounds.
54556 */
54557 static int checkRef(IntegrityCk *pCheck, Pgno iPage, char *zContext){
54558   if( iPage==0 ) return 1;
54559   if( iPage>pCheck->nPage ){
54560     checkAppendMsg(pCheck, zContext, "invalid page number %d", iPage);
54561     return 1;
54562   }
54563   if( pCheck->anRef[iPage]==1 ){
54564     checkAppendMsg(pCheck, zContext, "2nd reference to page %d", iPage);
54565     return 1;
54566   }
54567   return  (pCheck->anRef[iPage]++)>1;
54568 }
54569
54570 #ifndef SQLITE_OMIT_AUTOVACUUM
54571 /*
54572 ** Check that the entry in the pointer-map for page iChild maps to 
54573 ** page iParent, pointer type ptrType. If not, append an error message
54574 ** to pCheck.
54575 */
54576 static void checkPtrmap(
54577   IntegrityCk *pCheck,   /* Integrity check context */
54578   Pgno iChild,           /* Child page number */
54579   u8 eType,              /* Expected pointer map type */
54580   Pgno iParent,          /* Expected pointer map parent page number */
54581   char *zContext         /* Context description (used for error msg) */
54582 ){
54583   int rc;
54584   u8 ePtrmapType;
54585   Pgno iPtrmapParent;
54586
54587   rc = ptrmapGet(pCheck->pBt, iChild, &ePtrmapType, &iPtrmapParent);
54588   if( rc!=SQLITE_OK ){
54589     if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) pCheck->mallocFailed = 1;
54590     checkAppendMsg(pCheck, zContext, "Failed to read ptrmap key=%d", iChild);
54591     return;
54592   }
54593
54594   if( ePtrmapType!=eType || iPtrmapParent!=iParent ){
54595     checkAppendMsg(pCheck, zContext, 
54596       "Bad ptr map entry key=%d expected=(%d,%d) got=(%d,%d)", 
54597       iChild, eType, iParent, ePtrmapType, iPtrmapParent);
54598   }
54599 }
54600 #endif
54601
54602 /*
54603 ** Check the integrity of the freelist or of an overflow page list.
54604 ** Verify that the number of pages on the list is N.
54605 */
54606 static void checkList(
54607   IntegrityCk *pCheck,  /* Integrity checking context */
54608   int isFreeList,       /* True for a freelist.  False for overflow page list */
54609   int iPage,            /* Page number for first page in the list */
54610   int N,                /* Expected number of pages in the list */
54611   char *zContext        /* Context for error messages */
54612 ){
54613   int i;
54614   int expected = N;
54615   int iFirst = iPage;
54616   while( N-- > 0 && pCheck->mxErr ){
54617     DbPage *pOvflPage;
54618     unsigned char *pOvflData;
54619     if( iPage<1 ){
54620       checkAppendMsg(pCheck, zContext,
54621          "%d of %d pages missing from overflow list starting at %d",
54622           N+1, expected, iFirst);
54623       break;
54624     }
54625     if( checkRef(pCheck, iPage, zContext) ) break;
54626     if( sqlite3PagerGet(pCheck->pPager, (Pgno)iPage, &pOvflPage) ){
54627       checkAppendMsg(pCheck, zContext, "failed to get page %d", iPage);
54628       break;
54629     }
54630     pOvflData = (unsigned char *)sqlite3PagerGetData(pOvflPage);
54631     if( isFreeList ){
54632       int n = get4byte(&pOvflData[4]);
54633 #ifndef SQLITE_OMIT_AUTOVACUUM
54634       if( pCheck->pBt->autoVacuum ){
54635         checkPtrmap(pCheck, iPage, PTRMAP_FREEPAGE, 0, zContext);
54636       }
54637 #endif
54638       if( n>(int)pCheck->pBt->usableSize/4-2 ){
54639         checkAppendMsg(pCheck, zContext,
54640            "freelist leaf count too big on page %d", iPage);
54641         N--;
54642       }else{
54643         for(i=0; i<n; i++){
54644           Pgno iFreePage = get4byte(&pOvflData[8+i*4]);
54645 #ifndef SQLITE_OMIT_AUTOVACUUM
54646           if( pCheck->pBt->autoVacuum ){
54647             checkPtrmap(pCheck, iFreePage, PTRMAP_FREEPAGE, 0, zContext);
54648           }
54649 #endif
54650           checkRef(pCheck, iFreePage, zContext);
54651         }
54652         N -= n;
54653       }
54654     }
54655 #ifndef SQLITE_OMIT_AUTOVACUUM
54656     else{
54657       /* If this database supports auto-vacuum and iPage is not the last
54658       ** page in this overflow list, check that the pointer-map entry for
54659       ** the following page matches iPage.
54660       */
54661       if( pCheck->pBt->autoVacuum && N>0 ){
54662         i = get4byte(pOvflData);
54663         checkPtrmap(pCheck, i, PTRMAP_OVERFLOW2, iPage, zContext);
54664       }
54665     }
54666 #endif
54667     iPage = get4byte(pOvflData);
54668     sqlite3PagerUnref(pOvflPage);
54669   }
54670 }
54671 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
54672
54673 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
54674 /*
54675 ** Do various sanity checks on a single page of a tree.  Return
54676 ** the tree depth.  Root pages return 0.  Parents of root pages
54677 ** return 1, and so forth.
54678 ** 
54679 ** These checks are done:
54680 **
54681 **      1.  Make sure that cells and freeblocks do not overlap
54682 **          but combine to completely cover the page.
54683 **  NO  2.  Make sure cell keys are in order.
54684 **  NO  3.  Make sure no key is less than or equal to zLowerBound.
54685 **  NO  4.  Make sure no key is greater than or equal to zUpperBound.
54686 **      5.  Check the integrity of overflow pages.
54687 **      6.  Recursively call checkTreePage on all children.
54688 **      7.  Verify that the depth of all children is the same.
54689 **      8.  Make sure this page is at least 33% full or else it is
54690 **          the root of the tree.
54691 */
54692 static int checkTreePage(
54693   IntegrityCk *pCheck,  /* Context for the sanity check */
54694   int iPage,            /* Page number of the page to check */
54695   char *zParentContext, /* Parent context */
54696   i64 *pnParentMinKey, 
54697   i64 *pnParentMaxKey
54698 ){
54699   MemPage *pPage;
54700   int i, rc, depth, d2, pgno, cnt;
54701   int hdr, cellStart;
54702   int nCell;
54703   u8 *data;
54704   BtShared *pBt;
54705   int usableSize;
54706   char zContext[100];
54707   char *hit = 0;
54708   i64 nMinKey = 0;
54709   i64 nMaxKey = 0;
54710
54711   sqlite3_snprintf(sizeof(zContext), zContext, "Page %d: ", iPage);
54712
54713   /* Check that the page exists
54714   */
54715   pBt = pCheck->pBt;
54716   usableSize = pBt->usableSize;
54717   if( iPage==0 ) return 0;
54718   if( checkRef(pCheck, iPage, zParentContext) ) return 0;
54719   if( (rc = btreeGetPage(pBt, (Pgno)iPage, &pPage, 0))!=0 ){
54720     checkAppendMsg(pCheck, zContext,
54721        "unable to get the page. error code=%d", rc);
54722     return 0;
54723   }
54724
54725   /* Clear MemPage.isInit to make sure the corruption detection code in
54726   ** btreeInitPage() is executed.  */
54727   pPage->isInit = 0;
54728   if( (rc = btreeInitPage(pPage))!=0 ){
54729     assert( rc==SQLITE_CORRUPT );  /* The only possible error from InitPage */
54730     checkAppendMsg(pCheck, zContext, 
54731                    "btreeInitPage() returns error code %d", rc);
54732     releasePage(pPage);
54733     return 0;
54734   }
54735
54736   /* Check out all the cells.
54737   */
54738   depth = 0;
54739   for(i=0; i<pPage->nCell && pCheck->mxErr; i++){
54740     u8 *pCell;
54741     u32 sz;
54742     CellInfo info;
54743
54744     /* Check payload overflow pages
54745     */
54746     sqlite3_snprintf(sizeof(zContext), zContext,
54747              "On tree page %d cell %d: ", iPage, i);
54748     pCell = findCell(pPage,i);
54749     btreeParseCellPtr(pPage, pCell, &info);
54750     sz = info.nData;
54751     if( !pPage->intKey ) sz += (int)info.nKey;
54752     /* For intKey pages, check that the keys are in order.
54753     */
54754     else if( i==0 ) nMinKey = nMaxKey = info.nKey;
54755     else{
54756       if( info.nKey <= nMaxKey ){
54757         checkAppendMsg(pCheck, zContext, 
54758             "Rowid %lld out of order (previous was %lld)", info.nKey, nMaxKey);
54759       }
54760       nMaxKey = info.nKey;
54761     }
54762     assert( sz==info.nPayload );
54763     if( (sz>info.nLocal) 
54764      && (&pCell[info.iOverflow]<=&pPage->aData[pBt->usableSize])
54765     ){
54766       int nPage = (sz - info.nLocal + usableSize - 5)/(usableSize - 4);
54767       Pgno pgnoOvfl = get4byte(&pCell[info.iOverflow]);
54768 #ifndef SQLITE_OMIT_AUTOVACUUM
54769       if( pBt->autoVacuum ){
54770         checkPtrmap(pCheck, pgnoOvfl, PTRMAP_OVERFLOW1, iPage, zContext);
54771       }
54772 #endif
54773       checkList(pCheck, 0, pgnoOvfl, nPage, zContext);
54774     }
54775
54776     /* Check sanity of left child page.
54777     */
54778     if( !pPage->leaf ){
54779       pgno = get4byte(pCell);
54780 #ifndef SQLITE_OMIT_AUTOVACUUM
54781       if( pBt->autoVacuum ){
54782         checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext);
54783       }
54784 #endif
54785       d2 = checkTreePage(pCheck, pgno, zContext, &nMinKey, i==0 ? NULL : &nMaxKey);
54786       if( i>0 && d2!=depth ){
54787         checkAppendMsg(pCheck, zContext, "Child page depth differs");
54788       }
54789       depth = d2;
54790     }
54791   }
54792
54793   if( !pPage->leaf ){
54794     pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
54795     sqlite3_snprintf(sizeof(zContext), zContext, 
54796                      "On page %d at right child: ", iPage);
54797 #ifndef SQLITE_OMIT_AUTOVACUUM
54798     if( pBt->autoVacuum ){
54799       checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext);
54800     }
54801 #endif
54802     checkTreePage(pCheck, pgno, zContext, NULL, !pPage->nCell ? NULL : &nMaxKey);
54803   }
54804  
54805   /* For intKey leaf pages, check that the min/max keys are in order
54806   ** with any left/parent/right pages.
54807   */
54808   if( pPage->leaf && pPage->intKey ){
54809     /* if we are a left child page */
54810     if( pnParentMinKey ){
54811       /* if we are the left most child page */
54812       if( !pnParentMaxKey ){
54813         if( nMaxKey > *pnParentMinKey ){
54814           checkAppendMsg(pCheck, zContext, 
54815               "Rowid %lld out of order (max larger than parent min of %lld)",
54816               nMaxKey, *pnParentMinKey);
54817         }
54818       }else{
54819         if( nMinKey <= *pnParentMinKey ){
54820           checkAppendMsg(pCheck, zContext, 
54821               "Rowid %lld out of order (min less than parent min of %lld)",
54822               nMinKey, *pnParentMinKey);
54823         }
54824         if( nMaxKey > *pnParentMaxKey ){
54825           checkAppendMsg(pCheck, zContext, 
54826               "Rowid %lld out of order (max larger than parent max of %lld)",
54827               nMaxKey, *pnParentMaxKey);
54828         }
54829         *pnParentMinKey = nMaxKey;
54830       }
54831     /* else if we're a right child page */
54832     } else if( pnParentMaxKey ){
54833       if( nMinKey <= *pnParentMaxKey ){
54834         checkAppendMsg(pCheck, zContext, 
54835             "Rowid %lld out of order (min less than parent max of %lld)",
54836             nMinKey, *pnParentMaxKey);
54837       }
54838     }
54839   }
54840
54841   /* Check for complete coverage of the page
54842   */
54843   data = pPage->aData;
54844   hdr = pPage->hdrOffset;
54845   hit = sqlite3PageMalloc( pBt->pageSize );
54846   if( hit==0 ){
54847     pCheck->mallocFailed = 1;
54848   }else{
54849     int contentOffset = get2byteNotZero(&data[hdr+5]);
54850     assert( contentOffset<=usableSize );  /* Enforced by btreeInitPage() */
54851     memset(hit+contentOffset, 0, usableSize-contentOffset);
54852     memset(hit, 1, contentOffset);
54853     nCell = get2byte(&data[hdr+3]);
54854     cellStart = hdr + 12 - 4*pPage->leaf;
54855     for(i=0; i<nCell; i++){
54856       int pc = get2byte(&data[cellStart+i*2]);
54857       u32 size = 65536;
54858       int j;
54859       if( pc<=usableSize-4 ){
54860         size = cellSizePtr(pPage, &data[pc]);
54861       }
54862       if( (int)(pc+size-1)>=usableSize ){
54863         checkAppendMsg(pCheck, 0, 
54864             "Corruption detected in cell %d on page %d",i,iPage);
54865       }else{
54866         for(j=pc+size-1; j>=pc; j--) hit[j]++;
54867       }
54868     }
54869     i = get2byte(&data[hdr+1]);
54870     while( i>0 ){
54871       int size, j;
54872       assert( i<=usableSize-4 );     /* Enforced by btreeInitPage() */
54873       size = get2byte(&data[i+2]);
54874       assert( i+size<=usableSize );  /* Enforced by btreeInitPage() */
54875       for(j=i+size-1; j>=i; j--) hit[j]++;
54876       j = get2byte(&data[i]);
54877       assert( j==0 || j>i+size );  /* Enforced by btreeInitPage() */
54878       assert( j<=usableSize-4 );   /* Enforced by btreeInitPage() */
54879       i = j;
54880     }
54881     for(i=cnt=0; i<usableSize; i++){
54882       if( hit[i]==0 ){
54883         cnt++;
54884       }else if( hit[i]>1 ){
54885         checkAppendMsg(pCheck, 0,
54886           "Multiple uses for byte %d of page %d", i, iPage);
54887         break;
54888       }
54889     }
54890     if( cnt!=data[hdr+7] ){
54891       checkAppendMsg(pCheck, 0, 
54892           "Fragmentation of %d bytes reported as %d on page %d",
54893           cnt, data[hdr+7], iPage);
54894     }
54895   }
54896   sqlite3PageFree(hit);
54897   releasePage(pPage);
54898   return depth+1;
54899 }
54900 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
54901
54902 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
54903 /*
54904 ** This routine does a complete check of the given BTree file.  aRoot[] is
54905 ** an array of pages numbers were each page number is the root page of
54906 ** a table.  nRoot is the number of entries in aRoot.
54907 **
54908 ** A read-only or read-write transaction must be opened before calling
54909 ** this function.
54910 **
54911 ** Write the number of error seen in *pnErr.  Except for some memory
54912 ** allocation errors,  an error message held in memory obtained from
54913 ** malloc is returned if *pnErr is non-zero.  If *pnErr==0 then NULL is
54914 ** returned.  If a memory allocation error occurs, NULL is returned.
54915 */
54916 SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
54917   Btree *p,     /* The btree to be checked */
54918   int *aRoot,   /* An array of root pages numbers for individual trees */
54919   int nRoot,    /* Number of entries in aRoot[] */
54920   int mxErr,    /* Stop reporting errors after this many */
54921   int *pnErr    /* Write number of errors seen to this variable */
54922 ){
54923   Pgno i;
54924   int nRef;
54925   IntegrityCk sCheck;
54926   BtShared *pBt = p->pBt;
54927   char zErr[100];
54928
54929   sqlite3BtreeEnter(p);
54930   assert( p->inTrans>TRANS_NONE && pBt->inTransaction>TRANS_NONE );
54931   nRef = sqlite3PagerRefcount(pBt->pPager);
54932   sCheck.pBt = pBt;
54933   sCheck.pPager = pBt->pPager;
54934   sCheck.nPage = btreePagecount(sCheck.pBt);
54935   sCheck.mxErr = mxErr;
54936   sCheck.nErr = 0;
54937   sCheck.mallocFailed = 0;
54938   *pnErr = 0;
54939   if( sCheck.nPage==0 ){
54940     sqlite3BtreeLeave(p);
54941     return 0;
54942   }
54943   sCheck.anRef = sqlite3Malloc( (sCheck.nPage+1)*sizeof(sCheck.anRef[0]) );
54944   if( !sCheck.anRef ){
54945     *pnErr = 1;
54946     sqlite3BtreeLeave(p);
54947     return 0;
54948   }
54949   for(i=0; i<=sCheck.nPage; i++){ sCheck.anRef[i] = 0; }
54950   i = PENDING_BYTE_PAGE(pBt);
54951   if( i<=sCheck.nPage ){
54952     sCheck.anRef[i] = 1;
54953   }
54954   sqlite3StrAccumInit(&sCheck.errMsg, zErr, sizeof(zErr), 20000);
54955   sCheck.errMsg.useMalloc = 2;
54956
54957   /* Check the integrity of the freelist
54958   */
54959   checkList(&sCheck, 1, get4byte(&pBt->pPage1->aData[32]),
54960             get4byte(&pBt->pPage1->aData[36]), "Main freelist: ");
54961
54962   /* Check all the tables.
54963   */
54964   for(i=0; (int)i<nRoot && sCheck.mxErr; i++){
54965     if( aRoot[i]==0 ) continue;
54966 #ifndef SQLITE_OMIT_AUTOVACUUM
54967     if( pBt->autoVacuum && aRoot[i]>1 ){
54968       checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0, 0);
54969     }
54970 #endif
54971     checkTreePage(&sCheck, aRoot[i], "List of tree roots: ", NULL, NULL);
54972   }
54973
54974   /* Make sure every page in the file is referenced
54975   */
54976   for(i=1; i<=sCheck.nPage && sCheck.mxErr; i++){
54977 #ifdef SQLITE_OMIT_AUTOVACUUM
54978     if( sCheck.anRef[i]==0 ){
54979       checkAppendMsg(&sCheck, 0, "Page %d is never used", i);
54980     }
54981 #else
54982     /* If the database supports auto-vacuum, make sure no tables contain
54983     ** references to pointer-map pages.
54984     */
54985     if( sCheck.anRef[i]==0 && 
54986        (PTRMAP_PAGENO(pBt, i)!=i || !pBt->autoVacuum) ){
54987       checkAppendMsg(&sCheck, 0, "Page %d is never used", i);
54988     }
54989     if( sCheck.anRef[i]!=0 && 
54990        (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){
54991       checkAppendMsg(&sCheck, 0, "Pointer map page %d is referenced", i);
54992     }
54993 #endif
54994   }
54995
54996   /* Make sure this analysis did not leave any unref() pages.
54997   ** This is an internal consistency check; an integrity check
54998   ** of the integrity check.
54999   */
55000   if( NEVER(nRef != sqlite3PagerRefcount(pBt->pPager)) ){
55001     checkAppendMsg(&sCheck, 0, 
55002       "Outstanding page count goes from %d to %d during this analysis",
55003       nRef, sqlite3PagerRefcount(pBt->pPager)
55004     );
55005   }
55006
55007   /* Clean  up and report errors.
55008   */
55009   sqlite3BtreeLeave(p);
55010   sqlite3_free(sCheck.anRef);
55011   if( sCheck.mallocFailed ){
55012     sqlite3StrAccumReset(&sCheck.errMsg);
55013     *pnErr = sCheck.nErr+1;
55014     return 0;
55015   }
55016   *pnErr = sCheck.nErr;
55017   if( sCheck.nErr==0 ) sqlite3StrAccumReset(&sCheck.errMsg);
55018   return sqlite3StrAccumFinish(&sCheck.errMsg);
55019 }
55020 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
55021
55022 /*
55023 ** Return the full pathname of the underlying database file.
55024 **
55025 ** The pager filename is invariant as long as the pager is
55026 ** open so it is safe to access without the BtShared mutex.
55027 */
55028 SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *p){
55029   assert( p->pBt->pPager!=0 );
55030   return sqlite3PagerFilename(p->pBt->pPager);
55031 }
55032
55033 /*
55034 ** Return the pathname of the journal file for this database. The return
55035 ** value of this routine is the same regardless of whether the journal file
55036 ** has been created or not.
55037 **
55038 ** The pager journal filename is invariant as long as the pager is
55039 ** open so it is safe to access without the BtShared mutex.
55040 */
55041 SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *p){
55042   assert( p->pBt->pPager!=0 );
55043   return sqlite3PagerJournalname(p->pBt->pPager);
55044 }
55045
55046 /*
55047 ** Return non-zero if a transaction is active.
55048 */
55049 SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree *p){
55050   assert( p==0 || sqlite3_mutex_held(p->db->mutex) );
55051   return (p && (p->inTrans==TRANS_WRITE));
55052 }
55053
55054 #ifndef SQLITE_OMIT_WAL
55055 /*
55056 ** Run a checkpoint on the Btree passed as the first argument.
55057 **
55058 ** Return SQLITE_LOCKED if this or any other connection has an open 
55059 ** transaction on the shared-cache the argument Btree is connected to.
55060 **
55061 ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
55062 */
55063 SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree *p, int eMode, int *pnLog, int *pnCkpt){
55064   int rc = SQLITE_OK;
55065   if( p ){
55066     BtShared *pBt = p->pBt;
55067     sqlite3BtreeEnter(p);
55068     if( pBt->inTransaction!=TRANS_NONE ){
55069       rc = SQLITE_LOCKED;
55070     }else{
55071       rc = sqlite3PagerCheckpoint(pBt->pPager, eMode, pnLog, pnCkpt);
55072     }
55073     sqlite3BtreeLeave(p);
55074   }
55075   return rc;
55076 }
55077 #endif
55078
55079 /*
55080 ** Return non-zero if a read (or write) transaction is active.
55081 */
55082 SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree *p){
55083   assert( p );
55084   assert( sqlite3_mutex_held(p->db->mutex) );
55085   return p->inTrans!=TRANS_NONE;
55086 }
55087
55088 SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree *p){
55089   assert( p );
55090   assert( sqlite3_mutex_held(p->db->mutex) );
55091   return p->nBackup!=0;
55092 }
55093
55094 /*
55095 ** This function returns a pointer to a blob of memory associated with
55096 ** a single shared-btree. The memory is used by client code for its own
55097 ** purposes (for example, to store a high-level schema associated with 
55098 ** the shared-btree). The btree layer manages reference counting issues.
55099 **
55100 ** The first time this is called on a shared-btree, nBytes bytes of memory
55101 ** are allocated, zeroed, and returned to the caller. For each subsequent 
55102 ** call the nBytes parameter is ignored and a pointer to the same blob
55103 ** of memory returned. 
55104 **
55105 ** If the nBytes parameter is 0 and the blob of memory has not yet been
55106 ** allocated, a null pointer is returned. If the blob has already been
55107 ** allocated, it is returned as normal.
55108 **
55109 ** Just before the shared-btree is closed, the function passed as the 
55110 ** xFree argument when the memory allocation was made is invoked on the 
55111 ** blob of allocated memory. The xFree function should not call sqlite3_free()
55112 ** on the memory, the btree layer does that.
55113 */
55114 SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *p, int nBytes, void(*xFree)(void *)){
55115   BtShared *pBt = p->pBt;
55116   sqlite3BtreeEnter(p);
55117   if( !pBt->pSchema && nBytes ){
55118     pBt->pSchema = sqlite3DbMallocZero(0, nBytes);
55119     pBt->xFreeSchema = xFree;
55120   }
55121   sqlite3BtreeLeave(p);
55122   return pBt->pSchema;
55123 }
55124
55125 /*
55126 ** Return SQLITE_LOCKED_SHAREDCACHE if another user of the same shared 
55127 ** btree as the argument handle holds an exclusive lock on the 
55128 ** sqlite_master table. Otherwise SQLITE_OK.
55129 */
55130 SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *p){
55131   int rc;
55132   assert( sqlite3_mutex_held(p->db->mutex) );
55133   sqlite3BtreeEnter(p);
55134   rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK);
55135   assert( rc==SQLITE_OK || rc==SQLITE_LOCKED_SHAREDCACHE );
55136   sqlite3BtreeLeave(p);
55137   return rc;
55138 }
55139
55140
55141 #ifndef SQLITE_OMIT_SHARED_CACHE
55142 /*
55143 ** Obtain a lock on the table whose root page is iTab.  The
55144 ** lock is a write lock if isWritelock is true or a read lock
55145 ** if it is false.
55146 */
55147 SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *p, int iTab, u8 isWriteLock){
55148   int rc = SQLITE_OK;
55149   assert( p->inTrans!=TRANS_NONE );
55150   if( p->sharable ){
55151     u8 lockType = READ_LOCK + isWriteLock;
55152     assert( READ_LOCK+1==WRITE_LOCK );
55153     assert( isWriteLock==0 || isWriteLock==1 );
55154
55155     sqlite3BtreeEnter(p);
55156     rc = querySharedCacheTableLock(p, iTab, lockType);
55157     if( rc==SQLITE_OK ){
55158       rc = setSharedCacheTableLock(p, iTab, lockType);
55159     }
55160     sqlite3BtreeLeave(p);
55161   }
55162   return rc;
55163 }
55164 #endif
55165
55166 #ifndef SQLITE_OMIT_INCRBLOB
55167 /*
55168 ** Argument pCsr must be a cursor opened for writing on an 
55169 ** INTKEY table currently pointing at a valid table entry. 
55170 ** This function modifies the data stored as part of that entry.
55171 **
55172 ** Only the data content may only be modified, it is not possible to 
55173 ** change the length of the data stored. If this function is called with
55174 ** parameters that attempt to write past the end of the existing data,
55175 ** no modifications are made and SQLITE_CORRUPT is returned.
55176 */
55177 SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void *z){
55178   int rc;
55179   assert( cursorHoldsMutex(pCsr) );
55180   assert( sqlite3_mutex_held(pCsr->pBtree->db->mutex) );
55181   assert( pCsr->isIncrblobHandle );
55182
55183   rc = restoreCursorPosition(pCsr);
55184   if( rc!=SQLITE_OK ){
55185     return rc;
55186   }
55187   assert( pCsr->eState!=CURSOR_REQUIRESEEK );
55188   if( pCsr->eState!=CURSOR_VALID ){
55189     return SQLITE_ABORT;
55190   }
55191
55192   /* Check some assumptions: 
55193   **   (a) the cursor is open for writing,
55194   **   (b) there is a read/write transaction open,
55195   **   (c) the connection holds a write-lock on the table (if required),
55196   **   (d) there are no conflicting read-locks, and
55197   **   (e) the cursor points at a valid row of an intKey table.
55198   */
55199   if( !pCsr->wrFlag ){
55200     return SQLITE_READONLY;
55201   }
55202   assert( !pCsr->pBt->readOnly && pCsr->pBt->inTransaction==TRANS_WRITE );
55203   assert( hasSharedCacheTableLock(pCsr->pBtree, pCsr->pgnoRoot, 0, 2) );
55204   assert( !hasReadConflicts(pCsr->pBtree, pCsr->pgnoRoot) );
55205   assert( pCsr->apPage[pCsr->iPage]->intKey );
55206
55207   return accessPayload(pCsr, offset, amt, (unsigned char *)z, 1);
55208 }
55209
55210 /* 
55211 ** Set a flag on this cursor to cache the locations of pages from the 
55212 ** overflow list for the current row. This is used by cursors opened
55213 ** for incremental blob IO only.
55214 **
55215 ** This function sets a flag only. The actual page location cache
55216 ** (stored in BtCursor.aOverflow[]) is allocated and used by function
55217 ** accessPayload() (the worker function for sqlite3BtreeData() and
55218 ** sqlite3BtreePutData()).
55219 */
55220 SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *pCur){
55221   assert( cursorHoldsMutex(pCur) );
55222   assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
55223   invalidateOverflowCache(pCur);
55224   pCur->isIncrblobHandle = 1;
55225 }
55226 #endif
55227
55228 /*
55229 ** Set both the "read version" (single byte at byte offset 18) and 
55230 ** "write version" (single byte at byte offset 19) fields in the database
55231 ** header to iVersion.
55232 */
55233 SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBtree, int iVersion){
55234   BtShared *pBt = pBtree->pBt;
55235   int rc;                         /* Return code */
55236  
55237   assert( pBtree->inTrans==TRANS_NONE );
55238   assert( iVersion==1 || iVersion==2 );
55239
55240   /* If setting the version fields to 1, do not automatically open the
55241   ** WAL connection, even if the version fields are currently set to 2.
55242   */
55243   pBt->doNotUseWAL = (u8)(iVersion==1);
55244
55245   rc = sqlite3BtreeBeginTrans(pBtree, 0);
55246   if( rc==SQLITE_OK ){
55247     u8 *aData = pBt->pPage1->aData;
55248     if( aData[18]!=(u8)iVersion || aData[19]!=(u8)iVersion ){
55249       rc = sqlite3BtreeBeginTrans(pBtree, 2);
55250       if( rc==SQLITE_OK ){
55251         rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
55252         if( rc==SQLITE_OK ){
55253           aData[18] = (u8)iVersion;
55254           aData[19] = (u8)iVersion;
55255         }
55256       }
55257     }
55258   }
55259
55260   pBt->doNotUseWAL = 0;
55261   return rc;
55262 }
55263
55264 /************** End of btree.c ***********************************************/
55265 /************** Begin file backup.c ******************************************/
55266 /*
55267 ** 2009 January 28
55268 **
55269 ** The author disclaims copyright to this source code.  In place of
55270 ** a legal notice, here is a blessing:
55271 **
55272 **    May you do good and not evil.
55273 **    May you find forgiveness for yourself and forgive others.
55274 **    May you share freely, never taking more than you give.
55275 **
55276 *************************************************************************
55277 ** This file contains the implementation of the sqlite3_backup_XXX() 
55278 ** API functions and the related features.
55279 */
55280
55281 /* Macro to find the minimum of two numeric values.
55282 */
55283 #ifndef MIN
55284 # define MIN(x,y) ((x)<(y)?(x):(y))
55285 #endif
55286
55287 /*
55288 ** Structure allocated for each backup operation.
55289 */
55290 struct sqlite3_backup {
55291   sqlite3* pDestDb;        /* Destination database handle */
55292   Btree *pDest;            /* Destination b-tree file */
55293   u32 iDestSchema;         /* Original schema cookie in destination */
55294   int bDestLocked;         /* True once a write-transaction is open on pDest */
55295
55296   Pgno iNext;              /* Page number of the next source page to copy */
55297   sqlite3* pSrcDb;         /* Source database handle */
55298   Btree *pSrc;             /* Source b-tree file */
55299
55300   int rc;                  /* Backup process error code */
55301
55302   /* These two variables are set by every call to backup_step(). They are
55303   ** read by calls to backup_remaining() and backup_pagecount().
55304   */
55305   Pgno nRemaining;         /* Number of pages left to copy */
55306   Pgno nPagecount;         /* Total number of pages to copy */
55307
55308   int isAttached;          /* True once backup has been registered with pager */
55309   sqlite3_backup *pNext;   /* Next backup associated with source pager */
55310 };
55311
55312 /*
55313 ** THREAD SAFETY NOTES:
55314 **
55315 **   Once it has been created using backup_init(), a single sqlite3_backup
55316 **   structure may be accessed via two groups of thread-safe entry points:
55317 **
55318 **     * Via the sqlite3_backup_XXX() API function backup_step() and 
55319 **       backup_finish(). Both these functions obtain the source database
55320 **       handle mutex and the mutex associated with the source BtShared 
55321 **       structure, in that order.
55322 **
55323 **     * Via the BackupUpdate() and BackupRestart() functions, which are
55324 **       invoked by the pager layer to report various state changes in
55325 **       the page cache associated with the source database. The mutex
55326 **       associated with the source database BtShared structure will always 
55327 **       be held when either of these functions are invoked.
55328 **
55329 **   The other sqlite3_backup_XXX() API functions, backup_remaining() and
55330 **   backup_pagecount() are not thread-safe functions. If they are called
55331 **   while some other thread is calling backup_step() or backup_finish(),
55332 **   the values returned may be invalid. There is no way for a call to
55333 **   BackupUpdate() or BackupRestart() to interfere with backup_remaining()
55334 **   or backup_pagecount().
55335 **
55336 **   Depending on the SQLite configuration, the database handles and/or
55337 **   the Btree objects may have their own mutexes that require locking.
55338 **   Non-sharable Btrees (in-memory databases for example), do not have
55339 **   associated mutexes.
55340 */
55341
55342 /*
55343 ** Return a pointer corresponding to database zDb (i.e. "main", "temp")
55344 ** in connection handle pDb. If such a database cannot be found, return
55345 ** a NULL pointer and write an error message to pErrorDb.
55346 **
55347 ** If the "temp" database is requested, it may need to be opened by this 
55348 ** function. If an error occurs while doing so, return 0 and write an 
55349 ** error message to pErrorDb.
55350 */
55351 static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){
55352   int i = sqlite3FindDbName(pDb, zDb);
55353
55354   if( i==1 ){
55355     Parse *pParse;
55356     int rc = 0;
55357     pParse = sqlite3StackAllocZero(pErrorDb, sizeof(*pParse));
55358     if( pParse==0 ){
55359       sqlite3Error(pErrorDb, SQLITE_NOMEM, "out of memory");
55360       rc = SQLITE_NOMEM;
55361     }else{
55362       pParse->db = pDb;
55363       if( sqlite3OpenTempDatabase(pParse) ){
55364         sqlite3Error(pErrorDb, pParse->rc, "%s", pParse->zErrMsg);
55365         rc = SQLITE_ERROR;
55366       }
55367       sqlite3DbFree(pErrorDb, pParse->zErrMsg);
55368       sqlite3StackFree(pErrorDb, pParse);
55369     }
55370     if( rc ){
55371       return 0;
55372     }
55373   }
55374
55375   if( i<0 ){
55376     sqlite3Error(pErrorDb, SQLITE_ERROR, "unknown database %s", zDb);
55377     return 0;
55378   }
55379
55380   return pDb->aDb[i].pBt;
55381 }
55382
55383 /*
55384 ** Attempt to set the page size of the destination to match the page size
55385 ** of the source.
55386 */
55387 static int setDestPgsz(sqlite3_backup *p){
55388   int rc;
55389   rc = sqlite3BtreeSetPageSize(p->pDest,sqlite3BtreeGetPageSize(p->pSrc),-1,0);
55390   return rc;
55391 }
55392
55393 /*
55394 ** Create an sqlite3_backup process to copy the contents of zSrcDb from
55395 ** connection handle pSrcDb to zDestDb in pDestDb. If successful, return
55396 ** a pointer to the new sqlite3_backup object.
55397 **
55398 ** If an error occurs, NULL is returned and an error code and error message
55399 ** stored in database handle pDestDb.
55400 */
55401 SQLITE_API sqlite3_backup *sqlite3_backup_init(
55402   sqlite3* pDestDb,                     /* Database to write to */
55403   const char *zDestDb,                  /* Name of database within pDestDb */
55404   sqlite3* pSrcDb,                      /* Database connection to read from */
55405   const char *zSrcDb                    /* Name of database within pSrcDb */
55406 ){
55407   sqlite3_backup *p;                    /* Value to return */
55408
55409   /* Lock the source database handle. The destination database
55410   ** handle is not locked in this routine, but it is locked in
55411   ** sqlite3_backup_step(). The user is required to ensure that no
55412   ** other thread accesses the destination handle for the duration
55413   ** of the backup operation.  Any attempt to use the destination
55414   ** database connection while a backup is in progress may cause
55415   ** a malfunction or a deadlock.
55416   */
55417   sqlite3_mutex_enter(pSrcDb->mutex);
55418   sqlite3_mutex_enter(pDestDb->mutex);
55419
55420   if( pSrcDb==pDestDb ){
55421     sqlite3Error(
55422         pDestDb, SQLITE_ERROR, "source and destination must be distinct"
55423     );
55424     p = 0;
55425   }else {
55426     /* Allocate space for a new sqlite3_backup object...
55427     ** EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a
55428     ** call to sqlite3_backup_init() and is destroyed by a call to
55429     ** sqlite3_backup_finish(). */
55430     p = (sqlite3_backup *)sqlite3_malloc(sizeof(sqlite3_backup));
55431     if( !p ){
55432       sqlite3Error(pDestDb, SQLITE_NOMEM, 0);
55433     }
55434   }
55435
55436   /* If the allocation succeeded, populate the new object. */
55437   if( p ){
55438     memset(p, 0, sizeof(sqlite3_backup));
55439     p->pSrc = findBtree(pDestDb, pSrcDb, zSrcDb);
55440     p->pDest = findBtree(pDestDb, pDestDb, zDestDb);
55441     p->pDestDb = pDestDb;
55442     p->pSrcDb = pSrcDb;
55443     p->iNext = 1;
55444     p->isAttached = 0;
55445
55446     if( 0==p->pSrc || 0==p->pDest || setDestPgsz(p)==SQLITE_NOMEM ){
55447       /* One (or both) of the named databases did not exist or an OOM
55448       ** error was hit.  The error has already been written into the
55449       ** pDestDb handle.  All that is left to do here is free the
55450       ** sqlite3_backup structure.
55451       */
55452       sqlite3_free(p);
55453       p = 0;
55454     }
55455   }
55456   if( p ){
55457     p->pSrc->nBackup++;
55458   }
55459
55460   sqlite3_mutex_leave(pDestDb->mutex);
55461   sqlite3_mutex_leave(pSrcDb->mutex);
55462   return p;
55463 }
55464
55465 /*
55466 ** Argument rc is an SQLite error code. Return true if this error is 
55467 ** considered fatal if encountered during a backup operation. All errors
55468 ** are considered fatal except for SQLITE_BUSY and SQLITE_LOCKED.
55469 */
55470 static int isFatalError(int rc){
55471   return (rc!=SQLITE_OK && rc!=SQLITE_BUSY && ALWAYS(rc!=SQLITE_LOCKED));
55472 }
55473
55474 /*
55475 ** Parameter zSrcData points to a buffer containing the data for 
55476 ** page iSrcPg from the source database. Copy this data into the 
55477 ** destination database.
55478 */
55479 static int backupOnePage(sqlite3_backup *p, Pgno iSrcPg, const u8 *zSrcData){
55480   Pager * const pDestPager = sqlite3BtreePager(p->pDest);
55481   const int nSrcPgsz = sqlite3BtreeGetPageSize(p->pSrc);
55482   int nDestPgsz = sqlite3BtreeGetPageSize(p->pDest);
55483   const int nCopy = MIN(nSrcPgsz, nDestPgsz);
55484   const i64 iEnd = (i64)iSrcPg*(i64)nSrcPgsz;
55485 #ifdef SQLITE_HAS_CODEC
55486   int nSrcReserve = sqlite3BtreeGetReserve(p->pSrc);
55487   int nDestReserve = sqlite3BtreeGetReserve(p->pDest);
55488 #endif
55489
55490   int rc = SQLITE_OK;
55491   i64 iOff;
55492
55493   assert( p->bDestLocked );
55494   assert( !isFatalError(p->rc) );
55495   assert( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) );
55496   assert( zSrcData );
55497
55498   /* Catch the case where the destination is an in-memory database and the
55499   ** page sizes of the source and destination differ. 
55500   */
55501   if( nSrcPgsz!=nDestPgsz && sqlite3PagerIsMemdb(pDestPager) ){
55502     rc = SQLITE_READONLY;
55503   }
55504
55505 #ifdef SQLITE_HAS_CODEC
55506   /* Backup is not possible if the page size of the destination is changing
55507   ** and a codec is in use.
55508   */
55509   if( nSrcPgsz!=nDestPgsz && sqlite3PagerGetCodec(pDestPager)!=0 ){
55510     rc = SQLITE_READONLY;
55511   }
55512
55513   /* Backup is not possible if the number of bytes of reserve space differ
55514   ** between source and destination.  If there is a difference, try to
55515   ** fix the destination to agree with the source.  If that is not possible,
55516   ** then the backup cannot proceed.
55517   */
55518   if( nSrcReserve!=nDestReserve ){
55519     u32 newPgsz = nSrcPgsz;
55520     rc = sqlite3PagerSetPagesize(pDestPager, &newPgsz, nSrcReserve);
55521     if( rc==SQLITE_OK && newPgsz!=nSrcPgsz ) rc = SQLITE_READONLY;
55522   }
55523 #endif
55524
55525   /* This loop runs once for each destination page spanned by the source 
55526   ** page. For each iteration, variable iOff is set to the byte offset
55527   ** of the destination page.
55528   */
55529   for(iOff=iEnd-(i64)nSrcPgsz; rc==SQLITE_OK && iOff<iEnd; iOff+=nDestPgsz){
55530     DbPage *pDestPg = 0;
55531     Pgno iDest = (Pgno)(iOff/nDestPgsz)+1;
55532     if( iDest==PENDING_BYTE_PAGE(p->pDest->pBt) ) continue;
55533     if( SQLITE_OK==(rc = sqlite3PagerGet(pDestPager, iDest, &pDestPg))
55534      && SQLITE_OK==(rc = sqlite3PagerWrite(pDestPg))
55535     ){
55536       const u8 *zIn = &zSrcData[iOff%nSrcPgsz];
55537       u8 *zDestData = sqlite3PagerGetData(pDestPg);
55538       u8 *zOut = &zDestData[iOff%nDestPgsz];
55539
55540       /* Copy the data from the source page into the destination page.
55541       ** Then clear the Btree layer MemPage.isInit flag. Both this module
55542       ** and the pager code use this trick (clearing the first byte
55543       ** of the page 'extra' space to invalidate the Btree layers
55544       ** cached parse of the page). MemPage.isInit is marked 
55545       ** "MUST BE FIRST" for this purpose.
55546       */
55547       memcpy(zOut, zIn, nCopy);
55548       ((u8 *)sqlite3PagerGetExtra(pDestPg))[0] = 0;
55549     }
55550     sqlite3PagerUnref(pDestPg);
55551   }
55552
55553   return rc;
55554 }
55555
55556 /*
55557 ** If pFile is currently larger than iSize bytes, then truncate it to
55558 ** exactly iSize bytes. If pFile is not larger than iSize bytes, then
55559 ** this function is a no-op.
55560 **
55561 ** Return SQLITE_OK if everything is successful, or an SQLite error 
55562 ** code if an error occurs.
55563 */
55564 static int backupTruncateFile(sqlite3_file *pFile, i64 iSize){
55565   i64 iCurrent;
55566   int rc = sqlite3OsFileSize(pFile, &iCurrent);
55567   if( rc==SQLITE_OK && iCurrent>iSize ){
55568     rc = sqlite3OsTruncate(pFile, iSize);
55569   }
55570   return rc;
55571 }
55572
55573 /*
55574 ** Register this backup object with the associated source pager for
55575 ** callbacks when pages are changed or the cache invalidated.
55576 */
55577 static void attachBackupObject(sqlite3_backup *p){
55578   sqlite3_backup **pp;
55579   assert( sqlite3BtreeHoldsMutex(p->pSrc) );
55580   pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc));
55581   p->pNext = *pp;
55582   *pp = p;
55583   p->isAttached = 1;
55584 }
55585
55586 /*
55587 ** Copy nPage pages from the source b-tree to the destination.
55588 */
55589 SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage){
55590   int rc;
55591   int destMode;       /* Destination journal mode */
55592   int pgszSrc = 0;    /* Source page size */
55593   int pgszDest = 0;   /* Destination page size */
55594
55595   sqlite3_mutex_enter(p->pSrcDb->mutex);
55596   sqlite3BtreeEnter(p->pSrc);
55597   if( p->pDestDb ){
55598     sqlite3_mutex_enter(p->pDestDb->mutex);
55599   }
55600
55601   rc = p->rc;
55602   if( !isFatalError(rc) ){
55603     Pager * const pSrcPager = sqlite3BtreePager(p->pSrc);     /* Source pager */
55604     Pager * const pDestPager = sqlite3BtreePager(p->pDest);   /* Dest pager */
55605     int ii;                            /* Iterator variable */
55606     int nSrcPage = -1;                 /* Size of source db in pages */
55607     int bCloseTrans = 0;               /* True if src db requires unlocking */
55608
55609     /* If the source pager is currently in a write-transaction, return
55610     ** SQLITE_BUSY immediately.
55611     */
55612     if( p->pDestDb && p->pSrc->pBt->inTransaction==TRANS_WRITE ){
55613       rc = SQLITE_BUSY;
55614     }else{
55615       rc = SQLITE_OK;
55616     }
55617
55618     /* Lock the destination database, if it is not locked already. */
55619     if( SQLITE_OK==rc && p->bDestLocked==0
55620      && SQLITE_OK==(rc = sqlite3BtreeBeginTrans(p->pDest, 2)) 
55621     ){
55622       p->bDestLocked = 1;
55623       sqlite3BtreeGetMeta(p->pDest, BTREE_SCHEMA_VERSION, &p->iDestSchema);
55624     }
55625
55626     /* If there is no open read-transaction on the source database, open
55627     ** one now. If a transaction is opened here, then it will be closed
55628     ** before this function exits.
55629     */
55630     if( rc==SQLITE_OK && 0==sqlite3BtreeIsInReadTrans(p->pSrc) ){
55631       rc = sqlite3BtreeBeginTrans(p->pSrc, 0);
55632       bCloseTrans = 1;
55633     }
55634
55635     /* Do not allow backup if the destination database is in WAL mode
55636     ** and the page sizes are different between source and destination */
55637     pgszSrc = sqlite3BtreeGetPageSize(p->pSrc);
55638     pgszDest = sqlite3BtreeGetPageSize(p->pDest);
55639     destMode = sqlite3PagerGetJournalMode(sqlite3BtreePager(p->pDest));
55640     if( SQLITE_OK==rc && destMode==PAGER_JOURNALMODE_WAL && pgszSrc!=pgszDest ){
55641       rc = SQLITE_READONLY;
55642     }
55643   
55644     /* Now that there is a read-lock on the source database, query the
55645     ** source pager for the number of pages in the database.
55646     */
55647     nSrcPage = (int)sqlite3BtreeLastPage(p->pSrc);
55648     assert( nSrcPage>=0 );
55649     for(ii=0; (nPage<0 || ii<nPage) && p->iNext<=(Pgno)nSrcPage && !rc; ii++){
55650       const Pgno iSrcPg = p->iNext;                 /* Source page number */
55651       if( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ){
55652         DbPage *pSrcPg;                             /* Source page object */
55653         rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg);
55654         if( rc==SQLITE_OK ){
55655           rc = backupOnePage(p, iSrcPg, sqlite3PagerGetData(pSrcPg));
55656           sqlite3PagerUnref(pSrcPg);
55657         }
55658       }
55659       p->iNext++;
55660     }
55661     if( rc==SQLITE_OK ){
55662       p->nPagecount = nSrcPage;
55663       p->nRemaining = nSrcPage+1-p->iNext;
55664       if( p->iNext>(Pgno)nSrcPage ){
55665         rc = SQLITE_DONE;
55666       }else if( !p->isAttached ){
55667         attachBackupObject(p);
55668       }
55669     }
55670   
55671     /* Update the schema version field in the destination database. This
55672     ** is to make sure that the schema-version really does change in
55673     ** the case where the source and destination databases have the
55674     ** same schema version.
55675     */
55676     if( rc==SQLITE_DONE 
55677      && (rc = sqlite3BtreeUpdateMeta(p->pDest,1,p->iDestSchema+1))==SQLITE_OK
55678     ){
55679       int nDestTruncate;
55680   
55681       if( p->pDestDb ){
55682         sqlite3ResetInternalSchema(p->pDestDb, -1);
55683       }
55684
55685       /* Set nDestTruncate to the final number of pages in the destination
55686       ** database. The complication here is that the destination page
55687       ** size may be different to the source page size. 
55688       **
55689       ** If the source page size is smaller than the destination page size, 
55690       ** round up. In this case the call to sqlite3OsTruncate() below will
55691       ** fix the size of the file. However it is important to call
55692       ** sqlite3PagerTruncateImage() here so that any pages in the 
55693       ** destination file that lie beyond the nDestTruncate page mark are
55694       ** journalled by PagerCommitPhaseOne() before they are destroyed
55695       ** by the file truncation.
55696       */
55697       assert( pgszSrc==sqlite3BtreeGetPageSize(p->pSrc) );
55698       assert( pgszDest==sqlite3BtreeGetPageSize(p->pDest) );
55699       if( pgszSrc<pgszDest ){
55700         int ratio = pgszDest/pgszSrc;
55701         nDestTruncate = (nSrcPage+ratio-1)/ratio;
55702         if( nDestTruncate==(int)PENDING_BYTE_PAGE(p->pDest->pBt) ){
55703           nDestTruncate--;
55704         }
55705       }else{
55706         nDestTruncate = nSrcPage * (pgszSrc/pgszDest);
55707       }
55708       sqlite3PagerTruncateImage(pDestPager, nDestTruncate);
55709
55710       if( pgszSrc<pgszDest ){
55711         /* If the source page-size is smaller than the destination page-size,
55712         ** two extra things may need to happen:
55713         **
55714         **   * The destination may need to be truncated, and
55715         **
55716         **   * Data stored on the pages immediately following the 
55717         **     pending-byte page in the source database may need to be
55718         **     copied into the destination database.
55719         */
55720         const i64 iSize = (i64)pgszSrc * (i64)nSrcPage;
55721         sqlite3_file * const pFile = sqlite3PagerFile(pDestPager);
55722         i64 iOff;
55723         i64 iEnd;
55724
55725         assert( pFile );
55726         assert( (i64)nDestTruncate*(i64)pgszDest >= iSize || (
55727               nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1)
55728            && iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest
55729         ));
55730
55731         /* This call ensures that all data required to recreate the original
55732         ** database has been stored in the journal for pDestPager and the
55733         ** journal synced to disk. So at this point we may safely modify
55734         ** the database file in any way, knowing that if a power failure
55735         ** occurs, the original database will be reconstructed from the 
55736         ** journal file.  */
55737         rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1);
55738
55739         /* Write the extra pages and truncate the database file as required. */
55740         iEnd = MIN(PENDING_BYTE + pgszDest, iSize);
55741         for(
55742           iOff=PENDING_BYTE+pgszSrc; 
55743           rc==SQLITE_OK && iOff<iEnd; 
55744           iOff+=pgszSrc
55745         ){
55746           PgHdr *pSrcPg = 0;
55747           const Pgno iSrcPg = (Pgno)((iOff/pgszSrc)+1);
55748           rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg);
55749           if( rc==SQLITE_OK ){
55750             u8 *zData = sqlite3PagerGetData(pSrcPg);
55751             rc = sqlite3OsWrite(pFile, zData, pgszSrc, iOff);
55752           }
55753           sqlite3PagerUnref(pSrcPg);
55754         }
55755         if( rc==SQLITE_OK ){
55756           rc = backupTruncateFile(pFile, iSize);
55757         }
55758
55759         /* Sync the database file to disk. */
55760         if( rc==SQLITE_OK ){
55761           rc = sqlite3PagerSync(pDestPager);
55762         }
55763       }else{
55764         rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 0);
55765       }
55766   
55767       /* Finish committing the transaction to the destination database. */
55768       if( SQLITE_OK==rc
55769        && SQLITE_OK==(rc = sqlite3BtreeCommitPhaseTwo(p->pDest, 0))
55770       ){
55771         rc = SQLITE_DONE;
55772       }
55773     }
55774   
55775     /* If bCloseTrans is true, then this function opened a read transaction
55776     ** on the source database. Close the read transaction here. There is
55777     ** no need to check the return values of the btree methods here, as
55778     ** "committing" a read-only transaction cannot fail.
55779     */
55780     if( bCloseTrans ){
55781       TESTONLY( int rc2 );
55782       TESTONLY( rc2  = ) sqlite3BtreeCommitPhaseOne(p->pSrc, 0);
55783       TESTONLY( rc2 |= ) sqlite3BtreeCommitPhaseTwo(p->pSrc, 0);
55784       assert( rc2==SQLITE_OK );
55785     }
55786   
55787     if( rc==SQLITE_IOERR_NOMEM ){
55788       rc = SQLITE_NOMEM;
55789     }
55790     p->rc = rc;
55791   }
55792   if( p->pDestDb ){
55793     sqlite3_mutex_leave(p->pDestDb->mutex);
55794   }
55795   sqlite3BtreeLeave(p->pSrc);
55796   sqlite3_mutex_leave(p->pSrcDb->mutex);
55797   return rc;
55798 }
55799
55800 /*
55801 ** Release all resources associated with an sqlite3_backup* handle.
55802 */
55803 SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p){
55804   sqlite3_backup **pp;                 /* Ptr to head of pagers backup list */
55805   sqlite3_mutex *mutex;                /* Mutex to protect source database */
55806   int rc;                              /* Value to return */
55807
55808   /* Enter the mutexes */
55809   if( p==0 ) return SQLITE_OK;
55810   sqlite3_mutex_enter(p->pSrcDb->mutex);
55811   sqlite3BtreeEnter(p->pSrc);
55812   mutex = p->pSrcDb->mutex;
55813   if( p->pDestDb ){
55814     sqlite3_mutex_enter(p->pDestDb->mutex);
55815   }
55816
55817   /* Detach this backup from the source pager. */
55818   if( p->pDestDb ){
55819     p->pSrc->nBackup--;
55820   }
55821   if( p->isAttached ){
55822     pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc));
55823     while( *pp!=p ){
55824       pp = &(*pp)->pNext;
55825     }
55826     *pp = p->pNext;
55827   }
55828
55829   /* If a transaction is still open on the Btree, roll it back. */
55830   sqlite3BtreeRollback(p->pDest);
55831
55832   /* Set the error code of the destination database handle. */
55833   rc = (p->rc==SQLITE_DONE) ? SQLITE_OK : p->rc;
55834   sqlite3Error(p->pDestDb, rc, 0);
55835
55836   /* Exit the mutexes and free the backup context structure. */
55837   if( p->pDestDb ){
55838     sqlite3_mutex_leave(p->pDestDb->mutex);
55839   }
55840   sqlite3BtreeLeave(p->pSrc);
55841   if( p->pDestDb ){
55842     /* EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a
55843     ** call to sqlite3_backup_init() and is destroyed by a call to
55844     ** sqlite3_backup_finish(). */
55845     sqlite3_free(p);
55846   }
55847   sqlite3_mutex_leave(mutex);
55848   return rc;
55849 }
55850
55851 /*
55852 ** Return the number of pages still to be backed up as of the most recent
55853 ** call to sqlite3_backup_step().
55854 */
55855 SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p){
55856   return p->nRemaining;
55857 }
55858
55859 /*
55860 ** Return the total number of pages in the source database as of the most 
55861 ** recent call to sqlite3_backup_step().
55862 */
55863 SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p){
55864   return p->nPagecount;
55865 }
55866
55867 /*
55868 ** This function is called after the contents of page iPage of the
55869 ** source database have been modified. If page iPage has already been 
55870 ** copied into the destination database, then the data written to the
55871 ** destination is now invalidated. The destination copy of iPage needs
55872 ** to be updated with the new data before the backup operation is
55873 ** complete.
55874 **
55875 ** It is assumed that the mutex associated with the BtShared object
55876 ** corresponding to the source database is held when this function is
55877 ** called.
55878 */
55879 SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *pBackup, Pgno iPage, const u8 *aData){
55880   sqlite3_backup *p;                   /* Iterator variable */
55881   for(p=pBackup; p; p=p->pNext){
55882     assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) );
55883     if( !isFatalError(p->rc) && iPage<p->iNext ){
55884       /* The backup process p has already copied page iPage. But now it
55885       ** has been modified by a transaction on the source pager. Copy
55886       ** the new data into the backup.
55887       */
55888       int rc;
55889       assert( p->pDestDb );
55890       sqlite3_mutex_enter(p->pDestDb->mutex);
55891       rc = backupOnePage(p, iPage, aData);
55892       sqlite3_mutex_leave(p->pDestDb->mutex);
55893       assert( rc!=SQLITE_BUSY && rc!=SQLITE_LOCKED );
55894       if( rc!=SQLITE_OK ){
55895         p->rc = rc;
55896       }
55897     }
55898   }
55899 }
55900
55901 /*
55902 ** Restart the backup process. This is called when the pager layer
55903 ** detects that the database has been modified by an external database
55904 ** connection. In this case there is no way of knowing which of the
55905 ** pages that have been copied into the destination database are still 
55906 ** valid and which are not, so the entire process needs to be restarted.
55907 **
55908 ** It is assumed that the mutex associated with the BtShared object
55909 ** corresponding to the source database is held when this function is
55910 ** called.
55911 */
55912 SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *pBackup){
55913   sqlite3_backup *p;                   /* Iterator variable */
55914   for(p=pBackup; p; p=p->pNext){
55915     assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) );
55916     p->iNext = 1;
55917   }
55918 }
55919
55920 #ifndef SQLITE_OMIT_VACUUM
55921 /*
55922 ** Copy the complete content of pBtFrom into pBtTo.  A transaction
55923 ** must be active for both files.
55924 **
55925 ** The size of file pTo may be reduced by this operation. If anything 
55926 ** goes wrong, the transaction on pTo is rolled back. If successful, the 
55927 ** transaction is committed before returning.
55928 */
55929 SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *pTo, Btree *pFrom){
55930   int rc;
55931   sqlite3_backup b;
55932   sqlite3BtreeEnter(pTo);
55933   sqlite3BtreeEnter(pFrom);
55934
55935   /* Set up an sqlite3_backup object. sqlite3_backup.pDestDb must be set
55936   ** to 0. This is used by the implementations of sqlite3_backup_step()
55937   ** and sqlite3_backup_finish() to detect that they are being called
55938   ** from this function, not directly by the user.
55939   */
55940   memset(&b, 0, sizeof(b));
55941   b.pSrcDb = pFrom->db;
55942   b.pSrc = pFrom;
55943   b.pDest = pTo;
55944   b.iNext = 1;
55945
55946   /* 0x7FFFFFFF is the hard limit for the number of pages in a database
55947   ** file. By passing this as the number of pages to copy to
55948   ** sqlite3_backup_step(), we can guarantee that the copy finishes 
55949   ** within a single call (unless an error occurs). The assert() statement
55950   ** checks this assumption - (p->rc) should be set to either SQLITE_DONE 
55951   ** or an error code.
55952   */
55953   sqlite3_backup_step(&b, 0x7FFFFFFF);
55954   assert( b.rc!=SQLITE_OK );
55955   rc = sqlite3_backup_finish(&b);
55956   if( rc==SQLITE_OK ){
55957     pTo->pBt->pageSizeFixed = 0;
55958   }
55959
55960   sqlite3BtreeLeave(pFrom);
55961   sqlite3BtreeLeave(pTo);
55962   return rc;
55963 }
55964 #endif /* SQLITE_OMIT_VACUUM */
55965
55966 /************** End of backup.c **********************************************/
55967 /************** Begin file vdbemem.c *****************************************/
55968 /*
55969 ** 2004 May 26
55970 **
55971 ** The author disclaims copyright to this source code.  In place of
55972 ** a legal notice, here is a blessing:
55973 **
55974 **    May you do good and not evil.
55975 **    May you find forgiveness for yourself and forgive others.
55976 **    May you share freely, never taking more than you give.
55977 **
55978 *************************************************************************
55979 **
55980 ** This file contains code use to manipulate "Mem" structure.  A "Mem"
55981 ** stores a single value in the VDBE.  Mem is an opaque structure visible
55982 ** only within the VDBE.  Interface routines refer to a Mem using the
55983 ** name sqlite_value
55984 */
55985
55986 /*
55987 ** Call sqlite3VdbeMemExpandBlob() on the supplied value (type Mem*)
55988 ** P if required.
55989 */
55990 #define expandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0)
55991
55992 /*
55993 ** If pMem is an object with a valid string representation, this routine
55994 ** ensures the internal encoding for the string representation is
55995 ** 'desiredEnc', one of SQLITE_UTF8, SQLITE_UTF16LE or SQLITE_UTF16BE.
55996 **
55997 ** If pMem is not a string object, or the encoding of the string
55998 ** representation is already stored using the requested encoding, then this
55999 ** routine is a no-op.
56000 **
56001 ** SQLITE_OK is returned if the conversion is successful (or not required).
56002 ** SQLITE_NOMEM may be returned if a malloc() fails during conversion
56003 ** between formats.
56004 */
56005 SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){
56006   int rc;
56007   assert( (pMem->flags&MEM_RowSet)==0 );
56008   assert( desiredEnc==SQLITE_UTF8 || desiredEnc==SQLITE_UTF16LE
56009            || desiredEnc==SQLITE_UTF16BE );
56010   if( !(pMem->flags&MEM_Str) || pMem->enc==desiredEnc ){
56011     return SQLITE_OK;
56012   }
56013   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56014 #ifdef SQLITE_OMIT_UTF16
56015   return SQLITE_ERROR;
56016 #else
56017
56018   /* MemTranslate() may return SQLITE_OK or SQLITE_NOMEM. If NOMEM is returned,
56019   ** then the encoding of the value may not have changed.
56020   */
56021   rc = sqlite3VdbeMemTranslate(pMem, (u8)desiredEnc);
56022   assert(rc==SQLITE_OK    || rc==SQLITE_NOMEM);
56023   assert(rc==SQLITE_OK    || pMem->enc!=desiredEnc);
56024   assert(rc==SQLITE_NOMEM || pMem->enc==desiredEnc);
56025   return rc;
56026 #endif
56027 }
56028
56029 /*
56030 ** Make sure pMem->z points to a writable allocation of at least 
56031 ** n bytes.
56032 **
56033 ** If the memory cell currently contains string or blob data
56034 ** and the third argument passed to this function is true, the 
56035 ** current content of the cell is preserved. Otherwise, it may
56036 ** be discarded.  
56037 **
56038 ** This function sets the MEM_Dyn flag and clears any xDel callback.
56039 ** It also clears MEM_Ephem and MEM_Static. If the preserve flag is 
56040 ** not set, Mem.n is zeroed.
56041 */
56042 SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve){
56043   assert( 1 >=
56044     ((pMem->zMalloc && pMem->zMalloc==pMem->z) ? 1 : 0) +
56045     (((pMem->flags&MEM_Dyn)&&pMem->xDel) ? 1 : 0) + 
56046     ((pMem->flags&MEM_Ephem) ? 1 : 0) + 
56047     ((pMem->flags&MEM_Static) ? 1 : 0)
56048   );
56049   assert( (pMem->flags&MEM_RowSet)==0 );
56050
56051   if( n<32 ) n = 32;
56052   if( sqlite3DbMallocSize(pMem->db, pMem->zMalloc)<n ){
56053     if( preserve && pMem->z==pMem->zMalloc ){
56054       pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n);
56055       preserve = 0;
56056     }else{
56057       sqlite3DbFree(pMem->db, pMem->zMalloc);
56058       pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n);
56059     }
56060   }
56061
56062   if( pMem->z && preserve && pMem->zMalloc && pMem->z!=pMem->zMalloc ){
56063     memcpy(pMem->zMalloc, pMem->z, pMem->n);
56064   }
56065   if( pMem->flags&MEM_Dyn && pMem->xDel ){
56066     pMem->xDel((void *)(pMem->z));
56067   }
56068
56069   pMem->z = pMem->zMalloc;
56070   if( pMem->z==0 ){
56071     pMem->flags = MEM_Null;
56072   }else{
56073     pMem->flags &= ~(MEM_Ephem|MEM_Static);
56074   }
56075   pMem->xDel = 0;
56076   return (pMem->z ? SQLITE_OK : SQLITE_NOMEM);
56077 }
56078
56079 /*
56080 ** Make the given Mem object MEM_Dyn.  In other words, make it so
56081 ** that any TEXT or BLOB content is stored in memory obtained from
56082 ** malloc().  In this way, we know that the memory is safe to be
56083 ** overwritten or altered.
56084 **
56085 ** Return SQLITE_OK on success or SQLITE_NOMEM if malloc fails.
56086 */
56087 SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){
56088   int f;
56089   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56090   assert( (pMem->flags&MEM_RowSet)==0 );
56091   expandBlob(pMem);
56092   f = pMem->flags;
56093   if( (f&(MEM_Str|MEM_Blob)) && pMem->z!=pMem->zMalloc ){
56094     if( sqlite3VdbeMemGrow(pMem, pMem->n + 2, 1) ){
56095       return SQLITE_NOMEM;
56096     }
56097     pMem->z[pMem->n] = 0;
56098     pMem->z[pMem->n+1] = 0;
56099     pMem->flags |= MEM_Term;
56100 #ifdef SQLITE_DEBUG
56101     pMem->pScopyFrom = 0;
56102 #endif
56103   }
56104
56105   return SQLITE_OK;
56106 }
56107
56108 /*
56109 ** If the given Mem* has a zero-filled tail, turn it into an ordinary
56110 ** blob stored in dynamically allocated space.
56111 */
56112 #ifndef SQLITE_OMIT_INCRBLOB
56113 SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *pMem){
56114   if( pMem->flags & MEM_Zero ){
56115     int nByte;
56116     assert( pMem->flags&MEM_Blob );
56117     assert( (pMem->flags&MEM_RowSet)==0 );
56118     assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56119
56120     /* Set nByte to the number of bytes required to store the expanded blob. */
56121     nByte = pMem->n + pMem->u.nZero;
56122     if( nByte<=0 ){
56123       nByte = 1;
56124     }
56125     if( sqlite3VdbeMemGrow(pMem, nByte, 1) ){
56126       return SQLITE_NOMEM;
56127     }
56128
56129     memset(&pMem->z[pMem->n], 0, pMem->u.nZero);
56130     pMem->n += pMem->u.nZero;
56131     pMem->flags &= ~(MEM_Zero|MEM_Term);
56132   }
56133   return SQLITE_OK;
56134 }
56135 #endif
56136
56137
56138 /*
56139 ** Make sure the given Mem is \u0000 terminated.
56140 */
56141 SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){
56142   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56143   if( (pMem->flags & MEM_Term)!=0 || (pMem->flags & MEM_Str)==0 ){
56144     return SQLITE_OK;   /* Nothing to do */
56145   }
56146   if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
56147     return SQLITE_NOMEM;
56148   }
56149   pMem->z[pMem->n] = 0;
56150   pMem->z[pMem->n+1] = 0;
56151   pMem->flags |= MEM_Term;
56152   return SQLITE_OK;
56153 }
56154
56155 /*
56156 ** Add MEM_Str to the set of representations for the given Mem.  Numbers
56157 ** are converted using sqlite3_snprintf().  Converting a BLOB to a string
56158 ** is a no-op.
56159 **
56160 ** Existing representations MEM_Int and MEM_Real are *not* invalidated.
56161 **
56162 ** A MEM_Null value will never be passed to this function. This function is
56163 ** used for converting values to text for returning to the user (i.e. via
56164 ** sqlite3_value_text()), or for ensuring that values to be used as btree
56165 ** keys are strings. In the former case a NULL pointer is returned the
56166 ** user and the later is an internal programming error.
56167 */
56168 SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, int enc){
56169   int rc = SQLITE_OK;
56170   int fg = pMem->flags;
56171   const int nByte = 32;
56172
56173   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56174   assert( !(fg&MEM_Zero) );
56175   assert( !(fg&(MEM_Str|MEM_Blob)) );
56176   assert( fg&(MEM_Int|MEM_Real) );
56177   assert( (pMem->flags&MEM_RowSet)==0 );
56178   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
56179
56180
56181   if( sqlite3VdbeMemGrow(pMem, nByte, 0) ){
56182     return SQLITE_NOMEM;
56183   }
56184
56185   /* For a Real or Integer, use sqlite3_mprintf() to produce the UTF-8
56186   ** string representation of the value. Then, if the required encoding
56187   ** is UTF-16le or UTF-16be do a translation.
56188   ** 
56189   ** FIX ME: It would be better if sqlite3_snprintf() could do UTF-16.
56190   */
56191   if( fg & MEM_Int ){
56192     sqlite3_snprintf(nByte, pMem->z, "%lld", pMem->u.i);
56193   }else{
56194     assert( fg & MEM_Real );
56195     sqlite3_snprintf(nByte, pMem->z, "%!.15g", pMem->r);
56196   }
56197   pMem->n = sqlite3Strlen30(pMem->z);
56198   pMem->enc = SQLITE_UTF8;
56199   pMem->flags |= MEM_Str|MEM_Term;
56200   sqlite3VdbeChangeEncoding(pMem, enc);
56201   return rc;
56202 }
56203
56204 /*
56205 ** Memory cell pMem contains the context of an aggregate function.
56206 ** This routine calls the finalize method for that function.  The
56207 ** result of the aggregate is stored back into pMem.
56208 **
56209 ** Return SQLITE_ERROR if the finalizer reports an error.  SQLITE_OK
56210 ** otherwise.
56211 */
56212 SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){
56213   int rc = SQLITE_OK;
56214   if( ALWAYS(pFunc && pFunc->xFinalize) ){
56215     sqlite3_context ctx;
56216     assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef );
56217     assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56218     memset(&ctx, 0, sizeof(ctx));
56219     ctx.s.flags = MEM_Null;
56220     ctx.s.db = pMem->db;
56221     ctx.pMem = pMem;
56222     ctx.pFunc = pFunc;
56223     pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */
56224     assert( 0==(pMem->flags&MEM_Dyn) && !pMem->xDel );
56225     sqlite3DbFree(pMem->db, pMem->zMalloc);
56226     memcpy(pMem, &ctx.s, sizeof(ctx.s));
56227     rc = ctx.isError;
56228   }
56229   return rc;
56230 }
56231
56232 /*
56233 ** If the memory cell contains a string value that must be freed by
56234 ** invoking an external callback, free it now. Calling this function
56235 ** does not free any Mem.zMalloc buffer.
56236 */
56237 SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p){
56238   assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) );
56239   testcase( p->flags & MEM_Agg );
56240   testcase( p->flags & MEM_Dyn );
56241   testcase( p->flags & MEM_RowSet );
56242   testcase( p->flags & MEM_Frame );
56243   if( p->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame) ){
56244     if( p->flags&MEM_Agg ){
56245       sqlite3VdbeMemFinalize(p, p->u.pDef);
56246       assert( (p->flags & MEM_Agg)==0 );
56247       sqlite3VdbeMemRelease(p);
56248     }else if( p->flags&MEM_Dyn && p->xDel ){
56249       assert( (p->flags&MEM_RowSet)==0 );
56250       p->xDel((void *)p->z);
56251       p->xDel = 0;
56252     }else if( p->flags&MEM_RowSet ){
56253       sqlite3RowSetClear(p->u.pRowSet);
56254     }else if( p->flags&MEM_Frame ){
56255       sqlite3VdbeMemSetNull(p);
56256     }
56257   }
56258 }
56259
56260 /*
56261 ** Release any memory held by the Mem. This may leave the Mem in an
56262 ** inconsistent state, for example with (Mem.z==0) and
56263 ** (Mem.type==SQLITE_TEXT).
56264 */
56265 SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){
56266   sqlite3VdbeMemReleaseExternal(p);
56267   sqlite3DbFree(p->db, p->zMalloc);
56268   p->z = 0;
56269   p->zMalloc = 0;
56270   p->xDel = 0;
56271 }
56272
56273 /*
56274 ** Convert a 64-bit IEEE double into a 64-bit signed integer.
56275 ** If the double is too large, return 0x8000000000000000.
56276 **
56277 ** Most systems appear to do this simply by assigning
56278 ** variables and without the extra range tests.  But
56279 ** there are reports that windows throws an expection
56280 ** if the floating point value is out of range. (See ticket #2880.)
56281 ** Because we do not completely understand the problem, we will
56282 ** take the conservative approach and always do range tests
56283 ** before attempting the conversion.
56284 */
56285 static i64 doubleToInt64(double r){
56286 #ifdef SQLITE_OMIT_FLOATING_POINT
56287   /* When floating-point is omitted, double and int64 are the same thing */
56288   return r;
56289 #else
56290   /*
56291   ** Many compilers we encounter do not define constants for the
56292   ** minimum and maximum 64-bit integers, or they define them
56293   ** inconsistently.  And many do not understand the "LL" notation.
56294   ** So we define our own static constants here using nothing
56295   ** larger than a 32-bit integer constant.
56296   */
56297   static const i64 maxInt = LARGEST_INT64;
56298   static const i64 minInt = SMALLEST_INT64;
56299
56300   if( r<(double)minInt ){
56301     return minInt;
56302   }else if( r>(double)maxInt ){
56303     /* minInt is correct here - not maxInt.  It turns out that assigning
56304     ** a very large positive number to an integer results in a very large
56305     ** negative integer.  This makes no sense, but it is what x86 hardware
56306     ** does so for compatibility we will do the same in software. */
56307     return minInt;
56308   }else{
56309     return (i64)r;
56310   }
56311 #endif
56312 }
56313
56314 /*
56315 ** Return some kind of integer value which is the best we can do
56316 ** at representing the value that *pMem describes as an integer.
56317 ** If pMem is an integer, then the value is exact.  If pMem is
56318 ** a floating-point then the value returned is the integer part.
56319 ** If pMem is a string or blob, then we make an attempt to convert
56320 ** it into a integer and return that.  If pMem represents an
56321 ** an SQL-NULL value, return 0.
56322 **
56323 ** If pMem represents a string value, its encoding might be changed.
56324 */
56325 SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem *pMem){
56326   int flags;
56327   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56328   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
56329   flags = pMem->flags;
56330   if( flags & MEM_Int ){
56331     return pMem->u.i;
56332   }else if( flags & MEM_Real ){
56333     return doubleToInt64(pMem->r);
56334   }else if( flags & (MEM_Str|MEM_Blob) ){
56335     i64 value = 0;
56336     assert( pMem->z || pMem->n==0 );
56337     testcase( pMem->z==0 );
56338     sqlite3Atoi64(pMem->z, &value, pMem->n, pMem->enc);
56339     return value;
56340   }else{
56341     return 0;
56342   }
56343 }
56344
56345 /*
56346 ** Return the best representation of pMem that we can get into a
56347 ** double.  If pMem is already a double or an integer, return its
56348 ** value.  If it is a string or blob, try to convert it to a double.
56349 ** If it is a NULL, return 0.0.
56350 */
56351 SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){
56352   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56353   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
56354   if( pMem->flags & MEM_Real ){
56355     return pMem->r;
56356   }else if( pMem->flags & MEM_Int ){
56357     return (double)pMem->u.i;
56358   }else if( pMem->flags & (MEM_Str|MEM_Blob) ){
56359     /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
56360     double val = (double)0;
56361     sqlite3AtoF(pMem->z, &val, pMem->n, pMem->enc);
56362     return val;
56363   }else{
56364     /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
56365     return (double)0;
56366   }
56367 }
56368
56369 /*
56370 ** The MEM structure is already a MEM_Real.  Try to also make it a
56371 ** MEM_Int if we can.
56372 */
56373 SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){
56374   assert( pMem->flags & MEM_Real );
56375   assert( (pMem->flags & MEM_RowSet)==0 );
56376   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56377   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
56378
56379   pMem->u.i = doubleToInt64(pMem->r);
56380
56381   /* Only mark the value as an integer if
56382   **
56383   **    (1) the round-trip conversion real->int->real is a no-op, and
56384   **    (2) The integer is neither the largest nor the smallest
56385   **        possible integer (ticket #3922)
56386   **
56387   ** The second and third terms in the following conditional enforces
56388   ** the second condition under the assumption that addition overflow causes
56389   ** values to wrap around.  On x86 hardware, the third term is always
56390   ** true and could be omitted.  But we leave it in because other
56391   ** architectures might behave differently.
56392   */
56393   if( pMem->r==(double)pMem->u.i && pMem->u.i>SMALLEST_INT64
56394       && ALWAYS(pMem->u.i<LARGEST_INT64) ){
56395     pMem->flags |= MEM_Int;
56396   }
56397 }
56398
56399 /*
56400 ** Convert pMem to type integer.  Invalidate any prior representations.
56401 */
56402 SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem *pMem){
56403   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56404   assert( (pMem->flags & MEM_RowSet)==0 );
56405   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
56406
56407   pMem->u.i = sqlite3VdbeIntValue(pMem);
56408   MemSetTypeFlag(pMem, MEM_Int);
56409   return SQLITE_OK;
56410 }
56411
56412 /*
56413 ** Convert pMem so that it is of type MEM_Real.
56414 ** Invalidate any prior representations.
56415 */
56416 SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){
56417   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56418   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
56419
56420   pMem->r = sqlite3VdbeRealValue(pMem);
56421   MemSetTypeFlag(pMem, MEM_Real);
56422   return SQLITE_OK;
56423 }
56424
56425 /*
56426 ** Convert pMem so that it has types MEM_Real or MEM_Int or both.
56427 ** Invalidate any prior representations.
56428 **
56429 ** Every effort is made to force the conversion, even if the input
56430 ** is a string that does not look completely like a number.  Convert
56431 ** as much of the string as we can and ignore the rest.
56432 */
56433 SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){
56434   if( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 ){
56435     assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
56436     assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56437     if( 0==sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc) ){
56438       MemSetTypeFlag(pMem, MEM_Int);
56439     }else{
56440       pMem->r = sqlite3VdbeRealValue(pMem);
56441       MemSetTypeFlag(pMem, MEM_Real);
56442       sqlite3VdbeIntegerAffinity(pMem);
56443     }
56444   }
56445   assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))!=0 );
56446   pMem->flags &= ~(MEM_Str|MEM_Blob);
56447   return SQLITE_OK;
56448 }
56449
56450 /*
56451 ** Delete any previous value and set the value stored in *pMem to NULL.
56452 */
56453 SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem *pMem){
56454   if( pMem->flags & MEM_Frame ){
56455     VdbeFrame *pFrame = pMem->u.pFrame;
56456     pFrame->pParent = pFrame->v->pDelFrame;
56457     pFrame->v->pDelFrame = pFrame;
56458   }
56459   if( pMem->flags & MEM_RowSet ){
56460     sqlite3RowSetClear(pMem->u.pRowSet);
56461   }
56462   MemSetTypeFlag(pMem, MEM_Null);
56463   pMem->type = SQLITE_NULL;
56464 }
56465
56466 /*
56467 ** Delete any previous value and set the value to be a BLOB of length
56468 ** n containing all zeros.
56469 */
56470 SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){
56471   sqlite3VdbeMemRelease(pMem);
56472   pMem->flags = MEM_Blob|MEM_Zero;
56473   pMem->type = SQLITE_BLOB;
56474   pMem->n = 0;
56475   if( n<0 ) n = 0;
56476   pMem->u.nZero = n;
56477   pMem->enc = SQLITE_UTF8;
56478
56479 #ifdef SQLITE_OMIT_INCRBLOB
56480   sqlite3VdbeMemGrow(pMem, n, 0);
56481   if( pMem->z ){
56482     pMem->n = n;
56483     memset(pMem->z, 0, n);
56484   }
56485 #endif
56486 }
56487
56488 /*
56489 ** Delete any previous value and set the value stored in *pMem to val,
56490 ** manifest type INTEGER.
56491 */
56492 SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){
56493   sqlite3VdbeMemRelease(pMem);
56494   pMem->u.i = val;
56495   pMem->flags = MEM_Int;
56496   pMem->type = SQLITE_INTEGER;
56497 }
56498
56499 #ifndef SQLITE_OMIT_FLOATING_POINT
56500 /*
56501 ** Delete any previous value and set the value stored in *pMem to val,
56502 ** manifest type REAL.
56503 */
56504 SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem *pMem, double val){
56505   if( sqlite3IsNaN(val) ){
56506     sqlite3VdbeMemSetNull(pMem);
56507   }else{
56508     sqlite3VdbeMemRelease(pMem);
56509     pMem->r = val;
56510     pMem->flags = MEM_Real;
56511     pMem->type = SQLITE_FLOAT;
56512   }
56513 }
56514 #endif
56515
56516 /*
56517 ** Delete any previous value and set the value of pMem to be an
56518 ** empty boolean index.
56519 */
56520 SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem *pMem){
56521   sqlite3 *db = pMem->db;
56522   assert( db!=0 );
56523   assert( (pMem->flags & MEM_RowSet)==0 );
56524   sqlite3VdbeMemRelease(pMem);
56525   pMem->zMalloc = sqlite3DbMallocRaw(db, 64);
56526   if( db->mallocFailed ){
56527     pMem->flags = MEM_Null;
56528   }else{
56529     assert( pMem->zMalloc );
56530     pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc, 
56531                                        sqlite3DbMallocSize(db, pMem->zMalloc));
56532     assert( pMem->u.pRowSet!=0 );
56533     pMem->flags = MEM_RowSet;
56534   }
56535 }
56536
56537 /*
56538 ** Return true if the Mem object contains a TEXT or BLOB that is
56539 ** too large - whose size exceeds SQLITE_MAX_LENGTH.
56540 */
56541 SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem *p){
56542   assert( p->db!=0 );
56543   if( p->flags & (MEM_Str|MEM_Blob) ){
56544     int n = p->n;
56545     if( p->flags & MEM_Zero ){
56546       n += p->u.nZero;
56547     }
56548     return n>p->db->aLimit[SQLITE_LIMIT_LENGTH];
56549   }
56550   return 0; 
56551 }
56552
56553 #ifdef SQLITE_DEBUG
56554 /*
56555 ** This routine prepares a memory cell for modication by breaking
56556 ** its link to a shallow copy and by marking any current shallow
56557 ** copies of this cell as invalid.
56558 **
56559 ** This is used for testing and debugging only - to make sure shallow
56560 ** copies are not misused.
56561 */
56562 SQLITE_PRIVATE void sqlite3VdbeMemPrepareToChange(Vdbe *pVdbe, Mem *pMem){
56563   int i;
56564   Mem *pX;
56565   for(i=1, pX=&pVdbe->aMem[1]; i<=pVdbe->nMem; i++, pX++){
56566     if( pX->pScopyFrom==pMem ){
56567       pX->flags |= MEM_Invalid;
56568       pX->pScopyFrom = 0;
56569     }
56570   }
56571   pMem->pScopyFrom = 0;
56572 }
56573 #endif /* SQLITE_DEBUG */
56574
56575 /*
56576 ** Size of struct Mem not including the Mem.zMalloc member.
56577 */
56578 #define MEMCELLSIZE (size_t)(&(((Mem *)0)->zMalloc))
56579
56580 /*
56581 ** Make an shallow copy of pFrom into pTo.  Prior contents of
56582 ** pTo are freed.  The pFrom->z field is not duplicated.  If
56583 ** pFrom->z is used, then pTo->z points to the same thing as pFrom->z
56584 ** and flags gets srcType (either MEM_Ephem or MEM_Static).
56585 */
56586 SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){
56587   assert( (pFrom->flags & MEM_RowSet)==0 );
56588   sqlite3VdbeMemReleaseExternal(pTo);
56589   memcpy(pTo, pFrom, MEMCELLSIZE);
56590   pTo->xDel = 0;
56591   if( (pFrom->flags&MEM_Static)==0 ){
56592     pTo->flags &= ~(MEM_Dyn|MEM_Static|MEM_Ephem);
56593     assert( srcType==MEM_Ephem || srcType==MEM_Static );
56594     pTo->flags |= srcType;
56595   }
56596 }
56597
56598 /*
56599 ** Make a full copy of pFrom into pTo.  Prior contents of pTo are
56600 ** freed before the copy is made.
56601 */
56602 SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){
56603   int rc = SQLITE_OK;
56604
56605   assert( (pFrom->flags & MEM_RowSet)==0 );
56606   sqlite3VdbeMemReleaseExternal(pTo);
56607   memcpy(pTo, pFrom, MEMCELLSIZE);
56608   pTo->flags &= ~MEM_Dyn;
56609
56610   if( pTo->flags&(MEM_Str|MEM_Blob) ){
56611     if( 0==(pFrom->flags&MEM_Static) ){
56612       pTo->flags |= MEM_Ephem;
56613       rc = sqlite3VdbeMemMakeWriteable(pTo);
56614     }
56615   }
56616
56617   return rc;
56618 }
56619
56620 /*
56621 ** Transfer the contents of pFrom to pTo. Any existing value in pTo is
56622 ** freed. If pFrom contains ephemeral data, a copy is made.
56623 **
56624 ** pFrom contains an SQL NULL when this routine returns.
56625 */
56626 SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem *pTo, Mem *pFrom){
56627   assert( pFrom->db==0 || sqlite3_mutex_held(pFrom->db->mutex) );
56628   assert( pTo->db==0 || sqlite3_mutex_held(pTo->db->mutex) );
56629   assert( pFrom->db==0 || pTo->db==0 || pFrom->db==pTo->db );
56630
56631   sqlite3VdbeMemRelease(pTo);
56632   memcpy(pTo, pFrom, sizeof(Mem));
56633   pFrom->flags = MEM_Null;
56634   pFrom->xDel = 0;
56635   pFrom->zMalloc = 0;
56636 }
56637
56638 /*
56639 ** Change the value of a Mem to be a string or a BLOB.
56640 **
56641 ** The memory management strategy depends on the value of the xDel
56642 ** parameter. If the value passed is SQLITE_TRANSIENT, then the 
56643 ** string is copied into a (possibly existing) buffer managed by the 
56644 ** Mem structure. Otherwise, any existing buffer is freed and the
56645 ** pointer copied.
56646 **
56647 ** If the string is too large (if it exceeds the SQLITE_LIMIT_LENGTH
56648 ** size limit) then no memory allocation occurs.  If the string can be
56649 ** stored without allocating memory, then it is.  If a memory allocation
56650 ** is required to store the string, then value of pMem is unchanged.  In
56651 ** either case, SQLITE_TOOBIG is returned.
56652 */
56653 SQLITE_PRIVATE int sqlite3VdbeMemSetStr(
56654   Mem *pMem,          /* Memory cell to set to string value */
56655   const char *z,      /* String pointer */
56656   int n,              /* Bytes in string, or negative */
56657   u8 enc,             /* Encoding of z.  0 for BLOBs */
56658   void (*xDel)(void*) /* Destructor function */
56659 ){
56660   int nByte = n;      /* New value for pMem->n */
56661   int iLimit;         /* Maximum allowed string or blob size */
56662   u16 flags = 0;      /* New value for pMem->flags */
56663
56664   assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
56665   assert( (pMem->flags & MEM_RowSet)==0 );
56666
56667   /* If z is a NULL pointer, set pMem to contain an SQL NULL. */
56668   if( !z ){
56669     sqlite3VdbeMemSetNull(pMem);
56670     return SQLITE_OK;
56671   }
56672
56673   if( pMem->db ){
56674     iLimit = pMem->db->aLimit[SQLITE_LIMIT_LENGTH];
56675   }else{
56676     iLimit = SQLITE_MAX_LENGTH;
56677   }
56678   flags = (enc==0?MEM_Blob:MEM_Str);
56679   if( nByte<0 ){
56680     assert( enc!=0 );
56681     if( enc==SQLITE_UTF8 ){
56682       for(nByte=0; nByte<=iLimit && z[nByte]; nByte++){}
56683     }else{
56684       for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){}
56685     }
56686     flags |= MEM_Term;
56687   }
56688
56689   /* The following block sets the new values of Mem.z and Mem.xDel. It
56690   ** also sets a flag in local variable "flags" to indicate the memory
56691   ** management (one of MEM_Dyn or MEM_Static).
56692   */
56693   if( xDel==SQLITE_TRANSIENT ){
56694     int nAlloc = nByte;
56695     if( flags&MEM_Term ){
56696       nAlloc += (enc==SQLITE_UTF8?1:2);
56697     }
56698     if( nByte>iLimit ){
56699       return SQLITE_TOOBIG;
56700     }
56701     if( sqlite3VdbeMemGrow(pMem, nAlloc, 0) ){
56702       return SQLITE_NOMEM;
56703     }
56704     memcpy(pMem->z, z, nAlloc);
56705   }else if( xDel==SQLITE_DYNAMIC ){
56706     sqlite3VdbeMemRelease(pMem);
56707     pMem->zMalloc = pMem->z = (char *)z;
56708     pMem->xDel = 0;
56709   }else{
56710     sqlite3VdbeMemRelease(pMem);
56711     pMem->z = (char *)z;
56712     pMem->xDel = xDel;
56713     flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn);
56714   }
56715
56716   pMem->n = nByte;
56717   pMem->flags = flags;
56718   pMem->enc = (enc==0 ? SQLITE_UTF8 : enc);
56719   pMem->type = (enc==0 ? SQLITE_BLOB : SQLITE_TEXT);
56720
56721 #ifndef SQLITE_OMIT_UTF16
56722   if( pMem->enc!=SQLITE_UTF8 && sqlite3VdbeMemHandleBom(pMem) ){
56723     return SQLITE_NOMEM;
56724   }
56725 #endif
56726
56727   if( nByte>iLimit ){
56728     return SQLITE_TOOBIG;
56729   }
56730
56731   return SQLITE_OK;
56732 }
56733
56734 /*
56735 ** Compare the values contained by the two memory cells, returning
56736 ** negative, zero or positive if pMem1 is less than, equal to, or greater
56737 ** than pMem2. Sorting order is NULL's first, followed by numbers (integers
56738 ** and reals) sorted numerically, followed by text ordered by the collating
56739 ** sequence pColl and finally blob's ordered by memcmp().
56740 **
56741 ** Two NULL values are considered equal by this function.
56742 */
56743 SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){
56744   int rc;
56745   int f1, f2;
56746   int combined_flags;
56747
56748   f1 = pMem1->flags;
56749   f2 = pMem2->flags;
56750   combined_flags = f1|f2;
56751   assert( (combined_flags & MEM_RowSet)==0 );
56752  
56753   /* If one value is NULL, it is less than the other. If both values
56754   ** are NULL, return 0.
56755   */
56756   if( combined_flags&MEM_Null ){
56757     return (f2&MEM_Null) - (f1&MEM_Null);
56758   }
56759
56760   /* If one value is a number and the other is not, the number is less.
56761   ** If both are numbers, compare as reals if one is a real, or as integers
56762   ** if both values are integers.
56763   */
56764   if( combined_flags&(MEM_Int|MEM_Real) ){
56765     if( !(f1&(MEM_Int|MEM_Real)) ){
56766       return 1;
56767     }
56768     if( !(f2&(MEM_Int|MEM_Real)) ){
56769       return -1;
56770     }
56771     if( (f1 & f2 & MEM_Int)==0 ){
56772       double r1, r2;
56773       if( (f1&MEM_Real)==0 ){
56774         r1 = (double)pMem1->u.i;
56775       }else{
56776         r1 = pMem1->r;
56777       }
56778       if( (f2&MEM_Real)==0 ){
56779         r2 = (double)pMem2->u.i;
56780       }else{
56781         r2 = pMem2->r;
56782       }
56783       if( r1<r2 ) return -1;
56784       if( r1>r2 ) return 1;
56785       return 0;
56786     }else{
56787       assert( f1&MEM_Int );
56788       assert( f2&MEM_Int );
56789       if( pMem1->u.i < pMem2->u.i ) return -1;
56790       if( pMem1->u.i > pMem2->u.i ) return 1;
56791       return 0;
56792     }
56793   }
56794
56795   /* If one value is a string and the other is a blob, the string is less.
56796   ** If both are strings, compare using the collating functions.
56797   */
56798   if( combined_flags&MEM_Str ){
56799     if( (f1 & MEM_Str)==0 ){
56800       return 1;
56801     }
56802     if( (f2 & MEM_Str)==0 ){
56803       return -1;
56804     }
56805
56806     assert( pMem1->enc==pMem2->enc );
56807     assert( pMem1->enc==SQLITE_UTF8 || 
56808             pMem1->enc==SQLITE_UTF16LE || pMem1->enc==SQLITE_UTF16BE );
56809
56810     /* The collation sequence must be defined at this point, even if
56811     ** the user deletes the collation sequence after the vdbe program is
56812     ** compiled (this was not always the case).
56813     */
56814     assert( !pColl || pColl->xCmp );
56815
56816     if( pColl ){
56817       if( pMem1->enc==pColl->enc ){
56818         /* The strings are already in the correct encoding.  Call the
56819         ** comparison function directly */
56820         return pColl->xCmp(pColl->pUser,pMem1->n,pMem1->z,pMem2->n,pMem2->z);
56821       }else{
56822         const void *v1, *v2;
56823         int n1, n2;
56824         Mem c1;
56825         Mem c2;
56826         memset(&c1, 0, sizeof(c1));
56827         memset(&c2, 0, sizeof(c2));
56828         sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem);
56829         sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem);
56830         v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc);
56831         n1 = v1==0 ? 0 : c1.n;
56832         v2 = sqlite3ValueText((sqlite3_value*)&c2, pColl->enc);
56833         n2 = v2==0 ? 0 : c2.n;
56834         rc = pColl->xCmp(pColl->pUser, n1, v1, n2, v2);
56835         sqlite3VdbeMemRelease(&c1);
56836         sqlite3VdbeMemRelease(&c2);
56837         return rc;
56838       }
56839     }
56840     /* If a NULL pointer was passed as the collate function, fall through
56841     ** to the blob case and use memcmp().  */
56842   }
56843  
56844   /* Both values must be blobs.  Compare using memcmp().  */
56845   rc = memcmp(pMem1->z, pMem2->z, (pMem1->n>pMem2->n)?pMem2->n:pMem1->n);
56846   if( rc==0 ){
56847     rc = pMem1->n - pMem2->n;
56848   }
56849   return rc;
56850 }
56851
56852 /*
56853 ** Move data out of a btree key or data field and into a Mem structure.
56854 ** The data or key is taken from the entry that pCur is currently pointing
56855 ** to.  offset and amt determine what portion of the data or key to retrieve.
56856 ** key is true to get the key or false to get data.  The result is written
56857 ** into the pMem element.
56858 **
56859 ** The pMem structure is assumed to be uninitialized.  Any prior content
56860 ** is overwritten without being freed.
56861 **
56862 ** If this routine fails for any reason (malloc returns NULL or unable
56863 ** to read from the disk) then the pMem is left in an inconsistent state.
56864 */
56865 SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(
56866   BtCursor *pCur,   /* Cursor pointing at record to retrieve. */
56867   int offset,       /* Offset from the start of data to return bytes from. */
56868   int amt,          /* Number of bytes to return. */
56869   int key,          /* If true, retrieve from the btree key, not data. */
56870   Mem *pMem         /* OUT: Return data in this Mem structure. */
56871 ){
56872   char *zData;        /* Data from the btree layer */
56873   int available = 0;  /* Number of bytes available on the local btree page */
56874   int rc = SQLITE_OK; /* Return code */
56875
56876   assert( sqlite3BtreeCursorIsValid(pCur) );
56877
56878   /* Note: the calls to BtreeKeyFetch() and DataFetch() below assert() 
56879   ** that both the BtShared and database handle mutexes are held. */
56880   assert( (pMem->flags & MEM_RowSet)==0 );
56881   if( key ){
56882     zData = (char *)sqlite3BtreeKeyFetch(pCur, &available);
56883   }else{
56884     zData = (char *)sqlite3BtreeDataFetch(pCur, &available);
56885   }
56886   assert( zData!=0 );
56887
56888   if( offset+amt<=available && (pMem->flags&MEM_Dyn)==0 ){
56889     sqlite3VdbeMemRelease(pMem);
56890     pMem->z = &zData[offset];
56891     pMem->flags = MEM_Blob|MEM_Ephem;
56892   }else if( SQLITE_OK==(rc = sqlite3VdbeMemGrow(pMem, amt+2, 0)) ){
56893     pMem->flags = MEM_Blob|MEM_Dyn|MEM_Term;
56894     pMem->enc = 0;
56895     pMem->type = SQLITE_BLOB;
56896     if( key ){
56897       rc = sqlite3BtreeKey(pCur, offset, amt, pMem->z);
56898     }else{
56899       rc = sqlite3BtreeData(pCur, offset, amt, pMem->z);
56900     }
56901     pMem->z[amt] = 0;
56902     pMem->z[amt+1] = 0;
56903     if( rc!=SQLITE_OK ){
56904       sqlite3VdbeMemRelease(pMem);
56905     }
56906   }
56907   pMem->n = amt;
56908
56909   return rc;
56910 }
56911
56912 /* This function is only available internally, it is not part of the
56913 ** external API. It works in a similar way to sqlite3_value_text(),
56914 ** except the data returned is in the encoding specified by the second
56915 ** parameter, which must be one of SQLITE_UTF16BE, SQLITE_UTF16LE or
56916 ** SQLITE_UTF8.
56917 **
56918 ** (2006-02-16:)  The enc value can be or-ed with SQLITE_UTF16_ALIGNED.
56919 ** If that is the case, then the result must be aligned on an even byte
56920 ** boundary.
56921 */
56922 SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){
56923   if( !pVal ) return 0;
56924
56925   assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) );
56926   assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) );
56927   assert( (pVal->flags & MEM_RowSet)==0 );
56928
56929   if( pVal->flags&MEM_Null ){
56930     return 0;
56931   }
56932   assert( (MEM_Blob>>3) == MEM_Str );
56933   pVal->flags |= (pVal->flags & MEM_Blob)>>3;
56934   expandBlob(pVal);
56935   if( pVal->flags&MEM_Str ){
56936     sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED);
56937     if( (enc & SQLITE_UTF16_ALIGNED)!=0 && 1==(1&SQLITE_PTR_TO_INT(pVal->z)) ){
56938       assert( (pVal->flags & (MEM_Ephem|MEM_Static))!=0 );
56939       if( sqlite3VdbeMemMakeWriteable(pVal)!=SQLITE_OK ){
56940         return 0;
56941       }
56942     }
56943     sqlite3VdbeMemNulTerminate(pVal); /* IMP: R-59893-45467 */
56944   }else{
56945     assert( (pVal->flags&MEM_Blob)==0 );
56946     sqlite3VdbeMemStringify(pVal, enc);
56947     assert( 0==(1&SQLITE_PTR_TO_INT(pVal->z)) );
56948   }
56949   assert(pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) || pVal->db==0
56950               || pVal->db->mallocFailed );
56951   if( pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) ){
56952     return pVal->z;
56953   }else{
56954     return 0;
56955   }
56956 }
56957
56958 /*
56959 ** Create a new sqlite3_value object.
56960 */
56961 SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *db){
56962   Mem *p = sqlite3DbMallocZero(db, sizeof(*p));
56963   if( p ){
56964     p->flags = MEM_Null;
56965     p->type = SQLITE_NULL;
56966     p->db = db;
56967   }
56968   return p;
56969 }
56970
56971 /*
56972 ** Create a new sqlite3_value object, containing the value of pExpr.
56973 **
56974 ** This only works for very simple expressions that consist of one constant
56975 ** token (i.e. "5", "5.1", "'a string'"). If the expression can
56976 ** be converted directly into a value, then the value is allocated and
56977 ** a pointer written to *ppVal. The caller is responsible for deallocating
56978 ** the value by passing it to sqlite3ValueFree() later on. If the expression
56979 ** cannot be converted to a value, then *ppVal is set to NULL.
56980 */
56981 SQLITE_PRIVATE int sqlite3ValueFromExpr(
56982   sqlite3 *db,              /* The database connection */
56983   Expr *pExpr,              /* The expression to evaluate */
56984   u8 enc,                   /* Encoding to use */
56985   u8 affinity,              /* Affinity to use */
56986   sqlite3_value **ppVal     /* Write the new value here */
56987 ){
56988   int op;
56989   char *zVal = 0;
56990   sqlite3_value *pVal = 0;
56991   int negInt = 1;
56992   const char *zNeg = "";
56993
56994   if( !pExpr ){
56995     *ppVal = 0;
56996     return SQLITE_OK;
56997   }
56998   op = pExpr->op;
56999
57000   /* op can only be TK_REGISTER if we have compiled with SQLITE_ENABLE_STAT2.
57001   ** The ifdef here is to enable us to achieve 100% branch test coverage even
57002   ** when SQLITE_ENABLE_STAT2 is omitted.
57003   */
57004 #ifdef SQLITE_ENABLE_STAT2
57005   if( op==TK_REGISTER ) op = pExpr->op2;
57006 #else
57007   if( NEVER(op==TK_REGISTER) ) op = pExpr->op2;
57008 #endif
57009
57010   /* Handle negative integers in a single step.  This is needed in the
57011   ** case when the value is -9223372036854775808.
57012   */
57013   if( op==TK_UMINUS
57014    && (pExpr->pLeft->op==TK_INTEGER || pExpr->pLeft->op==TK_FLOAT) ){
57015     pExpr = pExpr->pLeft;
57016     op = pExpr->op;
57017     negInt = -1;
57018     zNeg = "-";
57019   }
57020
57021   if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){
57022     pVal = sqlite3ValueNew(db);
57023     if( pVal==0 ) goto no_mem;
57024     if( ExprHasProperty(pExpr, EP_IntValue) ){
57025       sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue*negInt);
57026     }else{
57027       zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken);
57028       if( zVal==0 ) goto no_mem;
57029       sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
57030       if( op==TK_FLOAT ) pVal->type = SQLITE_FLOAT;
57031     }
57032     if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_NONE ){
57033       sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
57034     }else{
57035       sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8);
57036     }
57037     if( pVal->flags & (MEM_Int|MEM_Real) ) pVal->flags &= ~MEM_Str;
57038     if( enc!=SQLITE_UTF8 ){
57039       sqlite3VdbeChangeEncoding(pVal, enc);
57040     }
57041   }else if( op==TK_UMINUS ) {
57042     /* This branch happens for multiple negative signs.  Ex: -(-5) */
57043     if( SQLITE_OK==sqlite3ValueFromExpr(db,pExpr->pLeft,enc,affinity,&pVal) ){
57044       sqlite3VdbeMemNumerify(pVal);
57045       if( pVal->u.i==SMALLEST_INT64 ){
57046         pVal->flags &= MEM_Int;
57047         pVal->flags |= MEM_Real;
57048         pVal->r = (double)LARGEST_INT64;
57049       }else{
57050         pVal->u.i = -pVal->u.i;
57051       }
57052       pVal->r = -pVal->r;
57053       sqlite3ValueApplyAffinity(pVal, affinity, enc);
57054     }
57055   }else if( op==TK_NULL ){
57056     pVal = sqlite3ValueNew(db);
57057     if( pVal==0 ) goto no_mem;
57058   }
57059 #ifndef SQLITE_OMIT_BLOB_LITERAL
57060   else if( op==TK_BLOB ){
57061     int nVal;
57062     assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' );
57063     assert( pExpr->u.zToken[1]=='\'' );
57064     pVal = sqlite3ValueNew(db);
57065     if( !pVal ) goto no_mem;
57066     zVal = &pExpr->u.zToken[2];
57067     nVal = sqlite3Strlen30(zVal)-1;
57068     assert( zVal[nVal]=='\'' );
57069     sqlite3VdbeMemSetStr(pVal, sqlite3HexToBlob(db, zVal, nVal), nVal/2,
57070                          0, SQLITE_DYNAMIC);
57071   }
57072 #endif
57073
57074   if( pVal ){
57075     sqlite3VdbeMemStoreType(pVal);
57076   }
57077   *ppVal = pVal;
57078   return SQLITE_OK;
57079
57080 no_mem:
57081   db->mallocFailed = 1;
57082   sqlite3DbFree(db, zVal);
57083   sqlite3ValueFree(pVal);
57084   *ppVal = 0;
57085   return SQLITE_NOMEM;
57086 }
57087
57088 /*
57089 ** Change the string value of an sqlite3_value object
57090 */
57091 SQLITE_PRIVATE void sqlite3ValueSetStr(
57092   sqlite3_value *v,     /* Value to be set */
57093   int n,                /* Length of string z */
57094   const void *z,        /* Text of the new string */
57095   u8 enc,               /* Encoding to use */
57096   void (*xDel)(void*)   /* Destructor for the string */
57097 ){
57098   if( v ) sqlite3VdbeMemSetStr((Mem *)v, z, n, enc, xDel);
57099 }
57100
57101 /*
57102 ** Free an sqlite3_value object
57103 */
57104 SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value *v){
57105   if( !v ) return;
57106   sqlite3VdbeMemRelease((Mem *)v);
57107   sqlite3DbFree(((Mem*)v)->db, v);
57108 }
57109
57110 /*
57111 ** Return the number of bytes in the sqlite3_value object assuming
57112 ** that it uses the encoding "enc"
57113 */
57114 SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value *pVal, u8 enc){
57115   Mem *p = (Mem*)pVal;
57116   if( (p->flags & MEM_Blob)!=0 || sqlite3ValueText(pVal, enc) ){
57117     if( p->flags & MEM_Zero ){
57118       return p->n + p->u.nZero;
57119     }else{
57120       return p->n;
57121     }
57122   }
57123   return 0;
57124 }
57125
57126 /************** End of vdbemem.c *********************************************/
57127 /************** Begin file vdbeaux.c *****************************************/
57128 /*
57129 ** 2003 September 6
57130 **
57131 ** The author disclaims copyright to this source code.  In place of
57132 ** a legal notice, here is a blessing:
57133 **
57134 **    May you do good and not evil.
57135 **    May you find forgiveness for yourself and forgive others.
57136 **    May you share freely, never taking more than you give.
57137 **
57138 *************************************************************************
57139 ** This file contains code used for creating, destroying, and populating
57140 ** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.)  Prior
57141 ** to version 2.8.7, all this code was combined into the vdbe.c source file.
57142 ** But that file was getting too big so this subroutines were split out.
57143 */
57144
57145
57146
57147 /*
57148 ** When debugging the code generator in a symbolic debugger, one can
57149 ** set the sqlite3VdbeAddopTrace to 1 and all opcodes will be printed
57150 ** as they are added to the instruction stream.
57151 */
57152 #ifdef SQLITE_DEBUG
57153 SQLITE_PRIVATE int sqlite3VdbeAddopTrace = 0;
57154 #endif
57155
57156
57157 /*
57158 ** Create a new virtual database engine.
57159 */
57160 SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3 *db){
57161   Vdbe *p;
57162   p = sqlite3DbMallocZero(db, sizeof(Vdbe) );
57163   if( p==0 ) return 0;
57164   p->db = db;
57165   if( db->pVdbe ){
57166     db->pVdbe->pPrev = p;
57167   }
57168   p->pNext = db->pVdbe;
57169   p->pPrev = 0;
57170   db->pVdbe = p;
57171   p->magic = VDBE_MAGIC_INIT;
57172   return p;
57173 }
57174
57175 /*
57176 ** Remember the SQL string for a prepared statement.
57177 */
57178 SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, int isPrepareV2){
57179   assert( isPrepareV2==1 || isPrepareV2==0 );
57180   if( p==0 ) return;
57181 #ifdef SQLITE_OMIT_TRACE
57182   if( !isPrepareV2 ) return;
57183 #endif
57184   assert( p->zSql==0 );
57185   p->zSql = sqlite3DbStrNDup(p->db, z, n);
57186   p->isPrepareV2 = (u8)isPrepareV2;
57187 }
57188
57189 /*
57190 ** Return the SQL associated with a prepared statement
57191 */
57192 SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt){
57193   Vdbe *p = (Vdbe *)pStmt;
57194   return (p && p->isPrepareV2) ? p->zSql : 0;
57195 }
57196
57197 /*
57198 ** Swap all content between two VDBE structures.
57199 */
57200 SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){
57201   Vdbe tmp, *pTmp;
57202   char *zTmp;
57203   tmp = *pA;
57204   *pA = *pB;
57205   *pB = tmp;
57206   pTmp = pA->pNext;
57207   pA->pNext = pB->pNext;
57208   pB->pNext = pTmp;
57209   pTmp = pA->pPrev;
57210   pA->pPrev = pB->pPrev;
57211   pB->pPrev = pTmp;
57212   zTmp = pA->zSql;
57213   pA->zSql = pB->zSql;
57214   pB->zSql = zTmp;
57215   pB->isPrepareV2 = pA->isPrepareV2;
57216 }
57217
57218 #ifdef SQLITE_DEBUG
57219 /*
57220 ** Turn tracing on or off
57221 */
57222 SQLITE_PRIVATE void sqlite3VdbeTrace(Vdbe *p, FILE *trace){
57223   p->trace = trace;
57224 }
57225 #endif
57226
57227 /*
57228 ** Resize the Vdbe.aOp array so that it is at least one op larger than 
57229 ** it was.
57230 **
57231 ** If an out-of-memory error occurs while resizing the array, return
57232 ** SQLITE_NOMEM. In this case Vdbe.aOp and Vdbe.nOpAlloc remain 
57233 ** unchanged (this is so that any opcodes already allocated can be 
57234 ** correctly deallocated along with the rest of the Vdbe).
57235 */
57236 static int growOpArray(Vdbe *p){
57237   VdbeOp *pNew;
57238   int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op)));
57239   pNew = sqlite3DbRealloc(p->db, p->aOp, nNew*sizeof(Op));
57240   if( pNew ){
57241     p->nOpAlloc = sqlite3DbMallocSize(p->db, pNew)/sizeof(Op);
57242     p->aOp = pNew;
57243   }
57244   return (pNew ? SQLITE_OK : SQLITE_NOMEM);
57245 }
57246
57247 /*
57248 ** Add a new instruction to the list of instructions current in the
57249 ** VDBE.  Return the address of the new instruction.
57250 **
57251 ** Parameters:
57252 **
57253 **    p               Pointer to the VDBE
57254 **
57255 **    op              The opcode for this instruction
57256 **
57257 **    p1, p2, p3      Operands
57258 **
57259 ** Use the sqlite3VdbeResolveLabel() function to fix an address and
57260 ** the sqlite3VdbeChangeP4() function to change the value of the P4
57261 ** operand.
57262 */
57263 SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){
57264   int i;
57265   VdbeOp *pOp;
57266
57267   i = p->nOp;
57268   assert( p->magic==VDBE_MAGIC_INIT );
57269   assert( op>0 && op<0xff );
57270   if( p->nOpAlloc<=i ){
57271     if( growOpArray(p) ){
57272       return 1;
57273     }
57274   }
57275   p->nOp++;
57276   pOp = &p->aOp[i];
57277   pOp->opcode = (u8)op;
57278   pOp->p5 = 0;
57279   pOp->p1 = p1;
57280   pOp->p2 = p2;
57281   pOp->p3 = p3;
57282   pOp->p4.p = 0;
57283   pOp->p4type = P4_NOTUSED;
57284   p->expired = 0;
57285   if( op==OP_ParseSchema ){
57286     /* Any program that uses the OP_ParseSchema opcode needs to lock
57287     ** all btrees. */
57288     int j;
57289     for(j=0; j<p->db->nDb; j++) sqlite3VdbeUsesBtree(p, j);
57290   }
57291 #ifdef SQLITE_DEBUG
57292   pOp->zComment = 0;
57293   if( sqlite3VdbeAddopTrace ) sqlite3VdbePrintOp(0, i, &p->aOp[i]);
57294 #endif
57295 #ifdef VDBE_PROFILE
57296   pOp->cycles = 0;
57297   pOp->cnt = 0;
57298 #endif
57299   return i;
57300 }
57301 SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe *p, int op){
57302   return sqlite3VdbeAddOp3(p, op, 0, 0, 0);
57303 }
57304 SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){
57305   return sqlite3VdbeAddOp3(p, op, p1, 0, 0);
57306 }
57307 SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){
57308   return sqlite3VdbeAddOp3(p, op, p1, p2, 0);
57309 }
57310
57311
57312 /*
57313 ** Add an opcode that includes the p4 value as a pointer.
57314 */
57315 SQLITE_PRIVATE int sqlite3VdbeAddOp4(
57316   Vdbe *p,            /* Add the opcode to this VM */
57317   int op,             /* The new opcode */
57318   int p1,             /* The P1 operand */
57319   int p2,             /* The P2 operand */
57320   int p3,             /* The P3 operand */
57321   const char *zP4,    /* The P4 operand */
57322   int p4type          /* P4 operand type */
57323 ){
57324   int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3);
57325   sqlite3VdbeChangeP4(p, addr, zP4, p4type);
57326   return addr;
57327 }
57328
57329 /*
57330 ** Add an opcode that includes the p4 value as an integer.
57331 */
57332 SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(
57333   Vdbe *p,            /* Add the opcode to this VM */
57334   int op,             /* The new opcode */
57335   int p1,             /* The P1 operand */
57336   int p2,             /* The P2 operand */
57337   int p3,             /* The P3 operand */
57338   int p4              /* The P4 operand as an integer */
57339 ){
57340   int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3);
57341   sqlite3VdbeChangeP4(p, addr, SQLITE_INT_TO_PTR(p4), P4_INT32);
57342   return addr;
57343 }
57344
57345 /*
57346 ** Create a new symbolic label for an instruction that has yet to be
57347 ** coded.  The symbolic label is really just a negative number.  The
57348 ** label can be used as the P2 value of an operation.  Later, when
57349 ** the label is resolved to a specific address, the VDBE will scan
57350 ** through its operation list and change all values of P2 which match
57351 ** the label into the resolved address.
57352 **
57353 ** The VDBE knows that a P2 value is a label because labels are
57354 ** always negative and P2 values are suppose to be non-negative.
57355 ** Hence, a negative P2 value is a label that has yet to be resolved.
57356 **
57357 ** Zero is returned if a malloc() fails.
57358 */
57359 SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe *p){
57360   int i;
57361   i = p->nLabel++;
57362   assert( p->magic==VDBE_MAGIC_INIT );
57363   if( i>=p->nLabelAlloc ){
57364     int n = p->nLabelAlloc*2 + 5;
57365     p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel,
57366                                        n*sizeof(p->aLabel[0]));
57367     p->nLabelAlloc = sqlite3DbMallocSize(p->db, p->aLabel)/sizeof(p->aLabel[0]);
57368   }
57369   if( p->aLabel ){
57370     p->aLabel[i] = -1;
57371   }
57372   return -1-i;
57373 }
57374
57375 /*
57376 ** Resolve label "x" to be the address of the next instruction to
57377 ** be inserted.  The parameter "x" must have been obtained from
57378 ** a prior call to sqlite3VdbeMakeLabel().
57379 */
57380 SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe *p, int x){
57381   int j = -1-x;
57382   assert( p->magic==VDBE_MAGIC_INIT );
57383   assert( j>=0 && j<p->nLabel );
57384   if( p->aLabel ){
57385     p->aLabel[j] = p->nOp;
57386   }
57387 }
57388
57389 /*
57390 ** Mark the VDBE as one that can only be run one time.
57391 */
57392 SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){
57393   p->runOnlyOnce = 1;
57394 }
57395
57396 #ifdef SQLITE_DEBUG /* sqlite3AssertMayAbort() logic */
57397
57398 /*
57399 ** The following type and function are used to iterate through all opcodes
57400 ** in a Vdbe main program and each of the sub-programs (triggers) it may 
57401 ** invoke directly or indirectly. It should be used as follows:
57402 **
57403 **   Op *pOp;
57404 **   VdbeOpIter sIter;
57405 **
57406 **   memset(&sIter, 0, sizeof(sIter));
57407 **   sIter.v = v;                            // v is of type Vdbe* 
57408 **   while( (pOp = opIterNext(&sIter)) ){
57409 **     // Do something with pOp
57410 **   }
57411 **   sqlite3DbFree(v->db, sIter.apSub);
57412 ** 
57413 */
57414 typedef struct VdbeOpIter VdbeOpIter;
57415 struct VdbeOpIter {
57416   Vdbe *v;                   /* Vdbe to iterate through the opcodes of */
57417   SubProgram **apSub;        /* Array of subprograms */
57418   int nSub;                  /* Number of entries in apSub */
57419   int iAddr;                 /* Address of next instruction to return */
57420   int iSub;                  /* 0 = main program, 1 = first sub-program etc. */
57421 };
57422 static Op *opIterNext(VdbeOpIter *p){
57423   Vdbe *v = p->v;
57424   Op *pRet = 0;
57425   Op *aOp;
57426   int nOp;
57427
57428   if( p->iSub<=p->nSub ){
57429
57430     if( p->iSub==0 ){
57431       aOp = v->aOp;
57432       nOp = v->nOp;
57433     }else{
57434       aOp = p->apSub[p->iSub-1]->aOp;
57435       nOp = p->apSub[p->iSub-1]->nOp;
57436     }
57437     assert( p->iAddr<nOp );
57438
57439     pRet = &aOp[p->iAddr];
57440     p->iAddr++;
57441     if( p->iAddr==nOp ){
57442       p->iSub++;
57443       p->iAddr = 0;
57444     }
57445   
57446     if( pRet->p4type==P4_SUBPROGRAM ){
57447       int nByte = (p->nSub+1)*sizeof(SubProgram*);
57448       int j;
57449       for(j=0; j<p->nSub; j++){
57450         if( p->apSub[j]==pRet->p4.pProgram ) break;
57451       }
57452       if( j==p->nSub ){
57453         p->apSub = sqlite3DbReallocOrFree(v->db, p->apSub, nByte);
57454         if( !p->apSub ){
57455           pRet = 0;
57456         }else{
57457           p->apSub[p->nSub++] = pRet->p4.pProgram;
57458         }
57459       }
57460     }
57461   }
57462
57463   return pRet;
57464 }
57465
57466 /*
57467 ** Check if the program stored in the VM associated with pParse may
57468 ** throw an ABORT exception (causing the statement, but not entire transaction
57469 ** to be rolled back). This condition is true if the main program or any
57470 ** sub-programs contains any of the following:
57471 **
57472 **   *  OP_Halt with P1=SQLITE_CONSTRAINT and P2=OE_Abort.
57473 **   *  OP_HaltIfNull with P1=SQLITE_CONSTRAINT and P2=OE_Abort.
57474 **   *  OP_Destroy
57475 **   *  OP_VUpdate
57476 **   *  OP_VRename
57477 **   *  OP_FkCounter with P2==0 (immediate foreign key constraint)
57478 **
57479 ** Then check that the value of Parse.mayAbort is true if an
57480 ** ABORT may be thrown, or false otherwise. Return true if it does
57481 ** match, or false otherwise. This function is intended to be used as
57482 ** part of an assert statement in the compiler. Similar to:
57483 **
57484 **   assert( sqlite3VdbeAssertMayAbort(pParse->pVdbe, pParse->mayAbort) );
57485 */
57486 SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
57487   int hasAbort = 0;
57488   Op *pOp;
57489   VdbeOpIter sIter;
57490   memset(&sIter, 0, sizeof(sIter));
57491   sIter.v = v;
57492
57493   while( (pOp = opIterNext(&sIter))!=0 ){
57494     int opcode = pOp->opcode;
57495     if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename 
57496 #ifndef SQLITE_OMIT_FOREIGN_KEY
57497      || (opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1) 
57498 #endif
57499      || ((opcode==OP_Halt || opcode==OP_HaltIfNull) 
57500       && (pOp->p1==SQLITE_CONSTRAINT && pOp->p2==OE_Abort))
57501     ){
57502       hasAbort = 1;
57503       break;
57504     }
57505   }
57506   sqlite3DbFree(v->db, sIter.apSub);
57507
57508   /* Return true if hasAbort==mayAbort. Or if a malloc failure occured.
57509   ** If malloc failed, then the while() loop above may not have iterated
57510   ** through all opcodes and hasAbort may be set incorrectly. Return
57511   ** true for this case to prevent the assert() in the callers frame
57512   ** from failing.  */
57513   return ( v->db->mallocFailed || hasAbort==mayAbort );
57514 }
57515 #endif /* SQLITE_DEBUG - the sqlite3AssertMayAbort() function */
57516
57517 /*
57518 ** Loop through the program looking for P2 values that are negative
57519 ** on jump instructions.  Each such value is a label.  Resolve the
57520 ** label by setting the P2 value to its correct non-zero value.
57521 **
57522 ** This routine is called once after all opcodes have been inserted.
57523 **
57524 ** Variable *pMaxFuncArgs is set to the maximum value of any P2 argument 
57525 ** to an OP_Function, OP_AggStep or OP_VFilter opcode. This is used by 
57526 ** sqlite3VdbeMakeReady() to size the Vdbe.apArg[] array.
57527 **
57528 ** The Op.opflags field is set on all opcodes.
57529 */
57530 static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
57531   int i;
57532   int nMaxArgs = *pMaxFuncArgs;
57533   Op *pOp;
57534   int *aLabel = p->aLabel;
57535   p->readOnly = 1;
57536   for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){
57537     u8 opcode = pOp->opcode;
57538
57539     pOp->opflags = sqlite3OpcodeProperty[opcode];
57540     if( opcode==OP_Function || opcode==OP_AggStep ){
57541       if( pOp->p5>nMaxArgs ) nMaxArgs = pOp->p5;
57542     }else if( (opcode==OP_Transaction && pOp->p2!=0) || opcode==OP_Vacuum ){
57543       p->readOnly = 0;
57544 #ifndef SQLITE_OMIT_VIRTUALTABLE
57545     }else if( opcode==OP_VUpdate ){
57546       if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2;
57547     }else if( opcode==OP_VFilter ){
57548       int n;
57549       assert( p->nOp - i >= 3 );
57550       assert( pOp[-1].opcode==OP_Integer );
57551       n = pOp[-1].p1;
57552       if( n>nMaxArgs ) nMaxArgs = n;
57553 #endif
57554     }
57555
57556     if( (pOp->opflags & OPFLG_JUMP)!=0 && pOp->p2<0 ){
57557       assert( -1-pOp->p2<p->nLabel );
57558       pOp->p2 = aLabel[-1-pOp->p2];
57559     }
57560   }
57561   sqlite3DbFree(p->db, p->aLabel);
57562   p->aLabel = 0;
57563
57564   *pMaxFuncArgs = nMaxArgs;
57565 }
57566
57567 /*
57568 ** Return the address of the next instruction to be inserted.
57569 */
57570 SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe *p){
57571   assert( p->magic==VDBE_MAGIC_INIT );
57572   return p->nOp;
57573 }
57574
57575 /*
57576 ** This function returns a pointer to the array of opcodes associated with
57577 ** the Vdbe passed as the first argument. It is the callers responsibility
57578 ** to arrange for the returned array to be eventually freed using the 
57579 ** vdbeFreeOpArray() function.
57580 **
57581 ** Before returning, *pnOp is set to the number of entries in the returned
57582 ** array. Also, *pnMaxArg is set to the larger of its current value and 
57583 ** the number of entries in the Vdbe.apArg[] array required to execute the 
57584 ** returned program.
57585 */
57586 SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe *p, int *pnOp, int *pnMaxArg){
57587   VdbeOp *aOp = p->aOp;
57588   assert( aOp && !p->db->mallocFailed );
57589
57590   /* Check that sqlite3VdbeUsesBtree() was not called on this VM */
57591   assert( p->btreeMask==0 );
57592
57593   resolveP2Values(p, pnMaxArg);
57594   *pnOp = p->nOp;
57595   p->aOp = 0;
57596   return aOp;
57597 }
57598
57599 /*
57600 ** Add a whole list of operations to the operation stack.  Return the
57601 ** address of the first operation added.
57602 */
57603 SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){
57604   int addr;
57605   assert( p->magic==VDBE_MAGIC_INIT );
57606   if( p->nOp + nOp > p->nOpAlloc && growOpArray(p) ){
57607     return 0;
57608   }
57609   addr = p->nOp;
57610   if( ALWAYS(nOp>0) ){
57611     int i;
57612     VdbeOpList const *pIn = aOp;
57613     for(i=0; i<nOp; i++, pIn++){
57614       int p2 = pIn->p2;
57615       VdbeOp *pOut = &p->aOp[i+addr];
57616       pOut->opcode = pIn->opcode;
57617       pOut->p1 = pIn->p1;
57618       if( p2<0 && (sqlite3OpcodeProperty[pOut->opcode] & OPFLG_JUMP)!=0 ){
57619         pOut->p2 = addr + ADDR(p2);
57620       }else{
57621         pOut->p2 = p2;
57622       }
57623       pOut->p3 = pIn->p3;
57624       pOut->p4type = P4_NOTUSED;
57625       pOut->p4.p = 0;
57626       pOut->p5 = 0;
57627 #ifdef SQLITE_DEBUG
57628       pOut->zComment = 0;
57629       if( sqlite3VdbeAddopTrace ){
57630         sqlite3VdbePrintOp(0, i+addr, &p->aOp[i+addr]);
57631       }
57632 #endif
57633     }
57634     p->nOp += nOp;
57635   }
57636   return addr;
57637 }
57638
57639 /*
57640 ** Change the value of the P1 operand for a specific instruction.
57641 ** This routine is useful when a large program is loaded from a
57642 ** static array using sqlite3VdbeAddOpList but we want to make a
57643 ** few minor changes to the program.
57644 */
57645 SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){
57646   assert( p!=0 );
57647   assert( addr>=0 );
57648   if( p->nOp>addr ){
57649     p->aOp[addr].p1 = val;
57650   }
57651 }
57652
57653 /*
57654 ** Change the value of the P2 operand for a specific instruction.
57655 ** This routine is useful for setting a jump destination.
57656 */
57657 SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){
57658   assert( p!=0 );
57659   assert( addr>=0 );
57660   if( p->nOp>addr ){
57661     p->aOp[addr].p2 = val;
57662   }
57663 }
57664
57665 /*
57666 ** Change the value of the P3 operand for a specific instruction.
57667 */
57668 SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){
57669   assert( p!=0 );
57670   assert( addr>=0 );
57671   if( p->nOp>addr ){
57672     p->aOp[addr].p3 = val;
57673   }
57674 }
57675
57676 /*
57677 ** Change the value of the P5 operand for the most recently
57678 ** added operation.
57679 */
57680 SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u8 val){
57681   assert( p!=0 );
57682   if( p->aOp ){
57683     assert( p->nOp>0 );
57684     p->aOp[p->nOp-1].p5 = val;
57685   }
57686 }
57687
57688 /*
57689 ** Change the P2 operand of instruction addr so that it points to
57690 ** the address of the next instruction to be coded.
57691 */
57692 SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe *p, int addr){
57693   assert( addr>=0 );
57694   sqlite3VdbeChangeP2(p, addr, p->nOp);
57695 }
57696
57697
57698 /*
57699 ** If the input FuncDef structure is ephemeral, then free it.  If
57700 ** the FuncDef is not ephermal, then do nothing.
57701 */
57702 static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){
57703   if( ALWAYS(pDef) && (pDef->flags & SQLITE_FUNC_EPHEM)!=0 ){
57704     sqlite3DbFree(db, pDef);
57705   }
57706 }
57707
57708 static void vdbeFreeOpArray(sqlite3 *, Op *, int);
57709
57710 /*
57711 ** Delete a P4 value if necessary.
57712 */
57713 static void freeP4(sqlite3 *db, int p4type, void *p4){
57714   if( p4 ){
57715     assert( db );
57716     switch( p4type ){
57717       case P4_REAL:
57718       case P4_INT64:
57719       case P4_DYNAMIC:
57720       case P4_KEYINFO:
57721       case P4_INTARRAY:
57722       case P4_KEYINFO_HANDOFF: {
57723         sqlite3DbFree(db, p4);
57724         break;
57725       }
57726       case P4_MPRINTF: {
57727         if( db->pnBytesFreed==0 ) sqlite3_free(p4);
57728         break;
57729       }
57730       case P4_VDBEFUNC: {
57731         VdbeFunc *pVdbeFunc = (VdbeFunc *)p4;
57732         freeEphemeralFunction(db, pVdbeFunc->pFunc);
57733         if( db->pnBytesFreed==0 ) sqlite3VdbeDeleteAuxData(pVdbeFunc, 0);
57734         sqlite3DbFree(db, pVdbeFunc);
57735         break;
57736       }
57737       case P4_FUNCDEF: {
57738         freeEphemeralFunction(db, (FuncDef*)p4);
57739         break;
57740       }
57741       case P4_MEM: {
57742         if( db->pnBytesFreed==0 ){
57743           sqlite3ValueFree((sqlite3_value*)p4);
57744         }else{
57745           Mem *p = (Mem*)p4;
57746           sqlite3DbFree(db, p->zMalloc);
57747           sqlite3DbFree(db, p);
57748         }
57749         break;
57750       }
57751       case P4_VTAB : {
57752         if( db->pnBytesFreed==0 ) sqlite3VtabUnlock((VTable *)p4);
57753         break;
57754       }
57755     }
57756   }
57757 }
57758
57759 /*
57760 ** Free the space allocated for aOp and any p4 values allocated for the
57761 ** opcodes contained within. If aOp is not NULL it is assumed to contain 
57762 ** nOp entries. 
57763 */
57764 static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){
57765   if( aOp ){
57766     Op *pOp;
57767     for(pOp=aOp; pOp<&aOp[nOp]; pOp++){
57768       freeP4(db, pOp->p4type, pOp->p4.p);
57769 #ifdef SQLITE_DEBUG
57770       sqlite3DbFree(db, pOp->zComment);
57771 #endif     
57772     }
57773   }
57774   sqlite3DbFree(db, aOp);
57775 }
57776
57777 /*
57778 ** Link the SubProgram object passed as the second argument into the linked
57779 ** list at Vdbe.pSubProgram. This list is used to delete all sub-program
57780 ** objects when the VM is no longer required.
57781 */
57782 SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *pVdbe, SubProgram *p){
57783   p->pNext = pVdbe->pProgram;
57784   pVdbe->pProgram = p;
57785 }
57786
57787 /*
57788 ** Change N opcodes starting at addr to No-ops.
57789 */
57790 SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe *p, int addr, int N){
57791   if( p->aOp ){
57792     VdbeOp *pOp = &p->aOp[addr];
57793     sqlite3 *db = p->db;
57794     while( N-- ){
57795       freeP4(db, pOp->p4type, pOp->p4.p);
57796       memset(pOp, 0, sizeof(pOp[0]));
57797       pOp->opcode = OP_Noop;
57798       pOp++;
57799     }
57800   }
57801 }
57802
57803 /*
57804 ** Change the value of the P4 operand for a specific instruction.
57805 ** This routine is useful when a large program is loaded from a
57806 ** static array using sqlite3VdbeAddOpList but we want to make a
57807 ** few minor changes to the program.
57808 **
57809 ** If n>=0 then the P4 operand is dynamic, meaning that a copy of
57810 ** the string is made into memory obtained from sqlite3_malloc().
57811 ** A value of n==0 means copy bytes of zP4 up to and including the
57812 ** first null byte.  If n>0 then copy n+1 bytes of zP4.
57813 **
57814 ** If n==P4_KEYINFO it means that zP4 is a pointer to a KeyInfo structure.
57815 ** A copy is made of the KeyInfo structure into memory obtained from
57816 ** sqlite3_malloc, to be freed when the Vdbe is finalized.
57817 ** n==P4_KEYINFO_HANDOFF indicates that zP4 points to a KeyInfo structure
57818 ** stored in memory that the caller has obtained from sqlite3_malloc. The 
57819 ** caller should not free the allocation, it will be freed when the Vdbe is
57820 ** finalized.
57821 ** 
57822 ** Other values of n (P4_STATIC, P4_COLLSEQ etc.) indicate that zP4 points
57823 ** to a string or structure that is guaranteed to exist for the lifetime of
57824 ** the Vdbe. In these cases we can just copy the pointer.
57825 **
57826 ** If addr<0 then change P4 on the most recently inserted instruction.
57827 */
57828 SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int n){
57829   Op *pOp;
57830   sqlite3 *db;
57831   assert( p!=0 );
57832   db = p->db;
57833   assert( p->magic==VDBE_MAGIC_INIT );
57834   if( p->aOp==0 || db->mallocFailed ){
57835     if ( n!=P4_KEYINFO && n!=P4_VTAB ) {
57836       freeP4(db, n, (void*)*(char**)&zP4);
57837     }
57838     return;
57839   }
57840   assert( p->nOp>0 );
57841   assert( addr<p->nOp );
57842   if( addr<0 ){
57843     addr = p->nOp - 1;
57844   }
57845   pOp = &p->aOp[addr];
57846   freeP4(db, pOp->p4type, pOp->p4.p);
57847   pOp->p4.p = 0;
57848   if( n==P4_INT32 ){
57849     /* Note: this cast is safe, because the origin data point was an int
57850     ** that was cast to a (const char *). */
57851     pOp->p4.i = SQLITE_PTR_TO_INT(zP4);
57852     pOp->p4type = P4_INT32;
57853   }else if( zP4==0 ){
57854     pOp->p4.p = 0;
57855     pOp->p4type = P4_NOTUSED;
57856   }else if( n==P4_KEYINFO ){
57857     KeyInfo *pKeyInfo;
57858     int nField, nByte;
57859
57860     nField = ((KeyInfo*)zP4)->nField;
57861     nByte = sizeof(*pKeyInfo) + (nField-1)*sizeof(pKeyInfo->aColl[0]) + nField;
57862     pKeyInfo = sqlite3DbMallocRaw(0, nByte);
57863     pOp->p4.pKeyInfo = pKeyInfo;
57864     if( pKeyInfo ){
57865       u8 *aSortOrder;
57866       memcpy((char*)pKeyInfo, zP4, nByte - nField);
57867       aSortOrder = pKeyInfo->aSortOrder;
57868       if( aSortOrder ){
57869         pKeyInfo->aSortOrder = (unsigned char*)&pKeyInfo->aColl[nField];
57870         memcpy(pKeyInfo->aSortOrder, aSortOrder, nField);
57871       }
57872       pOp->p4type = P4_KEYINFO;
57873     }else{
57874       p->db->mallocFailed = 1;
57875       pOp->p4type = P4_NOTUSED;
57876     }
57877   }else if( n==P4_KEYINFO_HANDOFF ){
57878     pOp->p4.p = (void*)zP4;
57879     pOp->p4type = P4_KEYINFO;
57880   }else if( n==P4_VTAB ){
57881     pOp->p4.p = (void*)zP4;
57882     pOp->p4type = P4_VTAB;
57883     sqlite3VtabLock((VTable *)zP4);
57884     assert( ((VTable *)zP4)->db==p->db );
57885   }else if( n<0 ){
57886     pOp->p4.p = (void*)zP4;
57887     pOp->p4type = (signed char)n;
57888   }else{
57889     if( n==0 ) n = sqlite3Strlen30(zP4);
57890     pOp->p4.z = sqlite3DbStrNDup(p->db, zP4, n);
57891     pOp->p4type = P4_DYNAMIC;
57892   }
57893 }
57894
57895 #ifndef NDEBUG
57896 /*
57897 ** Change the comment on the the most recently coded instruction.  Or
57898 ** insert a No-op and add the comment to that new instruction.  This
57899 ** makes the code easier to read during debugging.  None of this happens
57900 ** in a production build.
57901 */
57902 SQLITE_PRIVATE void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){
57903   va_list ap;
57904   if( !p ) return;
57905   assert( p->nOp>0 || p->aOp==0 );
57906   assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->db->mallocFailed );
57907   if( p->nOp ){
57908     char **pz = &p->aOp[p->nOp-1].zComment;
57909     va_start(ap, zFormat);
57910     sqlite3DbFree(p->db, *pz);
57911     *pz = sqlite3VMPrintf(p->db, zFormat, ap);
57912     va_end(ap);
57913   }
57914 }
57915 SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe *p, const char *zFormat, ...){
57916   va_list ap;
57917   if( !p ) return;
57918   sqlite3VdbeAddOp0(p, OP_Noop);
57919   assert( p->nOp>0 || p->aOp==0 );
57920   assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->db->mallocFailed );
57921   if( p->nOp ){
57922     char **pz = &p->aOp[p->nOp-1].zComment;
57923     va_start(ap, zFormat);
57924     sqlite3DbFree(p->db, *pz);
57925     *pz = sqlite3VMPrintf(p->db, zFormat, ap);
57926     va_end(ap);
57927   }
57928 }
57929 #endif  /* NDEBUG */
57930
57931 /*
57932 ** Return the opcode for a given address.  If the address is -1, then
57933 ** return the most recently inserted opcode.
57934 **
57935 ** If a memory allocation error has occurred prior to the calling of this
57936 ** routine, then a pointer to a dummy VdbeOp will be returned.  That opcode
57937 ** is readable but not writable, though it is cast to a writable value.
57938 ** The return of a dummy opcode allows the call to continue functioning
57939 ** after a OOM fault without having to check to see if the return from 
57940 ** this routine is a valid pointer.  But because the dummy.opcode is 0,
57941 ** dummy will never be written to.  This is verified by code inspection and
57942 ** by running with Valgrind.
57943 **
57944 ** About the #ifdef SQLITE_OMIT_TRACE:  Normally, this routine is never called
57945 ** unless p->nOp>0.  This is because in the absense of SQLITE_OMIT_TRACE,
57946 ** an OP_Trace instruction is always inserted by sqlite3VdbeGet() as soon as
57947 ** a new VDBE is created.  So we are free to set addr to p->nOp-1 without
57948 ** having to double-check to make sure that the result is non-negative. But
57949 ** if SQLITE_OMIT_TRACE is defined, the OP_Trace is omitted and we do need to
57950 ** check the value of p->nOp-1 before continuing.
57951 */
57952 SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){
57953   /* C89 specifies that the constant "dummy" will be initialized to all
57954   ** zeros, which is correct.  MSVC generates a warning, nevertheless. */
57955   static const VdbeOp dummy;  /* Ignore the MSVC warning about no initializer */
57956   assert( p->magic==VDBE_MAGIC_INIT );
57957   if( addr<0 ){
57958 #ifdef SQLITE_OMIT_TRACE
57959     if( p->nOp==0 ) return (VdbeOp*)&dummy;
57960 #endif
57961     addr = p->nOp - 1;
57962   }
57963   assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed );
57964   if( p->db->mallocFailed ){
57965     return (VdbeOp*)&dummy;
57966   }else{
57967     return &p->aOp[addr];
57968   }
57969 }
57970
57971 #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) \
57972      || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
57973 /*
57974 ** Compute a string that describes the P4 parameter for an opcode.
57975 ** Use zTemp for any required temporary buffer space.
57976 */
57977 static char *displayP4(Op *pOp, char *zTemp, int nTemp){
57978   char *zP4 = zTemp;
57979   assert( nTemp>=20 );
57980   switch( pOp->p4type ){
57981     case P4_KEYINFO_STATIC:
57982     case P4_KEYINFO: {
57983       int i, j;
57984       KeyInfo *pKeyInfo = pOp->p4.pKeyInfo;
57985       sqlite3_snprintf(nTemp, zTemp, "keyinfo(%d", pKeyInfo->nField);
57986       i = sqlite3Strlen30(zTemp);
57987       for(j=0; j<pKeyInfo->nField; j++){
57988         CollSeq *pColl = pKeyInfo->aColl[j];
57989         if( pColl ){
57990           int n = sqlite3Strlen30(pColl->zName);
57991           if( i+n>nTemp-6 ){
57992             memcpy(&zTemp[i],",...",4);
57993             break;
57994           }
57995           zTemp[i++] = ',';
57996           if( pKeyInfo->aSortOrder && pKeyInfo->aSortOrder[j] ){
57997             zTemp[i++] = '-';
57998           }
57999           memcpy(&zTemp[i], pColl->zName,n+1);
58000           i += n;
58001         }else if( i+4<nTemp-6 ){
58002           memcpy(&zTemp[i],",nil",4);
58003           i += 4;
58004         }
58005       }
58006       zTemp[i++] = ')';
58007       zTemp[i] = 0;
58008       assert( i<nTemp );
58009       break;
58010     }
58011     case P4_COLLSEQ: {
58012       CollSeq *pColl = pOp->p4.pColl;
58013       sqlite3_snprintf(nTemp, zTemp, "collseq(%.20s)", pColl->zName);
58014       break;
58015     }
58016     case P4_FUNCDEF: {
58017       FuncDef *pDef = pOp->p4.pFunc;
58018       sqlite3_snprintf(nTemp, zTemp, "%s(%d)", pDef->zName, pDef->nArg);
58019       break;
58020     }
58021     case P4_INT64: {
58022       sqlite3_snprintf(nTemp, zTemp, "%lld", *pOp->p4.pI64);
58023       break;
58024     }
58025     case P4_INT32: {
58026       sqlite3_snprintf(nTemp, zTemp, "%d", pOp->p4.i);
58027       break;
58028     }
58029     case P4_REAL: {
58030       sqlite3_snprintf(nTemp, zTemp, "%.16g", *pOp->p4.pReal);
58031       break;
58032     }
58033     case P4_MEM: {
58034       Mem *pMem = pOp->p4.pMem;
58035       assert( (pMem->flags & MEM_Null)==0 );
58036       if( pMem->flags & MEM_Str ){
58037         zP4 = pMem->z;
58038       }else if( pMem->flags & MEM_Int ){
58039         sqlite3_snprintf(nTemp, zTemp, "%lld", pMem->u.i);
58040       }else if( pMem->flags & MEM_Real ){
58041         sqlite3_snprintf(nTemp, zTemp, "%.16g", pMem->r);
58042       }else{
58043         assert( pMem->flags & MEM_Blob );
58044         zP4 = "(blob)";
58045       }
58046       break;
58047     }
58048 #ifndef SQLITE_OMIT_VIRTUALTABLE
58049     case P4_VTAB: {
58050       sqlite3_vtab *pVtab = pOp->p4.pVtab->pVtab;
58051       sqlite3_snprintf(nTemp, zTemp, "vtab:%p:%p", pVtab, pVtab->pModule);
58052       break;
58053     }
58054 #endif
58055     case P4_INTARRAY: {
58056       sqlite3_snprintf(nTemp, zTemp, "intarray");
58057       break;
58058     }
58059     case P4_SUBPROGRAM: {
58060       sqlite3_snprintf(nTemp, zTemp, "program");
58061       break;
58062     }
58063     default: {
58064       zP4 = pOp->p4.z;
58065       if( zP4==0 ){
58066         zP4 = zTemp;
58067         zTemp[0] = 0;
58068       }
58069     }
58070   }
58071   assert( zP4!=0 );
58072   return zP4;
58073 }
58074 #endif
58075
58076 /*
58077 ** Declare to the Vdbe that the BTree object at db->aDb[i] is used.
58078 **
58079 ** The prepared statements need to know in advance the complete set of
58080 ** attached databases that they will be using.  A mask of these databases
58081 ** is maintained in p->btreeMask and is used for locking and other purposes.
58082 */
58083 SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe *p, int i){
58084   assert( i>=0 && i<p->db->nDb && i<(int)sizeof(yDbMask)*8 );
58085   assert( i<(int)sizeof(p->btreeMask)*8 );
58086   p->btreeMask |= ((yDbMask)1)<<i;
58087   if( i!=1 && sqlite3BtreeSharable(p->db->aDb[i].pBt) ){
58088     p->lockMask |= ((yDbMask)1)<<i;
58089   }
58090 }
58091
58092 #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
58093 /*
58094 ** If SQLite is compiled to support shared-cache mode and to be threadsafe,
58095 ** this routine obtains the mutex associated with each BtShared structure
58096 ** that may be accessed by the VM passed as an argument. In doing so it also
58097 ** sets the BtShared.db member of each of the BtShared structures, ensuring
58098 ** that the correct busy-handler callback is invoked if required.
58099 **
58100 ** If SQLite is not threadsafe but does support shared-cache mode, then
58101 ** sqlite3BtreeEnter() is invoked to set the BtShared.db variables
58102 ** of all of BtShared structures accessible via the database handle 
58103 ** associated with the VM.
58104 **
58105 ** If SQLite is not threadsafe and does not support shared-cache mode, this
58106 ** function is a no-op.
58107 **
58108 ** The p->btreeMask field is a bitmask of all btrees that the prepared 
58109 ** statement p will ever use.  Let N be the number of bits in p->btreeMask
58110 ** corresponding to btrees that use shared cache.  Then the runtime of
58111 ** this routine is N*N.  But as N is rarely more than 1, this should not
58112 ** be a problem.
58113 */
58114 SQLITE_PRIVATE void sqlite3VdbeEnter(Vdbe *p){
58115   int i;
58116   yDbMask mask;
58117   sqlite3 *db;
58118   Db *aDb;
58119   int nDb;
58120   if( p->lockMask==0 ) return;  /* The common case */
58121   db = p->db;
58122   aDb = db->aDb;
58123   nDb = db->nDb;
58124   for(i=0, mask=1; i<nDb; i++, mask += mask){
58125     if( i!=1 && (mask & p->lockMask)!=0 && ALWAYS(aDb[i].pBt!=0) ){
58126       sqlite3BtreeEnter(aDb[i].pBt);
58127     }
58128   }
58129 }
58130 #endif
58131
58132 #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
58133 /*
58134 ** Unlock all of the btrees previously locked by a call to sqlite3VdbeEnter().
58135 */
58136 SQLITE_PRIVATE void sqlite3VdbeLeave(Vdbe *p){
58137   int i;
58138   yDbMask mask;
58139   sqlite3 *db;
58140   Db *aDb;
58141   int nDb;
58142   if( p->lockMask==0 ) return;  /* The common case */
58143   db = p->db;
58144   aDb = db->aDb;
58145   nDb = db->nDb;
58146   for(i=0, mask=1; i<nDb; i++, mask += mask){
58147     if( i!=1 && (mask & p->lockMask)!=0 && ALWAYS(aDb[i].pBt!=0) ){
58148       sqlite3BtreeLeave(aDb[i].pBt);
58149     }
58150   }
58151 }
58152 #endif
58153
58154 #if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
58155 /*
58156 ** Print a single opcode.  This routine is used for debugging only.
58157 */
58158 SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){
58159   char *zP4;
58160   char zPtr[50];
58161   static const char *zFormat1 = "%4d %-13s %4d %4d %4d %-4s %.2X %s\n";
58162   if( pOut==0 ) pOut = stdout;
58163   zP4 = displayP4(pOp, zPtr, sizeof(zPtr));
58164   fprintf(pOut, zFormat1, pc, 
58165       sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, pOp->p3, zP4, pOp->p5,
58166 #ifdef SQLITE_DEBUG
58167       pOp->zComment ? pOp->zComment : ""
58168 #else
58169       ""
58170 #endif
58171   );
58172   fflush(pOut);
58173 }
58174 #endif
58175
58176 /*
58177 ** Release an array of N Mem elements
58178 */
58179 static void releaseMemArray(Mem *p, int N){
58180   if( p && N ){
58181     Mem *pEnd;
58182     sqlite3 *db = p->db;
58183     u8 malloc_failed = db->mallocFailed;
58184     if( db->pnBytesFreed ){
58185       for(pEnd=&p[N]; p<pEnd; p++){
58186         sqlite3DbFree(db, p->zMalloc);
58187       }
58188       return;
58189     }
58190     for(pEnd=&p[N]; p<pEnd; p++){
58191       assert( (&p[1])==pEnd || p[0].db==p[1].db );
58192
58193       /* This block is really an inlined version of sqlite3VdbeMemRelease()
58194       ** that takes advantage of the fact that the memory cell value is 
58195       ** being set to NULL after releasing any dynamic resources.
58196       **
58197       ** The justification for duplicating code is that according to 
58198       ** callgrind, this causes a certain test case to hit the CPU 4.7 
58199       ** percent less (x86 linux, gcc version 4.1.2, -O6) than if 
58200       ** sqlite3MemRelease() were called from here. With -O2, this jumps
58201       ** to 6.6 percent. The test case is inserting 1000 rows into a table 
58202       ** with no indexes using a single prepared INSERT statement, bind() 
58203       ** and reset(). Inserts are grouped into a transaction.
58204       */
58205       if( p->flags&(MEM_Agg|MEM_Dyn|MEM_Frame|MEM_RowSet) ){
58206         sqlite3VdbeMemRelease(p);
58207       }else if( p->zMalloc ){
58208         sqlite3DbFree(db, p->zMalloc);
58209         p->zMalloc = 0;
58210       }
58211
58212       p->flags = MEM_Null;
58213     }
58214     db->mallocFailed = malloc_failed;
58215   }
58216 }
58217
58218 /*
58219 ** Delete a VdbeFrame object and its contents. VdbeFrame objects are
58220 ** allocated by the OP_Program opcode in sqlite3VdbeExec().
58221 */
58222 SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame *p){
58223   int i;
58224   Mem *aMem = VdbeFrameMem(p);
58225   VdbeCursor **apCsr = (VdbeCursor **)&aMem[p->nChildMem];
58226   for(i=0; i<p->nChildCsr; i++){
58227     sqlite3VdbeFreeCursor(p->v, apCsr[i]);
58228   }
58229   releaseMemArray(aMem, p->nChildMem);
58230   sqlite3DbFree(p->v->db, p);
58231 }
58232
58233 #ifndef SQLITE_OMIT_EXPLAIN
58234 /*
58235 ** Give a listing of the program in the virtual machine.
58236 **
58237 ** The interface is the same as sqlite3VdbeExec().  But instead of
58238 ** running the code, it invokes the callback once for each instruction.
58239 ** This feature is used to implement "EXPLAIN".
58240 **
58241 ** When p->explain==1, each instruction is listed.  When
58242 ** p->explain==2, only OP_Explain instructions are listed and these
58243 ** are shown in a different format.  p->explain==2 is used to implement
58244 ** EXPLAIN QUERY PLAN.
58245 **
58246 ** When p->explain==1, first the main program is listed, then each of
58247 ** the trigger subprograms are listed one by one.
58248 */
58249 SQLITE_PRIVATE int sqlite3VdbeList(
58250   Vdbe *p                   /* The VDBE */
58251 ){
58252   int nRow;                            /* Stop when row count reaches this */
58253   int nSub = 0;                        /* Number of sub-vdbes seen so far */
58254   SubProgram **apSub = 0;              /* Array of sub-vdbes */
58255   Mem *pSub = 0;                       /* Memory cell hold array of subprogs */
58256   sqlite3 *db = p->db;                 /* The database connection */
58257   int i;                               /* Loop counter */
58258   int rc = SQLITE_OK;                  /* Return code */
58259   Mem *pMem = p->pResultSet = &p->aMem[1];  /* First Mem of result set */
58260
58261   assert( p->explain );
58262   assert( p->magic==VDBE_MAGIC_RUN );
58263   assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY || p->rc==SQLITE_NOMEM );
58264
58265   /* Even though this opcode does not use dynamic strings for
58266   ** the result, result columns may become dynamic if the user calls
58267   ** sqlite3_column_text16(), causing a translation to UTF-16 encoding.
58268   */
58269   releaseMemArray(pMem, 8);
58270
58271   if( p->rc==SQLITE_NOMEM ){
58272     /* This happens if a malloc() inside a call to sqlite3_column_text() or
58273     ** sqlite3_column_text16() failed.  */
58274     db->mallocFailed = 1;
58275     return SQLITE_ERROR;
58276   }
58277
58278   /* When the number of output rows reaches nRow, that means the
58279   ** listing has finished and sqlite3_step() should return SQLITE_DONE.
58280   ** nRow is the sum of the number of rows in the main program, plus
58281   ** the sum of the number of rows in all trigger subprograms encountered
58282   ** so far.  The nRow value will increase as new trigger subprograms are
58283   ** encountered, but p->pc will eventually catch up to nRow.
58284   */
58285   nRow = p->nOp;
58286   if( p->explain==1 ){
58287     /* The first 8 memory cells are used for the result set.  So we will
58288     ** commandeer the 9th cell to use as storage for an array of pointers
58289     ** to trigger subprograms.  The VDBE is guaranteed to have at least 9
58290     ** cells.  */
58291     assert( p->nMem>9 );
58292     pSub = &p->aMem[9];
58293     if( pSub->flags&MEM_Blob ){
58294       /* On the first call to sqlite3_step(), pSub will hold a NULL.  It is
58295       ** initialized to a BLOB by the P4_SUBPROGRAM processing logic below */
58296       nSub = pSub->n/sizeof(Vdbe*);
58297       apSub = (SubProgram **)pSub->z;
58298     }
58299     for(i=0; i<nSub; i++){
58300       nRow += apSub[i]->nOp;
58301     }
58302   }
58303
58304   do{
58305     i = p->pc++;
58306   }while( i<nRow && p->explain==2 && p->aOp[i].opcode!=OP_Explain );
58307   if( i>=nRow ){
58308     p->rc = SQLITE_OK;
58309     rc = SQLITE_DONE;
58310   }else if( db->u1.isInterrupted ){
58311     p->rc = SQLITE_INTERRUPT;
58312     rc = SQLITE_ERROR;
58313     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(p->rc));
58314   }else{
58315     char *z;
58316     Op *pOp;
58317     if( i<p->nOp ){
58318       /* The output line number is small enough that we are still in the
58319       ** main program. */
58320       pOp = &p->aOp[i];
58321     }else{
58322       /* We are currently listing subprograms.  Figure out which one and
58323       ** pick up the appropriate opcode. */
58324       int j;
58325       i -= p->nOp;
58326       for(j=0; i>=apSub[j]->nOp; j++){
58327         i -= apSub[j]->nOp;
58328       }
58329       pOp = &apSub[j]->aOp[i];
58330     }
58331     if( p->explain==1 ){
58332       pMem->flags = MEM_Int;
58333       pMem->type = SQLITE_INTEGER;
58334       pMem->u.i = i;                                /* Program counter */
58335       pMem++;
58336   
58337       pMem->flags = MEM_Static|MEM_Str|MEM_Term;
58338       pMem->z = (char*)sqlite3OpcodeName(pOp->opcode);  /* Opcode */
58339       assert( pMem->z!=0 );
58340       pMem->n = sqlite3Strlen30(pMem->z);
58341       pMem->type = SQLITE_TEXT;
58342       pMem->enc = SQLITE_UTF8;
58343       pMem++;
58344
58345       /* When an OP_Program opcode is encounter (the only opcode that has
58346       ** a P4_SUBPROGRAM argument), expand the size of the array of subprograms
58347       ** kept in p->aMem[9].z to hold the new program - assuming this subprogram
58348       ** has not already been seen.
58349       */
58350       if( pOp->p4type==P4_SUBPROGRAM ){
58351         int nByte = (nSub+1)*sizeof(SubProgram*);
58352         int j;
58353         for(j=0; j<nSub; j++){
58354           if( apSub[j]==pOp->p4.pProgram ) break;
58355         }
58356         if( j==nSub && SQLITE_OK==sqlite3VdbeMemGrow(pSub, nByte, 1) ){
58357           apSub = (SubProgram **)pSub->z;
58358           apSub[nSub++] = pOp->p4.pProgram;
58359           pSub->flags |= MEM_Blob;
58360           pSub->n = nSub*sizeof(SubProgram*);
58361         }
58362       }
58363     }
58364
58365     pMem->flags = MEM_Int;
58366     pMem->u.i = pOp->p1;                          /* P1 */
58367     pMem->type = SQLITE_INTEGER;
58368     pMem++;
58369
58370     pMem->flags = MEM_Int;
58371     pMem->u.i = pOp->p2;                          /* P2 */
58372     pMem->type = SQLITE_INTEGER;
58373     pMem++;
58374
58375     pMem->flags = MEM_Int;
58376     pMem->u.i = pOp->p3;                          /* P3 */
58377     pMem->type = SQLITE_INTEGER;
58378     pMem++;
58379
58380     if( sqlite3VdbeMemGrow(pMem, 32, 0) ){            /* P4 */
58381       assert( p->db->mallocFailed );
58382       return SQLITE_ERROR;
58383     }
58384     pMem->flags = MEM_Dyn|MEM_Str|MEM_Term;
58385     z = displayP4(pOp, pMem->z, 32);
58386     if( z!=pMem->z ){
58387       sqlite3VdbeMemSetStr(pMem, z, -1, SQLITE_UTF8, 0);
58388     }else{
58389       assert( pMem->z!=0 );
58390       pMem->n = sqlite3Strlen30(pMem->z);
58391       pMem->enc = SQLITE_UTF8;
58392     }
58393     pMem->type = SQLITE_TEXT;
58394     pMem++;
58395
58396     if( p->explain==1 ){
58397       if( sqlite3VdbeMemGrow(pMem, 4, 0) ){
58398         assert( p->db->mallocFailed );
58399         return SQLITE_ERROR;
58400       }
58401       pMem->flags = MEM_Dyn|MEM_Str|MEM_Term;
58402       pMem->n = 2;
58403       sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5);   /* P5 */
58404       pMem->type = SQLITE_TEXT;
58405       pMem->enc = SQLITE_UTF8;
58406       pMem++;
58407   
58408 #ifdef SQLITE_DEBUG
58409       if( pOp->zComment ){
58410         pMem->flags = MEM_Str|MEM_Term;
58411         pMem->z = pOp->zComment;
58412         pMem->n = sqlite3Strlen30(pMem->z);
58413         pMem->enc = SQLITE_UTF8;
58414         pMem->type = SQLITE_TEXT;
58415       }else
58416 #endif
58417       {
58418         pMem->flags = MEM_Null;                       /* Comment */
58419         pMem->type = SQLITE_NULL;
58420       }
58421     }
58422
58423     p->nResColumn = 8 - 4*(p->explain-1);
58424     p->rc = SQLITE_OK;
58425     rc = SQLITE_ROW;
58426   }
58427   return rc;
58428 }
58429 #endif /* SQLITE_OMIT_EXPLAIN */
58430
58431 #ifdef SQLITE_DEBUG
58432 /*
58433 ** Print the SQL that was used to generate a VDBE program.
58434 */
58435 SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe *p){
58436   int nOp = p->nOp;
58437   VdbeOp *pOp;
58438   if( nOp<1 ) return;
58439   pOp = &p->aOp[0];
58440   if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){
58441     const char *z = pOp->p4.z;
58442     while( sqlite3Isspace(*z) ) z++;
58443     printf("SQL: [%s]\n", z);
58444   }
58445 }
58446 #endif
58447
58448 #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
58449 /*
58450 ** Print an IOTRACE message showing SQL content.
58451 */
58452 SQLITE_PRIVATE void sqlite3VdbeIOTraceSql(Vdbe *p){
58453   int nOp = p->nOp;
58454   VdbeOp *pOp;
58455   if( sqlite3IoTrace==0 ) return;
58456   if( nOp<1 ) return;
58457   pOp = &p->aOp[0];
58458   if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){
58459     int i, j;
58460     char z[1000];
58461     sqlite3_snprintf(sizeof(z), z, "%s", pOp->p4.z);
58462     for(i=0; sqlite3Isspace(z[i]); i++){}
58463     for(j=0; z[i]; i++){
58464       if( sqlite3Isspace(z[i]) ){
58465         if( z[i-1]!=' ' ){
58466           z[j++] = ' ';
58467         }
58468       }else{
58469         z[j++] = z[i];
58470       }
58471     }
58472     z[j] = 0;
58473     sqlite3IoTrace("SQL %s\n", z);
58474   }
58475 }
58476 #endif /* !SQLITE_OMIT_TRACE && SQLITE_ENABLE_IOTRACE */
58477
58478 /*
58479 ** Allocate space from a fixed size buffer and return a pointer to
58480 ** that space.  If insufficient space is available, return NULL.
58481 **
58482 ** The pBuf parameter is the initial value of a pointer which will
58483 ** receive the new memory.  pBuf is normally NULL.  If pBuf is not
58484 ** NULL, it means that memory space has already been allocated and that
58485 ** this routine should not allocate any new memory.  When pBuf is not
58486 ** NULL simply return pBuf.  Only allocate new memory space when pBuf
58487 ** is NULL.
58488 **
58489 ** nByte is the number of bytes of space needed.
58490 **
58491 ** *ppFrom points to available space and pEnd points to the end of the
58492 ** available space.  When space is allocated, *ppFrom is advanced past
58493 ** the end of the allocated space.
58494 **
58495 ** *pnByte is a counter of the number of bytes of space that have failed
58496 ** to allocate.  If there is insufficient space in *ppFrom to satisfy the
58497 ** request, then increment *pnByte by the amount of the request.
58498 */
58499 static void *allocSpace(
58500   void *pBuf,          /* Where return pointer will be stored */
58501   int nByte,           /* Number of bytes to allocate */
58502   u8 **ppFrom,         /* IN/OUT: Allocate from *ppFrom */
58503   u8 *pEnd,            /* Pointer to 1 byte past the end of *ppFrom buffer */
58504   int *pnByte          /* If allocation cannot be made, increment *pnByte */
58505 ){
58506   assert( EIGHT_BYTE_ALIGNMENT(*ppFrom) );
58507   if( pBuf ) return pBuf;
58508   nByte = ROUND8(nByte);
58509   if( &(*ppFrom)[nByte] <= pEnd ){
58510     pBuf = (void*)*ppFrom;
58511     *ppFrom += nByte;
58512   }else{
58513     *pnByte += nByte;
58514   }
58515   return pBuf;
58516 }
58517
58518 /*
58519 ** Prepare a virtual machine for execution.  This involves things such
58520 ** as allocating stack space and initializing the program counter.
58521 ** After the VDBE has be prepped, it can be executed by one or more
58522 ** calls to sqlite3VdbeExec().  
58523 **
58524 ** This is the only way to move a VDBE from VDBE_MAGIC_INIT to
58525 ** VDBE_MAGIC_RUN.
58526 **
58527 ** This function may be called more than once on a single virtual machine.
58528 ** The first call is made while compiling the SQL statement. Subsequent
58529 ** calls are made as part of the process of resetting a statement to be
58530 ** re-executed (from a call to sqlite3_reset()). The nVar, nMem, nCursor 
58531 ** and isExplain parameters are only passed correct values the first time
58532 ** the function is called. On subsequent calls, from sqlite3_reset(), nVar
58533 ** is passed -1 and nMem, nCursor and isExplain are all passed zero.
58534 */
58535 SQLITE_PRIVATE void sqlite3VdbeMakeReady(
58536   Vdbe *p,                       /* The VDBE */
58537   int nVar,                      /* Number of '?' see in the SQL statement */
58538   int nMem,                      /* Number of memory cells to allocate */
58539   int nCursor,                   /* Number of cursors to allocate */
58540   int nArg,                      /* Maximum number of args in SubPrograms */
58541   int isExplain,                 /* True if the EXPLAIN keywords is present */
58542   int usesStmtJournal            /* True to set Vdbe.usesStmtJournal */
58543 ){
58544   int n;
58545   sqlite3 *db = p->db;
58546
58547   assert( p!=0 );
58548   assert( p->magic==VDBE_MAGIC_INIT );
58549
58550   /* There should be at least one opcode.
58551   */
58552   assert( p->nOp>0 );
58553
58554   /* Set the magic to VDBE_MAGIC_RUN sooner rather than later. */
58555   p->magic = VDBE_MAGIC_RUN;
58556
58557   /* For each cursor required, also allocate a memory cell. Memory
58558   ** cells (nMem+1-nCursor)..nMem, inclusive, will never be used by
58559   ** the vdbe program. Instead they are used to allocate space for
58560   ** VdbeCursor/BtCursor structures. The blob of memory associated with 
58561   ** cursor 0 is stored in memory cell nMem. Memory cell (nMem-1)
58562   ** stores the blob of memory associated with cursor 1, etc.
58563   **
58564   ** See also: allocateCursor().
58565   */
58566   nMem += nCursor;
58567
58568   /* Allocate space for memory registers, SQL variables, VDBE cursors and 
58569   ** an array to marshal SQL function arguments in. This is only done the
58570   ** first time this function is called for a given VDBE, not when it is
58571   ** being called from sqlite3_reset() to reset the virtual machine.
58572   */
58573   if( nVar>=0 && ALWAYS(db->mallocFailed==0) ){
58574     u8 *zCsr = (u8 *)&p->aOp[p->nOp];       /* Memory avaliable for alloation */
58575     u8 *zEnd = (u8 *)&p->aOp[p->nOpAlloc];  /* First byte past available mem */
58576     int nByte;                              /* How much extra memory needed */
58577
58578     resolveP2Values(p, &nArg);
58579     p->usesStmtJournal = (u8)usesStmtJournal;
58580     if( isExplain && nMem<10 ){
58581       nMem = 10;
58582     }
58583     memset(zCsr, 0, zEnd-zCsr);
58584     zCsr += (zCsr - (u8*)0)&7;
58585     assert( EIGHT_BYTE_ALIGNMENT(zCsr) );
58586
58587     /* Memory for registers, parameters, cursor, etc, is allocated in two
58588     ** passes.  On the first pass, we try to reuse unused space at the 
58589     ** end of the opcode array.  If we are unable to satisfy all memory
58590     ** requirements by reusing the opcode array tail, then the second
58591     ** pass will fill in the rest using a fresh allocation.  
58592     **
58593     ** This two-pass approach that reuses as much memory as possible from
58594     ** the leftover space at the end of the opcode array can significantly
58595     ** reduce the amount of memory held by a prepared statement.
58596     */
58597     do {
58598       nByte = 0;
58599       p->aMem = allocSpace(p->aMem, nMem*sizeof(Mem), &zCsr, zEnd, &nByte);
58600       p->aVar = allocSpace(p->aVar, nVar*sizeof(Mem), &zCsr, zEnd, &nByte);
58601       p->apArg = allocSpace(p->apArg, nArg*sizeof(Mem*), &zCsr, zEnd, &nByte);
58602       p->azVar = allocSpace(p->azVar, nVar*sizeof(char*), &zCsr, zEnd, &nByte);
58603       p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*),
58604                             &zCsr, zEnd, &nByte);
58605       if( nByte ){
58606         p->pFree = sqlite3DbMallocZero(db, nByte);
58607       }
58608       zCsr = p->pFree;
58609       zEnd = &zCsr[nByte];
58610     }while( nByte && !db->mallocFailed );
58611
58612     p->nCursor = (u16)nCursor;
58613     if( p->aVar ){
58614       p->nVar = (ynVar)nVar;
58615       for(n=0; n<nVar; n++){
58616         p->aVar[n].flags = MEM_Null;
58617         p->aVar[n].db = db;
58618       }
58619     }
58620     if( p->aMem ){
58621       p->aMem--;                      /* aMem[] goes from 1..nMem */
58622       p->nMem = nMem;                 /*       not from 0..nMem-1 */
58623       for(n=1; n<=nMem; n++){
58624         p->aMem[n].flags = MEM_Null;
58625         p->aMem[n].db = db;
58626       }
58627     }
58628   }
58629 #ifdef SQLITE_DEBUG
58630   for(n=1; n<p->nMem; n++){
58631     assert( p->aMem[n].db==db );
58632   }
58633 #endif
58634
58635   p->pc = -1;
58636   p->rc = SQLITE_OK;
58637   p->errorAction = OE_Abort;
58638   p->explain |= isExplain;
58639   p->magic = VDBE_MAGIC_RUN;
58640   p->nChange = 0;
58641   p->cacheCtr = 1;
58642   p->minWriteFileFormat = 255;
58643   p->iStatement = 0;
58644   p->nFkConstraint = 0;
58645 #ifdef VDBE_PROFILE
58646   {
58647     int i;
58648     for(i=0; i<p->nOp; i++){
58649       p->aOp[i].cnt = 0;
58650       p->aOp[i].cycles = 0;
58651     }
58652   }
58653 #endif
58654 }
58655
58656 /*
58657 ** Close a VDBE cursor and release all the resources that cursor 
58658 ** happens to hold.
58659 */
58660 SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){
58661   if( pCx==0 ){
58662     return;
58663   }
58664   if( pCx->pBt ){
58665     sqlite3BtreeClose(pCx->pBt);
58666     /* The pCx->pCursor will be close automatically, if it exists, by
58667     ** the call above. */
58668   }else if( pCx->pCursor ){
58669     sqlite3BtreeCloseCursor(pCx->pCursor);
58670   }
58671 #ifndef SQLITE_OMIT_VIRTUALTABLE
58672   if( pCx->pVtabCursor ){
58673     sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor;
58674     const sqlite3_module *pModule = pCx->pModule;
58675     p->inVtabMethod = 1;
58676     pModule->xClose(pVtabCursor);
58677     p->inVtabMethod = 0;
58678   }
58679 #endif
58680 }
58681
58682 /*
58683 ** Copy the values stored in the VdbeFrame structure to its Vdbe. This
58684 ** is used, for example, when a trigger sub-program is halted to restore
58685 ** control to the main program.
58686 */
58687 SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
58688   Vdbe *v = pFrame->v;
58689   v->aOp = pFrame->aOp;
58690   v->nOp = pFrame->nOp;
58691   v->aMem = pFrame->aMem;
58692   v->nMem = pFrame->nMem;
58693   v->apCsr = pFrame->apCsr;
58694   v->nCursor = pFrame->nCursor;
58695   v->db->lastRowid = pFrame->lastRowid;
58696   v->nChange = pFrame->nChange;
58697   return pFrame->pc;
58698 }
58699
58700 /*
58701 ** Close all cursors.
58702 **
58703 ** Also release any dynamic memory held by the VM in the Vdbe.aMem memory 
58704 ** cell array. This is necessary as the memory cell array may contain
58705 ** pointers to VdbeFrame objects, which may in turn contain pointers to
58706 ** open cursors.
58707 */
58708 static void closeAllCursors(Vdbe *p){
58709   if( p->pFrame ){
58710     VdbeFrame *pFrame;
58711     for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent);
58712     sqlite3VdbeFrameRestore(pFrame);
58713   }
58714   p->pFrame = 0;
58715   p->nFrame = 0;
58716
58717   if( p->apCsr ){
58718     int i;
58719     for(i=0; i<p->nCursor; i++){
58720       VdbeCursor *pC = p->apCsr[i];
58721       if( pC ){
58722         sqlite3VdbeFreeCursor(p, pC);
58723         p->apCsr[i] = 0;
58724       }
58725     }
58726   }
58727   if( p->aMem ){
58728     releaseMemArray(&p->aMem[1], p->nMem);
58729   }
58730   while( p->pDelFrame ){
58731     VdbeFrame *pDel = p->pDelFrame;
58732     p->pDelFrame = pDel->pParent;
58733     sqlite3VdbeFrameDelete(pDel);
58734   }
58735 }
58736
58737 /*
58738 ** Clean up the VM after execution.
58739 **
58740 ** This routine will automatically close any cursors, lists, and/or
58741 ** sorters that were left open.  It also deletes the values of
58742 ** variables in the aVar[] array.
58743 */
58744 static void Cleanup(Vdbe *p){
58745   sqlite3 *db = p->db;
58746
58747 #ifdef SQLITE_DEBUG
58748   /* Execute assert() statements to ensure that the Vdbe.apCsr[] and 
58749   ** Vdbe.aMem[] arrays have already been cleaned up.  */
58750   int i;
58751   for(i=0; i<p->nCursor; i++) assert( p->apCsr==0 || p->apCsr[i]==0 );
58752   for(i=1; i<=p->nMem; i++) assert( p->aMem==0 || p->aMem[i].flags==MEM_Null );
58753 #endif
58754
58755   sqlite3DbFree(db, p->zErrMsg);
58756   p->zErrMsg = 0;
58757   p->pResultSet = 0;
58758 }
58759
58760 /*
58761 ** Set the number of result columns that will be returned by this SQL
58762 ** statement. This is now set at compile time, rather than during
58763 ** execution of the vdbe program so that sqlite3_column_count() can
58764 ** be called on an SQL statement before sqlite3_step().
58765 */
58766 SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){
58767   Mem *pColName;
58768   int n;
58769   sqlite3 *db = p->db;
58770
58771   releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
58772   sqlite3DbFree(db, p->aColName);
58773   n = nResColumn*COLNAME_N;
58774   p->nResColumn = (u16)nResColumn;
58775   p->aColName = pColName = (Mem*)sqlite3DbMallocZero(db, sizeof(Mem)*n );
58776   if( p->aColName==0 ) return;
58777   while( n-- > 0 ){
58778     pColName->flags = MEM_Null;
58779     pColName->db = p->db;
58780     pColName++;
58781   }
58782 }
58783
58784 /*
58785 ** Set the name of the idx'th column to be returned by the SQL statement.
58786 ** zName must be a pointer to a nul terminated string.
58787 **
58788 ** This call must be made after a call to sqlite3VdbeSetNumCols().
58789 **
58790 ** The final parameter, xDel, must be one of SQLITE_DYNAMIC, SQLITE_STATIC
58791 ** or SQLITE_TRANSIENT. If it is SQLITE_DYNAMIC, then the buffer pointed
58792 ** to by zName will be freed by sqlite3DbFree() when the vdbe is destroyed.
58793 */
58794 SQLITE_PRIVATE int sqlite3VdbeSetColName(
58795   Vdbe *p,                         /* Vdbe being configured */
58796   int idx,                         /* Index of column zName applies to */
58797   int var,                         /* One of the COLNAME_* constants */
58798   const char *zName,               /* Pointer to buffer containing name */
58799   void (*xDel)(void*)              /* Memory management strategy for zName */
58800 ){
58801   int rc;
58802   Mem *pColName;
58803   assert( idx<p->nResColumn );
58804   assert( var<COLNAME_N );
58805   if( p->db->mallocFailed ){
58806     assert( !zName || xDel!=SQLITE_DYNAMIC );
58807     return SQLITE_NOMEM;
58808   }
58809   assert( p->aColName!=0 );
58810   pColName = &(p->aColName[idx+var*p->nResColumn]);
58811   rc = sqlite3VdbeMemSetStr(pColName, zName, -1, SQLITE_UTF8, xDel);
58812   assert( rc!=0 || !zName || (pColName->flags&MEM_Term)!=0 );
58813   return rc;
58814 }
58815
58816 /*
58817 ** A read or write transaction may or may not be active on database handle
58818 ** db. If a transaction is active, commit it. If there is a
58819 ** write-transaction spanning more than one database file, this routine
58820 ** takes care of the master journal trickery.
58821 */
58822 static int vdbeCommit(sqlite3 *db, Vdbe *p){
58823   int i;
58824   int nTrans = 0;  /* Number of databases with an active write-transaction */
58825   int rc = SQLITE_OK;
58826   int needXcommit = 0;
58827
58828 #ifdef SQLITE_OMIT_VIRTUALTABLE
58829   /* With this option, sqlite3VtabSync() is defined to be simply 
58830   ** SQLITE_OK so p is not used. 
58831   */
58832   UNUSED_PARAMETER(p);
58833 #endif
58834
58835   /* Before doing anything else, call the xSync() callback for any
58836   ** virtual module tables written in this transaction. This has to
58837   ** be done before determining whether a master journal file is 
58838   ** required, as an xSync() callback may add an attached database
58839   ** to the transaction.
58840   */
58841   rc = sqlite3VtabSync(db, &p->zErrMsg);
58842
58843   /* This loop determines (a) if the commit hook should be invoked and
58844   ** (b) how many database files have open write transactions, not 
58845   ** including the temp database. (b) is important because if more than 
58846   ** one database file has an open write transaction, a master journal
58847   ** file is required for an atomic commit.
58848   */ 
58849   for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ 
58850     Btree *pBt = db->aDb[i].pBt;
58851     if( sqlite3BtreeIsInTrans(pBt) ){
58852       needXcommit = 1;
58853       if( i!=1 ) nTrans++;
58854       rc = sqlite3PagerExclusiveLock(sqlite3BtreePager(pBt));
58855     }
58856   }
58857   if( rc!=SQLITE_OK ){
58858     return rc;
58859   }
58860
58861   /* If there are any write-transactions at all, invoke the commit hook */
58862   if( needXcommit && db->xCommitCallback ){
58863     rc = db->xCommitCallback(db->pCommitArg);
58864     if( rc ){
58865       return SQLITE_CONSTRAINT;
58866     }
58867   }
58868
58869   /* The simple case - no more than one database file (not counting the
58870   ** TEMP database) has a transaction active.   There is no need for the
58871   ** master-journal.
58872   **
58873   ** If the return value of sqlite3BtreeGetFilename() is a zero length
58874   ** string, it means the main database is :memory: or a temp file.  In 
58875   ** that case we do not support atomic multi-file commits, so use the 
58876   ** simple case then too.
58877   */
58878   if( 0==sqlite3Strlen30(sqlite3BtreeGetFilename(db->aDb[0].pBt))
58879    || nTrans<=1
58880   ){
58881     for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
58882       Btree *pBt = db->aDb[i].pBt;
58883       if( pBt ){
58884         rc = sqlite3BtreeCommitPhaseOne(pBt, 0);
58885       }
58886     }
58887
58888     /* Do the commit only if all databases successfully complete phase 1. 
58889     ** If one of the BtreeCommitPhaseOne() calls fails, this indicates an
58890     ** IO error while deleting or truncating a journal file. It is unlikely,
58891     ** but could happen. In this case abandon processing and return the error.
58892     */
58893     for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
58894       Btree *pBt = db->aDb[i].pBt;
58895       if( pBt ){
58896         rc = sqlite3BtreeCommitPhaseTwo(pBt, 0);
58897       }
58898     }
58899     if( rc==SQLITE_OK ){
58900       sqlite3VtabCommit(db);
58901     }
58902   }
58903
58904   /* The complex case - There is a multi-file write-transaction active.
58905   ** This requires a master journal file to ensure the transaction is
58906   ** committed atomicly.
58907   */
58908 #ifndef SQLITE_OMIT_DISKIO
58909   else{
58910     sqlite3_vfs *pVfs = db->pVfs;
58911     int needSync = 0;
58912     char *zMaster = 0;   /* File-name for the master journal */
58913     char const *zMainFile = sqlite3BtreeGetFilename(db->aDb[0].pBt);
58914     sqlite3_file *pMaster = 0;
58915     i64 offset = 0;
58916     int res;
58917
58918     /* Select a master journal file name */
58919     do {
58920       u32 iRandom;
58921       sqlite3DbFree(db, zMaster);
58922       sqlite3_randomness(sizeof(iRandom), &iRandom);
58923       zMaster = sqlite3MPrintf(db, "%s-mj%08X", zMainFile, iRandom&0x7fffffff);
58924       if( !zMaster ){
58925         return SQLITE_NOMEM;
58926       }
58927       rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res);
58928     }while( rc==SQLITE_OK && res );
58929     if( rc==SQLITE_OK ){
58930       /* Open the master journal. */
58931       rc = sqlite3OsOpenMalloc(pVfs, zMaster, &pMaster, 
58932           SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|
58933           SQLITE_OPEN_EXCLUSIVE|SQLITE_OPEN_MASTER_JOURNAL, 0
58934       );
58935     }
58936     if( rc!=SQLITE_OK ){
58937       sqlite3DbFree(db, zMaster);
58938       return rc;
58939     }
58940  
58941     /* Write the name of each database file in the transaction into the new
58942     ** master journal file. If an error occurs at this point close
58943     ** and delete the master journal file. All the individual journal files
58944     ** still have 'null' as the master journal pointer, so they will roll
58945     ** back independently if a failure occurs.
58946     */
58947     for(i=0; i<db->nDb; i++){
58948       Btree *pBt = db->aDb[i].pBt;
58949       if( sqlite3BtreeIsInTrans(pBt) ){
58950         char const *zFile = sqlite3BtreeGetJournalname(pBt);
58951         if( zFile==0 ){
58952           continue;  /* Ignore TEMP and :memory: databases */
58953         }
58954         assert( zFile[0]!=0 );
58955         if( !needSync && !sqlite3BtreeSyncDisabled(pBt) ){
58956           needSync = 1;
58957         }
58958         rc = sqlite3OsWrite(pMaster, zFile, sqlite3Strlen30(zFile)+1, offset);
58959         offset += sqlite3Strlen30(zFile)+1;
58960         if( rc!=SQLITE_OK ){
58961           sqlite3OsCloseFree(pMaster);
58962           sqlite3OsDelete(pVfs, zMaster, 0);
58963           sqlite3DbFree(db, zMaster);
58964           return rc;
58965         }
58966       }
58967     }
58968
58969     /* Sync the master journal file. If the IOCAP_SEQUENTIAL device
58970     ** flag is set this is not required.
58971     */
58972     if( needSync 
58973      && 0==(sqlite3OsDeviceCharacteristics(pMaster)&SQLITE_IOCAP_SEQUENTIAL)
58974      && SQLITE_OK!=(rc = sqlite3OsSync(pMaster, SQLITE_SYNC_NORMAL))
58975     ){
58976       sqlite3OsCloseFree(pMaster);
58977       sqlite3OsDelete(pVfs, zMaster, 0);
58978       sqlite3DbFree(db, zMaster);
58979       return rc;
58980     }
58981
58982     /* Sync all the db files involved in the transaction. The same call
58983     ** sets the master journal pointer in each individual journal. If
58984     ** an error occurs here, do not delete the master journal file.
58985     **
58986     ** If the error occurs during the first call to
58987     ** sqlite3BtreeCommitPhaseOne(), then there is a chance that the
58988     ** master journal file will be orphaned. But we cannot delete it,
58989     ** in case the master journal file name was written into the journal
58990     ** file before the failure occurred.
58991     */
58992     for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ 
58993       Btree *pBt = db->aDb[i].pBt;
58994       if( pBt ){
58995         rc = sqlite3BtreeCommitPhaseOne(pBt, zMaster);
58996       }
58997     }
58998     sqlite3OsCloseFree(pMaster);
58999     assert( rc!=SQLITE_BUSY );
59000     if( rc!=SQLITE_OK ){
59001       sqlite3DbFree(db, zMaster);
59002       return rc;
59003     }
59004
59005     /* Delete the master journal file. This commits the transaction. After
59006     ** doing this the directory is synced again before any individual
59007     ** transaction files are deleted.
59008     */
59009     rc = sqlite3OsDelete(pVfs, zMaster, 1);
59010     sqlite3DbFree(db, zMaster);
59011     zMaster = 0;
59012     if( rc ){
59013       return rc;
59014     }
59015
59016     /* All files and directories have already been synced, so the following
59017     ** calls to sqlite3BtreeCommitPhaseTwo() are only closing files and
59018     ** deleting or truncating journals. If something goes wrong while
59019     ** this is happening we don't really care. The integrity of the
59020     ** transaction is already guaranteed, but some stray 'cold' journals
59021     ** may be lying around. Returning an error code won't help matters.
59022     */
59023     disable_simulated_io_errors();
59024     sqlite3BeginBenignMalloc();
59025     for(i=0; i<db->nDb; i++){ 
59026       Btree *pBt = db->aDb[i].pBt;
59027       if( pBt ){
59028         sqlite3BtreeCommitPhaseTwo(pBt, 1);
59029       }
59030     }
59031     sqlite3EndBenignMalloc();
59032     enable_simulated_io_errors();
59033
59034     sqlite3VtabCommit(db);
59035   }
59036 #endif
59037
59038   return rc;
59039 }
59040
59041 /* 
59042 ** This routine checks that the sqlite3.activeVdbeCnt count variable
59043 ** matches the number of vdbe's in the list sqlite3.pVdbe that are
59044 ** currently active. An assertion fails if the two counts do not match.
59045 ** This is an internal self-check only - it is not an essential processing
59046 ** step.
59047 **
59048 ** This is a no-op if NDEBUG is defined.
59049 */
59050 #ifndef NDEBUG
59051 static void checkActiveVdbeCnt(sqlite3 *db){
59052   Vdbe *p;
59053   int cnt = 0;
59054   int nWrite = 0;
59055   p = db->pVdbe;
59056   while( p ){
59057     if( p->magic==VDBE_MAGIC_RUN && p->pc>=0 ){
59058       cnt++;
59059       if( p->readOnly==0 ) nWrite++;
59060     }
59061     p = p->pNext;
59062   }
59063   assert( cnt==db->activeVdbeCnt );
59064   assert( nWrite==db->writeVdbeCnt );
59065 }
59066 #else
59067 #define checkActiveVdbeCnt(x)
59068 #endif
59069
59070 /*
59071 ** For every Btree that in database connection db which 
59072 ** has been modified, "trip" or invalidate each cursor in
59073 ** that Btree might have been modified so that the cursor
59074 ** can never be used again.  This happens when a rollback
59075 *** occurs.  We have to trip all the other cursors, even
59076 ** cursor from other VMs in different database connections,
59077 ** so that none of them try to use the data at which they
59078 ** were pointing and which now may have been changed due
59079 ** to the rollback.
59080 **
59081 ** Remember that a rollback can delete tables complete and
59082 ** reorder rootpages.  So it is not sufficient just to save
59083 ** the state of the cursor.  We have to invalidate the cursor
59084 ** so that it is never used again.
59085 */
59086 static void invalidateCursorsOnModifiedBtrees(sqlite3 *db){
59087   int i;
59088   for(i=0; i<db->nDb; i++){
59089     Btree *p = db->aDb[i].pBt;
59090     if( p && sqlite3BtreeIsInTrans(p) ){
59091       sqlite3BtreeTripAllCursors(p, SQLITE_ABORT);
59092     }
59093   }
59094 }
59095
59096 /*
59097 ** If the Vdbe passed as the first argument opened a statement-transaction,
59098 ** close it now. Argument eOp must be either SAVEPOINT_ROLLBACK or
59099 ** SAVEPOINT_RELEASE. If it is SAVEPOINT_ROLLBACK, then the statement
59100 ** transaction is rolled back. If eOp is SAVEPOINT_RELEASE, then the 
59101 ** statement transaction is commtted.
59102 **
59103 ** If an IO error occurs, an SQLITE_IOERR_XXX error code is returned. 
59104 ** Otherwise SQLITE_OK.
59105 */
59106 SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){
59107   sqlite3 *const db = p->db;
59108   int rc = SQLITE_OK;
59109
59110   /* If p->iStatement is greater than zero, then this Vdbe opened a 
59111   ** statement transaction that should be closed here. The only exception
59112   ** is that an IO error may have occured, causing an emergency rollback.
59113   ** In this case (db->nStatement==0), and there is nothing to do.
59114   */
59115   if( db->nStatement && p->iStatement ){
59116     int i;
59117     const int iSavepoint = p->iStatement-1;
59118
59119     assert( eOp==SAVEPOINT_ROLLBACK || eOp==SAVEPOINT_RELEASE);
59120     assert( db->nStatement>0 );
59121     assert( p->iStatement==(db->nStatement+db->nSavepoint) );
59122
59123     for(i=0; i<db->nDb; i++){ 
59124       int rc2 = SQLITE_OK;
59125       Btree *pBt = db->aDb[i].pBt;
59126       if( pBt ){
59127         if( eOp==SAVEPOINT_ROLLBACK ){
59128           rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_ROLLBACK, iSavepoint);
59129         }
59130         if( rc2==SQLITE_OK ){
59131           rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_RELEASE, iSavepoint);
59132         }
59133         if( rc==SQLITE_OK ){
59134           rc = rc2;
59135         }
59136       }
59137     }
59138     db->nStatement--;
59139     p->iStatement = 0;
59140
59141     /* If the statement transaction is being rolled back, also restore the 
59142     ** database handles deferred constraint counter to the value it had when 
59143     ** the statement transaction was opened.  */
59144     if( eOp==SAVEPOINT_ROLLBACK ){
59145       db->nDeferredCons = p->nStmtDefCons;
59146     }
59147   }
59148   return rc;
59149 }
59150
59151 /*
59152 ** This function is called when a transaction opened by the database 
59153 ** handle associated with the VM passed as an argument is about to be 
59154 ** committed. If there are outstanding deferred foreign key constraint
59155 ** violations, return SQLITE_ERROR. Otherwise, SQLITE_OK.
59156 **
59157 ** If there are outstanding FK violations and this function returns 
59158 ** SQLITE_ERROR, set the result of the VM to SQLITE_CONSTRAINT and write
59159 ** an error message to it. Then return SQLITE_ERROR.
59160 */
59161 #ifndef SQLITE_OMIT_FOREIGN_KEY
59162 SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *p, int deferred){
59163   sqlite3 *db = p->db;
59164   if( (deferred && db->nDeferredCons>0) || (!deferred && p->nFkConstraint>0) ){
59165     p->rc = SQLITE_CONSTRAINT;
59166     p->errorAction = OE_Abort;
59167     sqlite3SetString(&p->zErrMsg, db, "foreign key constraint failed");
59168     return SQLITE_ERROR;
59169   }
59170   return SQLITE_OK;
59171 }
59172 #endif
59173
59174 /*
59175 ** This routine is called the when a VDBE tries to halt.  If the VDBE
59176 ** has made changes and is in autocommit mode, then commit those
59177 ** changes.  If a rollback is needed, then do the rollback.
59178 **
59179 ** This routine is the only way to move the state of a VM from
59180 ** SQLITE_MAGIC_RUN to SQLITE_MAGIC_HALT.  It is harmless to
59181 ** call this on a VM that is in the SQLITE_MAGIC_HALT state.
59182 **
59183 ** Return an error code.  If the commit could not complete because of
59184 ** lock contention, return SQLITE_BUSY.  If SQLITE_BUSY is returned, it
59185 ** means the close did not happen and needs to be repeated.
59186 */
59187 SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){
59188   int rc;                         /* Used to store transient return codes */
59189   sqlite3 *db = p->db;
59190
59191   /* This function contains the logic that determines if a statement or
59192   ** transaction will be committed or rolled back as a result of the
59193   ** execution of this virtual machine. 
59194   **
59195   ** If any of the following errors occur:
59196   **
59197   **     SQLITE_NOMEM
59198   **     SQLITE_IOERR
59199   **     SQLITE_FULL
59200   **     SQLITE_INTERRUPT
59201   **
59202   ** Then the internal cache might have been left in an inconsistent
59203   ** state.  We need to rollback the statement transaction, if there is
59204   ** one, or the complete transaction if there is no statement transaction.
59205   */
59206
59207   if( p->db->mallocFailed ){
59208     p->rc = SQLITE_NOMEM;
59209   }
59210   closeAllCursors(p);
59211   if( p->magic!=VDBE_MAGIC_RUN ){
59212     return SQLITE_OK;
59213   }
59214   checkActiveVdbeCnt(db);
59215
59216   /* No commit or rollback needed if the program never started */
59217   if( p->pc>=0 ){
59218     int mrc;   /* Primary error code from p->rc */
59219     int eStatementOp = 0;
59220     int isSpecialError;            /* Set to true if a 'special' error */
59221
59222     /* Lock all btrees used by the statement */
59223     sqlite3VdbeEnter(p);
59224
59225     /* Check for one of the special errors */
59226     mrc = p->rc & 0xff;
59227     assert( p->rc!=SQLITE_IOERR_BLOCKED );  /* This error no longer exists */
59228     isSpecialError = mrc==SQLITE_NOMEM || mrc==SQLITE_IOERR
59229                      || mrc==SQLITE_INTERRUPT || mrc==SQLITE_FULL;
59230     if( isSpecialError ){
59231       /* If the query was read-only and the error code is SQLITE_INTERRUPT, 
59232       ** no rollback is necessary. Otherwise, at least a savepoint 
59233       ** transaction must be rolled back to restore the database to a 
59234       ** consistent state.
59235       **
59236       ** Even if the statement is read-only, it is important to perform
59237       ** a statement or transaction rollback operation. If the error 
59238       ** occured while writing to the journal, sub-journal or database
59239       ** file as part of an effort to free up cache space (see function
59240       ** pagerStress() in pager.c), the rollback is required to restore 
59241       ** the pager to a consistent state.
59242       */
59243       if( !p->readOnly || mrc!=SQLITE_INTERRUPT ){
59244         if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) && p->usesStmtJournal ){
59245           eStatementOp = SAVEPOINT_ROLLBACK;
59246         }else{
59247           /* We are forced to roll back the active transaction. Before doing
59248           ** so, abort any other statements this handle currently has active.
59249           */
59250           invalidateCursorsOnModifiedBtrees(db);
59251           sqlite3RollbackAll(db);
59252           sqlite3CloseSavepoints(db);
59253           db->autoCommit = 1;
59254         }
59255       }
59256     }
59257
59258     /* Check for immediate foreign key violations. */
59259     if( p->rc==SQLITE_OK ){
59260       sqlite3VdbeCheckFk(p, 0);
59261     }
59262   
59263     /* If the auto-commit flag is set and this is the only active writer 
59264     ** VM, then we do either a commit or rollback of the current transaction. 
59265     **
59266     ** Note: This block also runs if one of the special errors handled 
59267     ** above has occurred. 
59268     */
59269     if( !sqlite3VtabInSync(db) 
59270      && db->autoCommit 
59271      && db->writeVdbeCnt==(p->readOnly==0) 
59272     ){
59273       if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){
59274         rc = sqlite3VdbeCheckFk(p, 1);
59275         if( rc!=SQLITE_OK ){
59276           if( NEVER(p->readOnly) ){
59277             sqlite3VdbeLeave(p);
59278             return SQLITE_ERROR;
59279           }
59280           rc = SQLITE_CONSTRAINT;
59281         }else{ 
59282           /* The auto-commit flag is true, the vdbe program was successful 
59283           ** or hit an 'OR FAIL' constraint and there are no deferred foreign
59284           ** key constraints to hold up the transaction. This means a commit 
59285           ** is required. */
59286           rc = vdbeCommit(db, p);
59287         }
59288         if( rc==SQLITE_BUSY && p->readOnly ){
59289           sqlite3VdbeLeave(p);
59290           return SQLITE_BUSY;
59291         }else if( rc!=SQLITE_OK ){
59292           p->rc = rc;
59293           sqlite3RollbackAll(db);
59294         }else{
59295           db->nDeferredCons = 0;
59296           sqlite3CommitInternalChanges(db);
59297         }
59298       }else{
59299         sqlite3RollbackAll(db);
59300       }
59301       db->nStatement = 0;
59302     }else if( eStatementOp==0 ){
59303       if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){
59304         eStatementOp = SAVEPOINT_RELEASE;
59305       }else if( p->errorAction==OE_Abort ){
59306         eStatementOp = SAVEPOINT_ROLLBACK;
59307       }else{
59308         invalidateCursorsOnModifiedBtrees(db);
59309         sqlite3RollbackAll(db);
59310         sqlite3CloseSavepoints(db);
59311         db->autoCommit = 1;
59312       }
59313     }
59314   
59315     /* If eStatementOp is non-zero, then a statement transaction needs to
59316     ** be committed or rolled back. Call sqlite3VdbeCloseStatement() to
59317     ** do so. If this operation returns an error, and the current statement
59318     ** error code is SQLITE_OK or SQLITE_CONSTRAINT, then promote the
59319     ** current statement error code.
59320     **
59321     ** Note that sqlite3VdbeCloseStatement() can only fail if eStatementOp
59322     ** is SAVEPOINT_ROLLBACK.  But if p->rc==SQLITE_OK then eStatementOp
59323     ** must be SAVEPOINT_RELEASE.  Hence the NEVER(p->rc==SQLITE_OK) in 
59324     ** the following code.
59325     */
59326     if( eStatementOp ){
59327       rc = sqlite3VdbeCloseStatement(p, eStatementOp);
59328       if( rc ){
59329         assert( eStatementOp==SAVEPOINT_ROLLBACK );
59330         if( NEVER(p->rc==SQLITE_OK) || p->rc==SQLITE_CONSTRAINT ){
59331           p->rc = rc;
59332           sqlite3DbFree(db, p->zErrMsg);
59333           p->zErrMsg = 0;
59334         }
59335         invalidateCursorsOnModifiedBtrees(db);
59336         sqlite3RollbackAll(db);
59337         sqlite3CloseSavepoints(db);
59338         db->autoCommit = 1;
59339       }
59340     }
59341   
59342     /* If this was an INSERT, UPDATE or DELETE and no statement transaction
59343     ** has been rolled back, update the database connection change-counter. 
59344     */
59345     if( p->changeCntOn ){
59346       if( eStatementOp!=SAVEPOINT_ROLLBACK ){
59347         sqlite3VdbeSetChanges(db, p->nChange);
59348       }else{
59349         sqlite3VdbeSetChanges(db, 0);
59350       }
59351       p->nChange = 0;
59352     }
59353   
59354     /* Rollback or commit any schema changes that occurred. */
59355     if( p->rc!=SQLITE_OK && db->flags&SQLITE_InternChanges ){
59356       sqlite3ResetInternalSchema(db, -1);
59357       db->flags = (db->flags | SQLITE_InternChanges);
59358     }
59359
59360     /* Release the locks */
59361     sqlite3VdbeLeave(p);
59362   }
59363
59364   /* We have successfully halted and closed the VM.  Record this fact. */
59365   if( p->pc>=0 ){
59366     db->activeVdbeCnt--;
59367     if( !p->readOnly ){
59368       db->writeVdbeCnt--;
59369     }
59370     assert( db->activeVdbeCnt>=db->writeVdbeCnt );
59371   }
59372   p->magic = VDBE_MAGIC_HALT;
59373   checkActiveVdbeCnt(db);
59374   if( p->db->mallocFailed ){
59375     p->rc = SQLITE_NOMEM;
59376   }
59377
59378   /* If the auto-commit flag is set to true, then any locks that were held
59379   ** by connection db have now been released. Call sqlite3ConnectionUnlocked() 
59380   ** to invoke any required unlock-notify callbacks.
59381   */
59382   if( db->autoCommit ){
59383     sqlite3ConnectionUnlocked(db);
59384   }
59385
59386   assert( db->activeVdbeCnt>0 || db->autoCommit==0 || db->nStatement==0 );
59387   return (p->rc==SQLITE_BUSY ? SQLITE_BUSY : SQLITE_OK);
59388 }
59389
59390
59391 /*
59392 ** Each VDBE holds the result of the most recent sqlite3_step() call
59393 ** in p->rc.  This routine sets that result back to SQLITE_OK.
59394 */
59395 SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe *p){
59396   p->rc = SQLITE_OK;
59397 }
59398
59399 /*
59400 ** Clean up a VDBE after execution but do not delete the VDBE just yet.
59401 ** Write any error messages into *pzErrMsg.  Return the result code.
59402 **
59403 ** After this routine is run, the VDBE should be ready to be executed
59404 ** again.
59405 **
59406 ** To look at it another way, this routine resets the state of the
59407 ** virtual machine from VDBE_MAGIC_RUN or VDBE_MAGIC_HALT back to
59408 ** VDBE_MAGIC_INIT.
59409 */
59410 SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
59411   sqlite3 *db;
59412   db = p->db;
59413
59414   /* If the VM did not run to completion or if it encountered an
59415   ** error, then it might not have been halted properly.  So halt
59416   ** it now.
59417   */
59418   sqlite3VdbeHalt(p);
59419
59420   /* If the VDBE has be run even partially, then transfer the error code
59421   ** and error message from the VDBE into the main database structure.  But
59422   ** if the VDBE has just been set to run but has not actually executed any
59423   ** instructions yet, leave the main database error information unchanged.
59424   */
59425   if( p->pc>=0 ){
59426     if( p->zErrMsg ){
59427       sqlite3BeginBenignMalloc();
59428       sqlite3ValueSetStr(db->pErr,-1,p->zErrMsg,SQLITE_UTF8,SQLITE_TRANSIENT);
59429       sqlite3EndBenignMalloc();
59430       db->errCode = p->rc;
59431       sqlite3DbFree(db, p->zErrMsg);
59432       p->zErrMsg = 0;
59433     }else if( p->rc ){
59434       sqlite3Error(db, p->rc, 0);
59435     }else{
59436       sqlite3Error(db, SQLITE_OK, 0);
59437     }
59438     if( p->runOnlyOnce ) p->expired = 1;
59439   }else if( p->rc && p->expired ){
59440     /* The expired flag was set on the VDBE before the first call
59441     ** to sqlite3_step(). For consistency (since sqlite3_step() was
59442     ** called), set the database error in this case as well.
59443     */
59444     sqlite3Error(db, p->rc, 0);
59445     sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT);
59446     sqlite3DbFree(db, p->zErrMsg);
59447     p->zErrMsg = 0;
59448   }
59449
59450   /* Reclaim all memory used by the VDBE
59451   */
59452   Cleanup(p);
59453
59454   /* Save profiling information from this VDBE run.
59455   */
59456 #ifdef VDBE_PROFILE
59457   {
59458     FILE *out = fopen("vdbe_profile.out", "a");
59459     if( out ){
59460       int i;
59461       fprintf(out, "---- ");
59462       for(i=0; i<p->nOp; i++){
59463         fprintf(out, "%02x", p->aOp[i].opcode);
59464       }
59465       fprintf(out, "\n");
59466       for(i=0; i<p->nOp; i++){
59467         fprintf(out, "%6d %10lld %8lld ",
59468            p->aOp[i].cnt,
59469            p->aOp[i].cycles,
59470            p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0
59471         );
59472         sqlite3VdbePrintOp(out, i, &p->aOp[i]);
59473       }
59474       fclose(out);
59475     }
59476   }
59477 #endif
59478   p->magic = VDBE_MAGIC_INIT;
59479   return p->rc & db->errMask;
59480 }
59481  
59482 /*
59483 ** Clean up and delete a VDBE after execution.  Return an integer which is
59484 ** the result code.  Write any error message text into *pzErrMsg.
59485 */
59486 SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe *p){
59487   int rc = SQLITE_OK;
59488   if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){
59489     rc = sqlite3VdbeReset(p);
59490     assert( (rc & p->db->errMask)==rc );
59491   }
59492   sqlite3VdbeDelete(p);
59493   return rc;
59494 }
59495
59496 /*
59497 ** Call the destructor for each auxdata entry in pVdbeFunc for which
59498 ** the corresponding bit in mask is clear.  Auxdata entries beyond 31
59499 ** are always destroyed.  To destroy all auxdata entries, call this
59500 ** routine with mask==0.
59501 */
59502 SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(VdbeFunc *pVdbeFunc, int mask){
59503   int i;
59504   for(i=0; i<pVdbeFunc->nAux; i++){
59505     struct AuxData *pAux = &pVdbeFunc->apAux[i];
59506     if( (i>31 || !(mask&(((u32)1)<<i))) && pAux->pAux ){
59507       if( pAux->xDelete ){
59508         pAux->xDelete(pAux->pAux);
59509       }
59510       pAux->pAux = 0;
59511     }
59512   }
59513 }
59514
59515 /*
59516 ** Free all memory associated with the Vdbe passed as the second argument.
59517 ** The difference between this function and sqlite3VdbeDelete() is that
59518 ** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with
59519 ** the database connection.
59520 */
59521 SQLITE_PRIVATE void sqlite3VdbeDeleteObject(sqlite3 *db, Vdbe *p){
59522   SubProgram *pSub, *pNext;
59523   assert( p->db==0 || p->db==db );
59524   releaseMemArray(p->aVar, p->nVar);
59525   releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
59526   for(pSub=p->pProgram; pSub; pSub=pNext){
59527     pNext = pSub->pNext;
59528     vdbeFreeOpArray(db, pSub->aOp, pSub->nOp);
59529     sqlite3DbFree(db, pSub);
59530   }
59531   vdbeFreeOpArray(db, p->aOp, p->nOp);
59532   sqlite3DbFree(db, p->aLabel);
59533   sqlite3DbFree(db, p->aColName);
59534   sqlite3DbFree(db, p->zSql);
59535   sqlite3DbFree(db, p->pFree);
59536   sqlite3DbFree(db, p);
59537 }
59538
59539 /*
59540 ** Delete an entire VDBE.
59541 */
59542 SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){
59543   sqlite3 *db;
59544
59545   if( NEVER(p==0) ) return;
59546   db = p->db;
59547   if( p->pPrev ){
59548     p->pPrev->pNext = p->pNext;
59549   }else{
59550     assert( db->pVdbe==p );
59551     db->pVdbe = p->pNext;
59552   }
59553   if( p->pNext ){
59554     p->pNext->pPrev = p->pPrev;
59555   }
59556   p->magic = VDBE_MAGIC_DEAD;
59557   p->db = 0;
59558   sqlite3VdbeDeleteObject(db, p);
59559 }
59560
59561 /*
59562 ** Make sure the cursor p is ready to read or write the row to which it
59563 ** was last positioned.  Return an error code if an OOM fault or I/O error
59564 ** prevents us from positioning the cursor to its correct position.
59565 **
59566 ** If a MoveTo operation is pending on the given cursor, then do that
59567 ** MoveTo now.  If no move is pending, check to see if the row has been
59568 ** deleted out from under the cursor and if it has, mark the row as
59569 ** a NULL row.
59570 **
59571 ** If the cursor is already pointing to the correct row and that row has
59572 ** not been deleted out from under the cursor, then this routine is a no-op.
59573 */
59574 SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor *p){
59575   if( p->deferredMoveto ){
59576     int res, rc;
59577 #ifdef SQLITE_TEST
59578     extern int sqlite3_search_count;
59579 #endif
59580     assert( p->isTable );
59581     rc = sqlite3BtreeMovetoUnpacked(p->pCursor, 0, p->movetoTarget, 0, &res);
59582     if( rc ) return rc;
59583     p->lastRowid = p->movetoTarget;
59584     if( res!=0 ) return SQLITE_CORRUPT_BKPT;
59585     p->rowidIsValid = 1;
59586 #ifdef SQLITE_TEST
59587     sqlite3_search_count++;
59588 #endif
59589     p->deferredMoveto = 0;
59590     p->cacheStatus = CACHE_STALE;
59591   }else if( ALWAYS(p->pCursor) ){
59592     int hasMoved;
59593     int rc = sqlite3BtreeCursorHasMoved(p->pCursor, &hasMoved);
59594     if( rc ) return rc;
59595     if( hasMoved ){
59596       p->cacheStatus = CACHE_STALE;
59597       p->nullRow = 1;
59598     }
59599   }
59600   return SQLITE_OK;
59601 }
59602
59603 /*
59604 ** The following functions:
59605 **
59606 ** sqlite3VdbeSerialType()
59607 ** sqlite3VdbeSerialTypeLen()
59608 ** sqlite3VdbeSerialLen()
59609 ** sqlite3VdbeSerialPut()
59610 ** sqlite3VdbeSerialGet()
59611 **
59612 ** encapsulate the code that serializes values for storage in SQLite
59613 ** data and index records. Each serialized value consists of a
59614 ** 'serial-type' and a blob of data. The serial type is an 8-byte unsigned
59615 ** integer, stored as a varint.
59616 **
59617 ** In an SQLite index record, the serial type is stored directly before
59618 ** the blob of data that it corresponds to. In a table record, all serial
59619 ** types are stored at the start of the record, and the blobs of data at
59620 ** the end. Hence these functions allow the caller to handle the
59621 ** serial-type and data blob seperately.
59622 **
59623 ** The following table describes the various storage classes for data:
59624 **
59625 **   serial type        bytes of data      type
59626 **   --------------     ---------------    ---------------
59627 **      0                     0            NULL
59628 **      1                     1            signed integer
59629 **      2                     2            signed integer
59630 **      3                     3            signed integer
59631 **      4                     4            signed integer
59632 **      5                     6            signed integer
59633 **      6                     8            signed integer
59634 **      7                     8            IEEE float
59635 **      8                     0            Integer constant 0
59636 **      9                     0            Integer constant 1
59637 **     10,11                               reserved for expansion
59638 **    N>=12 and even       (N-12)/2        BLOB
59639 **    N>=13 and odd        (N-13)/2        text
59640 **
59641 ** The 8 and 9 types were added in 3.3.0, file format 4.  Prior versions
59642 ** of SQLite will not understand those serial types.
59643 */
59644
59645 /*
59646 ** Return the serial-type for the value stored in pMem.
59647 */
59648 SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){
59649   int flags = pMem->flags;
59650   int n;
59651
59652   if( flags&MEM_Null ){
59653     return 0;
59654   }
59655   if( flags&MEM_Int ){
59656     /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */
59657 #   define MAX_6BYTE ((((i64)0x00008000)<<32)-1)
59658     i64 i = pMem->u.i;
59659     u64 u;
59660     if( file_format>=4 && (i&1)==i ){
59661       return 8+(u32)i;
59662     }
59663     if( i<0 ){
59664       if( i<(-MAX_6BYTE) ) return 6;
59665       /* Previous test prevents:  u = -(-9223372036854775808) */
59666       u = -i;
59667     }else{
59668       u = i;
59669     }
59670     if( u<=127 ) return 1;
59671     if( u<=32767 ) return 2;
59672     if( u<=8388607 ) return 3;
59673     if( u<=2147483647 ) return 4;
59674     if( u<=MAX_6BYTE ) return 5;
59675     return 6;
59676   }
59677   if( flags&MEM_Real ){
59678     return 7;
59679   }
59680   assert( pMem->db->mallocFailed || flags&(MEM_Str|MEM_Blob) );
59681   n = pMem->n;
59682   if( flags & MEM_Zero ){
59683     n += pMem->u.nZero;
59684   }
59685   assert( n>=0 );
59686   return ((n*2) + 12 + ((flags&MEM_Str)!=0));
59687 }
59688
59689 /*
59690 ** Return the length of the data corresponding to the supplied serial-type.
59691 */
59692 SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32 serial_type){
59693   if( serial_type>=12 ){
59694     return (serial_type-12)/2;
59695   }else{
59696     static const u8 aSize[] = { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0, 0, 0 };
59697     return aSize[serial_type];
59698   }
59699 }
59700
59701 /*
59702 ** If we are on an architecture with mixed-endian floating 
59703 ** points (ex: ARM7) then swap the lower 4 bytes with the 
59704 ** upper 4 bytes.  Return the result.
59705 **
59706 ** For most architectures, this is a no-op.
59707 **
59708 ** (later):  It is reported to me that the mixed-endian problem
59709 ** on ARM7 is an issue with GCC, not with the ARM7 chip.  It seems
59710 ** that early versions of GCC stored the two words of a 64-bit
59711 ** float in the wrong order.  And that error has been propagated
59712 ** ever since.  The blame is not necessarily with GCC, though.
59713 ** GCC might have just copying the problem from a prior compiler.
59714 ** I am also told that newer versions of GCC that follow a different
59715 ** ABI get the byte order right.
59716 **
59717 ** Developers using SQLite on an ARM7 should compile and run their
59718 ** application using -DSQLITE_DEBUG=1 at least once.  With DEBUG
59719 ** enabled, some asserts below will ensure that the byte order of
59720 ** floating point values is correct.
59721 **
59722 ** (2007-08-30)  Frank van Vugt has studied this problem closely
59723 ** and has send his findings to the SQLite developers.  Frank
59724 ** writes that some Linux kernels offer floating point hardware
59725 ** emulation that uses only 32-bit mantissas instead of a full 
59726 ** 48-bits as required by the IEEE standard.  (This is the
59727 ** CONFIG_FPE_FASTFPE option.)  On such systems, floating point
59728 ** byte swapping becomes very complicated.  To avoid problems,
59729 ** the necessary byte swapping is carried out using a 64-bit integer
59730 ** rather than a 64-bit float.  Frank assures us that the code here
59731 ** works for him.  We, the developers, have no way to independently
59732 ** verify this, but Frank seems to know what he is talking about
59733 ** so we trust him.
59734 */
59735 #ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
59736 static u64 floatSwap(u64 in){
59737   union {
59738     u64 r;
59739     u32 i[2];
59740   } u;
59741   u32 t;
59742
59743   u.r = in;
59744   t = u.i[0];
59745   u.i[0] = u.i[1];
59746   u.i[1] = t;
59747   return u.r;
59748 }
59749 # define swapMixedEndianFloat(X)  X = floatSwap(X)
59750 #else
59751 # define swapMixedEndianFloat(X)
59752 #endif
59753
59754 /*
59755 ** Write the serialized data blob for the value stored in pMem into 
59756 ** buf. It is assumed that the caller has allocated sufficient space.
59757 ** Return the number of bytes written.
59758 **
59759 ** nBuf is the amount of space left in buf[].  nBuf must always be
59760 ** large enough to hold the entire field.  Except, if the field is
59761 ** a blob with a zero-filled tail, then buf[] might be just the right
59762 ** size to hold everything except for the zero-filled tail.  If buf[]
59763 ** is only big enough to hold the non-zero prefix, then only write that
59764 ** prefix into buf[].  But if buf[] is large enough to hold both the
59765 ** prefix and the tail then write the prefix and set the tail to all
59766 ** zeros.
59767 **
59768 ** Return the number of bytes actually written into buf[].  The number
59769 ** of bytes in the zero-filled tail is included in the return value only
59770 ** if those bytes were zeroed in buf[].
59771 */ 
59772 SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, int nBuf, Mem *pMem, int file_format){
59773   u32 serial_type = sqlite3VdbeSerialType(pMem, file_format);
59774   u32 len;
59775
59776   /* Integer and Real */
59777   if( serial_type<=7 && serial_type>0 ){
59778     u64 v;
59779     u32 i;
59780     if( serial_type==7 ){
59781       assert( sizeof(v)==sizeof(pMem->r) );
59782       memcpy(&v, &pMem->r, sizeof(v));
59783       swapMixedEndianFloat(v);
59784     }else{
59785       v = pMem->u.i;
59786     }
59787     len = i = sqlite3VdbeSerialTypeLen(serial_type);
59788     assert( len<=(u32)nBuf );
59789     while( i-- ){
59790       buf[i] = (u8)(v&0xFF);
59791       v >>= 8;
59792     }
59793     return len;
59794   }
59795
59796   /* String or blob */
59797   if( serial_type>=12 ){
59798     assert( pMem->n + ((pMem->flags & MEM_Zero)?pMem->u.nZero:0)
59799              == (int)sqlite3VdbeSerialTypeLen(serial_type) );
59800     assert( pMem->n<=nBuf );
59801     len = pMem->n;
59802     memcpy(buf, pMem->z, len);
59803     if( pMem->flags & MEM_Zero ){
59804       len += pMem->u.nZero;
59805       assert( nBuf>=0 );
59806       if( len > (u32)nBuf ){
59807         len = (u32)nBuf;
59808       }
59809       memset(&buf[pMem->n], 0, len-pMem->n);
59810     }
59811     return len;
59812   }
59813
59814   /* NULL or constants 0 or 1 */
59815   return 0;
59816 }
59817
59818 /*
59819 ** Deserialize the data blob pointed to by buf as serial type serial_type
59820 ** and store the result in pMem.  Return the number of bytes read.
59821 */ 
59822 SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(
59823   const unsigned char *buf,     /* Buffer to deserialize from */
59824   u32 serial_type,              /* Serial type to deserialize */
59825   Mem *pMem                     /* Memory cell to write value into */
59826 ){
59827   switch( serial_type ){
59828     case 10:   /* Reserved for future use */
59829     case 11:   /* Reserved for future use */
59830     case 0: {  /* NULL */
59831       pMem->flags = MEM_Null;
59832       break;
59833     }
59834     case 1: { /* 1-byte signed integer */
59835       pMem->u.i = (signed char)buf[0];
59836       pMem->flags = MEM_Int;
59837       return 1;
59838     }
59839     case 2: { /* 2-byte signed integer */
59840       pMem->u.i = (((signed char)buf[0])<<8) | buf[1];
59841       pMem->flags = MEM_Int;
59842       return 2;
59843     }
59844     case 3: { /* 3-byte signed integer */
59845       pMem->u.i = (((signed char)buf[0])<<16) | (buf[1]<<8) | buf[2];
59846       pMem->flags = MEM_Int;
59847       return 3;
59848     }
59849     case 4: { /* 4-byte signed integer */
59850       pMem->u.i = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
59851       pMem->flags = MEM_Int;
59852       return 4;
59853     }
59854     case 5: { /* 6-byte signed integer */
59855       u64 x = (((signed char)buf[0])<<8) | buf[1];
59856       u32 y = (buf[2]<<24) | (buf[3]<<16) | (buf[4]<<8) | buf[5];
59857       x = (x<<32) | y;
59858       pMem->u.i = *(i64*)&x;
59859       pMem->flags = MEM_Int;
59860       return 6;
59861     }
59862     case 6:   /* 8-byte signed integer */
59863     case 7: { /* IEEE floating point */
59864       u64 x;
59865       u32 y;
59866 #if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
59867       /* Verify that integers and floating point values use the same
59868       ** byte order.  Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is
59869       ** defined that 64-bit floating point values really are mixed
59870       ** endian.
59871       */
59872       static const u64 t1 = ((u64)0x3ff00000)<<32;
59873       static const double r1 = 1.0;
59874       u64 t2 = t1;
59875       swapMixedEndianFloat(t2);
59876       assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 );
59877 #endif
59878
59879       x = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
59880       y = (buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7];
59881       x = (x<<32) | y;
59882       if( serial_type==6 ){
59883         pMem->u.i = *(i64*)&x;
59884         pMem->flags = MEM_Int;
59885       }else{
59886         assert( sizeof(x)==8 && sizeof(pMem->r)==8 );
59887         swapMixedEndianFloat(x);
59888         memcpy(&pMem->r, &x, sizeof(x));
59889         pMem->flags = sqlite3IsNaN(pMem->r) ? MEM_Null : MEM_Real;
59890       }
59891       return 8;
59892     }
59893     case 8:    /* Integer 0 */
59894     case 9: {  /* Integer 1 */
59895       pMem->u.i = serial_type-8;
59896       pMem->flags = MEM_Int;
59897       return 0;
59898     }
59899     default: {
59900       u32 len = (serial_type-12)/2;
59901       pMem->z = (char *)buf;
59902       pMem->n = len;
59903       pMem->xDel = 0;
59904       if( serial_type&0x01 ){
59905         pMem->flags = MEM_Str | MEM_Ephem;
59906       }else{
59907         pMem->flags = MEM_Blob | MEM_Ephem;
59908       }
59909       return len;
59910     }
59911   }
59912   return 0;
59913 }
59914
59915
59916 /*
59917 ** Given the nKey-byte encoding of a record in pKey[], parse the
59918 ** record into a UnpackedRecord structure.  Return a pointer to
59919 ** that structure.
59920 **
59921 ** The calling function might provide szSpace bytes of memory
59922 ** space at pSpace.  This space can be used to hold the returned
59923 ** VDbeParsedRecord structure if it is large enough.  If it is
59924 ** not big enough, space is obtained from sqlite3_malloc().
59925 **
59926 ** The returned structure should be closed by a call to
59927 ** sqlite3VdbeDeleteUnpackedRecord().
59928 */ 
59929 SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeRecordUnpack(
59930   KeyInfo *pKeyInfo,     /* Information about the record format */
59931   int nKey,              /* Size of the binary record */
59932   const void *pKey,      /* The binary record */
59933   char *pSpace,          /* Unaligned space available to hold the object */
59934   int szSpace            /* Size of pSpace[] in bytes */
59935 ){
59936   const unsigned char *aKey = (const unsigned char *)pKey;
59937   UnpackedRecord *p;  /* The unpacked record that we will return */
59938   int nByte;          /* Memory space needed to hold p, in bytes */
59939   int d;
59940   u32 idx;
59941   u16 u;              /* Unsigned loop counter */
59942   u32 szHdr;
59943   Mem *pMem;
59944   int nOff;           /* Increase pSpace by this much to 8-byte align it */
59945   
59946   /*
59947   ** We want to shift the pointer pSpace up such that it is 8-byte aligned.
59948   ** Thus, we need to calculate a value, nOff, between 0 and 7, to shift 
59949   ** it by.  If pSpace is already 8-byte aligned, nOff should be zero.
59950   */
59951   nOff = (8 - (SQLITE_PTR_TO_INT(pSpace) & 7)) & 7;
59952   pSpace += nOff;
59953   szSpace -= nOff;
59954   nByte = ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nField+1);
59955   if( nByte>szSpace ){
59956     p = sqlite3DbMallocRaw(pKeyInfo->db, nByte);
59957     if( p==0 ) return 0;
59958     p->flags = UNPACKED_NEED_FREE | UNPACKED_NEED_DESTROY;
59959   }else{
59960     p = (UnpackedRecord*)pSpace;
59961     p->flags = UNPACKED_NEED_DESTROY;
59962   }
59963   p->pKeyInfo = pKeyInfo;
59964   p->nField = pKeyInfo->nField + 1;
59965   p->aMem = pMem = (Mem*)&((char*)p)[ROUND8(sizeof(UnpackedRecord))];
59966   assert( EIGHT_BYTE_ALIGNMENT(pMem) );
59967   idx = getVarint32(aKey, szHdr);
59968   d = szHdr;
59969   u = 0;
59970   while( idx<szHdr && u<p->nField && d<=nKey ){
59971     u32 serial_type;
59972
59973     idx += getVarint32(&aKey[idx], serial_type);
59974     pMem->enc = pKeyInfo->enc;
59975     pMem->db = pKeyInfo->db;
59976     pMem->flags = 0;
59977     pMem->zMalloc = 0;
59978     d += sqlite3VdbeSerialGet(&aKey[d], serial_type, pMem);
59979     pMem++;
59980     u++;
59981   }
59982   assert( u<=pKeyInfo->nField + 1 );
59983   p->nField = u;
59984   return (void*)p;
59985 }
59986
59987 /*
59988 ** This routine destroys a UnpackedRecord object.
59989 */
59990 SQLITE_PRIVATE void sqlite3VdbeDeleteUnpackedRecord(UnpackedRecord *p){
59991   int i;
59992   Mem *pMem;
59993
59994   assert( p!=0 );
59995   assert( p->flags & UNPACKED_NEED_DESTROY );
59996   for(i=0, pMem=p->aMem; i<p->nField; i++, pMem++){
59997     /* The unpacked record is always constructed by the
59998     ** sqlite3VdbeUnpackRecord() function above, which makes all
59999     ** strings and blobs static.  And none of the elements are
60000     ** ever transformed, so there is never anything to delete.
60001     */
60002     if( NEVER(pMem->zMalloc) ) sqlite3VdbeMemRelease(pMem);
60003   }
60004   if( p->flags & UNPACKED_NEED_FREE ){
60005     sqlite3DbFree(p->pKeyInfo->db, p);
60006   }
60007 }
60008
60009 /*
60010 ** This function compares the two table rows or index records
60011 ** specified by {nKey1, pKey1} and pPKey2.  It returns a negative, zero
60012 ** or positive integer if key1 is less than, equal to or 
60013 ** greater than key2.  The {nKey1, pKey1} key must be a blob
60014 ** created by th OP_MakeRecord opcode of the VDBE.  The pPKey2
60015 ** key must be a parsed key such as obtained from
60016 ** sqlite3VdbeParseRecord.
60017 **
60018 ** Key1 and Key2 do not have to contain the same number of fields.
60019 ** The key with fewer fields is usually compares less than the 
60020 ** longer key.  However if the UNPACKED_INCRKEY flags in pPKey2 is set
60021 ** and the common prefixes are equal, then key1 is less than key2.
60022 ** Or if the UNPACKED_MATCH_PREFIX flag is set and the prefixes are
60023 ** equal, then the keys are considered to be equal and
60024 ** the parts beyond the common prefix are ignored.
60025 **
60026 ** If the UNPACKED_IGNORE_ROWID flag is set, then the last byte of
60027 ** the header of pKey1 is ignored.  It is assumed that pKey1 is
60028 ** an index key, and thus ends with a rowid value.  The last byte
60029 ** of the header will therefore be the serial type of the rowid:
60030 ** one of 1, 2, 3, 4, 5, 6, 8, or 9 - the integer serial types.
60031 ** The serial type of the final rowid will always be a single byte.
60032 ** By ignoring this last byte of the header, we force the comparison
60033 ** to ignore the rowid at the end of key1.
60034 */
60035 SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
60036   int nKey1, const void *pKey1, /* Left key */
60037   UnpackedRecord *pPKey2        /* Right key */
60038 ){
60039   int d1;            /* Offset into aKey[] of next data element */
60040   u32 idx1;          /* Offset into aKey[] of next header element */
60041   u32 szHdr1;        /* Number of bytes in header */
60042   int i = 0;
60043   int nField;
60044   int rc = 0;
60045   const unsigned char *aKey1 = (const unsigned char *)pKey1;
60046   KeyInfo *pKeyInfo;
60047   Mem mem1;
60048
60049   pKeyInfo = pPKey2->pKeyInfo;
60050   mem1.enc = pKeyInfo->enc;
60051   mem1.db = pKeyInfo->db;
60052   /* mem1.flags = 0;  // Will be initialized by sqlite3VdbeSerialGet() */
60053   VVA_ONLY( mem1.zMalloc = 0; ) /* Only needed by assert() statements */
60054
60055   /* Compilers may complain that mem1.u.i is potentially uninitialized.
60056   ** We could initialize it, as shown here, to silence those complaints.
60057   ** But in fact, mem1.u.i will never actually be used initialized, and doing 
60058   ** the unnecessary initialization has a measurable negative performance
60059   ** impact, since this routine is a very high runner.  And so, we choose
60060   ** to ignore the compiler warnings and leave this variable uninitialized.
60061   */
60062   /*  mem1.u.i = 0;  // not needed, here to silence compiler warning */
60063   
60064   idx1 = getVarint32(aKey1, szHdr1);
60065   d1 = szHdr1;
60066   if( pPKey2->flags & UNPACKED_IGNORE_ROWID ){
60067     szHdr1--;
60068   }
60069   nField = pKeyInfo->nField;
60070   while( idx1<szHdr1 && i<pPKey2->nField ){
60071     u32 serial_type1;
60072
60073     /* Read the serial types for the next element in each key. */
60074     idx1 += getVarint32( aKey1+idx1, serial_type1 );
60075     if( d1>=nKey1 && sqlite3VdbeSerialTypeLen(serial_type1)>0 ) break;
60076
60077     /* Extract the values to be compared.
60078     */
60079     d1 += sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1);
60080
60081     /* Do the comparison
60082     */
60083     rc = sqlite3MemCompare(&mem1, &pPKey2->aMem[i],
60084                            i<nField ? pKeyInfo->aColl[i] : 0);
60085     if( rc!=0 ){
60086       assert( mem1.zMalloc==0 );  /* See comment below */
60087
60088       /* Invert the result if we are using DESC sort order. */
60089       if( pKeyInfo->aSortOrder && i<nField && pKeyInfo->aSortOrder[i] ){
60090         rc = -rc;
60091       }
60092     
60093       /* If the PREFIX_SEARCH flag is set and all fields except the final
60094       ** rowid field were equal, then clear the PREFIX_SEARCH flag and set 
60095       ** pPKey2->rowid to the value of the rowid field in (pKey1, nKey1).
60096       ** This is used by the OP_IsUnique opcode.
60097       */
60098       if( (pPKey2->flags & UNPACKED_PREFIX_SEARCH) && i==(pPKey2->nField-1) ){
60099         assert( idx1==szHdr1 && rc );
60100         assert( mem1.flags & MEM_Int );
60101         pPKey2->flags &= ~UNPACKED_PREFIX_SEARCH;
60102         pPKey2->rowid = mem1.u.i;
60103       }
60104     
60105       return rc;
60106     }
60107     i++;
60108   }
60109
60110   /* No memory allocation is ever used on mem1.  Prove this using
60111   ** the following assert().  If the assert() fails, it indicates a
60112   ** memory leak and a need to call sqlite3VdbeMemRelease(&mem1).
60113   */
60114   assert( mem1.zMalloc==0 );
60115
60116   /* rc==0 here means that one of the keys ran out of fields and
60117   ** all the fields up to that point were equal. If the UNPACKED_INCRKEY
60118   ** flag is set, then break the tie by treating key2 as larger.
60119   ** If the UPACKED_PREFIX_MATCH flag is set, then keys with common prefixes
60120   ** are considered to be equal.  Otherwise, the longer key is the 
60121   ** larger.  As it happens, the pPKey2 will always be the longer
60122   ** if there is a difference.
60123   */
60124   assert( rc==0 );
60125   if( pPKey2->flags & UNPACKED_INCRKEY ){
60126     rc = -1;
60127   }else if( pPKey2->flags & UNPACKED_PREFIX_MATCH ){
60128     /* Leave rc==0 */
60129   }else if( idx1<szHdr1 ){
60130     rc = 1;
60131   }
60132   return rc;
60133 }
60134  
60135
60136 /*
60137 ** pCur points at an index entry created using the OP_MakeRecord opcode.
60138 ** Read the rowid (the last field in the record) and store it in *rowid.
60139 ** Return SQLITE_OK if everything works, or an error code otherwise.
60140 **
60141 ** pCur might be pointing to text obtained from a corrupt database file.
60142 ** So the content cannot be trusted.  Do appropriate checks on the content.
60143 */
60144 SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){
60145   i64 nCellKey = 0;
60146   int rc;
60147   u32 szHdr;        /* Size of the header */
60148   u32 typeRowid;    /* Serial type of the rowid */
60149   u32 lenRowid;     /* Size of the rowid */
60150   Mem m, v;
60151
60152   UNUSED_PARAMETER(db);
60153
60154   /* Get the size of the index entry.  Only indices entries of less
60155   ** than 2GiB are support - anything large must be database corruption.
60156   ** Any corruption is detected in sqlite3BtreeParseCellPtr(), though, so
60157   ** this code can safely assume that nCellKey is 32-bits  
60158   */
60159   assert( sqlite3BtreeCursorIsValid(pCur) );
60160   rc = sqlite3BtreeKeySize(pCur, &nCellKey);
60161   assert( rc==SQLITE_OK );     /* pCur is always valid so KeySize cannot fail */
60162   assert( (nCellKey & SQLITE_MAX_U32)==(u64)nCellKey );
60163
60164   /* Read in the complete content of the index entry */
60165   memset(&m, 0, sizeof(m));
60166   rc = sqlite3VdbeMemFromBtree(pCur, 0, (int)nCellKey, 1, &m);
60167   if( rc ){
60168     return rc;
60169   }
60170
60171   /* The index entry must begin with a header size */
60172   (void)getVarint32((u8*)m.z, szHdr);
60173   testcase( szHdr==3 );
60174   testcase( szHdr==m.n );
60175   if( unlikely(szHdr<3 || (int)szHdr>m.n) ){
60176     goto idx_rowid_corruption;
60177   }
60178
60179   /* The last field of the index should be an integer - the ROWID.
60180   ** Verify that the last entry really is an integer. */
60181   (void)getVarint32((u8*)&m.z[szHdr-1], typeRowid);
60182   testcase( typeRowid==1 );
60183   testcase( typeRowid==2 );
60184   testcase( typeRowid==3 );
60185   testcase( typeRowid==4 );
60186   testcase( typeRowid==5 );
60187   testcase( typeRowid==6 );
60188   testcase( typeRowid==8 );
60189   testcase( typeRowid==9 );
60190   if( unlikely(typeRowid<1 || typeRowid>9 || typeRowid==7) ){
60191     goto idx_rowid_corruption;
60192   }
60193   lenRowid = sqlite3VdbeSerialTypeLen(typeRowid);
60194   testcase( (u32)m.n==szHdr+lenRowid );
60195   if( unlikely((u32)m.n<szHdr+lenRowid) ){
60196     goto idx_rowid_corruption;
60197   }
60198
60199   /* Fetch the integer off the end of the index record */
60200   sqlite3VdbeSerialGet((u8*)&m.z[m.n-lenRowid], typeRowid, &v);
60201   *rowid = v.u.i;
60202   sqlite3VdbeMemRelease(&m);
60203   return SQLITE_OK;
60204
60205   /* Jump here if database corruption is detected after m has been
60206   ** allocated.  Free the m object and return SQLITE_CORRUPT. */
60207 idx_rowid_corruption:
60208   testcase( m.zMalloc!=0 );
60209   sqlite3VdbeMemRelease(&m);
60210   return SQLITE_CORRUPT_BKPT;
60211 }
60212
60213 /*
60214 ** Compare the key of the index entry that cursor pC is pointing to against
60215 ** the key string in pUnpacked.  Write into *pRes a number
60216 ** that is negative, zero, or positive if pC is less than, equal to,
60217 ** or greater than pUnpacked.  Return SQLITE_OK on success.
60218 **
60219 ** pUnpacked is either created without a rowid or is truncated so that it
60220 ** omits the rowid at the end.  The rowid at the end of the index entry
60221 ** is ignored as well.  Hence, this routine only compares the prefixes 
60222 ** of the keys prior to the final rowid, not the entire key.
60223 */
60224 SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(
60225   VdbeCursor *pC,             /* The cursor to compare against */
60226   UnpackedRecord *pUnpacked,  /* Unpacked version of key to compare against */
60227   int *res                    /* Write the comparison result here */
60228 ){
60229   i64 nCellKey = 0;
60230   int rc;
60231   BtCursor *pCur = pC->pCursor;
60232   Mem m;
60233
60234   assert( sqlite3BtreeCursorIsValid(pCur) );
60235   rc = sqlite3BtreeKeySize(pCur, &nCellKey);
60236   assert( rc==SQLITE_OK );    /* pCur is always valid so KeySize cannot fail */
60237   /* nCellKey will always be between 0 and 0xffffffff because of the say
60238   ** that btreeParseCellPtr() and sqlite3GetVarint32() are implemented */
60239   if( nCellKey<=0 || nCellKey>0x7fffffff ){
60240     *res = 0;
60241     return SQLITE_CORRUPT_BKPT;
60242   }
60243   memset(&m, 0, sizeof(m));
60244   rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, (int)nCellKey, 1, &m);
60245   if( rc ){
60246     return rc;
60247   }
60248   assert( pUnpacked->flags & UNPACKED_IGNORE_ROWID );
60249   *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked);
60250   sqlite3VdbeMemRelease(&m);
60251   return SQLITE_OK;
60252 }
60253
60254 /*
60255 ** This routine sets the value to be returned by subsequent calls to
60256 ** sqlite3_changes() on the database handle 'db'. 
60257 */
60258 SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *db, int nChange){
60259   assert( sqlite3_mutex_held(db->mutex) );
60260   db->nChange = nChange;
60261   db->nTotalChange += nChange;
60262 }
60263
60264 /*
60265 ** Set a flag in the vdbe to update the change counter when it is finalised
60266 ** or reset.
60267 */
60268 SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe *v){
60269   v->changeCntOn = 1;
60270 }
60271
60272 /*
60273 ** Mark every prepared statement associated with a database connection
60274 ** as expired.
60275 **
60276 ** An expired statement means that recompilation of the statement is
60277 ** recommend.  Statements expire when things happen that make their
60278 ** programs obsolete.  Removing user-defined functions or collating
60279 ** sequences, or changing an authorization function are the types of
60280 ** things that make prepared statements obsolete.
60281 */
60282 SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db){
60283   Vdbe *p;
60284   for(p = db->pVdbe; p; p=p->pNext){
60285     p->expired = 1;
60286   }
60287 }
60288
60289 /*
60290 ** Return the database associated with the Vdbe.
60291 */
60292 SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe *v){
60293   return v->db;
60294 }
60295
60296 /*
60297 ** Return a pointer to an sqlite3_value structure containing the value bound
60298 ** parameter iVar of VM v. Except, if the value is an SQL NULL, return 
60299 ** 0 instead. Unless it is NULL, apply affinity aff (one of the SQLITE_AFF_*
60300 ** constants) to the value before returning it.
60301 **
60302 ** The returned value must be freed by the caller using sqlite3ValueFree().
60303 */
60304 SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetValue(Vdbe *v, int iVar, u8 aff){
60305   assert( iVar>0 );
60306   if( v ){
60307     Mem *pMem = &v->aVar[iVar-1];
60308     if( 0==(pMem->flags & MEM_Null) ){
60309       sqlite3_value *pRet = sqlite3ValueNew(v->db);
60310       if( pRet ){
60311         sqlite3VdbeMemCopy((Mem *)pRet, pMem);
60312         sqlite3ValueApplyAffinity(pRet, aff, SQLITE_UTF8);
60313         sqlite3VdbeMemStoreType((Mem *)pRet);
60314       }
60315       return pRet;
60316     }
60317   }
60318   return 0;
60319 }
60320
60321 /*
60322 ** Configure SQL variable iVar so that binding a new value to it signals
60323 ** to sqlite3_reoptimize() that re-preparing the statement may result
60324 ** in a better query plan.
60325 */
60326 SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){
60327   assert( iVar>0 );
60328   if( iVar>32 ){
60329     v->expmask = 0xffffffff;
60330   }else{
60331     v->expmask |= ((u32)1 << (iVar-1));
60332   }
60333 }
60334
60335 /************** End of vdbeaux.c *********************************************/
60336 /************** Begin file vdbeapi.c *****************************************/
60337 /*
60338 ** 2004 May 26
60339 **
60340 ** The author disclaims copyright to this source code.  In place of
60341 ** a legal notice, here is a blessing:
60342 **
60343 **    May you do good and not evil.
60344 **    May you find forgiveness for yourself and forgive others.
60345 **    May you share freely, never taking more than you give.
60346 **
60347 *************************************************************************
60348 **
60349 ** This file contains code use to implement APIs that are part of the
60350 ** VDBE.
60351 */
60352
60353 #ifndef SQLITE_OMIT_DEPRECATED
60354 /*
60355 ** Return TRUE (non-zero) of the statement supplied as an argument needs
60356 ** to be recompiled.  A statement needs to be recompiled whenever the
60357 ** execution environment changes in a way that would alter the program
60358 ** that sqlite3_prepare() generates.  For example, if new functions or
60359 ** collating sequences are registered or if an authorizer function is
60360 ** added or changed.
60361 */
60362 SQLITE_API int sqlite3_expired(sqlite3_stmt *pStmt){
60363   Vdbe *p = (Vdbe*)pStmt;
60364   return p==0 || p->expired;
60365 }
60366 #endif
60367
60368 /*
60369 ** Check on a Vdbe to make sure it has not been finalized.  Log
60370 ** an error and return true if it has been finalized (or is otherwise
60371 ** invalid).  Return false if it is ok.
60372 */
60373 static int vdbeSafety(Vdbe *p){
60374   if( p->db==0 ){
60375     sqlite3_log(SQLITE_MISUSE, "API called with finalized prepared statement");
60376     return 1;
60377   }else{
60378     return 0;
60379   }
60380 }
60381 static int vdbeSafetyNotNull(Vdbe *p){
60382   if( p==0 ){
60383     sqlite3_log(SQLITE_MISUSE, "API called with NULL prepared statement");
60384     return 1;
60385   }else{
60386     return vdbeSafety(p);
60387   }
60388 }
60389
60390 /*
60391 ** The following routine destroys a virtual machine that is created by
60392 ** the sqlite3_compile() routine. The integer returned is an SQLITE_
60393 ** success/failure code that describes the result of executing the virtual
60394 ** machine.
60395 **
60396 ** This routine sets the error code and string returned by
60397 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
60398 */
60399 SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt){
60400   int rc;
60401   if( pStmt==0 ){
60402     /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL
60403     ** pointer is a harmless no-op. */
60404     rc = SQLITE_OK;
60405   }else{
60406     Vdbe *v = (Vdbe*)pStmt;
60407     sqlite3 *db = v->db;
60408 #if SQLITE_THREADSAFE
60409     sqlite3_mutex *mutex;
60410 #endif
60411     if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
60412 #if SQLITE_THREADSAFE
60413     mutex = v->db->mutex;
60414 #endif
60415     sqlite3_mutex_enter(mutex);
60416     rc = sqlite3VdbeFinalize(v);
60417     rc = sqlite3ApiExit(db, rc);
60418     sqlite3_mutex_leave(mutex);
60419   }
60420   return rc;
60421 }
60422
60423 /*
60424 ** Terminate the current execution of an SQL statement and reset it
60425 ** back to its starting state so that it can be reused. A success code from
60426 ** the prior execution is returned.
60427 **
60428 ** This routine sets the error code and string returned by
60429 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
60430 */
60431 SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt){
60432   int rc;
60433   if( pStmt==0 ){
60434     rc = SQLITE_OK;
60435   }else{
60436     Vdbe *v = (Vdbe*)pStmt;
60437     sqlite3_mutex_enter(v->db->mutex);
60438     rc = sqlite3VdbeReset(v);
60439     sqlite3VdbeMakeReady(v, -1, 0, 0, 0, 0, 0);
60440     assert( (rc & (v->db->errMask))==rc );
60441     rc = sqlite3ApiExit(v->db, rc);
60442     sqlite3_mutex_leave(v->db->mutex);
60443   }
60444   return rc;
60445 }
60446
60447 /*
60448 ** Set all the parameters in the compiled SQL statement to NULL.
60449 */
60450 SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt *pStmt){
60451   int i;
60452   int rc = SQLITE_OK;
60453   Vdbe *p = (Vdbe*)pStmt;
60454 #if SQLITE_THREADSAFE
60455   sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex;
60456 #endif
60457   sqlite3_mutex_enter(mutex);
60458   for(i=0; i<p->nVar; i++){
60459     sqlite3VdbeMemRelease(&p->aVar[i]);
60460     p->aVar[i].flags = MEM_Null;
60461   }
60462   if( p->isPrepareV2 && p->expmask ){
60463     p->expired = 1;
60464   }
60465   sqlite3_mutex_leave(mutex);
60466   return rc;
60467 }
60468
60469
60470 /**************************** sqlite3_value_  *******************************
60471 ** The following routines extract information from a Mem or sqlite3_value
60472 ** structure.
60473 */
60474 SQLITE_API const void *sqlite3_value_blob(sqlite3_value *pVal){
60475   Mem *p = (Mem*)pVal;
60476   if( p->flags & (MEM_Blob|MEM_Str) ){
60477     sqlite3VdbeMemExpandBlob(p);
60478     p->flags &= ~MEM_Str;
60479     p->flags |= MEM_Blob;
60480     return p->n ? p->z : 0;
60481   }else{
60482     return sqlite3_value_text(pVal);
60483   }
60484 }
60485 SQLITE_API int sqlite3_value_bytes(sqlite3_value *pVal){
60486   return sqlite3ValueBytes(pVal, SQLITE_UTF8);
60487 }
60488 SQLITE_API int sqlite3_value_bytes16(sqlite3_value *pVal){
60489   return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
60490 }
60491 SQLITE_API double sqlite3_value_double(sqlite3_value *pVal){
60492   return sqlite3VdbeRealValue((Mem*)pVal);
60493 }
60494 SQLITE_API int sqlite3_value_int(sqlite3_value *pVal){
60495   return (int)sqlite3VdbeIntValue((Mem*)pVal);
60496 }
60497 SQLITE_API sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
60498   return sqlite3VdbeIntValue((Mem*)pVal);
60499 }
60500 SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value *pVal){
60501   return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8);
60502 }
60503 #ifndef SQLITE_OMIT_UTF16
60504 SQLITE_API const void *sqlite3_value_text16(sqlite3_value* pVal){
60505   return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
60506 }
60507 SQLITE_API const void *sqlite3_value_text16be(sqlite3_value *pVal){
60508   return sqlite3ValueText(pVal, SQLITE_UTF16BE);
60509 }
60510 SQLITE_API const void *sqlite3_value_text16le(sqlite3_value *pVal){
60511   return sqlite3ValueText(pVal, SQLITE_UTF16LE);
60512 }
60513 #endif /* SQLITE_OMIT_UTF16 */
60514 SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){
60515   return pVal->type;
60516 }
60517
60518 /**************************** sqlite3_result_  *******************************
60519 ** The following routines are used by user-defined functions to specify
60520 ** the function result.
60521 **
60522 ** The setStrOrError() funtion calls sqlite3VdbeMemSetStr() to store the
60523 ** result as a string or blob but if the string or blob is too large, it
60524 ** then sets the error code to SQLITE_TOOBIG
60525 */
60526 static void setResultStrOrError(
60527   sqlite3_context *pCtx,  /* Function context */
60528   const char *z,          /* String pointer */
60529   int n,                  /* Bytes in string, or negative */
60530   u8 enc,                 /* Encoding of z.  0 for BLOBs */
60531   void (*xDel)(void*)     /* Destructor function */
60532 ){
60533   if( sqlite3VdbeMemSetStr(&pCtx->s, z, n, enc, xDel)==SQLITE_TOOBIG ){
60534     sqlite3_result_error_toobig(pCtx);
60535   }
60536 }
60537 SQLITE_API void sqlite3_result_blob(
60538   sqlite3_context *pCtx, 
60539   const void *z, 
60540   int n, 
60541   void (*xDel)(void *)
60542 ){
60543   assert( n>=0 );
60544   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60545   setResultStrOrError(pCtx, z, n, 0, xDel);
60546 }
60547 SQLITE_API void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
60548   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60549   sqlite3VdbeMemSetDouble(&pCtx->s, rVal);
60550 }
60551 SQLITE_API void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
60552   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60553   pCtx->isError = SQLITE_ERROR;
60554   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
60555 }
60556 #ifndef SQLITE_OMIT_UTF16
60557 SQLITE_API void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
60558   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60559   pCtx->isError = SQLITE_ERROR;
60560   sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
60561 }
60562 #endif
60563 SQLITE_API void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
60564   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60565   sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal);
60566 }
60567 SQLITE_API void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
60568   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60569   sqlite3VdbeMemSetInt64(&pCtx->s, iVal);
60570 }
60571 SQLITE_API void sqlite3_result_null(sqlite3_context *pCtx){
60572   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60573   sqlite3VdbeMemSetNull(&pCtx->s);
60574 }
60575 SQLITE_API void sqlite3_result_text(
60576   sqlite3_context *pCtx, 
60577   const char *z, 
60578   int n,
60579   void (*xDel)(void *)
60580 ){
60581   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60582   setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel);
60583 }
60584 #ifndef SQLITE_OMIT_UTF16
60585 SQLITE_API void sqlite3_result_text16(
60586   sqlite3_context *pCtx, 
60587   const void *z, 
60588   int n, 
60589   void (*xDel)(void *)
60590 ){
60591   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60592   setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
60593 }
60594 SQLITE_API void sqlite3_result_text16be(
60595   sqlite3_context *pCtx, 
60596   const void *z, 
60597   int n, 
60598   void (*xDel)(void *)
60599 ){
60600   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60601   setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
60602 }
60603 SQLITE_API void sqlite3_result_text16le(
60604   sqlite3_context *pCtx, 
60605   const void *z, 
60606   int n, 
60607   void (*xDel)(void *)
60608 ){
60609   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60610   setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
60611 }
60612 #endif /* SQLITE_OMIT_UTF16 */
60613 SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
60614   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60615   sqlite3VdbeMemCopy(&pCtx->s, pValue);
60616 }
60617 SQLITE_API void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
60618   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60619   sqlite3VdbeMemSetZeroBlob(&pCtx->s, n);
60620 }
60621 SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
60622   pCtx->isError = errCode;
60623   if( pCtx->s.flags & MEM_Null ){
60624     sqlite3VdbeMemSetStr(&pCtx->s, sqlite3ErrStr(errCode), -1, 
60625                          SQLITE_UTF8, SQLITE_STATIC);
60626   }
60627 }
60628
60629 /* Force an SQLITE_TOOBIG error. */
60630 SQLITE_API void sqlite3_result_error_toobig(sqlite3_context *pCtx){
60631   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60632   pCtx->isError = SQLITE_TOOBIG;
60633   sqlite3VdbeMemSetStr(&pCtx->s, "string or blob too big", -1, 
60634                        SQLITE_UTF8, SQLITE_STATIC);
60635 }
60636
60637 /* An SQLITE_NOMEM error. */
60638 SQLITE_API void sqlite3_result_error_nomem(sqlite3_context *pCtx){
60639   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60640   sqlite3VdbeMemSetNull(&pCtx->s);
60641   pCtx->isError = SQLITE_NOMEM;
60642   pCtx->s.db->mallocFailed = 1;
60643 }
60644
60645 /*
60646 ** This function is called after a transaction has been committed. It 
60647 ** invokes callbacks registered with sqlite3_wal_hook() as required.
60648 */
60649 static int doWalCallbacks(sqlite3 *db){
60650   int rc = SQLITE_OK;
60651 #ifndef SQLITE_OMIT_WAL
60652   int i;
60653   for(i=0; i<db->nDb; i++){
60654     Btree *pBt = db->aDb[i].pBt;
60655     if( pBt ){
60656       int nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt));
60657       if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){
60658         rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zName, nEntry);
60659       }
60660     }
60661   }
60662 #endif
60663   return rc;
60664 }
60665
60666 /*
60667 ** Execute the statement pStmt, either until a row of data is ready, the
60668 ** statement is completely executed or an error occurs.
60669 **
60670 ** This routine implements the bulk of the logic behind the sqlite_step()
60671 ** API.  The only thing omitted is the automatic recompile if a 
60672 ** schema change has occurred.  That detail is handled by the
60673 ** outer sqlite3_step() wrapper procedure.
60674 */
60675 static int sqlite3Step(Vdbe *p){
60676   sqlite3 *db;
60677   int rc;
60678
60679   assert(p);
60680   if( p->magic!=VDBE_MAGIC_RUN ){
60681     /* We used to require that sqlite3_reset() be called before retrying
60682     ** sqlite3_step() after any error or after SQLITE_DONE.  But beginning
60683     ** with version 3.7.0, we changed this so that sqlite3_reset() would
60684     ** be called automatically instead of throwing the SQLITE_MISUSE error.
60685     ** This "automatic-reset" change is not technically an incompatibility, 
60686     ** since any application that receives an SQLITE_MISUSE is broken by
60687     ** definition.
60688     **
60689     ** Nevertheless, some published applications that were originally written
60690     ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE 
60691     ** returns, and the so were broken by the automatic-reset change.  As a
60692     ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the
60693     ** legacy behavior of returning SQLITE_MISUSE for cases where the 
60694     ** previous sqlite3_step() returned something other than a SQLITE_LOCKED
60695     ** or SQLITE_BUSY error.
60696     */
60697 #ifdef SQLITE_OMIT_AUTORESET
60698     if( p->rc==SQLITE_BUSY || p->rc==SQLITE_LOCKED ){
60699       sqlite3_reset((sqlite3_stmt*)p);
60700     }else{
60701       return SQLITE_MISUSE_BKPT;
60702     }
60703 #else
60704     sqlite3_reset((sqlite3_stmt*)p);
60705 #endif
60706   }
60707
60708   /* Check that malloc() has not failed. If it has, return early. */
60709   db = p->db;
60710   if( db->mallocFailed ){
60711     p->rc = SQLITE_NOMEM;
60712     return SQLITE_NOMEM;
60713   }
60714
60715   if( p->pc<=0 && p->expired ){
60716     p->rc = SQLITE_SCHEMA;
60717     rc = SQLITE_ERROR;
60718     goto end_of_step;
60719   }
60720   if( p->pc<0 ){
60721     /* If there are no other statements currently running, then
60722     ** reset the interrupt flag.  This prevents a call to sqlite3_interrupt
60723     ** from interrupting a statement that has not yet started.
60724     */
60725     if( db->activeVdbeCnt==0 ){
60726       db->u1.isInterrupted = 0;
60727     }
60728
60729     assert( db->writeVdbeCnt>0 || db->autoCommit==0 || db->nDeferredCons==0 );
60730
60731 #ifndef SQLITE_OMIT_TRACE
60732     if( db->xProfile && !db->init.busy ){
60733       sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime);
60734     }
60735 #endif
60736
60737     db->activeVdbeCnt++;
60738     if( p->readOnly==0 ) db->writeVdbeCnt++;
60739     p->pc = 0;
60740   }
60741 #ifndef SQLITE_OMIT_EXPLAIN
60742   if( p->explain ){
60743     rc = sqlite3VdbeList(p);
60744   }else
60745 #endif /* SQLITE_OMIT_EXPLAIN */
60746   {
60747     db->vdbeExecCnt++;
60748     rc = sqlite3VdbeExec(p);
60749     db->vdbeExecCnt--;
60750   }
60751
60752 #ifndef SQLITE_OMIT_TRACE
60753   /* Invoke the profile callback if there is one
60754   */
60755   if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){
60756     sqlite3_int64 iNow;
60757     sqlite3OsCurrentTimeInt64(db->pVfs, &iNow);
60758     db->xProfile(db->pProfileArg, p->zSql, (iNow - p->startTime)*1000000);
60759   }
60760 #endif
60761
60762   if( rc==SQLITE_DONE ){
60763     assert( p->rc==SQLITE_OK );
60764     p->rc = doWalCallbacks(db);
60765     if( p->rc!=SQLITE_OK ){
60766       rc = SQLITE_ERROR;
60767     }
60768   }
60769
60770   db->errCode = rc;
60771   if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){
60772     p->rc = SQLITE_NOMEM;
60773   }
60774 end_of_step:
60775   /* At this point local variable rc holds the value that should be 
60776   ** returned if this statement was compiled using the legacy 
60777   ** sqlite3_prepare() interface. According to the docs, this can only
60778   ** be one of the values in the first assert() below. Variable p->rc 
60779   ** contains the value that would be returned if sqlite3_finalize() 
60780   ** were called on statement p.
60781   */
60782   assert( rc==SQLITE_ROW  || rc==SQLITE_DONE   || rc==SQLITE_ERROR 
60783        || rc==SQLITE_BUSY || rc==SQLITE_MISUSE
60784   );
60785   assert( p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE );
60786   if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){
60787     /* If this statement was prepared using sqlite3_prepare_v2(), and an
60788     ** error has occured, then return the error code in p->rc to the
60789     ** caller. Set the error code in the database handle to the same value.
60790     */ 
60791     rc = db->errCode = p->rc;
60792   }
60793   return (rc&db->errMask);
60794 }
60795
60796 /*
60797 ** This is the top-level implementation of sqlite3_step().  Call
60798 ** sqlite3Step() to do most of the work.  If a schema error occurs,
60799 ** call sqlite3Reprepare() and try again.
60800 */
60801 SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){
60802   int rc = SQLITE_OK;      /* Result from sqlite3Step() */
60803   int rc2 = SQLITE_OK;     /* Result from sqlite3Reprepare() */
60804   Vdbe *v = (Vdbe*)pStmt;  /* the prepared statement */
60805   int cnt = 0;             /* Counter to prevent infinite loop of reprepares */
60806   sqlite3 *db;             /* The database connection */
60807
60808   if( vdbeSafetyNotNull(v) ){
60809     return SQLITE_MISUSE_BKPT;
60810   }
60811   db = v->db;
60812   sqlite3_mutex_enter(db->mutex);
60813   while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
60814          && cnt++ < 5
60815          && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){
60816     sqlite3_reset(pStmt);
60817     v->expired = 0;
60818   }
60819   if( rc2!=SQLITE_OK && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){
60820     /* This case occurs after failing to recompile an sql statement. 
60821     ** The error message from the SQL compiler has already been loaded 
60822     ** into the database handle. This block copies the error message 
60823     ** from the database handle into the statement and sets the statement
60824     ** program counter to 0 to ensure that when the statement is 
60825     ** finalized or reset the parser error message is available via
60826     ** sqlite3_errmsg() and sqlite3_errcode().
60827     */
60828     const char *zErr = (const char *)sqlite3_value_text(db->pErr); 
60829     sqlite3DbFree(db, v->zErrMsg);
60830     if( !db->mallocFailed ){
60831       v->zErrMsg = sqlite3DbStrDup(db, zErr);
60832       v->rc = rc2;
60833     } else {
60834       v->zErrMsg = 0;
60835       v->rc = rc = SQLITE_NOMEM;
60836     }
60837   }
60838   rc = sqlite3ApiExit(db, rc);
60839   sqlite3_mutex_leave(db->mutex);
60840   return rc;
60841 }
60842
60843 /*
60844 ** Extract the user data from a sqlite3_context structure and return a
60845 ** pointer to it.
60846 */
60847 SQLITE_API void *sqlite3_user_data(sqlite3_context *p){
60848   assert( p && p->pFunc );
60849   return p->pFunc->pUserData;
60850 }
60851
60852 /*
60853 ** Extract the user data from a sqlite3_context structure and return a
60854 ** pointer to it.
60855 **
60856 ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface
60857 ** returns a copy of the pointer to the database connection (the 1st
60858 ** parameter) of the sqlite3_create_function() and
60859 ** sqlite3_create_function16() routines that originally registered the
60860 ** application defined function.
60861 */
60862 SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
60863   assert( p && p->pFunc );
60864   return p->s.db;
60865 }
60866
60867 /*
60868 ** The following is the implementation of an SQL function that always
60869 ** fails with an error message stating that the function is used in the
60870 ** wrong context.  The sqlite3_overload_function() API might construct
60871 ** SQL function that use this routine so that the functions will exist
60872 ** for name resolution but are actually overloaded by the xFindFunction
60873 ** method of virtual tables.
60874 */
60875 SQLITE_PRIVATE void sqlite3InvalidFunction(
60876   sqlite3_context *context,  /* The function calling context */
60877   int NotUsed,               /* Number of arguments to the function */
60878   sqlite3_value **NotUsed2   /* Value of each argument */
60879 ){
60880   const char *zName = context->pFunc->zName;
60881   char *zErr;
60882   UNUSED_PARAMETER2(NotUsed, NotUsed2);
60883   zErr = sqlite3_mprintf(
60884       "unable to use function %s in the requested context", zName);
60885   sqlite3_result_error(context, zErr, -1);
60886   sqlite3_free(zErr);
60887 }
60888
60889 /*
60890 ** Allocate or return the aggregate context for a user function.  A new
60891 ** context is allocated on the first call.  Subsequent calls return the
60892 ** same context that was returned on prior calls.
60893 */
60894 SQLITE_API void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
60895   Mem *pMem;
60896   assert( p && p->pFunc && p->pFunc->xStep );
60897   assert( sqlite3_mutex_held(p->s.db->mutex) );
60898   pMem = p->pMem;
60899   testcase( nByte<0 );
60900   if( (pMem->flags & MEM_Agg)==0 ){
60901     if( nByte<=0 ){
60902       sqlite3VdbeMemReleaseExternal(pMem);
60903       pMem->flags = MEM_Null;
60904       pMem->z = 0;
60905     }else{
60906       sqlite3VdbeMemGrow(pMem, nByte, 0);
60907       pMem->flags = MEM_Agg;
60908       pMem->u.pDef = p->pFunc;
60909       if( pMem->z ){
60910         memset(pMem->z, 0, nByte);
60911       }
60912     }
60913   }
60914   return (void*)pMem->z;
60915 }
60916
60917 /*
60918 ** Return the auxilary data pointer, if any, for the iArg'th argument to
60919 ** the user-function defined by pCtx.
60920 */
60921 SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
60922   VdbeFunc *pVdbeFunc;
60923
60924   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60925   pVdbeFunc = pCtx->pVdbeFunc;
60926   if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){
60927     return 0;
60928   }
60929   return pVdbeFunc->apAux[iArg].pAux;
60930 }
60931
60932 /*
60933 ** Set the auxilary data pointer and delete function, for the iArg'th
60934 ** argument to the user-function defined by pCtx. Any previous value is
60935 ** deleted by calling the delete function specified when it was set.
60936 */
60937 SQLITE_API void sqlite3_set_auxdata(
60938   sqlite3_context *pCtx, 
60939   int iArg, 
60940   void *pAux, 
60941   void (*xDelete)(void*)
60942 ){
60943   struct AuxData *pAuxData;
60944   VdbeFunc *pVdbeFunc;
60945   if( iArg<0 ) goto failed;
60946
60947   assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
60948   pVdbeFunc = pCtx->pVdbeFunc;
60949   if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){
60950     int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0);
60951     int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg;
60952     pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc);
60953     if( !pVdbeFunc ){
60954       goto failed;
60955     }
60956     pCtx->pVdbeFunc = pVdbeFunc;
60957     memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux));
60958     pVdbeFunc->nAux = iArg+1;
60959     pVdbeFunc->pFunc = pCtx->pFunc;
60960   }
60961
60962   pAuxData = &pVdbeFunc->apAux[iArg];
60963   if( pAuxData->pAux && pAuxData->xDelete ){
60964     pAuxData->xDelete(pAuxData->pAux);
60965   }
60966   pAuxData->pAux = pAux;
60967   pAuxData->xDelete = xDelete;
60968   return;
60969
60970 failed:
60971   if( xDelete ){
60972     xDelete(pAux);
60973   }
60974 }
60975
60976 #ifndef SQLITE_OMIT_DEPRECATED
60977 /*
60978 ** Return the number of times the Step function of a aggregate has been 
60979 ** called.
60980 **
60981 ** This function is deprecated.  Do not use it for new code.  It is
60982 ** provide only to avoid breaking legacy code.  New aggregate function
60983 ** implementations should keep their own counts within their aggregate
60984 ** context.
60985 */
60986 SQLITE_API int sqlite3_aggregate_count(sqlite3_context *p){
60987   assert( p && p->pMem && p->pFunc && p->pFunc->xStep );
60988   return p->pMem->n;
60989 }
60990 #endif
60991
60992 /*
60993 ** Return the number of columns in the result set for the statement pStmt.
60994 */
60995 SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt){
60996   Vdbe *pVm = (Vdbe *)pStmt;
60997   return pVm ? pVm->nResColumn : 0;
60998 }
60999
61000 /*
61001 ** Return the number of values available from the current row of the
61002 ** currently executing statement pStmt.
61003 */
61004 SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt){
61005   Vdbe *pVm = (Vdbe *)pStmt;
61006   if( pVm==0 || pVm->pResultSet==0 ) return 0;
61007   return pVm->nResColumn;
61008 }
61009
61010
61011 /*
61012 ** Check to see if column iCol of the given statement is valid.  If
61013 ** it is, return a pointer to the Mem for the value of that column.
61014 ** If iCol is not valid, return a pointer to a Mem which has a value
61015 ** of NULL.
61016 */
61017 static Mem *columnMem(sqlite3_stmt *pStmt, int i){
61018   Vdbe *pVm;
61019   Mem *pOut;
61020
61021   pVm = (Vdbe *)pStmt;
61022   if( pVm && pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){
61023     sqlite3_mutex_enter(pVm->db->mutex);
61024     pOut = &pVm->pResultSet[i];
61025   }else{
61026     /* If the value passed as the second argument is out of range, return
61027     ** a pointer to the following static Mem object which contains the
61028     ** value SQL NULL. Even though the Mem structure contains an element
61029     ** of type i64, on certain architecture (x86) with certain compiler
61030     ** switches (-Os), gcc may align this Mem object on a 4-byte boundary
61031     ** instead of an 8-byte one. This all works fine, except that when
61032     ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s
61033     ** that a Mem structure is located on an 8-byte boundary. To prevent
61034     ** this assert() from failing, when building with SQLITE_DEBUG defined
61035     ** using gcc, force nullMem to be 8-byte aligned using the magical
61036     ** __attribute__((aligned(8))) macro.  */
61037     static const Mem nullMem 
61038 #if defined(SQLITE_DEBUG) && defined(__GNUC__)
61039       __attribute__((aligned(8))) 
61040 #endif
61041       = {0, "", (double)0, {0}, 0, MEM_Null, SQLITE_NULL, 0,
61042 #ifdef SQLITE_DEBUG
61043          0, 0,  /* pScopyFrom, pFiller */
61044 #endif
61045          0, 0 };
61046
61047     if( pVm && ALWAYS(pVm->db) ){
61048       sqlite3_mutex_enter(pVm->db->mutex);
61049       sqlite3Error(pVm->db, SQLITE_RANGE, 0);
61050     }
61051     pOut = (Mem*)&nullMem;
61052   }
61053   return pOut;
61054 }
61055
61056 /*
61057 ** This function is called after invoking an sqlite3_value_XXX function on a 
61058 ** column value (i.e. a value returned by evaluating an SQL expression in the
61059 ** select list of a SELECT statement) that may cause a malloc() failure. If 
61060 ** malloc() has failed, the threads mallocFailed flag is cleared and the result
61061 ** code of statement pStmt set to SQLITE_NOMEM.
61062 **
61063 ** Specifically, this is called from within:
61064 **
61065 **     sqlite3_column_int()
61066 **     sqlite3_column_int64()
61067 **     sqlite3_column_text()
61068 **     sqlite3_column_text16()
61069 **     sqlite3_column_real()
61070 **     sqlite3_column_bytes()
61071 **     sqlite3_column_bytes16()
61072 **     sqiite3_column_blob()
61073 */
61074 static void columnMallocFailure(sqlite3_stmt *pStmt)
61075 {
61076   /* If malloc() failed during an encoding conversion within an
61077   ** sqlite3_column_XXX API, then set the return code of the statement to
61078   ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
61079   ** and _finalize() will return NOMEM.
61080   */
61081   Vdbe *p = (Vdbe *)pStmt;
61082   if( p ){
61083     p->rc = sqlite3ApiExit(p->db, p->rc);
61084     sqlite3_mutex_leave(p->db->mutex);
61085   }
61086 }
61087
61088 /**************************** sqlite3_column_  *******************************
61089 ** The following routines are used to access elements of the current row
61090 ** in the result set.
61091 */
61092 SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
61093   const void *val;
61094   val = sqlite3_value_blob( columnMem(pStmt,i) );
61095   /* Even though there is no encoding conversion, value_blob() might
61096   ** need to call malloc() to expand the result of a zeroblob() 
61097   ** expression. 
61098   */
61099   columnMallocFailure(pStmt);
61100   return val;
61101 }
61102 SQLITE_API int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
61103   int val = sqlite3_value_bytes( columnMem(pStmt,i) );
61104   columnMallocFailure(pStmt);
61105   return val;
61106 }
61107 SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
61108   int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
61109   columnMallocFailure(pStmt);
61110   return val;
61111 }
61112 SQLITE_API double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
61113   double val = sqlite3_value_double( columnMem(pStmt,i) );
61114   columnMallocFailure(pStmt);
61115   return val;
61116 }
61117 SQLITE_API int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
61118   int val = sqlite3_value_int( columnMem(pStmt,i) );
61119   columnMallocFailure(pStmt);
61120   return val;
61121 }
61122 SQLITE_API sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
61123   sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
61124   columnMallocFailure(pStmt);
61125   return val;
61126 }
61127 SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
61128   const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
61129   columnMallocFailure(pStmt);
61130   return val;
61131 }
61132 SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
61133   Mem *pOut = columnMem(pStmt, i);
61134   if( pOut->flags&MEM_Static ){
61135     pOut->flags &= ~MEM_Static;
61136     pOut->flags |= MEM_Ephem;
61137   }
61138   columnMallocFailure(pStmt);
61139   return (sqlite3_value *)pOut;
61140 }
61141 #ifndef SQLITE_OMIT_UTF16
61142 SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
61143   const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
61144   columnMallocFailure(pStmt);
61145   return val;
61146 }
61147 #endif /* SQLITE_OMIT_UTF16 */
61148 SQLITE_API int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
61149   int iType = sqlite3_value_type( columnMem(pStmt,i) );
61150   columnMallocFailure(pStmt);
61151   return iType;
61152 }
61153
61154 /* The following function is experimental and subject to change or
61155 ** removal */
61156 /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){
61157 **  return sqlite3_value_numeric_type( columnMem(pStmt,i) );
61158 **}
61159 */
61160
61161 /*
61162 ** Convert the N-th element of pStmt->pColName[] into a string using
61163 ** xFunc() then return that string.  If N is out of range, return 0.
61164 **
61165 ** There are up to 5 names for each column.  useType determines which
61166 ** name is returned.  Here are the names:
61167 **
61168 **    0      The column name as it should be displayed for output
61169 **    1      The datatype name for the column
61170 **    2      The name of the database that the column derives from
61171 **    3      The name of the table that the column derives from
61172 **    4      The name of the table column that the result column derives from
61173 **
61174 ** If the result is not a simple column reference (if it is an expression
61175 ** or a constant) then useTypes 2, 3, and 4 return NULL.
61176 */
61177 static const void *columnName(
61178   sqlite3_stmt *pStmt,
61179   int N,
61180   const void *(*xFunc)(Mem*),
61181   int useType
61182 ){
61183   const void *ret = 0;
61184   Vdbe *p = (Vdbe *)pStmt;
61185   int n;
61186   sqlite3 *db = p->db;
61187   
61188   assert( db!=0 );
61189   n = sqlite3_column_count(pStmt);
61190   if( N<n && N>=0 ){
61191     N += useType*n;
61192     sqlite3_mutex_enter(db->mutex);
61193     assert( db->mallocFailed==0 );
61194     ret = xFunc(&p->aColName[N]);
61195      /* A malloc may have failed inside of the xFunc() call. If this
61196     ** is the case, clear the mallocFailed flag and return NULL.
61197     */
61198     if( db->mallocFailed ){
61199       db->mallocFailed = 0;
61200       ret = 0;
61201     }
61202     sqlite3_mutex_leave(db->mutex);
61203   }
61204   return ret;
61205 }
61206
61207 /*
61208 ** Return the name of the Nth column of the result set returned by SQL
61209 ** statement pStmt.
61210 */
61211 SQLITE_API const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
61212   return columnName(
61213       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
61214 }
61215 #ifndef SQLITE_OMIT_UTF16
61216 SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
61217   return columnName(
61218       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
61219 }
61220 #endif
61221
61222 /*
61223 ** Constraint:  If you have ENABLE_COLUMN_METADATA then you must
61224 ** not define OMIT_DECLTYPE.
61225 */
61226 #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
61227 # error "Must not define both SQLITE_OMIT_DECLTYPE \
61228          and SQLITE_ENABLE_COLUMN_METADATA"
61229 #endif
61230
61231 #ifndef SQLITE_OMIT_DECLTYPE
61232 /*
61233 ** Return the column declaration type (if applicable) of the 'i'th column
61234 ** of the result set of SQL statement pStmt.
61235 */
61236 SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
61237   return columnName(
61238       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
61239 }
61240 #ifndef SQLITE_OMIT_UTF16
61241 SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
61242   return columnName(
61243       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
61244 }
61245 #endif /* SQLITE_OMIT_UTF16 */
61246 #endif /* SQLITE_OMIT_DECLTYPE */
61247
61248 #ifdef SQLITE_ENABLE_COLUMN_METADATA
61249 /*
61250 ** Return the name of the database from which a result column derives.
61251 ** NULL is returned if the result column is an expression or constant or
61252 ** anything else which is not an unabiguous reference to a database column.
61253 */
61254 SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
61255   return columnName(
61256       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
61257 }
61258 #ifndef SQLITE_OMIT_UTF16
61259 SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
61260   return columnName(
61261       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
61262 }
61263 #endif /* SQLITE_OMIT_UTF16 */
61264
61265 /*
61266 ** Return the name of the table from which a result column derives.
61267 ** NULL is returned if the result column is an expression or constant or
61268 ** anything else which is not an unabiguous reference to a database column.
61269 */
61270 SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
61271   return columnName(
61272       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
61273 }
61274 #ifndef SQLITE_OMIT_UTF16
61275 SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
61276   return columnName(
61277       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
61278 }
61279 #endif /* SQLITE_OMIT_UTF16 */
61280
61281 /*
61282 ** Return the name of the table column from which a result column derives.
61283 ** NULL is returned if the result column is an expression or constant or
61284 ** anything else which is not an unabiguous reference to a database column.
61285 */
61286 SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
61287   return columnName(
61288       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
61289 }
61290 #ifndef SQLITE_OMIT_UTF16
61291 SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
61292   return columnName(
61293       pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
61294 }
61295 #endif /* SQLITE_OMIT_UTF16 */
61296 #endif /* SQLITE_ENABLE_COLUMN_METADATA */
61297
61298
61299 /******************************* sqlite3_bind_  ***************************
61300 ** 
61301 ** Routines used to attach values to wildcards in a compiled SQL statement.
61302 */
61303 /*
61304 ** Unbind the value bound to variable i in virtual machine p. This is the 
61305 ** the same as binding a NULL value to the column. If the "i" parameter is
61306 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
61307 **
61308 ** A successful evaluation of this routine acquires the mutex on p.
61309 ** the mutex is released if any kind of error occurs.
61310 **
61311 ** The error code stored in database p->db is overwritten with the return
61312 ** value in any case.
61313 */
61314 static int vdbeUnbind(Vdbe *p, int i){
61315   Mem *pVar;
61316   if( vdbeSafetyNotNull(p) ){
61317     return SQLITE_MISUSE_BKPT;
61318   }
61319   sqlite3_mutex_enter(p->db->mutex);
61320   if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
61321     sqlite3Error(p->db, SQLITE_MISUSE, 0);
61322     sqlite3_mutex_leave(p->db->mutex);
61323     sqlite3_log(SQLITE_MISUSE, 
61324         "bind on a busy prepared statement: [%s]", p->zSql);
61325     return SQLITE_MISUSE_BKPT;
61326   }
61327   if( i<1 || i>p->nVar ){
61328     sqlite3Error(p->db, SQLITE_RANGE, 0);
61329     sqlite3_mutex_leave(p->db->mutex);
61330     return SQLITE_RANGE;
61331   }
61332   i--;
61333   pVar = &p->aVar[i];
61334   sqlite3VdbeMemRelease(pVar);
61335   pVar->flags = MEM_Null;
61336   sqlite3Error(p->db, SQLITE_OK, 0);
61337
61338   /* If the bit corresponding to this variable in Vdbe.expmask is set, then 
61339   ** binding a new value to this variable invalidates the current query plan.
61340   **
61341   ** IMPLEMENTATION-OF: R-48440-37595 If the specific value bound to host
61342   ** parameter in the WHERE clause might influence the choice of query plan
61343   ** for a statement, then the statement will be automatically recompiled,
61344   ** as if there had been a schema change, on the first sqlite3_step() call
61345   ** following any change to the bindings of that parameter.
61346   */
61347   if( p->isPrepareV2 &&
61348      ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff)
61349   ){
61350     p->expired = 1;
61351   }
61352   return SQLITE_OK;
61353 }
61354
61355 /*
61356 ** Bind a text or BLOB value.
61357 */
61358 static int bindText(
61359   sqlite3_stmt *pStmt,   /* The statement to bind against */
61360   int i,                 /* Index of the parameter to bind */
61361   const void *zData,     /* Pointer to the data to be bound */
61362   int nData,             /* Number of bytes of data to be bound */
61363   void (*xDel)(void*),   /* Destructor for the data */
61364   u8 encoding            /* Encoding for the data */
61365 ){
61366   Vdbe *p = (Vdbe *)pStmt;
61367   Mem *pVar;
61368   int rc;
61369
61370   rc = vdbeUnbind(p, i);
61371   if( rc==SQLITE_OK ){
61372     if( zData!=0 ){
61373       pVar = &p->aVar[i-1];
61374       rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
61375       if( rc==SQLITE_OK && encoding!=0 ){
61376         rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
61377       }
61378       sqlite3Error(p->db, rc, 0);
61379       rc = sqlite3ApiExit(p->db, rc);
61380     }
61381     sqlite3_mutex_leave(p->db->mutex);
61382   }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){
61383     xDel((void*)zData);
61384   }
61385   return rc;
61386 }
61387
61388
61389 /*
61390 ** Bind a blob value to an SQL statement variable.
61391 */
61392 SQLITE_API int sqlite3_bind_blob(
61393   sqlite3_stmt *pStmt, 
61394   int i, 
61395   const void *zData, 
61396   int nData, 
61397   void (*xDel)(void*)
61398 ){
61399   return bindText(pStmt, i, zData, nData, xDel, 0);
61400 }
61401 SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
61402   int rc;
61403   Vdbe *p = (Vdbe *)pStmt;
61404   rc = vdbeUnbind(p, i);
61405   if( rc==SQLITE_OK ){
61406     sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
61407     sqlite3_mutex_leave(p->db->mutex);
61408   }
61409   return rc;
61410 }
61411 SQLITE_API int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
61412   return sqlite3_bind_int64(p, i, (i64)iValue);
61413 }
61414 SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
61415   int rc;
61416   Vdbe *p = (Vdbe *)pStmt;
61417   rc = vdbeUnbind(p, i);
61418   if( rc==SQLITE_OK ){
61419     sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
61420     sqlite3_mutex_leave(p->db->mutex);
61421   }
61422   return rc;
61423 }
61424 SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
61425   int rc;
61426   Vdbe *p = (Vdbe*)pStmt;
61427   rc = vdbeUnbind(p, i);
61428   if( rc==SQLITE_OK ){
61429     sqlite3_mutex_leave(p->db->mutex);
61430   }
61431   return rc;
61432 }
61433 SQLITE_API int sqlite3_bind_text( 
61434   sqlite3_stmt *pStmt, 
61435   int i, 
61436   const char *zData, 
61437   int nData, 
61438   void (*xDel)(void*)
61439 ){
61440   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
61441 }
61442 #ifndef SQLITE_OMIT_UTF16
61443 SQLITE_API int sqlite3_bind_text16(
61444   sqlite3_stmt *pStmt, 
61445   int i, 
61446   const void *zData, 
61447   int nData, 
61448   void (*xDel)(void*)
61449 ){
61450   return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
61451 }
61452 #endif /* SQLITE_OMIT_UTF16 */
61453 SQLITE_API int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
61454   int rc;
61455   switch( pValue->type ){
61456     case SQLITE_INTEGER: {
61457       rc = sqlite3_bind_int64(pStmt, i, pValue->u.i);
61458       break;
61459     }
61460     case SQLITE_FLOAT: {
61461       rc = sqlite3_bind_double(pStmt, i, pValue->r);
61462       break;
61463     }
61464     case SQLITE_BLOB: {
61465       if( pValue->flags & MEM_Zero ){
61466         rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero);
61467       }else{
61468         rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT);
61469       }
61470       break;
61471     }
61472     case SQLITE_TEXT: {
61473       rc = bindText(pStmt,i,  pValue->z, pValue->n, SQLITE_TRANSIENT,
61474                               pValue->enc);
61475       break;
61476     }
61477     default: {
61478       rc = sqlite3_bind_null(pStmt, i);
61479       break;
61480     }
61481   }
61482   return rc;
61483 }
61484 SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
61485   int rc;
61486   Vdbe *p = (Vdbe *)pStmt;
61487   rc = vdbeUnbind(p, i);
61488   if( rc==SQLITE_OK ){
61489     sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
61490     sqlite3_mutex_leave(p->db->mutex);
61491   }
61492   return rc;
61493 }
61494
61495 /*
61496 ** Return the number of wildcards that can be potentially bound to.
61497 ** This routine is added to support DBD::SQLite.  
61498 */
61499 SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
61500   Vdbe *p = (Vdbe*)pStmt;
61501   return p ? p->nVar : 0;
61502 }
61503
61504 /*
61505 ** Create a mapping from variable numbers to variable names
61506 ** in the Vdbe.azVar[] array, if such a mapping does not already
61507 ** exist.
61508 */
61509 static void createVarMap(Vdbe *p){
61510   if( !p->okVar ){
61511     int j;
61512     Op *pOp;
61513     sqlite3_mutex_enter(p->db->mutex);
61514     /* The race condition here is harmless.  If two threads call this
61515     ** routine on the same Vdbe at the same time, they both might end
61516     ** up initializing the Vdbe.azVar[] array.  That is a little extra
61517     ** work but it results in the same answer.
61518     */
61519     for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){
61520       if( pOp->opcode==OP_Variable ){
61521         assert( pOp->p1>0 && pOp->p1<=p->nVar );
61522         p->azVar[pOp->p1-1] = pOp->p4.z;
61523       }
61524     }
61525     p->okVar = 1;
61526     sqlite3_mutex_leave(p->db->mutex);
61527   }
61528 }
61529
61530 /*
61531 ** Return the name of a wildcard parameter.  Return NULL if the index
61532 ** is out of range or if the wildcard is unnamed.
61533 **
61534 ** The result is always UTF-8.
61535 */
61536 SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
61537   Vdbe *p = (Vdbe*)pStmt;
61538   if( p==0 || i<1 || i>p->nVar ){
61539     return 0;
61540   }
61541   createVarMap(p);
61542   return p->azVar[i-1];
61543 }
61544
61545 /*
61546 ** Given a wildcard parameter name, return the index of the variable
61547 ** with that name.  If there is no variable with the given name,
61548 ** return 0.
61549 */
61550 SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){
61551   int i;
61552   if( p==0 ){
61553     return 0;
61554   }
61555   createVarMap(p); 
61556   if( zName ){
61557     for(i=0; i<p->nVar; i++){
61558       const char *z = p->azVar[i];
61559       if( z && strncmp(z,zName,nName)==0 && z[nName]==0 ){
61560         return i+1;
61561       }
61562     }
61563   }
61564   return 0;
61565 }
61566 SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
61567   return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName));
61568 }
61569
61570 /*
61571 ** Transfer all bindings from the first statement over to the second.
61572 */
61573 SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
61574   Vdbe *pFrom = (Vdbe*)pFromStmt;
61575   Vdbe *pTo = (Vdbe*)pToStmt;
61576   int i;
61577   assert( pTo->db==pFrom->db );
61578   assert( pTo->nVar==pFrom->nVar );
61579   sqlite3_mutex_enter(pTo->db->mutex);
61580   for(i=0; i<pFrom->nVar; i++){
61581     sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
61582   }
61583   sqlite3_mutex_leave(pTo->db->mutex);
61584   return SQLITE_OK;
61585 }
61586
61587 #ifndef SQLITE_OMIT_DEPRECATED
61588 /*
61589 ** Deprecated external interface.  Internal/core SQLite code
61590 ** should call sqlite3TransferBindings.
61591 **
61592 ** Is is misuse to call this routine with statements from different
61593 ** database connections.  But as this is a deprecated interface, we
61594 ** will not bother to check for that condition.
61595 **
61596 ** If the two statements contain a different number of bindings, then
61597 ** an SQLITE_ERROR is returned.  Nothing else can go wrong, so otherwise
61598 ** SQLITE_OK is returned.
61599 */
61600 SQLITE_API int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
61601   Vdbe *pFrom = (Vdbe*)pFromStmt;
61602   Vdbe *pTo = (Vdbe*)pToStmt;
61603   if( pFrom->nVar!=pTo->nVar ){
61604     return SQLITE_ERROR;
61605   }
61606   if( pTo->isPrepareV2 && pTo->expmask ){
61607     pTo->expired = 1;
61608   }
61609   if( pFrom->isPrepareV2 && pFrom->expmask ){
61610     pFrom->expired = 1;
61611   }
61612   return sqlite3TransferBindings(pFromStmt, pToStmt);
61613 }
61614 #endif
61615
61616 /*
61617 ** Return the sqlite3* database handle to which the prepared statement given
61618 ** in the argument belongs.  This is the same database handle that was
61619 ** the first argument to the sqlite3_prepare() that was used to create
61620 ** the statement in the first place.
61621 */
61622 SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
61623   return pStmt ? ((Vdbe*)pStmt)->db : 0;
61624 }
61625
61626 /*
61627 ** Return true if the prepared statement is guaranteed to not modify the
61628 ** database.
61629 */
61630 SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){
61631   return pStmt ? ((Vdbe*)pStmt)->readOnly : 1;
61632 }
61633
61634 /*
61635 ** Return a pointer to the next prepared statement after pStmt associated
61636 ** with database connection pDb.  If pStmt is NULL, return the first
61637 ** prepared statement for the database connection.  Return NULL if there
61638 ** are no more.
61639 */
61640 SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
61641   sqlite3_stmt *pNext;
61642   sqlite3_mutex_enter(pDb->mutex);
61643   if( pStmt==0 ){
61644     pNext = (sqlite3_stmt*)pDb->pVdbe;
61645   }else{
61646     pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
61647   }
61648   sqlite3_mutex_leave(pDb->mutex);
61649   return pNext;
61650 }
61651
61652 /*
61653 ** Return the value of a status counter for a prepared statement
61654 */
61655 SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
61656   Vdbe *pVdbe = (Vdbe*)pStmt;
61657   int v = pVdbe->aCounter[op-1];
61658   if( resetFlag ) pVdbe->aCounter[op-1] = 0;
61659   return v;
61660 }
61661
61662 /************** End of vdbeapi.c *********************************************/
61663 /************** Begin file vdbetrace.c ***************************************/
61664 /*
61665 ** 2009 November 25
61666 **
61667 ** The author disclaims copyright to this source code.  In place of
61668 ** a legal notice, here is a blessing:
61669 **
61670 **    May you do good and not evil.
61671 **    May you find forgiveness for yourself and forgive others.
61672 **    May you share freely, never taking more than you give.
61673 **
61674 *************************************************************************
61675 **
61676 ** This file contains code used to insert the values of host parameters
61677 ** (aka "wildcards") into the SQL text output by sqlite3_trace().
61678 */
61679
61680 #ifndef SQLITE_OMIT_TRACE
61681
61682 /*
61683 ** zSql is a zero-terminated string of UTF-8 SQL text.  Return the number of
61684 ** bytes in this text up to but excluding the first character in
61685 ** a host parameter.  If the text contains no host parameters, return
61686 ** the total number of bytes in the text.
61687 */
61688 static int findNextHostParameter(const char *zSql, int *pnToken){
61689   int tokenType;
61690   int nTotal = 0;
61691   int n;
61692
61693   *pnToken = 0;
61694   while( zSql[0] ){
61695     n = sqlite3GetToken((u8*)zSql, &tokenType);
61696     assert( n>0 && tokenType!=TK_ILLEGAL );
61697     if( tokenType==TK_VARIABLE ){
61698       *pnToken = n;
61699       break;
61700     }
61701     nTotal += n;
61702     zSql += n;
61703   }
61704   return nTotal;
61705 }
61706
61707 /*
61708 ** This function returns a pointer to a nul-terminated string in memory
61709 ** obtained from sqlite3DbMalloc(). If sqlite3.vdbeExecCnt is 1, then the
61710 ** string contains a copy of zRawSql but with host parameters expanded to 
61711 ** their current bindings. Or, if sqlite3.vdbeExecCnt is greater than 1, 
61712 ** then the returned string holds a copy of zRawSql with "-- " prepended
61713 ** to each line of text.
61714 **
61715 ** The calling function is responsible for making sure the memory returned
61716 ** is eventually freed.
61717 **
61718 ** ALGORITHM:  Scan the input string looking for host parameters in any of
61719 ** these forms:  ?, ?N, $A, @A, :A.  Take care to avoid text within
61720 ** string literals, quoted identifier names, and comments.  For text forms,
61721 ** the host parameter index is found by scanning the perpared
61722 ** statement for the corresponding OP_Variable opcode.  Once the host
61723 ** parameter index is known, locate the value in p->aVar[].  Then render
61724 ** the value as a literal in place of the host parameter name.
61725 */
61726 SQLITE_PRIVATE char *sqlite3VdbeExpandSql(
61727   Vdbe *p,                 /* The prepared statement being evaluated */
61728   const char *zRawSql      /* Raw text of the SQL statement */
61729 ){
61730   sqlite3 *db;             /* The database connection */
61731   int idx = 0;             /* Index of a host parameter */
61732   int nextIndex = 1;       /* Index of next ? host parameter */
61733   int n;                   /* Length of a token prefix */
61734   int nToken;              /* Length of the parameter token */
61735   int i;                   /* Loop counter */
61736   Mem *pVar;               /* Value of a host parameter */
61737   StrAccum out;            /* Accumulate the output here */
61738   char zBase[100];         /* Initial working space */
61739
61740   db = p->db;
61741   sqlite3StrAccumInit(&out, zBase, sizeof(zBase), 
61742                       db->aLimit[SQLITE_LIMIT_LENGTH]);
61743   out.db = db;
61744   if( db->vdbeExecCnt>1 ){
61745     while( *zRawSql ){
61746       const char *zStart = zRawSql;
61747       while( *(zRawSql++)!='\n' && *zRawSql );
61748       sqlite3StrAccumAppend(&out, "-- ", 3);
61749       sqlite3StrAccumAppend(&out, zStart, (int)(zRawSql-zStart));
61750     }
61751   }else{
61752     while( zRawSql[0] ){
61753       n = findNextHostParameter(zRawSql, &nToken);
61754       assert( n>0 );
61755       sqlite3StrAccumAppend(&out, zRawSql, n);
61756       zRawSql += n;
61757       assert( zRawSql[0] || nToken==0 );
61758       if( nToken==0 ) break;
61759       if( zRawSql[0]=='?' ){
61760         if( nToken>1 ){
61761           assert( sqlite3Isdigit(zRawSql[1]) );
61762           sqlite3GetInt32(&zRawSql[1], &idx);
61763         }else{
61764           idx = nextIndex;
61765         }
61766       }else{
61767         assert( zRawSql[0]==':' || zRawSql[0]=='$' || zRawSql[0]=='@' );
61768         testcase( zRawSql[0]==':' );
61769         testcase( zRawSql[0]=='$' );
61770         testcase( zRawSql[0]=='@' );
61771         idx = sqlite3VdbeParameterIndex(p, zRawSql, nToken);
61772         assert( idx>0 );
61773       }
61774       zRawSql += nToken;
61775       nextIndex = idx + 1;
61776       assert( idx>0 && idx<=p->nVar );
61777       pVar = &p->aVar[idx-1];
61778       if( pVar->flags & MEM_Null ){
61779         sqlite3StrAccumAppend(&out, "NULL", 4);
61780       }else if( pVar->flags & MEM_Int ){
61781         sqlite3XPrintf(&out, "%lld", pVar->u.i);
61782       }else if( pVar->flags & MEM_Real ){
61783         sqlite3XPrintf(&out, "%!.15g", pVar->r);
61784       }else if( pVar->flags & MEM_Str ){
61785 #ifndef SQLITE_OMIT_UTF16
61786         u8 enc = ENC(db);
61787         if( enc!=SQLITE_UTF8 ){
61788           Mem utf8;
61789           memset(&utf8, 0, sizeof(utf8));
61790           utf8.db = db;
61791           sqlite3VdbeMemSetStr(&utf8, pVar->z, pVar->n, enc, SQLITE_STATIC);
61792           sqlite3VdbeChangeEncoding(&utf8, SQLITE_UTF8);
61793           sqlite3XPrintf(&out, "'%.*q'", utf8.n, utf8.z);
61794           sqlite3VdbeMemRelease(&utf8);
61795         }else
61796 #endif
61797         {
61798           sqlite3XPrintf(&out, "'%.*q'", pVar->n, pVar->z);
61799         }
61800       }else if( pVar->flags & MEM_Zero ){
61801         sqlite3XPrintf(&out, "zeroblob(%d)", pVar->u.nZero);
61802       }else{
61803         assert( pVar->flags & MEM_Blob );
61804         sqlite3StrAccumAppend(&out, "x'", 2);
61805         for(i=0; i<pVar->n; i++){
61806           sqlite3XPrintf(&out, "%02x", pVar->z[i]&0xff);
61807         }
61808         sqlite3StrAccumAppend(&out, "'", 1);
61809       }
61810     }
61811   }
61812   return sqlite3StrAccumFinish(&out);
61813 }
61814
61815 #endif /* #ifndef SQLITE_OMIT_TRACE */
61816
61817 /************** End of vdbetrace.c *******************************************/
61818 /************** Begin file vdbe.c ********************************************/
61819 /*
61820 ** 2001 September 15
61821 **
61822 ** The author disclaims copyright to this source code.  In place of
61823 ** a legal notice, here is a blessing:
61824 **
61825 **    May you do good and not evil.
61826 **    May you find forgiveness for yourself and forgive others.
61827 **    May you share freely, never taking more than you give.
61828 **
61829 *************************************************************************
61830 ** The code in this file implements execution method of the 
61831 ** Virtual Database Engine (VDBE).  A separate file ("vdbeaux.c")
61832 ** handles housekeeping details such as creating and deleting
61833 ** VDBE instances.  This file is solely interested in executing
61834 ** the VDBE program.
61835 **
61836 ** In the external interface, an "sqlite3_stmt*" is an opaque pointer
61837 ** to a VDBE.
61838 **
61839 ** The SQL parser generates a program which is then executed by
61840 ** the VDBE to do the work of the SQL statement.  VDBE programs are 
61841 ** similar in form to assembly language.  The program consists of
61842 ** a linear sequence of operations.  Each operation has an opcode 
61843 ** and 5 operands.  Operands P1, P2, and P3 are integers.  Operand P4 
61844 ** is a null-terminated string.  Operand P5 is an unsigned character.
61845 ** Few opcodes use all 5 operands.
61846 **
61847 ** Computation results are stored on a set of registers numbered beginning
61848 ** with 1 and going up to Vdbe.nMem.  Each register can store
61849 ** either an integer, a null-terminated string, a floating point
61850 ** number, or the SQL "NULL" value.  An implicit conversion from one
61851 ** type to the other occurs as necessary.
61852 ** 
61853 ** Most of the code in this file is taken up by the sqlite3VdbeExec()
61854 ** function which does the work of interpreting a VDBE program.
61855 ** But other routines are also provided to help in building up
61856 ** a program instruction by instruction.
61857 **
61858 ** Various scripts scan this source file in order to generate HTML
61859 ** documentation, headers files, or other derived files.  The formatting
61860 ** of the code in this file is, therefore, important.  See other comments
61861 ** in this file for details.  If in doubt, do not deviate from existing
61862 ** commenting and indentation practices when changing or adding code.
61863 */
61864
61865 /*
61866 ** Invoke this macro on memory cells just prior to changing the
61867 ** value of the cell.  This macro verifies that shallow copies are
61868 ** not misused.
61869 */
61870 #ifdef SQLITE_DEBUG
61871 # define memAboutToChange(P,M) sqlite3VdbeMemPrepareToChange(P,M)
61872 #else
61873 # define memAboutToChange(P,M)
61874 #endif
61875
61876 /*
61877 ** The following global variable is incremented every time a cursor
61878 ** moves, either by the OP_SeekXX, OP_Next, or OP_Prev opcodes.  The test
61879 ** procedures use this information to make sure that indices are
61880 ** working correctly.  This variable has no function other than to
61881 ** help verify the correct operation of the library.
61882 */
61883 #ifdef SQLITE_TEST
61884 SQLITE_API int sqlite3_search_count = 0;
61885 #endif
61886
61887 /*
61888 ** When this global variable is positive, it gets decremented once before
61889 ** each instruction in the VDBE.  When reaches zero, the u1.isInterrupted
61890 ** field of the sqlite3 structure is set in order to simulate and interrupt.
61891 **
61892 ** This facility is used for testing purposes only.  It does not function
61893 ** in an ordinary build.
61894 */
61895 #ifdef SQLITE_TEST
61896 SQLITE_API int sqlite3_interrupt_count = 0;
61897 #endif
61898
61899 /*
61900 ** The next global variable is incremented each type the OP_Sort opcode
61901 ** is executed.  The test procedures use this information to make sure that
61902 ** sorting is occurring or not occurring at appropriate times.   This variable
61903 ** has no function other than to help verify the correct operation of the
61904 ** library.
61905 */
61906 #ifdef SQLITE_TEST
61907 SQLITE_API int sqlite3_sort_count = 0;
61908 #endif
61909
61910 /*
61911 ** The next global variable records the size of the largest MEM_Blob
61912 ** or MEM_Str that has been used by a VDBE opcode.  The test procedures
61913 ** use this information to make sure that the zero-blob functionality
61914 ** is working correctly.   This variable has no function other than to
61915 ** help verify the correct operation of the library.
61916 */
61917 #ifdef SQLITE_TEST
61918 SQLITE_API int sqlite3_max_blobsize = 0;
61919 static void updateMaxBlobsize(Mem *p){
61920   if( (p->flags & (MEM_Str|MEM_Blob))!=0 && p->n>sqlite3_max_blobsize ){
61921     sqlite3_max_blobsize = p->n;
61922   }
61923 }
61924 #endif
61925
61926 /*
61927 ** The next global variable is incremented each type the OP_Found opcode
61928 ** is executed. This is used to test whether or not the foreign key
61929 ** operation implemented using OP_FkIsZero is working. This variable
61930 ** has no function other than to help verify the correct operation of the
61931 ** library.
61932 */
61933 #ifdef SQLITE_TEST
61934 SQLITE_API int sqlite3_found_count = 0;
61935 #endif
61936
61937 /*
61938 ** Test a register to see if it exceeds the current maximum blob size.
61939 ** If it does, record the new maximum blob size.
61940 */
61941 #if defined(SQLITE_TEST) && !defined(SQLITE_OMIT_BUILTIN_TEST)
61942 # define UPDATE_MAX_BLOBSIZE(P)  updateMaxBlobsize(P)
61943 #else
61944 # define UPDATE_MAX_BLOBSIZE(P)
61945 #endif
61946
61947 /*
61948 ** Convert the given register into a string if it isn't one
61949 ** already. Return non-zero if a malloc() fails.
61950 */
61951 #define Stringify(P, enc) \
61952    if(((P)->flags&(MEM_Str|MEM_Blob))==0 && sqlite3VdbeMemStringify(P,enc)) \
61953      { goto no_mem; }
61954
61955 /*
61956 ** An ephemeral string value (signified by the MEM_Ephem flag) contains
61957 ** a pointer to a dynamically allocated string where some other entity
61958 ** is responsible for deallocating that string.  Because the register
61959 ** does not control the string, it might be deleted without the register
61960 ** knowing it.
61961 **
61962 ** This routine converts an ephemeral string into a dynamically allocated
61963 ** string that the register itself controls.  In other words, it
61964 ** converts an MEM_Ephem string into an MEM_Dyn string.
61965 */
61966 #define Deephemeralize(P) \
61967    if( ((P)->flags&MEM_Ephem)!=0 \
61968        && sqlite3VdbeMemMakeWriteable(P) ){ goto no_mem;}
61969
61970 /*
61971 ** Call sqlite3VdbeMemExpandBlob() on the supplied value (type Mem*)
61972 ** P if required.
61973 */
61974 #define ExpandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0)
61975
61976 /*
61977 ** Argument pMem points at a register that will be passed to a
61978 ** user-defined function or returned to the user as the result of a query.
61979 ** This routine sets the pMem->type variable used by the sqlite3_value_*() 
61980 ** routines.
61981 */
61982 SQLITE_PRIVATE void sqlite3VdbeMemStoreType(Mem *pMem){
61983   int flags = pMem->flags;
61984   if( flags & MEM_Null ){
61985     pMem->type = SQLITE_NULL;
61986   }
61987   else if( flags & MEM_Int ){
61988     pMem->type = SQLITE_INTEGER;
61989   }
61990   else if( flags & MEM_Real ){
61991     pMem->type = SQLITE_FLOAT;
61992   }
61993   else if( flags & MEM_Str ){
61994     pMem->type = SQLITE_TEXT;
61995   }else{
61996     pMem->type = SQLITE_BLOB;
61997   }
61998 }
61999
62000 /*
62001 ** Allocate VdbeCursor number iCur.  Return a pointer to it.  Return NULL
62002 ** if we run out of memory.
62003 */
62004 static VdbeCursor *allocateCursor(
62005   Vdbe *p,              /* The virtual machine */
62006   int iCur,             /* Index of the new VdbeCursor */
62007   int nField,           /* Number of fields in the table or index */
62008   int iDb,              /* When database the cursor belongs to, or -1 */
62009   int isBtreeCursor     /* True for B-Tree.  False for pseudo-table or vtab */
62010 ){
62011   /* Find the memory cell that will be used to store the blob of memory
62012   ** required for this VdbeCursor structure. It is convenient to use a 
62013   ** vdbe memory cell to manage the memory allocation required for a
62014   ** VdbeCursor structure for the following reasons:
62015   **
62016   **   * Sometimes cursor numbers are used for a couple of different
62017   **     purposes in a vdbe program. The different uses might require
62018   **     different sized allocations. Memory cells provide growable
62019   **     allocations.
62020   **
62021   **   * When using ENABLE_MEMORY_MANAGEMENT, memory cell buffers can
62022   **     be freed lazily via the sqlite3_release_memory() API. This
62023   **     minimizes the number of malloc calls made by the system.
62024   **
62025   ** Memory cells for cursors are allocated at the top of the address
62026   ** space. Memory cell (p->nMem) corresponds to cursor 0. Space for
62027   ** cursor 1 is managed by memory cell (p->nMem-1), etc.
62028   */
62029   Mem *pMem = &p->aMem[p->nMem-iCur];
62030
62031   int nByte;
62032   VdbeCursor *pCx = 0;
62033   nByte = 
62034       ROUND8(sizeof(VdbeCursor)) + 
62035       (isBtreeCursor?sqlite3BtreeCursorSize():0) + 
62036       2*nField*sizeof(u32);
62037
62038   assert( iCur<p->nCursor );
62039   if( p->apCsr[iCur] ){
62040     sqlite3VdbeFreeCursor(p, p->apCsr[iCur]);
62041     p->apCsr[iCur] = 0;
62042   }
62043   if( SQLITE_OK==sqlite3VdbeMemGrow(pMem, nByte, 0) ){
62044     p->apCsr[iCur] = pCx = (VdbeCursor*)pMem->z;
62045     memset(pCx, 0, sizeof(VdbeCursor));
62046     pCx->iDb = iDb;
62047     pCx->nField = nField;
62048     if( nField ){
62049       pCx->aType = (u32 *)&pMem->z[ROUND8(sizeof(VdbeCursor))];
62050     }
62051     if( isBtreeCursor ){
62052       pCx->pCursor = (BtCursor*)
62053           &pMem->z[ROUND8(sizeof(VdbeCursor))+2*nField*sizeof(u32)];
62054       sqlite3BtreeCursorZero(pCx->pCursor);
62055     }
62056   }
62057   return pCx;
62058 }
62059
62060 /*
62061 ** Try to convert a value into a numeric representation if we can
62062 ** do so without loss of information.  In other words, if the string
62063 ** looks like a number, convert it into a number.  If it does not
62064 ** look like a number, leave it alone.
62065 */
62066 static void applyNumericAffinity(Mem *pRec){
62067   if( (pRec->flags & (MEM_Real|MEM_Int))==0 ){
62068     double rValue;
62069     i64 iValue;
62070     u8 enc = pRec->enc;
62071     if( (pRec->flags&MEM_Str)==0 ) return;
62072     if( sqlite3AtoF(pRec->z, &rValue, pRec->n, enc)==0 ) return;
62073     if( 0==sqlite3Atoi64(pRec->z, &iValue, pRec->n, enc) ){
62074       pRec->u.i = iValue;
62075       pRec->flags |= MEM_Int;
62076     }else{
62077       pRec->r = rValue;
62078       pRec->flags |= MEM_Real;
62079     }
62080   }
62081 }
62082
62083 /*
62084 ** Processing is determine by the affinity parameter:
62085 **
62086 ** SQLITE_AFF_INTEGER:
62087 ** SQLITE_AFF_REAL:
62088 ** SQLITE_AFF_NUMERIC:
62089 **    Try to convert pRec to an integer representation or a 
62090 **    floating-point representation if an integer representation
62091 **    is not possible.  Note that the integer representation is
62092 **    always preferred, even if the affinity is REAL, because
62093 **    an integer representation is more space efficient on disk.
62094 **
62095 ** SQLITE_AFF_TEXT:
62096 **    Convert pRec to a text representation.
62097 **
62098 ** SQLITE_AFF_NONE:
62099 **    No-op.  pRec is unchanged.
62100 */
62101 static void applyAffinity(
62102   Mem *pRec,          /* The value to apply affinity to */
62103   char affinity,      /* The affinity to be applied */
62104   u8 enc              /* Use this text encoding */
62105 ){
62106   if( affinity==SQLITE_AFF_TEXT ){
62107     /* Only attempt the conversion to TEXT if there is an integer or real
62108     ** representation (blob and NULL do not get converted) but no string
62109     ** representation.
62110     */
62111     if( 0==(pRec->flags&MEM_Str) && (pRec->flags&(MEM_Real|MEM_Int)) ){
62112       sqlite3VdbeMemStringify(pRec, enc);
62113     }
62114     pRec->flags &= ~(MEM_Real|MEM_Int);
62115   }else if( affinity!=SQLITE_AFF_NONE ){
62116     assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL
62117              || affinity==SQLITE_AFF_NUMERIC );
62118     applyNumericAffinity(pRec);
62119     if( pRec->flags & MEM_Real ){
62120       sqlite3VdbeIntegerAffinity(pRec);
62121     }
62122   }
62123 }
62124
62125 /*
62126 ** Try to convert the type of a function argument or a result column
62127 ** into a numeric representation.  Use either INTEGER or REAL whichever
62128 ** is appropriate.  But only do the conversion if it is possible without
62129 ** loss of information and return the revised type of the argument.
62130 */
62131 SQLITE_API int sqlite3_value_numeric_type(sqlite3_value *pVal){
62132   Mem *pMem = (Mem*)pVal;
62133   if( pMem->type==SQLITE_TEXT ){
62134     applyNumericAffinity(pMem);
62135     sqlite3VdbeMemStoreType(pMem);
62136   }
62137   return pMem->type;
62138 }
62139
62140 /*
62141 ** Exported version of applyAffinity(). This one works on sqlite3_value*, 
62142 ** not the internal Mem* type.
62143 */
62144 SQLITE_PRIVATE void sqlite3ValueApplyAffinity(
62145   sqlite3_value *pVal, 
62146   u8 affinity, 
62147   u8 enc
62148 ){
62149   applyAffinity((Mem *)pVal, affinity, enc);
62150 }
62151
62152 #ifdef SQLITE_DEBUG
62153 /*
62154 ** Write a nice string representation of the contents of cell pMem
62155 ** into buffer zBuf, length nBuf.
62156 */
62157 SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf){
62158   char *zCsr = zBuf;
62159   int f = pMem->flags;
62160
62161   static const char *const encnames[] = {"(X)", "(8)", "(16LE)", "(16BE)"};
62162
62163   if( f&MEM_Blob ){
62164     int i;
62165     char c;
62166     if( f & MEM_Dyn ){
62167       c = 'z';
62168       assert( (f & (MEM_Static|MEM_Ephem))==0 );
62169     }else if( f & MEM_Static ){
62170       c = 't';
62171       assert( (f & (MEM_Dyn|MEM_Ephem))==0 );
62172     }else if( f & MEM_Ephem ){
62173       c = 'e';
62174       assert( (f & (MEM_Static|MEM_Dyn))==0 );
62175     }else{
62176       c = 's';
62177     }
62178
62179     sqlite3_snprintf(100, zCsr, "%c", c);
62180     zCsr += sqlite3Strlen30(zCsr);
62181     sqlite3_snprintf(100, zCsr, "%d[", pMem->n);
62182     zCsr += sqlite3Strlen30(zCsr);
62183     for(i=0; i<16 && i<pMem->n; i++){
62184       sqlite3_snprintf(100, zCsr, "%02X", ((int)pMem->z[i] & 0xFF));
62185       zCsr += sqlite3Strlen30(zCsr);
62186     }
62187     for(i=0; i<16 && i<pMem->n; i++){
62188       char z = pMem->z[i];
62189       if( z<32 || z>126 ) *zCsr++ = '.';
62190       else *zCsr++ = z;
62191     }
62192
62193     sqlite3_snprintf(100, zCsr, "]%s", encnames[pMem->enc]);
62194     zCsr += sqlite3Strlen30(zCsr);
62195     if( f & MEM_Zero ){
62196       sqlite3_snprintf(100, zCsr,"+%dz",pMem->u.nZero);
62197       zCsr += sqlite3Strlen30(zCsr);
62198     }
62199     *zCsr = '\0';
62200   }else if( f & MEM_Str ){
62201     int j, k;
62202     zBuf[0] = ' ';
62203     if( f & MEM_Dyn ){
62204       zBuf[1] = 'z';
62205       assert( (f & (MEM_Static|MEM_Ephem))==0 );
62206     }else if( f & MEM_Static ){
62207       zBuf[1] = 't';
62208       assert( (f & (MEM_Dyn|MEM_Ephem))==0 );
62209     }else if( f & MEM_Ephem ){
62210       zBuf[1] = 'e';
62211       assert( (f & (MEM_Static|MEM_Dyn))==0 );
62212     }else{
62213       zBuf[1] = 's';
62214     }
62215     k = 2;
62216     sqlite3_snprintf(100, &zBuf[k], "%d", pMem->n);
62217     k += sqlite3Strlen30(&zBuf[k]);
62218     zBuf[k++] = '[';
62219     for(j=0; j<15 && j<pMem->n; j++){
62220       u8 c = pMem->z[j];
62221       if( c>=0x20 && c<0x7f ){
62222         zBuf[k++] = c;
62223       }else{
62224         zBuf[k++] = '.';
62225       }
62226     }
62227     zBuf[k++] = ']';
62228     sqlite3_snprintf(100,&zBuf[k], encnames[pMem->enc]);
62229     k += sqlite3Strlen30(&zBuf[k]);
62230     zBuf[k++] = 0;
62231   }
62232 }
62233 #endif
62234
62235 #ifdef SQLITE_DEBUG
62236 /*
62237 ** Print the value of a register for tracing purposes:
62238 */
62239 static void memTracePrint(FILE *out, Mem *p){
62240   if( p->flags & MEM_Null ){
62241     fprintf(out, " NULL");
62242   }else if( (p->flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){
62243     fprintf(out, " si:%lld", p->u.i);
62244   }else if( p->flags & MEM_Int ){
62245     fprintf(out, " i:%lld", p->u.i);
62246 #ifndef SQLITE_OMIT_FLOATING_POINT
62247   }else if( p->flags & MEM_Real ){
62248     fprintf(out, " r:%g", p->r);
62249 #endif
62250   }else if( p->flags & MEM_RowSet ){
62251     fprintf(out, " (rowset)");
62252   }else{
62253     char zBuf[200];
62254     sqlite3VdbeMemPrettyPrint(p, zBuf);
62255     fprintf(out, " ");
62256     fprintf(out, "%s", zBuf);
62257   }
62258 }
62259 static void registerTrace(FILE *out, int iReg, Mem *p){
62260   fprintf(out, "REG[%d] = ", iReg);
62261   memTracePrint(out, p);
62262   fprintf(out, "\n");
62263 }
62264 #endif
62265
62266 #ifdef SQLITE_DEBUG
62267 #  define REGISTER_TRACE(R,M) if(p->trace)registerTrace(p->trace,R,M)
62268 #else
62269 #  define REGISTER_TRACE(R,M)
62270 #endif
62271
62272
62273 #ifdef VDBE_PROFILE
62274
62275 /* 
62276 ** hwtime.h contains inline assembler code for implementing 
62277 ** high-performance timing routines.
62278 */
62279 /************** Include hwtime.h in the middle of vdbe.c *********************/
62280 /************** Begin file hwtime.h ******************************************/
62281 /*
62282 ** 2008 May 27
62283 **
62284 ** The author disclaims copyright to this source code.  In place of
62285 ** a legal notice, here is a blessing:
62286 **
62287 **    May you do good and not evil.
62288 **    May you find forgiveness for yourself and forgive others.
62289 **    May you share freely, never taking more than you give.
62290 **
62291 ******************************************************************************
62292 **
62293 ** This file contains inline asm code for retrieving "high-performance"
62294 ** counters for x86 class CPUs.
62295 */
62296 #ifndef _HWTIME_H_
62297 #define _HWTIME_H_
62298
62299 /*
62300 ** The following routine only works on pentium-class (or newer) processors.
62301 ** It uses the RDTSC opcode to read the cycle count value out of the
62302 ** processor and returns that value.  This can be used for high-res
62303 ** profiling.
62304 */
62305 #if (defined(__GNUC__) || defined(_MSC_VER)) && \
62306       (defined(i386) || defined(__i386__) || defined(_M_IX86))
62307
62308   #if defined(__GNUC__)
62309
62310   __inline__ sqlite_uint64 sqlite3Hwtime(void){
62311      unsigned int lo, hi;
62312      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
62313      return (sqlite_uint64)hi << 32 | lo;
62314   }
62315
62316   #elif defined(_MSC_VER)
62317
62318   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
62319      __asm {
62320         rdtsc
62321         ret       ; return value at EDX:EAX
62322      }
62323   }
62324
62325   #endif
62326
62327 #elif (defined(__GNUC__) && defined(__x86_64__))
62328
62329   __inline__ sqlite_uint64 sqlite3Hwtime(void){
62330       unsigned long val;
62331       __asm__ __volatile__ ("rdtsc" : "=A" (val));
62332       return val;
62333   }
62334  
62335 #elif (defined(__GNUC__) && defined(__ppc__))
62336
62337   __inline__ sqlite_uint64 sqlite3Hwtime(void){
62338       unsigned long long retval;
62339       unsigned long junk;
62340       __asm__ __volatile__ ("\n\
62341           1:      mftbu   %1\n\
62342                   mftb    %L0\n\
62343                   mftbu   %0\n\
62344                   cmpw    %0,%1\n\
62345                   bne     1b"
62346                   : "=r" (retval), "=r" (junk));
62347       return retval;
62348   }
62349
62350 #else
62351
62352   #error Need implementation of sqlite3Hwtime() for your platform.
62353
62354   /*
62355   ** To compile without implementing sqlite3Hwtime() for your platform,
62356   ** you can remove the above #error and use the following
62357   ** stub function.  You will lose timing support for many
62358   ** of the debugging and testing utilities, but it should at
62359   ** least compile and run.
62360   */
62361 SQLITE_PRIVATE   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
62362
62363 #endif
62364
62365 #endif /* !defined(_HWTIME_H_) */
62366
62367 /************** End of hwtime.h **********************************************/
62368 /************** Continuing where we left off in vdbe.c ***********************/
62369
62370 #endif
62371
62372 /*
62373 ** The CHECK_FOR_INTERRUPT macro defined here looks to see if the
62374 ** sqlite3_interrupt() routine has been called.  If it has been, then
62375 ** processing of the VDBE program is interrupted.
62376 **
62377 ** This macro added to every instruction that does a jump in order to
62378 ** implement a loop.  This test used to be on every single instruction,
62379 ** but that meant we more testing that we needed.  By only testing the
62380 ** flag on jump instructions, we get a (small) speed improvement.
62381 */
62382 #define CHECK_FOR_INTERRUPT \
62383    if( db->u1.isInterrupted ) goto abort_due_to_interrupt;
62384
62385
62386 #ifndef NDEBUG
62387 /*
62388 ** This function is only called from within an assert() expression. It
62389 ** checks that the sqlite3.nTransaction variable is correctly set to
62390 ** the number of non-transaction savepoints currently in the 
62391 ** linked list starting at sqlite3.pSavepoint.
62392 ** 
62393 ** Usage:
62394 **
62395 **     assert( checkSavepointCount(db) );
62396 */
62397 static int checkSavepointCount(sqlite3 *db){
62398   int n = 0;
62399   Savepoint *p;
62400   for(p=db->pSavepoint; p; p=p->pNext) n++;
62401   assert( n==(db->nSavepoint + db->isTransactionSavepoint) );
62402   return 1;
62403 }
62404 #endif
62405
62406 /*
62407 ** Transfer error message text from an sqlite3_vtab.zErrMsg (text stored
62408 ** in memory obtained from sqlite3_malloc) into a Vdbe.zErrMsg (text stored
62409 ** in memory obtained from sqlite3DbMalloc).
62410 */
62411 static void importVtabErrMsg(Vdbe *p, sqlite3_vtab *pVtab){
62412   sqlite3 *db = p->db;
62413   sqlite3DbFree(db, p->zErrMsg);
62414   p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
62415   sqlite3_free(pVtab->zErrMsg);
62416   pVtab->zErrMsg = 0;
62417 }
62418
62419
62420 /*
62421 ** Execute as much of a VDBE program as we can then return.
62422 **
62423 ** sqlite3VdbeMakeReady() must be called before this routine in order to
62424 ** close the program with a final OP_Halt and to set up the callbacks
62425 ** and the error message pointer.
62426 **
62427 ** Whenever a row or result data is available, this routine will either
62428 ** invoke the result callback (if there is one) or return with
62429 ** SQLITE_ROW.
62430 **
62431 ** If an attempt is made to open a locked database, then this routine
62432 ** will either invoke the busy callback (if there is one) or it will
62433 ** return SQLITE_BUSY.
62434 **
62435 ** If an error occurs, an error message is written to memory obtained
62436 ** from sqlite3_malloc() and p->zErrMsg is made to point to that memory.
62437 ** The error code is stored in p->rc and this routine returns SQLITE_ERROR.
62438 **
62439 ** If the callback ever returns non-zero, then the program exits
62440 ** immediately.  There will be no error message but the p->rc field is
62441 ** set to SQLITE_ABORT and this routine will return SQLITE_ERROR.
62442 **
62443 ** A memory allocation error causes p->rc to be set to SQLITE_NOMEM and this
62444 ** routine to return SQLITE_ERROR.
62445 **
62446 ** Other fatal errors return SQLITE_ERROR.
62447 **
62448 ** After this routine has finished, sqlite3VdbeFinalize() should be
62449 ** used to clean up the mess that was left behind.
62450 */
62451 SQLITE_PRIVATE int sqlite3VdbeExec(
62452   Vdbe *p                    /* The VDBE */
62453 ){
62454   int pc=0;                  /* The program counter */
62455   Op *aOp = p->aOp;          /* Copy of p->aOp */
62456   Op *pOp;                   /* Current operation */
62457   int rc = SQLITE_OK;        /* Value to return */
62458   sqlite3 *db = p->db;       /* The database */
62459   u8 resetSchemaOnFault = 0; /* Reset schema after an error if positive */
62460   u8 encoding = ENC(db);     /* The database encoding */
62461 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
62462   int checkProgress;         /* True if progress callbacks are enabled */
62463   int nProgressOps = 0;      /* Opcodes executed since progress callback. */
62464 #endif
62465   Mem *aMem = p->aMem;       /* Copy of p->aMem */
62466   Mem *pIn1 = 0;             /* 1st input operand */
62467   Mem *pIn2 = 0;             /* 2nd input operand */
62468   Mem *pIn3 = 0;             /* 3rd input operand */
62469   Mem *pOut = 0;             /* Output operand */
62470   int iCompare = 0;          /* Result of last OP_Compare operation */
62471   int *aPermute = 0;         /* Permutation of columns for OP_Compare */
62472 #ifdef VDBE_PROFILE
62473   u64 start;                 /* CPU clock count at start of opcode */
62474   int origPc;                /* Program counter at start of opcode */
62475 #endif
62476   /********************************************************************
62477   ** Automatically generated code
62478   **
62479   ** The following union is automatically generated by the
62480   ** vdbe-compress.tcl script.  The purpose of this union is to
62481   ** reduce the amount of stack space required by this function.
62482   ** See comments in the vdbe-compress.tcl script for details.
62483   */
62484   union vdbeExecUnion {
62485     struct OP_Yield_stack_vars {
62486       int pcDest;
62487     } aa;
62488     struct OP_Variable_stack_vars {
62489       Mem *pVar;       /* Value being transferred */
62490     } ab;
62491     struct OP_Move_stack_vars {
62492       char *zMalloc;   /* Holding variable for allocated memory */
62493       int n;           /* Number of registers left to copy */
62494       int p1;          /* Register to copy from */
62495       int p2;          /* Register to copy to */
62496     } ac;
62497     struct OP_ResultRow_stack_vars {
62498       Mem *pMem;
62499       int i;
62500     } ad;
62501     struct OP_Concat_stack_vars {
62502       i64 nByte;
62503     } ae;
62504     struct OP_Remainder_stack_vars {
62505       int flags;      /* Combined MEM_* flags from both inputs */
62506       i64 iA;         /* Integer value of left operand */
62507       i64 iB;         /* Integer value of right operand */
62508       double rA;      /* Real value of left operand */
62509       double rB;      /* Real value of right operand */
62510     } af;
62511     struct OP_Function_stack_vars {
62512       int i;
62513       Mem *pArg;
62514       sqlite3_context ctx;
62515       sqlite3_value **apVal;
62516       int n;
62517     } ag;
62518     struct OP_ShiftRight_stack_vars {
62519       i64 iA;
62520       u64 uA;
62521       i64 iB;
62522       u8 op;
62523     } ah;
62524     struct OP_Ge_stack_vars {
62525       int res;            /* Result of the comparison of pIn1 against pIn3 */
62526       char affinity;      /* Affinity to use for comparison */
62527       u16 flags1;         /* Copy of initial value of pIn1->flags */
62528       u16 flags3;         /* Copy of initial value of pIn3->flags */
62529     } ai;
62530     struct OP_Compare_stack_vars {
62531       int n;
62532       int i;
62533       int p1;
62534       int p2;
62535       const KeyInfo *pKeyInfo;
62536       int idx;
62537       CollSeq *pColl;    /* Collating sequence to use on this term */
62538       int bRev;          /* True for DESCENDING sort order */
62539     } aj;
62540     struct OP_Or_stack_vars {
62541       int v1;    /* Left operand:  0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
62542       int v2;    /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
62543     } ak;
62544     struct OP_IfNot_stack_vars {
62545       int c;
62546     } al;
62547     struct OP_Column_stack_vars {
62548       u32 payloadSize;   /* Number of bytes in the record */
62549       i64 payloadSize64; /* Number of bytes in the record */
62550       int p1;            /* P1 value of the opcode */
62551       int p2;            /* column number to retrieve */
62552       VdbeCursor *pC;    /* The VDBE cursor */
62553       char *zRec;        /* Pointer to complete record-data */
62554       BtCursor *pCrsr;   /* The BTree cursor */
62555       u32 *aType;        /* aType[i] holds the numeric type of the i-th column */
62556       u32 *aOffset;      /* aOffset[i] is offset to start of data for i-th column */
62557       int nField;        /* number of fields in the record */
62558       int len;           /* The length of the serialized data for the column */
62559       int i;             /* Loop counter */
62560       char *zData;       /* Part of the record being decoded */
62561       Mem *pDest;        /* Where to write the extracted value */
62562       Mem sMem;          /* For storing the record being decoded */
62563       u8 *zIdx;          /* Index into header */
62564       u8 *zEndHdr;       /* Pointer to first byte after the header */
62565       u32 offset;        /* Offset into the data */
62566       u32 szField;       /* Number of bytes in the content of a field */
62567       int szHdr;         /* Size of the header size field at start of record */
62568       int avail;         /* Number of bytes of available data */
62569       Mem *pReg;         /* PseudoTable input register */
62570     } am;
62571     struct OP_Affinity_stack_vars {
62572       const char *zAffinity;   /* The affinity to be applied */
62573       char cAff;               /* A single character of affinity */
62574     } an;
62575     struct OP_MakeRecord_stack_vars {
62576       u8 *zNewRecord;        /* A buffer to hold the data for the new record */
62577       Mem *pRec;             /* The new record */
62578       u64 nData;             /* Number of bytes of data space */
62579       int nHdr;              /* Number of bytes of header space */
62580       i64 nByte;             /* Data space required for this record */
62581       int nZero;             /* Number of zero bytes at the end of the record */
62582       int nVarint;           /* Number of bytes in a varint */
62583       u32 serial_type;       /* Type field */
62584       Mem *pData0;           /* First field to be combined into the record */
62585       Mem *pLast;            /* Last field of the record */
62586       int nField;            /* Number of fields in the record */
62587       char *zAffinity;       /* The affinity string for the record */
62588       int file_format;       /* File format to use for encoding */
62589       int i;                 /* Space used in zNewRecord[] */
62590       int len;               /* Length of a field */
62591     } ao;
62592     struct OP_Count_stack_vars {
62593       i64 nEntry;
62594       BtCursor *pCrsr;
62595     } ap;
62596     struct OP_Savepoint_stack_vars {
62597       int p1;                         /* Value of P1 operand */
62598       char *zName;                    /* Name of savepoint */
62599       int nName;
62600       Savepoint *pNew;
62601       Savepoint *pSavepoint;
62602       Savepoint *pTmp;
62603       int iSavepoint;
62604       int ii;
62605     } aq;
62606     struct OP_AutoCommit_stack_vars {
62607       int desiredAutoCommit;
62608       int iRollback;
62609       int turnOnAC;
62610     } ar;
62611     struct OP_Transaction_stack_vars {
62612       Btree *pBt;
62613     } as;
62614     struct OP_ReadCookie_stack_vars {
62615       int iMeta;
62616       int iDb;
62617       int iCookie;
62618     } at;
62619     struct OP_SetCookie_stack_vars {
62620       Db *pDb;
62621     } au;
62622     struct OP_VerifyCookie_stack_vars {
62623       int iMeta;
62624       int iGen;
62625       Btree *pBt;
62626     } av;
62627     struct OP_OpenWrite_stack_vars {
62628       int nField;
62629       KeyInfo *pKeyInfo;
62630       int p2;
62631       int iDb;
62632       int wrFlag;
62633       Btree *pX;
62634       VdbeCursor *pCur;
62635       Db *pDb;
62636     } aw;
62637     struct OP_OpenEphemeral_stack_vars {
62638       VdbeCursor *pCx;
62639     } ax;
62640     struct OP_OpenPseudo_stack_vars {
62641       VdbeCursor *pCx;
62642     } ay;
62643     struct OP_SeekGt_stack_vars {
62644       int res;
62645       int oc;
62646       VdbeCursor *pC;
62647       UnpackedRecord r;
62648       int nField;
62649       i64 iKey;      /* The rowid we are to seek to */
62650     } az;
62651     struct OP_Seek_stack_vars {
62652       VdbeCursor *pC;
62653     } ba;
62654     struct OP_Found_stack_vars {
62655       int alreadyExists;
62656       VdbeCursor *pC;
62657       int res;
62658       UnpackedRecord *pIdxKey;
62659       UnpackedRecord r;
62660       char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7];
62661     } bb;
62662     struct OP_IsUnique_stack_vars {
62663       u16 ii;
62664       VdbeCursor *pCx;
62665       BtCursor *pCrsr;
62666       u16 nField;
62667       Mem *aMx;
62668       UnpackedRecord r;                  /* B-Tree index search key */
62669       i64 R;                             /* Rowid stored in register P3 */
62670     } bc;
62671     struct OP_NotExists_stack_vars {
62672       VdbeCursor *pC;
62673       BtCursor *pCrsr;
62674       int res;
62675       u64 iKey;
62676     } bd;
62677     struct OP_NewRowid_stack_vars {
62678       i64 v;                 /* The new rowid */
62679       VdbeCursor *pC;        /* Cursor of table to get the new rowid */
62680       int res;               /* Result of an sqlite3BtreeLast() */
62681       int cnt;               /* Counter to limit the number of searches */
62682       Mem *pMem;             /* Register holding largest rowid for AUTOINCREMENT */
62683       VdbeFrame *pFrame;     /* Root frame of VDBE */
62684     } be;
62685     struct OP_InsertInt_stack_vars {
62686       Mem *pData;       /* MEM cell holding data for the record to be inserted */
62687       Mem *pKey;        /* MEM cell holding key  for the record */
62688       i64 iKey;         /* The integer ROWID or key for the record to be inserted */
62689       VdbeCursor *pC;   /* Cursor to table into which insert is written */
62690       int nZero;        /* Number of zero-bytes to append */
62691       int seekResult;   /* Result of prior seek or 0 if no USESEEKRESULT flag */
62692       const char *zDb;  /* database name - used by the update hook */
62693       const char *zTbl; /* Table name - used by the opdate hook */
62694       int op;           /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
62695     } bf;
62696     struct OP_Delete_stack_vars {
62697       i64 iKey;
62698       VdbeCursor *pC;
62699     } bg;
62700     struct OP_RowData_stack_vars {
62701       VdbeCursor *pC;
62702       BtCursor *pCrsr;
62703       u32 n;
62704       i64 n64;
62705     } bh;
62706     struct OP_Rowid_stack_vars {
62707       VdbeCursor *pC;
62708       i64 v;
62709       sqlite3_vtab *pVtab;
62710       const sqlite3_module *pModule;
62711     } bi;
62712     struct OP_NullRow_stack_vars {
62713       VdbeCursor *pC;
62714     } bj;
62715     struct OP_Last_stack_vars {
62716       VdbeCursor *pC;
62717       BtCursor *pCrsr;
62718       int res;
62719     } bk;
62720     struct OP_Rewind_stack_vars {
62721       VdbeCursor *pC;
62722       BtCursor *pCrsr;
62723       int res;
62724     } bl;
62725     struct OP_Next_stack_vars {
62726       VdbeCursor *pC;
62727       BtCursor *pCrsr;
62728       int res;
62729     } bm;
62730     struct OP_IdxInsert_stack_vars {
62731       VdbeCursor *pC;
62732       BtCursor *pCrsr;
62733       int nKey;
62734       const char *zKey;
62735     } bn;
62736     struct OP_IdxDelete_stack_vars {
62737       VdbeCursor *pC;
62738       BtCursor *pCrsr;
62739       int res;
62740       UnpackedRecord r;
62741     } bo;
62742     struct OP_IdxRowid_stack_vars {
62743       BtCursor *pCrsr;
62744       VdbeCursor *pC;
62745       i64 rowid;
62746     } bp;
62747     struct OP_IdxGE_stack_vars {
62748       VdbeCursor *pC;
62749       int res;
62750       UnpackedRecord r;
62751     } bq;
62752     struct OP_Destroy_stack_vars {
62753       int iMoved;
62754       int iCnt;
62755       Vdbe *pVdbe;
62756       int iDb;
62757     } br;
62758     struct OP_Clear_stack_vars {
62759       int nChange;
62760     } bs;
62761     struct OP_CreateTable_stack_vars {
62762       int pgno;
62763       int flags;
62764       Db *pDb;
62765     } bt;
62766     struct OP_ParseSchema_stack_vars {
62767       int iDb;
62768       const char *zMaster;
62769       char *zSql;
62770       InitData initData;
62771     } bu;
62772     struct OP_IntegrityCk_stack_vars {
62773       int nRoot;      /* Number of tables to check.  (Number of root pages.) */
62774       int *aRoot;     /* Array of rootpage numbers for tables to be checked */
62775       int j;          /* Loop counter */
62776       int nErr;       /* Number of errors reported */
62777       char *z;        /* Text of the error report */
62778       Mem *pnErr;     /* Register keeping track of errors remaining */
62779     } bv;
62780     struct OP_RowSetRead_stack_vars {
62781       i64 val;
62782     } bw;
62783     struct OP_RowSetTest_stack_vars {
62784       int iSet;
62785       int exists;
62786     } bx;
62787     struct OP_Program_stack_vars {
62788       int nMem;               /* Number of memory registers for sub-program */
62789       int nByte;              /* Bytes of runtime space required for sub-program */
62790       Mem *pRt;               /* Register to allocate runtime space */
62791       Mem *pMem;              /* Used to iterate through memory cells */
62792       Mem *pEnd;              /* Last memory cell in new array */
62793       VdbeFrame *pFrame;      /* New vdbe frame to execute in */
62794       SubProgram *pProgram;   /* Sub-program to execute */
62795       void *t;                /* Token identifying trigger */
62796     } by;
62797     struct OP_Param_stack_vars {
62798       VdbeFrame *pFrame;
62799       Mem *pIn;
62800     } bz;
62801     struct OP_MemMax_stack_vars {
62802       Mem *pIn1;
62803       VdbeFrame *pFrame;
62804     } ca;
62805     struct OP_AggStep_stack_vars {
62806       int n;
62807       int i;
62808       Mem *pMem;
62809       Mem *pRec;
62810       sqlite3_context ctx;
62811       sqlite3_value **apVal;
62812     } cb;
62813     struct OP_AggFinal_stack_vars {
62814       Mem *pMem;
62815     } cc;
62816     struct OP_Checkpoint_stack_vars {
62817       int i;                          /* Loop counter */
62818       int aRes[3];                    /* Results */
62819       Mem *pMem;                      /* Write results here */
62820     } cd;
62821     struct OP_JournalMode_stack_vars {
62822       Btree *pBt;                     /* Btree to change journal mode of */
62823       Pager *pPager;                  /* Pager associated with pBt */
62824       int eNew;                       /* New journal mode */
62825       int eOld;                       /* The old journal mode */
62826       const char *zFilename;          /* Name of database file for pPager */
62827     } ce;
62828     struct OP_IncrVacuum_stack_vars {
62829       Btree *pBt;
62830     } cf;
62831     struct OP_VBegin_stack_vars {
62832       VTable *pVTab;
62833     } cg;
62834     struct OP_VOpen_stack_vars {
62835       VdbeCursor *pCur;
62836       sqlite3_vtab_cursor *pVtabCursor;
62837       sqlite3_vtab *pVtab;
62838       sqlite3_module *pModule;
62839     } ch;
62840     struct OP_VFilter_stack_vars {
62841       int nArg;
62842       int iQuery;
62843       const sqlite3_module *pModule;
62844       Mem *pQuery;
62845       Mem *pArgc;
62846       sqlite3_vtab_cursor *pVtabCursor;
62847       sqlite3_vtab *pVtab;
62848       VdbeCursor *pCur;
62849       int res;
62850       int i;
62851       Mem **apArg;
62852     } ci;
62853     struct OP_VColumn_stack_vars {
62854       sqlite3_vtab *pVtab;
62855       const sqlite3_module *pModule;
62856       Mem *pDest;
62857       sqlite3_context sContext;
62858     } cj;
62859     struct OP_VNext_stack_vars {
62860       sqlite3_vtab *pVtab;
62861       const sqlite3_module *pModule;
62862       int res;
62863       VdbeCursor *pCur;
62864     } ck;
62865     struct OP_VRename_stack_vars {
62866       sqlite3_vtab *pVtab;
62867       Mem *pName;
62868     } cl;
62869     struct OP_VUpdate_stack_vars {
62870       sqlite3_vtab *pVtab;
62871       sqlite3_module *pModule;
62872       int nArg;
62873       int i;
62874       sqlite_int64 rowid;
62875       Mem **apArg;
62876       Mem *pX;
62877     } cm;
62878     struct OP_Trace_stack_vars {
62879       char *zTrace;
62880     } cn;
62881   } u;
62882   /* End automatically generated code
62883   ********************************************************************/
62884
62885   assert( p->magic==VDBE_MAGIC_RUN );  /* sqlite3_step() verifies this */
62886   sqlite3VdbeEnter(p);
62887   if( p->rc==SQLITE_NOMEM ){
62888     /* This happens if a malloc() inside a call to sqlite3_column_text() or
62889     ** sqlite3_column_text16() failed.  */
62890     goto no_mem;
62891   }
62892   assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY );
62893   p->rc = SQLITE_OK;
62894   assert( p->explain==0 );
62895   p->pResultSet = 0;
62896   db->busyHandler.nBusy = 0;
62897   CHECK_FOR_INTERRUPT;
62898   sqlite3VdbeIOTraceSql(p);
62899 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
62900   checkProgress = db->xProgress!=0;
62901 #endif
62902 #ifdef SQLITE_DEBUG
62903   sqlite3BeginBenignMalloc();
62904   if( p->pc==0  && (p->db->flags & SQLITE_VdbeListing)!=0 ){
62905     int i;
62906     printf("VDBE Program Listing:\n");
62907     sqlite3VdbePrintSql(p);
62908     for(i=0; i<p->nOp; i++){
62909       sqlite3VdbePrintOp(stdout, i, &aOp[i]);
62910     }
62911   }
62912   sqlite3EndBenignMalloc();
62913 #endif
62914   for(pc=p->pc; rc==SQLITE_OK; pc++){
62915     assert( pc>=0 && pc<p->nOp );
62916     if( db->mallocFailed ) goto no_mem;
62917 #ifdef VDBE_PROFILE
62918     origPc = pc;
62919     start = sqlite3Hwtime();
62920 #endif
62921     pOp = &aOp[pc];
62922
62923     /* Only allow tracing if SQLITE_DEBUG is defined.
62924     */
62925 #ifdef SQLITE_DEBUG
62926     if( p->trace ){
62927       if( pc==0 ){
62928         printf("VDBE Execution Trace:\n");
62929         sqlite3VdbePrintSql(p);
62930       }
62931       sqlite3VdbePrintOp(p->trace, pc, pOp);
62932     }
62933 #endif
62934       
62935
62936     /* Check to see if we need to simulate an interrupt.  This only happens
62937     ** if we have a special test build.
62938     */
62939 #ifdef SQLITE_TEST
62940     if( sqlite3_interrupt_count>0 ){
62941       sqlite3_interrupt_count--;
62942       if( sqlite3_interrupt_count==0 ){
62943         sqlite3_interrupt(db);
62944       }
62945     }
62946 #endif
62947
62948 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
62949     /* Call the progress callback if it is configured and the required number
62950     ** of VDBE ops have been executed (either since this invocation of
62951     ** sqlite3VdbeExec() or since last time the progress callback was called).
62952     ** If the progress callback returns non-zero, exit the virtual machine with
62953     ** a return code SQLITE_ABORT.
62954     */
62955     if( checkProgress ){
62956       if( db->nProgressOps==nProgressOps ){
62957         int prc;
62958         prc = db->xProgress(db->pProgressArg);
62959         if( prc!=0 ){
62960           rc = SQLITE_INTERRUPT;
62961           goto vdbe_error_halt;
62962         }
62963         nProgressOps = 0;
62964       }
62965       nProgressOps++;
62966     }
62967 #endif
62968
62969     /* On any opcode with the "out2-prerelase" tag, free any
62970     ** external allocations out of mem[p2] and set mem[p2] to be
62971     ** an undefined integer.  Opcodes will either fill in the integer
62972     ** value or convert mem[p2] to a different type.
62973     */
62974     assert( pOp->opflags==sqlite3OpcodeProperty[pOp->opcode] );
62975     if( pOp->opflags & OPFLG_OUT2_PRERELEASE ){
62976       assert( pOp->p2>0 );
62977       assert( pOp->p2<=p->nMem );
62978       pOut = &aMem[pOp->p2];
62979       memAboutToChange(p, pOut);
62980       sqlite3VdbeMemReleaseExternal(pOut);
62981       pOut->flags = MEM_Int;
62982     }
62983
62984     /* Sanity checking on other operands */
62985 #ifdef SQLITE_DEBUG
62986     if( (pOp->opflags & OPFLG_IN1)!=0 ){
62987       assert( pOp->p1>0 );
62988       assert( pOp->p1<=p->nMem );
62989       assert( memIsValid(&aMem[pOp->p1]) );
62990       REGISTER_TRACE(pOp->p1, &aMem[pOp->p1]);
62991     }
62992     if( (pOp->opflags & OPFLG_IN2)!=0 ){
62993       assert( pOp->p2>0 );
62994       assert( pOp->p2<=p->nMem );
62995       assert( memIsValid(&aMem[pOp->p2]) );
62996       REGISTER_TRACE(pOp->p2, &aMem[pOp->p2]);
62997     }
62998     if( (pOp->opflags & OPFLG_IN3)!=0 ){
62999       assert( pOp->p3>0 );
63000       assert( pOp->p3<=p->nMem );
63001       assert( memIsValid(&aMem[pOp->p3]) );
63002       REGISTER_TRACE(pOp->p3, &aMem[pOp->p3]);
63003     }
63004     if( (pOp->opflags & OPFLG_OUT2)!=0 ){
63005       assert( pOp->p2>0 );
63006       assert( pOp->p2<=p->nMem );
63007       memAboutToChange(p, &aMem[pOp->p2]);
63008     }
63009     if( (pOp->opflags & OPFLG_OUT3)!=0 ){
63010       assert( pOp->p3>0 );
63011       assert( pOp->p3<=p->nMem );
63012       memAboutToChange(p, &aMem[pOp->p3]);
63013     }
63014 #endif
63015   
63016     switch( pOp->opcode ){
63017
63018 /*****************************************************************************
63019 ** What follows is a massive switch statement where each case implements a
63020 ** separate instruction in the virtual machine.  If we follow the usual
63021 ** indentation conventions, each case should be indented by 6 spaces.  But
63022 ** that is a lot of wasted space on the left margin.  So the code within
63023 ** the switch statement will break with convention and be flush-left. Another
63024 ** big comment (similar to this one) will mark the point in the code where
63025 ** we transition back to normal indentation.
63026 **
63027 ** The formatting of each case is important.  The makefile for SQLite
63028 ** generates two C files "opcodes.h" and "opcodes.c" by scanning this
63029 ** file looking for lines that begin with "case OP_".  The opcodes.h files
63030 ** will be filled with #defines that give unique integer values to each
63031 ** opcode and the opcodes.c file is filled with an array of strings where
63032 ** each string is the symbolic name for the corresponding opcode.  If the
63033 ** case statement is followed by a comment of the form "/# same as ... #/"
63034 ** that comment is used to determine the particular value of the opcode.
63035 **
63036 ** Other keywords in the comment that follows each case are used to
63037 ** construct the OPFLG_INITIALIZER value that initializes opcodeProperty[].
63038 ** Keywords include: in1, in2, in3, out2_prerelease, out2, out3.  See
63039 ** the mkopcodeh.awk script for additional information.
63040 **
63041 ** Documentation about VDBE opcodes is generated by scanning this file
63042 ** for lines of that contain "Opcode:".  That line and all subsequent
63043 ** comment lines are used in the generation of the opcode.html documentation
63044 ** file.
63045 **
63046 ** SUMMARY:
63047 **
63048 **     Formatting is important to scripts that scan this file.
63049 **     Do not deviate from the formatting style currently in use.
63050 **
63051 *****************************************************************************/
63052
63053 /* Opcode:  Goto * P2 * * *
63054 **
63055 ** An unconditional jump to address P2.
63056 ** The next instruction executed will be 
63057 ** the one at index P2 from the beginning of
63058 ** the program.
63059 */
63060 case OP_Goto: {             /* jump */
63061   CHECK_FOR_INTERRUPT;
63062   pc = pOp->p2 - 1;
63063   break;
63064 }
63065
63066 /* Opcode:  Gosub P1 P2 * * *
63067 **
63068 ** Write the current address onto register P1
63069 ** and then jump to address P2.
63070 */
63071 case OP_Gosub: {            /* jump, in1 */
63072   pIn1 = &aMem[pOp->p1];
63073   assert( (pIn1->flags & MEM_Dyn)==0 );
63074   memAboutToChange(p, pIn1);
63075   pIn1->flags = MEM_Int;
63076   pIn1->u.i = pc;
63077   REGISTER_TRACE(pOp->p1, pIn1);
63078   pc = pOp->p2 - 1;
63079   break;
63080 }
63081
63082 /* Opcode:  Return P1 * * * *
63083 **
63084 ** Jump to the next instruction after the address in register P1.
63085 */
63086 case OP_Return: {           /* in1 */
63087   pIn1 = &aMem[pOp->p1];
63088   assert( pIn1->flags & MEM_Int );
63089   pc = (int)pIn1->u.i;
63090   break;
63091 }
63092
63093 /* Opcode:  Yield P1 * * * *
63094 **
63095 ** Swap the program counter with the value in register P1.
63096 */
63097 case OP_Yield: {            /* in1 */
63098 #if 0  /* local variables moved into u.aa */
63099   int pcDest;
63100 #endif /* local variables moved into u.aa */
63101   pIn1 = &aMem[pOp->p1];
63102   assert( (pIn1->flags & MEM_Dyn)==0 );
63103   pIn1->flags = MEM_Int;
63104   u.aa.pcDest = (int)pIn1->u.i;
63105   pIn1->u.i = pc;
63106   REGISTER_TRACE(pOp->p1, pIn1);
63107   pc = u.aa.pcDest;
63108   break;
63109 }
63110
63111 /* Opcode:  HaltIfNull  P1 P2 P3 P4 *
63112 **
63113 ** Check the value in register P3.  If is is NULL then Halt using
63114 ** parameter P1, P2, and P4 as if this were a Halt instruction.  If the
63115 ** value in register P3 is not NULL, then this routine is a no-op.
63116 */
63117 case OP_HaltIfNull: {      /* in3 */
63118   pIn3 = &aMem[pOp->p3];
63119   if( (pIn3->flags & MEM_Null)==0 ) break;
63120   /* Fall through into OP_Halt */
63121 }
63122
63123 /* Opcode:  Halt P1 P2 * P4 *
63124 **
63125 ** Exit immediately.  All open cursors, etc are closed
63126 ** automatically.
63127 **
63128 ** P1 is the result code returned by sqlite3_exec(), sqlite3_reset(),
63129 ** or sqlite3_finalize().  For a normal halt, this should be SQLITE_OK (0).
63130 ** For errors, it can be some other value.  If P1!=0 then P2 will determine
63131 ** whether or not to rollback the current transaction.  Do not rollback
63132 ** if P2==OE_Fail. Do the rollback if P2==OE_Rollback.  If P2==OE_Abort,
63133 ** then back out all changes that have occurred during this execution of the
63134 ** VDBE, but do not rollback the transaction. 
63135 **
63136 ** If P4 is not null then it is an error message string.
63137 **
63138 ** There is an implied "Halt 0 0 0" instruction inserted at the very end of
63139 ** every program.  So a jump past the last instruction of the program
63140 ** is the same as executing Halt.
63141 */
63142 case OP_Halt: {
63143   if( pOp->p1==SQLITE_OK && p->pFrame ){
63144     /* Halt the sub-program. Return control to the parent frame. */
63145     VdbeFrame *pFrame = p->pFrame;
63146     p->pFrame = pFrame->pParent;
63147     p->nFrame--;
63148     sqlite3VdbeSetChanges(db, p->nChange);
63149     pc = sqlite3VdbeFrameRestore(pFrame);
63150     if( pOp->p2==OE_Ignore ){
63151       /* Instruction pc is the OP_Program that invoked the sub-program 
63152       ** currently being halted. If the p2 instruction of this OP_Halt
63153       ** instruction is set to OE_Ignore, then the sub-program is throwing
63154       ** an IGNORE exception. In this case jump to the address specified
63155       ** as the p2 of the calling OP_Program.  */
63156       pc = p->aOp[pc].p2-1;
63157     }
63158     aOp = p->aOp;
63159     aMem = p->aMem;
63160     break;
63161   }
63162
63163   p->rc = pOp->p1;
63164   p->errorAction = (u8)pOp->p2;
63165   p->pc = pc;
63166   if( pOp->p4.z ){
63167     assert( p->rc!=SQLITE_OK );
63168     sqlite3SetString(&p->zErrMsg, db, "%s", pOp->p4.z);
63169     testcase( sqlite3GlobalConfig.xLog!=0 );
63170     sqlite3_log(pOp->p1, "abort at %d in [%s]: %s", pc, p->zSql, pOp->p4.z);
63171   }else if( p->rc ){
63172     testcase( sqlite3GlobalConfig.xLog!=0 );
63173     sqlite3_log(pOp->p1, "constraint failed at %d in [%s]", pc, p->zSql);
63174   }
63175   rc = sqlite3VdbeHalt(p);
63176   assert( rc==SQLITE_BUSY || rc==SQLITE_OK || rc==SQLITE_ERROR );
63177   if( rc==SQLITE_BUSY ){
63178     p->rc = rc = SQLITE_BUSY;
63179   }else{
63180     assert( rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT );
63181     assert( rc==SQLITE_OK || db->nDeferredCons>0 );
63182     rc = p->rc ? SQLITE_ERROR : SQLITE_DONE;
63183   }
63184   goto vdbe_return;
63185 }
63186
63187 /* Opcode: Integer P1 P2 * * *
63188 **
63189 ** The 32-bit integer value P1 is written into register P2.
63190 */
63191 case OP_Integer: {         /* out2-prerelease */
63192   pOut->u.i = pOp->p1;
63193   break;
63194 }
63195
63196 /* Opcode: Int64 * P2 * P4 *
63197 **
63198 ** P4 is a pointer to a 64-bit integer value.
63199 ** Write that value into register P2.
63200 */
63201 case OP_Int64: {           /* out2-prerelease */
63202   assert( pOp->p4.pI64!=0 );
63203   pOut->u.i = *pOp->p4.pI64;
63204   break;
63205 }
63206
63207 #ifndef SQLITE_OMIT_FLOATING_POINT
63208 /* Opcode: Real * P2 * P4 *
63209 **
63210 ** P4 is a pointer to a 64-bit floating point value.
63211 ** Write that value into register P2.
63212 */
63213 case OP_Real: {            /* same as TK_FLOAT, out2-prerelease */
63214   pOut->flags = MEM_Real;
63215   assert( !sqlite3IsNaN(*pOp->p4.pReal) );
63216   pOut->r = *pOp->p4.pReal;
63217   break;
63218 }
63219 #endif
63220
63221 /* Opcode: String8 * P2 * P4 *
63222 **
63223 ** P4 points to a nul terminated UTF-8 string. This opcode is transformed 
63224 ** into an OP_String before it is executed for the first time.
63225 */
63226 case OP_String8: {         /* same as TK_STRING, out2-prerelease */
63227   assert( pOp->p4.z!=0 );
63228   pOp->opcode = OP_String;
63229   pOp->p1 = sqlite3Strlen30(pOp->p4.z);
63230
63231 #ifndef SQLITE_OMIT_UTF16
63232   if( encoding!=SQLITE_UTF8 ){
63233     rc = sqlite3VdbeMemSetStr(pOut, pOp->p4.z, -1, SQLITE_UTF8, SQLITE_STATIC);
63234     if( rc==SQLITE_TOOBIG ) goto too_big;
63235     if( SQLITE_OK!=sqlite3VdbeChangeEncoding(pOut, encoding) ) goto no_mem;
63236     assert( pOut->zMalloc==pOut->z );
63237     assert( pOut->flags & MEM_Dyn );
63238     pOut->zMalloc = 0;
63239     pOut->flags |= MEM_Static;
63240     pOut->flags &= ~MEM_Dyn;
63241     if( pOp->p4type==P4_DYNAMIC ){
63242       sqlite3DbFree(db, pOp->p4.z);
63243     }
63244     pOp->p4type = P4_DYNAMIC;
63245     pOp->p4.z = pOut->z;
63246     pOp->p1 = pOut->n;
63247   }
63248 #endif
63249   if( pOp->p1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
63250     goto too_big;
63251   }
63252   /* Fall through to the next case, OP_String */
63253 }
63254   
63255 /* Opcode: String P1 P2 * P4 *
63256 **
63257 ** The string value P4 of length P1 (bytes) is stored in register P2.
63258 */
63259 case OP_String: {          /* out2-prerelease */
63260   assert( pOp->p4.z!=0 );
63261   pOut->flags = MEM_Str|MEM_Static|MEM_Term;
63262   pOut->z = pOp->p4.z;
63263   pOut->n = pOp->p1;
63264   pOut->enc = encoding;
63265   UPDATE_MAX_BLOBSIZE(pOut);
63266   break;
63267 }
63268
63269 /* Opcode: Null * P2 * * *
63270 **
63271 ** Write a NULL into register P2.
63272 */
63273 case OP_Null: {           /* out2-prerelease */
63274   pOut->flags = MEM_Null;
63275   break;
63276 }
63277
63278
63279 /* Opcode: Blob P1 P2 * P4
63280 **
63281 ** P4 points to a blob of data P1 bytes long.  Store this
63282 ** blob in register P2.
63283 */
63284 case OP_Blob: {                /* out2-prerelease */
63285   assert( pOp->p1 <= SQLITE_MAX_LENGTH );
63286   sqlite3VdbeMemSetStr(pOut, pOp->p4.z, pOp->p1, 0, 0);
63287   pOut->enc = encoding;
63288   UPDATE_MAX_BLOBSIZE(pOut);
63289   break;
63290 }
63291
63292 /* Opcode: Variable P1 P2 * P4 *
63293 **
63294 ** Transfer the values of bound parameter P1 into register P2
63295 **
63296 ** If the parameter is named, then its name appears in P4 and P3==1.
63297 ** The P4 value is used by sqlite3_bind_parameter_name().
63298 */
63299 case OP_Variable: {            /* out2-prerelease */
63300 #if 0  /* local variables moved into u.ab */
63301   Mem *pVar;       /* Value being transferred */
63302 #endif /* local variables moved into u.ab */
63303
63304   assert( pOp->p1>0 && pOp->p1<=p->nVar );
63305   u.ab.pVar = &p->aVar[pOp->p1 - 1];
63306   if( sqlite3VdbeMemTooBig(u.ab.pVar) ){
63307     goto too_big;
63308   }
63309   sqlite3VdbeMemShallowCopy(pOut, u.ab.pVar, MEM_Static);
63310   UPDATE_MAX_BLOBSIZE(pOut);
63311   break;
63312 }
63313
63314 /* Opcode: Move P1 P2 P3 * *
63315 **
63316 ** Move the values in register P1..P1+P3-1 over into
63317 ** registers P2..P2+P3-1.  Registers P1..P1+P1-1 are
63318 ** left holding a NULL.  It is an error for register ranges
63319 ** P1..P1+P3-1 and P2..P2+P3-1 to overlap.
63320 */
63321 case OP_Move: {
63322 #if 0  /* local variables moved into u.ac */
63323   char *zMalloc;   /* Holding variable for allocated memory */
63324   int n;           /* Number of registers left to copy */
63325   int p1;          /* Register to copy from */
63326   int p2;          /* Register to copy to */
63327 #endif /* local variables moved into u.ac */
63328
63329   u.ac.n = pOp->p3;
63330   u.ac.p1 = pOp->p1;
63331   u.ac.p2 = pOp->p2;
63332   assert( u.ac.n>0 && u.ac.p1>0 && u.ac.p2>0 );
63333   assert( u.ac.p1+u.ac.n<=u.ac.p2 || u.ac.p2+u.ac.n<=u.ac.p1 );
63334
63335   pIn1 = &aMem[u.ac.p1];
63336   pOut = &aMem[u.ac.p2];
63337   while( u.ac.n-- ){
63338     assert( pOut<=&aMem[p->nMem] );
63339     assert( pIn1<=&aMem[p->nMem] );
63340     assert( memIsValid(pIn1) );
63341     memAboutToChange(p, pOut);
63342     u.ac.zMalloc = pOut->zMalloc;
63343     pOut->zMalloc = 0;
63344     sqlite3VdbeMemMove(pOut, pIn1);
63345     pIn1->zMalloc = u.ac.zMalloc;
63346     REGISTER_TRACE(u.ac.p2++, pOut);
63347     pIn1++;
63348     pOut++;
63349   }
63350   break;
63351 }
63352
63353 /* Opcode: Copy P1 P2 * * *
63354 **
63355 ** Make a copy of register P1 into register P2.
63356 **
63357 ** This instruction makes a deep copy of the value.  A duplicate
63358 ** is made of any string or blob constant.  See also OP_SCopy.
63359 */
63360 case OP_Copy: {             /* in1, out2 */
63361   pIn1 = &aMem[pOp->p1];
63362   pOut = &aMem[pOp->p2];
63363   assert( pOut!=pIn1 );
63364   sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem);
63365   Deephemeralize(pOut);
63366   REGISTER_TRACE(pOp->p2, pOut);
63367   break;
63368 }
63369
63370 /* Opcode: SCopy P1 P2 * * *
63371 **
63372 ** Make a shallow copy of register P1 into register P2.
63373 **
63374 ** This instruction makes a shallow copy of the value.  If the value
63375 ** is a string or blob, then the copy is only a pointer to the
63376 ** original and hence if the original changes so will the copy.
63377 ** Worse, if the original is deallocated, the copy becomes invalid.
63378 ** Thus the program must guarantee that the original will not change
63379 ** during the lifetime of the copy.  Use OP_Copy to make a complete
63380 ** copy.
63381 */
63382 case OP_SCopy: {            /* in1, out2 */
63383   pIn1 = &aMem[pOp->p1];
63384   pOut = &aMem[pOp->p2];
63385   assert( pOut!=pIn1 );
63386   sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem);
63387 #ifdef SQLITE_DEBUG
63388   if( pOut->pScopyFrom==0 ) pOut->pScopyFrom = pIn1;
63389 #endif
63390   REGISTER_TRACE(pOp->p2, pOut);
63391   break;
63392 }
63393
63394 /* Opcode: ResultRow P1 P2 * * *
63395 **
63396 ** The registers P1 through P1+P2-1 contain a single row of
63397 ** results. This opcode causes the sqlite3_step() call to terminate
63398 ** with an SQLITE_ROW return code and it sets up the sqlite3_stmt
63399 ** structure to provide access to the top P1 values as the result
63400 ** row.
63401 */
63402 case OP_ResultRow: {
63403 #if 0  /* local variables moved into u.ad */
63404   Mem *pMem;
63405   int i;
63406 #endif /* local variables moved into u.ad */
63407   assert( p->nResColumn==pOp->p2 );
63408   assert( pOp->p1>0 );
63409   assert( pOp->p1+pOp->p2<=p->nMem+1 );
63410
63411   /* If this statement has violated immediate foreign key constraints, do
63412   ** not return the number of rows modified. And do not RELEASE the statement
63413   ** transaction. It needs to be rolled back.  */
63414   if( SQLITE_OK!=(rc = sqlite3VdbeCheckFk(p, 0)) ){
63415     assert( db->flags&SQLITE_CountRows );
63416     assert( p->usesStmtJournal );
63417     break;
63418   }
63419
63420   /* If the SQLITE_CountRows flag is set in sqlite3.flags mask, then
63421   ** DML statements invoke this opcode to return the number of rows
63422   ** modified to the user. This is the only way that a VM that
63423   ** opens a statement transaction may invoke this opcode.
63424   **
63425   ** In case this is such a statement, close any statement transaction
63426   ** opened by this VM before returning control to the user. This is to
63427   ** ensure that statement-transactions are always nested, not overlapping.
63428   ** If the open statement-transaction is not closed here, then the user
63429   ** may step another VM that opens its own statement transaction. This
63430   ** may lead to overlapping statement transactions.
63431   **
63432   ** The statement transaction is never a top-level transaction.  Hence
63433   ** the RELEASE call below can never fail.
63434   */
63435   assert( p->iStatement==0 || db->flags&SQLITE_CountRows );
63436   rc = sqlite3VdbeCloseStatement(p, SAVEPOINT_RELEASE);
63437   if( NEVER(rc!=SQLITE_OK) ){
63438     break;
63439   }
63440
63441   /* Invalidate all ephemeral cursor row caches */
63442   p->cacheCtr = (p->cacheCtr + 2)|1;
63443
63444   /* Make sure the results of the current row are \000 terminated
63445   ** and have an assigned type.  The results are de-ephemeralized as
63446   ** as side effect.
63447   */
63448   u.ad.pMem = p->pResultSet = &aMem[pOp->p1];
63449   for(u.ad.i=0; u.ad.i<pOp->p2; u.ad.i++){
63450     assert( memIsValid(&u.ad.pMem[u.ad.i]) );
63451     Deephemeralize(&u.ad.pMem[u.ad.i]);
63452     assert( (u.ad.pMem[u.ad.i].flags & MEM_Ephem)==0
63453             || (u.ad.pMem[u.ad.i].flags & (MEM_Str|MEM_Blob))==0 );
63454     sqlite3VdbeMemNulTerminate(&u.ad.pMem[u.ad.i]);
63455     sqlite3VdbeMemStoreType(&u.ad.pMem[u.ad.i]);
63456     REGISTER_TRACE(pOp->p1+u.ad.i, &u.ad.pMem[u.ad.i]);
63457   }
63458   if( db->mallocFailed ) goto no_mem;
63459
63460   /* Return SQLITE_ROW
63461   */
63462   p->pc = pc + 1;
63463   rc = SQLITE_ROW;
63464   goto vdbe_return;
63465 }
63466
63467 /* Opcode: Concat P1 P2 P3 * *
63468 **
63469 ** Add the text in register P1 onto the end of the text in
63470 ** register P2 and store the result in register P3.
63471 ** If either the P1 or P2 text are NULL then store NULL in P3.
63472 **
63473 **   P3 = P2 || P1
63474 **
63475 ** It is illegal for P1 and P3 to be the same register. Sometimes,
63476 ** if P3 is the same register as P2, the implementation is able
63477 ** to avoid a memcpy().
63478 */
63479 case OP_Concat: {           /* same as TK_CONCAT, in1, in2, out3 */
63480 #if 0  /* local variables moved into u.ae */
63481   i64 nByte;
63482 #endif /* local variables moved into u.ae */
63483
63484   pIn1 = &aMem[pOp->p1];
63485   pIn2 = &aMem[pOp->p2];
63486   pOut = &aMem[pOp->p3];
63487   assert( pIn1!=pOut );
63488   if( (pIn1->flags | pIn2->flags) & MEM_Null ){
63489     sqlite3VdbeMemSetNull(pOut);
63490     break;
63491   }
63492   if( ExpandBlob(pIn1) || ExpandBlob(pIn2) ) goto no_mem;
63493   Stringify(pIn1, encoding);
63494   Stringify(pIn2, encoding);
63495   u.ae.nByte = pIn1->n + pIn2->n;
63496   if( u.ae.nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
63497     goto too_big;
63498   }
63499   MemSetTypeFlag(pOut, MEM_Str);
63500   if( sqlite3VdbeMemGrow(pOut, (int)u.ae.nByte+2, pOut==pIn2) ){
63501     goto no_mem;
63502   }
63503   if( pOut!=pIn2 ){
63504     memcpy(pOut->z, pIn2->z, pIn2->n);
63505   }
63506   memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n);
63507   pOut->z[u.ae.nByte] = 0;
63508   pOut->z[u.ae.nByte+1] = 0;
63509   pOut->flags |= MEM_Term;
63510   pOut->n = (int)u.ae.nByte;
63511   pOut->enc = encoding;
63512   UPDATE_MAX_BLOBSIZE(pOut);
63513   break;
63514 }
63515
63516 /* Opcode: Add P1 P2 P3 * *
63517 **
63518 ** Add the value in register P1 to the value in register P2
63519 ** and store the result in register P3.
63520 ** If either input is NULL, the result is NULL.
63521 */
63522 /* Opcode: Multiply P1 P2 P3 * *
63523 **
63524 **
63525 ** Multiply the value in register P1 by the value in register P2
63526 ** and store the result in register P3.
63527 ** If either input is NULL, the result is NULL.
63528 */
63529 /* Opcode: Subtract P1 P2 P3 * *
63530 **
63531 ** Subtract the value in register P1 from the value in register P2
63532 ** and store the result in register P3.
63533 ** If either input is NULL, the result is NULL.
63534 */
63535 /* Opcode: Divide P1 P2 P3 * *
63536 **
63537 ** Divide the value in register P1 by the value in register P2
63538 ** and store the result in register P3 (P3=P2/P1). If the value in 
63539 ** register P1 is zero, then the result is NULL. If either input is 
63540 ** NULL, the result is NULL.
63541 */
63542 /* Opcode: Remainder P1 P2 P3 * *
63543 **
63544 ** Compute the remainder after integer division of the value in
63545 ** register P1 by the value in register P2 and store the result in P3. 
63546 ** If the value in register P2 is zero the result is NULL.
63547 ** If either operand is NULL, the result is NULL.
63548 */
63549 case OP_Add:                   /* same as TK_PLUS, in1, in2, out3 */
63550 case OP_Subtract:              /* same as TK_MINUS, in1, in2, out3 */
63551 case OP_Multiply:              /* same as TK_STAR, in1, in2, out3 */
63552 case OP_Divide:                /* same as TK_SLASH, in1, in2, out3 */
63553 case OP_Remainder: {           /* same as TK_REM, in1, in2, out3 */
63554 #if 0  /* local variables moved into u.af */
63555   int flags;      /* Combined MEM_* flags from both inputs */
63556   i64 iA;         /* Integer value of left operand */
63557   i64 iB;         /* Integer value of right operand */
63558   double rA;      /* Real value of left operand */
63559   double rB;      /* Real value of right operand */
63560 #endif /* local variables moved into u.af */
63561
63562   pIn1 = &aMem[pOp->p1];
63563   applyNumericAffinity(pIn1);
63564   pIn2 = &aMem[pOp->p2];
63565   applyNumericAffinity(pIn2);
63566   pOut = &aMem[pOp->p3];
63567   u.af.flags = pIn1->flags | pIn2->flags;
63568   if( (u.af.flags & MEM_Null)!=0 ) goto arithmetic_result_is_null;
63569   if( (pIn1->flags & pIn2->flags & MEM_Int)==MEM_Int ){
63570     u.af.iA = pIn1->u.i;
63571     u.af.iB = pIn2->u.i;
63572     switch( pOp->opcode ){
63573       case OP_Add:       if( sqlite3AddInt64(&u.af.iB,u.af.iA) ) goto fp_math;  break;
63574       case OP_Subtract:  if( sqlite3SubInt64(&u.af.iB,u.af.iA) ) goto fp_math;  break;
63575       case OP_Multiply:  if( sqlite3MulInt64(&u.af.iB,u.af.iA) ) goto fp_math;  break;
63576       case OP_Divide: {
63577         if( u.af.iA==0 ) goto arithmetic_result_is_null;
63578         if( u.af.iA==-1 && u.af.iB==SMALLEST_INT64 ) goto fp_math;
63579         u.af.iB /= u.af.iA;
63580         break;
63581       }
63582       default: {
63583         if( u.af.iA==0 ) goto arithmetic_result_is_null;
63584         if( u.af.iA==-1 ) u.af.iA = 1;
63585         u.af.iB %= u.af.iA;
63586         break;
63587       }
63588     }
63589     pOut->u.i = u.af.iB;
63590     MemSetTypeFlag(pOut, MEM_Int);
63591   }else{
63592 fp_math:
63593     u.af.rA = sqlite3VdbeRealValue(pIn1);
63594     u.af.rB = sqlite3VdbeRealValue(pIn2);
63595     switch( pOp->opcode ){
63596       case OP_Add:         u.af.rB += u.af.rA;       break;
63597       case OP_Subtract:    u.af.rB -= u.af.rA;       break;
63598       case OP_Multiply:    u.af.rB *= u.af.rA;       break;
63599       case OP_Divide: {
63600         /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
63601         if( u.af.rA==(double)0 ) goto arithmetic_result_is_null;
63602         u.af.rB /= u.af.rA;
63603         break;
63604       }
63605       default: {
63606         u.af.iA = (i64)u.af.rA;
63607         u.af.iB = (i64)u.af.rB;
63608         if( u.af.iA==0 ) goto arithmetic_result_is_null;
63609         if( u.af.iA==-1 ) u.af.iA = 1;
63610         u.af.rB = (double)(u.af.iB % u.af.iA);
63611         break;
63612       }
63613     }
63614 #ifdef SQLITE_OMIT_FLOATING_POINT
63615     pOut->u.i = u.af.rB;
63616     MemSetTypeFlag(pOut, MEM_Int);
63617 #else
63618     if( sqlite3IsNaN(u.af.rB) ){
63619       goto arithmetic_result_is_null;
63620     }
63621     pOut->r = u.af.rB;
63622     MemSetTypeFlag(pOut, MEM_Real);
63623     if( (u.af.flags & MEM_Real)==0 ){
63624       sqlite3VdbeIntegerAffinity(pOut);
63625     }
63626 #endif
63627   }
63628   break;
63629
63630 arithmetic_result_is_null:
63631   sqlite3VdbeMemSetNull(pOut);
63632   break;
63633 }
63634
63635 /* Opcode: CollSeq * * P4
63636 **
63637 ** P4 is a pointer to a CollSeq struct. If the next call to a user function
63638 ** or aggregate calls sqlite3GetFuncCollSeq(), this collation sequence will
63639 ** be returned. This is used by the built-in min(), max() and nullif()
63640 ** functions.
63641 **
63642 ** The interface used by the implementation of the aforementioned functions
63643 ** to retrieve the collation sequence set by this opcode is not available
63644 ** publicly, only to user functions defined in func.c.
63645 */
63646 case OP_CollSeq: {
63647   assert( pOp->p4type==P4_COLLSEQ );
63648   break;
63649 }
63650
63651 /* Opcode: Function P1 P2 P3 P4 P5
63652 **
63653 ** Invoke a user function (P4 is a pointer to a Function structure that
63654 ** defines the function) with P5 arguments taken from register P2 and
63655 ** successors.  The result of the function is stored in register P3.
63656 ** Register P3 must not be one of the function inputs.
63657 **
63658 ** P1 is a 32-bit bitmask indicating whether or not each argument to the 
63659 ** function was determined to be constant at compile time. If the first
63660 ** argument was constant then bit 0 of P1 is set. This is used to determine
63661 ** whether meta data associated with a user function argument using the
63662 ** sqlite3_set_auxdata() API may be safely retained until the next
63663 ** invocation of this opcode.
63664 **
63665 ** See also: AggStep and AggFinal
63666 */
63667 case OP_Function: {
63668 #if 0  /* local variables moved into u.ag */
63669   int i;
63670   Mem *pArg;
63671   sqlite3_context ctx;
63672   sqlite3_value **apVal;
63673   int n;
63674 #endif /* local variables moved into u.ag */
63675
63676   u.ag.n = pOp->p5;
63677   u.ag.apVal = p->apArg;
63678   assert( u.ag.apVal || u.ag.n==0 );
63679   assert( pOp->p3>0 && pOp->p3<=p->nMem );
63680   pOut = &aMem[pOp->p3];
63681   memAboutToChange(p, pOut);
63682
63683   assert( u.ag.n==0 || (pOp->p2>0 && pOp->p2+u.ag.n<=p->nMem+1) );
63684   assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+u.ag.n );
63685   u.ag.pArg = &aMem[pOp->p2];
63686   for(u.ag.i=0; u.ag.i<u.ag.n; u.ag.i++, u.ag.pArg++){
63687     assert( memIsValid(u.ag.pArg) );
63688     u.ag.apVal[u.ag.i] = u.ag.pArg;
63689     Deephemeralize(u.ag.pArg);
63690     sqlite3VdbeMemStoreType(u.ag.pArg);
63691     REGISTER_TRACE(pOp->p2+u.ag.i, u.ag.pArg);
63692   }
63693
63694   assert( pOp->p4type==P4_FUNCDEF || pOp->p4type==P4_VDBEFUNC );
63695   if( pOp->p4type==P4_FUNCDEF ){
63696     u.ag.ctx.pFunc = pOp->p4.pFunc;
63697     u.ag.ctx.pVdbeFunc = 0;
63698   }else{
63699     u.ag.ctx.pVdbeFunc = (VdbeFunc*)pOp->p4.pVdbeFunc;
63700     u.ag.ctx.pFunc = u.ag.ctx.pVdbeFunc->pFunc;
63701   }
63702
63703   u.ag.ctx.s.flags = MEM_Null;
63704   u.ag.ctx.s.db = db;
63705   u.ag.ctx.s.xDel = 0;
63706   u.ag.ctx.s.zMalloc = 0;
63707
63708   /* The output cell may already have a buffer allocated. Move
63709   ** the pointer to u.ag.ctx.s so in case the user-function can use
63710   ** the already allocated buffer instead of allocating a new one.
63711   */
63712   sqlite3VdbeMemMove(&u.ag.ctx.s, pOut);
63713   MemSetTypeFlag(&u.ag.ctx.s, MEM_Null);
63714
63715   u.ag.ctx.isError = 0;
63716   if( u.ag.ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
63717     assert( pOp>aOp );
63718     assert( pOp[-1].p4type==P4_COLLSEQ );
63719     assert( pOp[-1].opcode==OP_CollSeq );
63720     u.ag.ctx.pColl = pOp[-1].p4.pColl;
63721   }
63722   (*u.ag.ctx.pFunc->xFunc)(&u.ag.ctx, u.ag.n, u.ag.apVal); /* IMP: R-24505-23230 */
63723   if( db->mallocFailed ){
63724     /* Even though a malloc() has failed, the implementation of the
63725     ** user function may have called an sqlite3_result_XXX() function
63726     ** to return a value. The following call releases any resources
63727     ** associated with such a value.
63728     */
63729     sqlite3VdbeMemRelease(&u.ag.ctx.s);
63730     goto no_mem;
63731   }
63732
63733   /* If any auxiliary data functions have been called by this user function,
63734   ** immediately call the destructor for any non-static values.
63735   */
63736   if( u.ag.ctx.pVdbeFunc ){
63737     sqlite3VdbeDeleteAuxData(u.ag.ctx.pVdbeFunc, pOp->p1);
63738     pOp->p4.pVdbeFunc = u.ag.ctx.pVdbeFunc;
63739     pOp->p4type = P4_VDBEFUNC;
63740   }
63741
63742   /* If the function returned an error, throw an exception */
63743   if( u.ag.ctx.isError ){
63744     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.ag.ctx.s));
63745     rc = u.ag.ctx.isError;
63746   }
63747
63748   /* Copy the result of the function into register P3 */
63749   sqlite3VdbeChangeEncoding(&u.ag.ctx.s, encoding);
63750   sqlite3VdbeMemMove(pOut, &u.ag.ctx.s);
63751   if( sqlite3VdbeMemTooBig(pOut) ){
63752     goto too_big;
63753   }
63754
63755 #if 0
63756   /* The app-defined function has done something that as caused this
63757   ** statement to expire.  (Perhaps the function called sqlite3_exec()
63758   ** with a CREATE TABLE statement.)
63759   */
63760   if( p->expired ) rc = SQLITE_ABORT;
63761 #endif
63762
63763   REGISTER_TRACE(pOp->p3, pOut);
63764   UPDATE_MAX_BLOBSIZE(pOut);
63765   break;
63766 }
63767
63768 /* Opcode: BitAnd P1 P2 P3 * *
63769 **
63770 ** Take the bit-wise AND of the values in register P1 and P2 and
63771 ** store the result in register P3.
63772 ** If either input is NULL, the result is NULL.
63773 */
63774 /* Opcode: BitOr P1 P2 P3 * *
63775 **
63776 ** Take the bit-wise OR of the values in register P1 and P2 and
63777 ** store the result in register P3.
63778 ** If either input is NULL, the result is NULL.
63779 */
63780 /* Opcode: ShiftLeft P1 P2 P3 * *
63781 **
63782 ** Shift the integer value in register P2 to the left by the
63783 ** number of bits specified by the integer in register P1.
63784 ** Store the result in register P3.
63785 ** If either input is NULL, the result is NULL.
63786 */
63787 /* Opcode: ShiftRight P1 P2 P3 * *
63788 **
63789 ** Shift the integer value in register P2 to the right by the
63790 ** number of bits specified by the integer in register P1.
63791 ** Store the result in register P3.
63792 ** If either input is NULL, the result is NULL.
63793 */
63794 case OP_BitAnd:                 /* same as TK_BITAND, in1, in2, out3 */
63795 case OP_BitOr:                  /* same as TK_BITOR, in1, in2, out3 */
63796 case OP_ShiftLeft:              /* same as TK_LSHIFT, in1, in2, out3 */
63797 case OP_ShiftRight: {           /* same as TK_RSHIFT, in1, in2, out3 */
63798 #if 0  /* local variables moved into u.ah */
63799   i64 iA;
63800   u64 uA;
63801   i64 iB;
63802   u8 op;
63803 #endif /* local variables moved into u.ah */
63804
63805   pIn1 = &aMem[pOp->p1];
63806   pIn2 = &aMem[pOp->p2];
63807   pOut = &aMem[pOp->p3];
63808   if( (pIn1->flags | pIn2->flags) & MEM_Null ){
63809     sqlite3VdbeMemSetNull(pOut);
63810     break;
63811   }
63812   u.ah.iA = sqlite3VdbeIntValue(pIn2);
63813   u.ah.iB = sqlite3VdbeIntValue(pIn1);
63814   u.ah.op = pOp->opcode;
63815   if( u.ah.op==OP_BitAnd ){
63816     u.ah.iA &= u.ah.iB;
63817   }else if( u.ah.op==OP_BitOr ){
63818     u.ah.iA |= u.ah.iB;
63819   }else if( u.ah.iB!=0 ){
63820     assert( u.ah.op==OP_ShiftRight || u.ah.op==OP_ShiftLeft );
63821
63822     /* If shifting by a negative amount, shift in the other direction */
63823     if( u.ah.iB<0 ){
63824       assert( OP_ShiftRight==OP_ShiftLeft+1 );
63825       u.ah.op = 2*OP_ShiftLeft + 1 - u.ah.op;
63826       u.ah.iB = u.ah.iB>(-64) ? -u.ah.iB : 64;
63827     }
63828
63829     if( u.ah.iB>=64 ){
63830       u.ah.iA = (u.ah.iA>=0 || u.ah.op==OP_ShiftLeft) ? 0 : -1;
63831     }else{
63832       memcpy(&u.ah.uA, &u.ah.iA, sizeof(u.ah.uA));
63833       if( u.ah.op==OP_ShiftLeft ){
63834         u.ah.uA <<= u.ah.iB;
63835       }else{
63836         u.ah.uA >>= u.ah.iB;
63837         /* Sign-extend on a right shift of a negative number */
63838         if( u.ah.iA<0 ) u.ah.uA |= ((((u64)0xffffffff)<<32)|0xffffffff) << (64-u.ah.iB);
63839       }
63840       memcpy(&u.ah.iA, &u.ah.uA, sizeof(u.ah.iA));
63841     }
63842   }
63843   pOut->u.i = u.ah.iA;
63844   MemSetTypeFlag(pOut, MEM_Int);
63845   break;
63846 }
63847
63848 /* Opcode: AddImm  P1 P2 * * *
63849 ** 
63850 ** Add the constant P2 to the value in register P1.
63851 ** The result is always an integer.
63852 **
63853 ** To force any register to be an integer, just add 0.
63854 */
63855 case OP_AddImm: {            /* in1 */
63856   pIn1 = &aMem[pOp->p1];
63857   memAboutToChange(p, pIn1);
63858   sqlite3VdbeMemIntegerify(pIn1);
63859   pIn1->u.i += pOp->p2;
63860   break;
63861 }
63862
63863 /* Opcode: MustBeInt P1 P2 * * *
63864 ** 
63865 ** Force the value in register P1 to be an integer.  If the value
63866 ** in P1 is not an integer and cannot be converted into an integer
63867 ** without data loss, then jump immediately to P2, or if P2==0
63868 ** raise an SQLITE_MISMATCH exception.
63869 */
63870 case OP_MustBeInt: {            /* jump, in1 */
63871   pIn1 = &aMem[pOp->p1];
63872   applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding);
63873   if( (pIn1->flags & MEM_Int)==0 ){
63874     if( pOp->p2==0 ){
63875       rc = SQLITE_MISMATCH;
63876       goto abort_due_to_error;
63877     }else{
63878       pc = pOp->p2 - 1;
63879     }
63880   }else{
63881     MemSetTypeFlag(pIn1, MEM_Int);
63882   }
63883   break;
63884 }
63885
63886 #ifndef SQLITE_OMIT_FLOATING_POINT
63887 /* Opcode: RealAffinity P1 * * * *
63888 **
63889 ** If register P1 holds an integer convert it to a real value.
63890 **
63891 ** This opcode is used when extracting information from a column that
63892 ** has REAL affinity.  Such column values may still be stored as
63893 ** integers, for space efficiency, but after extraction we want them
63894 ** to have only a real value.
63895 */
63896 case OP_RealAffinity: {                  /* in1 */
63897   pIn1 = &aMem[pOp->p1];
63898   if( pIn1->flags & MEM_Int ){
63899     sqlite3VdbeMemRealify(pIn1);
63900   }
63901   break;
63902 }
63903 #endif
63904
63905 #ifndef SQLITE_OMIT_CAST
63906 /* Opcode: ToText P1 * * * *
63907 **
63908 ** Force the value in register P1 to be text.
63909 ** If the value is numeric, convert it to a string using the
63910 ** equivalent of printf().  Blob values are unchanged and
63911 ** are afterwards simply interpreted as text.
63912 **
63913 ** A NULL value is not changed by this routine.  It remains NULL.
63914 */
63915 case OP_ToText: {                  /* same as TK_TO_TEXT, in1 */
63916   pIn1 = &aMem[pOp->p1];
63917   memAboutToChange(p, pIn1);
63918   if( pIn1->flags & MEM_Null ) break;
63919   assert( MEM_Str==(MEM_Blob>>3) );
63920   pIn1->flags |= (pIn1->flags&MEM_Blob)>>3;
63921   applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
63922   rc = ExpandBlob(pIn1);
63923   assert( pIn1->flags & MEM_Str || db->mallocFailed );
63924   pIn1->flags &= ~(MEM_Int|MEM_Real|MEM_Blob|MEM_Zero);
63925   UPDATE_MAX_BLOBSIZE(pIn1);
63926   break;
63927 }
63928
63929 /* Opcode: ToBlob P1 * * * *
63930 **
63931 ** Force the value in register P1 to be a BLOB.
63932 ** If the value is numeric, convert it to a string first.
63933 ** Strings are simply reinterpreted as blobs with no change
63934 ** to the underlying data.
63935 **
63936 ** A NULL value is not changed by this routine.  It remains NULL.
63937 */
63938 case OP_ToBlob: {                  /* same as TK_TO_BLOB, in1 */
63939   pIn1 = &aMem[pOp->p1];
63940   if( pIn1->flags & MEM_Null ) break;
63941   if( (pIn1->flags & MEM_Blob)==0 ){
63942     applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
63943     assert( pIn1->flags & MEM_Str || db->mallocFailed );
63944     MemSetTypeFlag(pIn1, MEM_Blob);
63945   }else{
63946     pIn1->flags &= ~(MEM_TypeMask&~MEM_Blob);
63947   }
63948   UPDATE_MAX_BLOBSIZE(pIn1);
63949   break;
63950 }
63951
63952 /* Opcode: ToNumeric P1 * * * *
63953 **
63954 ** Force the value in register P1 to be numeric (either an
63955 ** integer or a floating-point number.)
63956 ** If the value is text or blob, try to convert it to an using the
63957 ** equivalent of atoi() or atof() and store 0 if no such conversion 
63958 ** is possible.
63959 **
63960 ** A NULL value is not changed by this routine.  It remains NULL.
63961 */
63962 case OP_ToNumeric: {                  /* same as TK_TO_NUMERIC, in1 */
63963   pIn1 = &aMem[pOp->p1];
63964   sqlite3VdbeMemNumerify(pIn1);
63965   break;
63966 }
63967 #endif /* SQLITE_OMIT_CAST */
63968
63969 /* Opcode: ToInt P1 * * * *
63970 **
63971 ** Force the value in register P1 to be an integer.  If
63972 ** The value is currently a real number, drop its fractional part.
63973 ** If the value is text or blob, try to convert it to an integer using the
63974 ** equivalent of atoi() and store 0 if no such conversion is possible.
63975 **
63976 ** A NULL value is not changed by this routine.  It remains NULL.
63977 */
63978 case OP_ToInt: {                  /* same as TK_TO_INT, in1 */
63979   pIn1 = &aMem[pOp->p1];
63980   if( (pIn1->flags & MEM_Null)==0 ){
63981     sqlite3VdbeMemIntegerify(pIn1);
63982   }
63983   break;
63984 }
63985
63986 #if !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT)
63987 /* Opcode: ToReal P1 * * * *
63988 **
63989 ** Force the value in register P1 to be a floating point number.
63990 ** If The value is currently an integer, convert it.
63991 ** If the value is text or blob, try to convert it to an integer using the
63992 ** equivalent of atoi() and store 0.0 if no such conversion is possible.
63993 **
63994 ** A NULL value is not changed by this routine.  It remains NULL.
63995 */
63996 case OP_ToReal: {                  /* same as TK_TO_REAL, in1 */
63997   pIn1 = &aMem[pOp->p1];
63998   memAboutToChange(p, pIn1);
63999   if( (pIn1->flags & MEM_Null)==0 ){
64000     sqlite3VdbeMemRealify(pIn1);
64001   }
64002   break;
64003 }
64004 #endif /* !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT) */
64005
64006 /* Opcode: Lt P1 P2 P3 P4 P5
64007 **
64008 ** Compare the values in register P1 and P3.  If reg(P3)<reg(P1) then
64009 ** jump to address P2.  
64010 **
64011 ** If the SQLITE_JUMPIFNULL bit of P5 is set and either reg(P1) or
64012 ** reg(P3) is NULL then take the jump.  If the SQLITE_JUMPIFNULL 
64013 ** bit is clear then fall through if either operand is NULL.
64014 **
64015 ** The SQLITE_AFF_MASK portion of P5 must be an affinity character -
64016 ** SQLITE_AFF_TEXT, SQLITE_AFF_INTEGER, and so forth. An attempt is made 
64017 ** to coerce both inputs according to this affinity before the
64018 ** comparison is made. If the SQLITE_AFF_MASK is 0x00, then numeric
64019 ** affinity is used. Note that the affinity conversions are stored
64020 ** back into the input registers P1 and P3.  So this opcode can cause
64021 ** persistent changes to registers P1 and P3.
64022 **
64023 ** Once any conversions have taken place, and neither value is NULL, 
64024 ** the values are compared. If both values are blobs then memcmp() is
64025 ** used to determine the results of the comparison.  If both values
64026 ** are text, then the appropriate collating function specified in
64027 ** P4 is  used to do the comparison.  If P4 is not specified then
64028 ** memcmp() is used to compare text string.  If both values are
64029 ** numeric, then a numeric comparison is used. If the two values
64030 ** are of different types, then numbers are considered less than
64031 ** strings and strings are considered less than blobs.
64032 **
64033 ** If the SQLITE_STOREP2 bit of P5 is set, then do not jump.  Instead,
64034 ** store a boolean result (either 0, or 1, or NULL) in register P2.
64035 */
64036 /* Opcode: Ne P1 P2 P3 P4 P5
64037 **
64038 ** This works just like the Lt opcode except that the jump is taken if
64039 ** the operands in registers P1 and P3 are not equal.  See the Lt opcode for
64040 ** additional information.
64041 **
64042 ** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
64043 ** true or false and is never NULL.  If both operands are NULL then the result
64044 ** of comparison is false.  If either operand is NULL then the result is true.
64045 ** If neither operand is NULL the the result is the same as it would be if
64046 ** the SQLITE_NULLEQ flag were omitted from P5.
64047 */
64048 /* Opcode: Eq P1 P2 P3 P4 P5
64049 **
64050 ** This works just like the Lt opcode except that the jump is taken if
64051 ** the operands in registers P1 and P3 are equal.
64052 ** See the Lt opcode for additional information.
64053 **
64054 ** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
64055 ** true or false and is never NULL.  If both operands are NULL then the result
64056 ** of comparison is true.  If either operand is NULL then the result is false.
64057 ** If neither operand is NULL the the result is the same as it would be if
64058 ** the SQLITE_NULLEQ flag were omitted from P5.
64059 */
64060 /* Opcode: Le P1 P2 P3 P4 P5
64061 **
64062 ** This works just like the Lt opcode except that the jump is taken if
64063 ** the content of register P3 is less than or equal to the content of
64064 ** register P1.  See the Lt opcode for additional information.
64065 */
64066 /* Opcode: Gt P1 P2 P3 P4 P5
64067 **
64068 ** This works just like the Lt opcode except that the jump is taken if
64069 ** the content of register P3 is greater than the content of
64070 ** register P1.  See the Lt opcode for additional information.
64071 */
64072 /* Opcode: Ge P1 P2 P3 P4 P5
64073 **
64074 ** This works just like the Lt opcode except that the jump is taken if
64075 ** the content of register P3 is greater than or equal to the content of
64076 ** register P1.  See the Lt opcode for additional information.
64077 */
64078 case OP_Eq:               /* same as TK_EQ, jump, in1, in3 */
64079 case OP_Ne:               /* same as TK_NE, jump, in1, in3 */
64080 case OP_Lt:               /* same as TK_LT, jump, in1, in3 */
64081 case OP_Le:               /* same as TK_LE, jump, in1, in3 */
64082 case OP_Gt:               /* same as TK_GT, jump, in1, in3 */
64083 case OP_Ge: {             /* same as TK_GE, jump, in1, in3 */
64084 #if 0  /* local variables moved into u.ai */
64085   int res;            /* Result of the comparison of pIn1 against pIn3 */
64086   char affinity;      /* Affinity to use for comparison */
64087   u16 flags1;         /* Copy of initial value of pIn1->flags */
64088   u16 flags3;         /* Copy of initial value of pIn3->flags */
64089 #endif /* local variables moved into u.ai */
64090
64091   pIn1 = &aMem[pOp->p1];
64092   pIn3 = &aMem[pOp->p3];
64093   u.ai.flags1 = pIn1->flags;
64094   u.ai.flags3 = pIn3->flags;
64095   if( (pIn1->flags | pIn3->flags)&MEM_Null ){
64096     /* One or both operands are NULL */
64097     if( pOp->p5 & SQLITE_NULLEQ ){
64098       /* If SQLITE_NULLEQ is set (which will only happen if the operator is
64099       ** OP_Eq or OP_Ne) then take the jump or not depending on whether
64100       ** or not both operands are null.
64101       */
64102       assert( pOp->opcode==OP_Eq || pOp->opcode==OP_Ne );
64103       u.ai.res = (pIn1->flags & pIn3->flags & MEM_Null)==0;
64104     }else{
64105       /* SQLITE_NULLEQ is clear and at least one operand is NULL,
64106       ** then the result is always NULL.
64107       ** The jump is taken if the SQLITE_JUMPIFNULL bit is set.
64108       */
64109       if( pOp->p5 & SQLITE_STOREP2 ){
64110         pOut = &aMem[pOp->p2];
64111         MemSetTypeFlag(pOut, MEM_Null);
64112         REGISTER_TRACE(pOp->p2, pOut);
64113       }else if( pOp->p5 & SQLITE_JUMPIFNULL ){
64114         pc = pOp->p2-1;
64115       }
64116       break;
64117     }
64118   }else{
64119     /* Neither operand is NULL.  Do a comparison. */
64120     u.ai.affinity = pOp->p5 & SQLITE_AFF_MASK;
64121     if( u.ai.affinity ){
64122       applyAffinity(pIn1, u.ai.affinity, encoding);
64123       applyAffinity(pIn3, u.ai.affinity, encoding);
64124       if( db->mallocFailed ) goto no_mem;
64125     }
64126
64127     assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 );
64128     ExpandBlob(pIn1);
64129     ExpandBlob(pIn3);
64130     u.ai.res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl);
64131   }
64132   switch( pOp->opcode ){
64133     case OP_Eq:    u.ai.res = u.ai.res==0;     break;
64134     case OP_Ne:    u.ai.res = u.ai.res!=0;     break;
64135     case OP_Lt:    u.ai.res = u.ai.res<0;      break;
64136     case OP_Le:    u.ai.res = u.ai.res<=0;     break;
64137     case OP_Gt:    u.ai.res = u.ai.res>0;      break;
64138     default:       u.ai.res = u.ai.res>=0;     break;
64139   }
64140
64141   if( pOp->p5 & SQLITE_STOREP2 ){
64142     pOut = &aMem[pOp->p2];
64143     memAboutToChange(p, pOut);
64144     MemSetTypeFlag(pOut, MEM_Int);
64145     pOut->u.i = u.ai.res;
64146     REGISTER_TRACE(pOp->p2, pOut);
64147   }else if( u.ai.res ){
64148     pc = pOp->p2-1;
64149   }
64150
64151   /* Undo any changes made by applyAffinity() to the input registers. */
64152   pIn1->flags = (pIn1->flags&~MEM_TypeMask) | (u.ai.flags1&MEM_TypeMask);
64153   pIn3->flags = (pIn3->flags&~MEM_TypeMask) | (u.ai.flags3&MEM_TypeMask);
64154   break;
64155 }
64156
64157 /* Opcode: Permutation * * * P4 *
64158 **
64159 ** Set the permutation used by the OP_Compare operator to be the array
64160 ** of integers in P4.
64161 **
64162 ** The permutation is only valid until the next OP_Permutation, OP_Compare,
64163 ** OP_Halt, or OP_ResultRow.  Typically the OP_Permutation should occur
64164 ** immediately prior to the OP_Compare.
64165 */
64166 case OP_Permutation: {
64167   assert( pOp->p4type==P4_INTARRAY );
64168   assert( pOp->p4.ai );
64169   aPermute = pOp->p4.ai;
64170   break;
64171 }
64172
64173 /* Opcode: Compare P1 P2 P3 P4 *
64174 **
64175 ** Compare two vectors of registers in reg(P1)..reg(P1+P3-1) (call this
64176 ** vector "A") and in reg(P2)..reg(P2+P3-1) ("B").  Save the result of
64177 ** the comparison for use by the next OP_Jump instruct.
64178 **
64179 ** P4 is a KeyInfo structure that defines collating sequences and sort
64180 ** orders for the comparison.  The permutation applies to registers
64181 ** only.  The KeyInfo elements are used sequentially.
64182 **
64183 ** The comparison is a sort comparison, so NULLs compare equal,
64184 ** NULLs are less than numbers, numbers are less than strings,
64185 ** and strings are less than blobs.
64186 */
64187 case OP_Compare: {
64188 #if 0  /* local variables moved into u.aj */
64189   int n;
64190   int i;
64191   int p1;
64192   int p2;
64193   const KeyInfo *pKeyInfo;
64194   int idx;
64195   CollSeq *pColl;    /* Collating sequence to use on this term */
64196   int bRev;          /* True for DESCENDING sort order */
64197 #endif /* local variables moved into u.aj */
64198
64199   u.aj.n = pOp->p3;
64200   u.aj.pKeyInfo = pOp->p4.pKeyInfo;
64201   assert( u.aj.n>0 );
64202   assert( u.aj.pKeyInfo!=0 );
64203   u.aj.p1 = pOp->p1;
64204   u.aj.p2 = pOp->p2;
64205 #if SQLITE_DEBUG
64206   if( aPermute ){
64207     int k, mx = 0;
64208     for(k=0; k<u.aj.n; k++) if( aPermute[k]>mx ) mx = aPermute[k];
64209     assert( u.aj.p1>0 && u.aj.p1+mx<=p->nMem+1 );
64210     assert( u.aj.p2>0 && u.aj.p2+mx<=p->nMem+1 );
64211   }else{
64212     assert( u.aj.p1>0 && u.aj.p1+u.aj.n<=p->nMem+1 );
64213     assert( u.aj.p2>0 && u.aj.p2+u.aj.n<=p->nMem+1 );
64214   }
64215 #endif /* SQLITE_DEBUG */
64216   for(u.aj.i=0; u.aj.i<u.aj.n; u.aj.i++){
64217     u.aj.idx = aPermute ? aPermute[u.aj.i] : u.aj.i;
64218     assert( memIsValid(&aMem[u.aj.p1+u.aj.idx]) );
64219     assert( memIsValid(&aMem[u.aj.p2+u.aj.idx]) );
64220     REGISTER_TRACE(u.aj.p1+u.aj.idx, &aMem[u.aj.p1+u.aj.idx]);
64221     REGISTER_TRACE(u.aj.p2+u.aj.idx, &aMem[u.aj.p2+u.aj.idx]);
64222     assert( u.aj.i<u.aj.pKeyInfo->nField );
64223     u.aj.pColl = u.aj.pKeyInfo->aColl[u.aj.i];
64224     u.aj.bRev = u.aj.pKeyInfo->aSortOrder[u.aj.i];
64225     iCompare = sqlite3MemCompare(&aMem[u.aj.p1+u.aj.idx], &aMem[u.aj.p2+u.aj.idx], u.aj.pColl);
64226     if( iCompare ){
64227       if( u.aj.bRev ) iCompare = -iCompare;
64228       break;
64229     }
64230   }
64231   aPermute = 0;
64232   break;
64233 }
64234
64235 /* Opcode: Jump P1 P2 P3 * *
64236 **
64237 ** Jump to the instruction at address P1, P2, or P3 depending on whether
64238 ** in the most recent OP_Compare instruction the P1 vector was less than
64239 ** equal to, or greater than the P2 vector, respectively.
64240 */
64241 case OP_Jump: {             /* jump */
64242   if( iCompare<0 ){
64243     pc = pOp->p1 - 1;
64244   }else if( iCompare==0 ){
64245     pc = pOp->p2 - 1;
64246   }else{
64247     pc = pOp->p3 - 1;
64248   }
64249   break;
64250 }
64251
64252 /* Opcode: And P1 P2 P3 * *
64253 **
64254 ** Take the logical AND of the values in registers P1 and P2 and
64255 ** write the result into register P3.
64256 **
64257 ** If either P1 or P2 is 0 (false) then the result is 0 even if
64258 ** the other input is NULL.  A NULL and true or two NULLs give
64259 ** a NULL output.
64260 */
64261 /* Opcode: Or P1 P2 P3 * *
64262 **
64263 ** Take the logical OR of the values in register P1 and P2 and
64264 ** store the answer in register P3.
64265 **
64266 ** If either P1 or P2 is nonzero (true) then the result is 1 (true)
64267 ** even if the other input is NULL.  A NULL and false or two NULLs
64268 ** give a NULL output.
64269 */
64270 case OP_And:              /* same as TK_AND, in1, in2, out3 */
64271 case OP_Or: {             /* same as TK_OR, in1, in2, out3 */
64272 #if 0  /* local variables moved into u.ak */
64273   int v1;    /* Left operand:  0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
64274   int v2;    /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
64275 #endif /* local variables moved into u.ak */
64276
64277   pIn1 = &aMem[pOp->p1];
64278   if( pIn1->flags & MEM_Null ){
64279     u.ak.v1 = 2;
64280   }else{
64281     u.ak.v1 = sqlite3VdbeIntValue(pIn1)!=0;
64282   }
64283   pIn2 = &aMem[pOp->p2];
64284   if( pIn2->flags & MEM_Null ){
64285     u.ak.v2 = 2;
64286   }else{
64287     u.ak.v2 = sqlite3VdbeIntValue(pIn2)!=0;
64288   }
64289   if( pOp->opcode==OP_And ){
64290     static const unsigned char and_logic[] = { 0, 0, 0, 0, 1, 2, 0, 2, 2 };
64291     u.ak.v1 = and_logic[u.ak.v1*3+u.ak.v2];
64292   }else{
64293     static const unsigned char or_logic[] = { 0, 1, 2, 1, 1, 1, 2, 1, 2 };
64294     u.ak.v1 = or_logic[u.ak.v1*3+u.ak.v2];
64295   }
64296   pOut = &aMem[pOp->p3];
64297   if( u.ak.v1==2 ){
64298     MemSetTypeFlag(pOut, MEM_Null);
64299   }else{
64300     pOut->u.i = u.ak.v1;
64301     MemSetTypeFlag(pOut, MEM_Int);
64302   }
64303   break;
64304 }
64305
64306 /* Opcode: Not P1 P2 * * *
64307 **
64308 ** Interpret the value in register P1 as a boolean value.  Store the
64309 ** boolean complement in register P2.  If the value in register P1 is 
64310 ** NULL, then a NULL is stored in P2.
64311 */
64312 case OP_Not: {                /* same as TK_NOT, in1, out2 */
64313   pIn1 = &aMem[pOp->p1];
64314   pOut = &aMem[pOp->p2];
64315   if( pIn1->flags & MEM_Null ){
64316     sqlite3VdbeMemSetNull(pOut);
64317   }else{
64318     sqlite3VdbeMemSetInt64(pOut, !sqlite3VdbeIntValue(pIn1));
64319   }
64320   break;
64321 }
64322
64323 /* Opcode: BitNot P1 P2 * * *
64324 **
64325 ** Interpret the content of register P1 as an integer.  Store the
64326 ** ones-complement of the P1 value into register P2.  If P1 holds
64327 ** a NULL then store a NULL in P2.
64328 */
64329 case OP_BitNot: {             /* same as TK_BITNOT, in1, out2 */
64330   pIn1 = &aMem[pOp->p1];
64331   pOut = &aMem[pOp->p2];
64332   if( pIn1->flags & MEM_Null ){
64333     sqlite3VdbeMemSetNull(pOut);
64334   }else{
64335     sqlite3VdbeMemSetInt64(pOut, ~sqlite3VdbeIntValue(pIn1));
64336   }
64337   break;
64338 }
64339
64340 /* Opcode: If P1 P2 P3 * *
64341 **
64342 ** Jump to P2 if the value in register P1 is true.  The value is
64343 ** is considered true if it is numeric and non-zero.  If the value
64344 ** in P1 is NULL then take the jump if P3 is true.
64345 */
64346 /* Opcode: IfNot P1 P2 P3 * *
64347 **
64348 ** Jump to P2 if the value in register P1 is False.  The value is
64349 ** is considered true if it has a numeric value of zero.  If the value
64350 ** in P1 is NULL then take the jump if P3 is true.
64351 */
64352 case OP_If:                 /* jump, in1 */
64353 case OP_IfNot: {            /* jump, in1 */
64354 #if 0  /* local variables moved into u.al */
64355   int c;
64356 #endif /* local variables moved into u.al */
64357   pIn1 = &aMem[pOp->p1];
64358   if( pIn1->flags & MEM_Null ){
64359     u.al.c = pOp->p3;
64360   }else{
64361 #ifdef SQLITE_OMIT_FLOATING_POINT
64362     u.al.c = sqlite3VdbeIntValue(pIn1)!=0;
64363 #else
64364     u.al.c = sqlite3VdbeRealValue(pIn1)!=0.0;
64365 #endif
64366     if( pOp->opcode==OP_IfNot ) u.al.c = !u.al.c;
64367   }
64368   if( u.al.c ){
64369     pc = pOp->p2-1;
64370   }
64371   break;
64372 }
64373
64374 /* Opcode: IsNull P1 P2 * * *
64375 **
64376 ** Jump to P2 if the value in register P1 is NULL.
64377 */
64378 case OP_IsNull: {            /* same as TK_ISNULL, jump, in1 */
64379   pIn1 = &aMem[pOp->p1];
64380   if( (pIn1->flags & MEM_Null)!=0 ){
64381     pc = pOp->p2 - 1;
64382   }
64383   break;
64384 }
64385
64386 /* Opcode: NotNull P1 P2 * * *
64387 **
64388 ** Jump to P2 if the value in register P1 is not NULL.  
64389 */
64390 case OP_NotNull: {            /* same as TK_NOTNULL, jump, in1 */
64391   pIn1 = &aMem[pOp->p1];
64392   if( (pIn1->flags & MEM_Null)==0 ){
64393     pc = pOp->p2 - 1;
64394   }
64395   break;
64396 }
64397
64398 /* Opcode: Column P1 P2 P3 P4 P5
64399 **
64400 ** Interpret the data that cursor P1 points to as a structure built using
64401 ** the MakeRecord instruction.  (See the MakeRecord opcode for additional
64402 ** information about the format of the data.)  Extract the P2-th column
64403 ** from this record.  If there are less that (P2+1) 
64404 ** values in the record, extract a NULL.
64405 **
64406 ** The value extracted is stored in register P3.
64407 **
64408 ** If the column contains fewer than P2 fields, then extract a NULL.  Or,
64409 ** if the P4 argument is a P4_MEM use the value of the P4 argument as
64410 ** the result.
64411 **
64412 ** If the OPFLAG_CLEARCACHE bit is set on P5 and P1 is a pseudo-table cursor,
64413 ** then the cache of the cursor is reset prior to extracting the column.
64414 ** The first OP_Column against a pseudo-table after the value of the content
64415 ** register has changed should have this bit set.
64416 */
64417 case OP_Column: {
64418 #if 0  /* local variables moved into u.am */
64419   u32 payloadSize;   /* Number of bytes in the record */
64420   i64 payloadSize64; /* Number of bytes in the record */
64421   int p1;            /* P1 value of the opcode */
64422   int p2;            /* column number to retrieve */
64423   VdbeCursor *pC;    /* The VDBE cursor */
64424   char *zRec;        /* Pointer to complete record-data */
64425   BtCursor *pCrsr;   /* The BTree cursor */
64426   u32 *aType;        /* aType[i] holds the numeric type of the i-th column */
64427   u32 *aOffset;      /* aOffset[i] is offset to start of data for i-th column */
64428   int nField;        /* number of fields in the record */
64429   int len;           /* The length of the serialized data for the column */
64430   int i;             /* Loop counter */
64431   char *zData;       /* Part of the record being decoded */
64432   Mem *pDest;        /* Where to write the extracted value */
64433   Mem sMem;          /* For storing the record being decoded */
64434   u8 *zIdx;          /* Index into header */
64435   u8 *zEndHdr;       /* Pointer to first byte after the header */
64436   u32 offset;        /* Offset into the data */
64437   u32 szField;       /* Number of bytes in the content of a field */
64438   int szHdr;         /* Size of the header size field at start of record */
64439   int avail;         /* Number of bytes of available data */
64440   Mem *pReg;         /* PseudoTable input register */
64441 #endif /* local variables moved into u.am */
64442
64443
64444   u.am.p1 = pOp->p1;
64445   u.am.p2 = pOp->p2;
64446   u.am.pC = 0;
64447   memset(&u.am.sMem, 0, sizeof(u.am.sMem));
64448   assert( u.am.p1<p->nCursor );
64449   assert( pOp->p3>0 && pOp->p3<=p->nMem );
64450   u.am.pDest = &aMem[pOp->p3];
64451   memAboutToChange(p, u.am.pDest);
64452   MemSetTypeFlag(u.am.pDest, MEM_Null);
64453   u.am.zRec = 0;
64454
64455   /* This block sets the variable u.am.payloadSize to be the total number of
64456   ** bytes in the record.
64457   **
64458   ** u.am.zRec is set to be the complete text of the record if it is available.
64459   ** The complete record text is always available for pseudo-tables
64460   ** If the record is stored in a cursor, the complete record text
64461   ** might be available in the  u.am.pC->aRow cache.  Or it might not be.
64462   ** If the data is unavailable,  u.am.zRec is set to NULL.
64463   **
64464   ** We also compute the number of columns in the record.  For cursors,
64465   ** the number of columns is stored in the VdbeCursor.nField element.
64466   */
64467   u.am.pC = p->apCsr[u.am.p1];
64468   assert( u.am.pC!=0 );
64469 #ifndef SQLITE_OMIT_VIRTUALTABLE
64470   assert( u.am.pC->pVtabCursor==0 );
64471 #endif
64472   u.am.pCrsr = u.am.pC->pCursor;
64473   if( u.am.pCrsr!=0 ){
64474     /* The record is stored in a B-Tree */
64475     rc = sqlite3VdbeCursorMoveto(u.am.pC);
64476     if( rc ) goto abort_due_to_error;
64477     if( u.am.pC->nullRow ){
64478       u.am.payloadSize = 0;
64479     }else if( u.am.pC->cacheStatus==p->cacheCtr ){
64480       u.am.payloadSize = u.am.pC->payloadSize;
64481       u.am.zRec = (char*)u.am.pC->aRow;
64482     }else if( u.am.pC->isIndex ){
64483       assert( sqlite3BtreeCursorIsValid(u.am.pCrsr) );
64484       rc = sqlite3BtreeKeySize(u.am.pCrsr, &u.am.payloadSize64);
64485       assert( rc==SQLITE_OK );   /* True because of CursorMoveto() call above */
64486       /* sqlite3BtreeParseCellPtr() uses getVarint32() to extract the
64487       ** payload size, so it is impossible for u.am.payloadSize64 to be
64488       ** larger than 32 bits. */
64489       assert( (u.am.payloadSize64 & SQLITE_MAX_U32)==(u64)u.am.payloadSize64 );
64490       u.am.payloadSize = (u32)u.am.payloadSize64;
64491     }else{
64492       assert( sqlite3BtreeCursorIsValid(u.am.pCrsr) );
64493       rc = sqlite3BtreeDataSize(u.am.pCrsr, &u.am.payloadSize);
64494       assert( rc==SQLITE_OK );   /* DataSize() cannot fail */
64495     }
64496   }else if( u.am.pC->pseudoTableReg>0 ){
64497     u.am.pReg = &aMem[u.am.pC->pseudoTableReg];
64498     assert( u.am.pReg->flags & MEM_Blob );
64499     assert( memIsValid(u.am.pReg) );
64500     u.am.payloadSize = u.am.pReg->n;
64501     u.am.zRec = u.am.pReg->z;
64502     u.am.pC->cacheStatus = (pOp->p5&OPFLAG_CLEARCACHE) ? CACHE_STALE : p->cacheCtr;
64503     assert( u.am.payloadSize==0 || u.am.zRec!=0 );
64504   }else{
64505     /* Consider the row to be NULL */
64506     u.am.payloadSize = 0;
64507   }
64508
64509   /* If u.am.payloadSize is 0, then just store a NULL */
64510   if( u.am.payloadSize==0 ){
64511     assert( u.am.pDest->flags&MEM_Null );
64512     goto op_column_out;
64513   }
64514   assert( db->aLimit[SQLITE_LIMIT_LENGTH]>=0 );
64515   if( u.am.payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
64516     goto too_big;
64517   }
64518
64519   u.am.nField = u.am.pC->nField;
64520   assert( u.am.p2<u.am.nField );
64521
64522   /* Read and parse the table header.  Store the results of the parse
64523   ** into the record header cache fields of the cursor.
64524   */
64525   u.am.aType = u.am.pC->aType;
64526   if( u.am.pC->cacheStatus==p->cacheCtr ){
64527     u.am.aOffset = u.am.pC->aOffset;
64528   }else{
64529     assert(u.am.aType);
64530     u.am.avail = 0;
64531     u.am.pC->aOffset = u.am.aOffset = &u.am.aType[u.am.nField];
64532     u.am.pC->payloadSize = u.am.payloadSize;
64533     u.am.pC->cacheStatus = p->cacheCtr;
64534
64535     /* Figure out how many bytes are in the header */
64536     if( u.am.zRec ){
64537       u.am.zData = u.am.zRec;
64538     }else{
64539       if( u.am.pC->isIndex ){
64540         u.am.zData = (char*)sqlite3BtreeKeyFetch(u.am.pCrsr, &u.am.avail);
64541       }else{
64542         u.am.zData = (char*)sqlite3BtreeDataFetch(u.am.pCrsr, &u.am.avail);
64543       }
64544       /* If KeyFetch()/DataFetch() managed to get the entire payload,
64545       ** save the payload in the u.am.pC->aRow cache.  That will save us from
64546       ** having to make additional calls to fetch the content portion of
64547       ** the record.
64548       */
64549       assert( u.am.avail>=0 );
64550       if( u.am.payloadSize <= (u32)u.am.avail ){
64551         u.am.zRec = u.am.zData;
64552         u.am.pC->aRow = (u8*)u.am.zData;
64553       }else{
64554         u.am.pC->aRow = 0;
64555       }
64556     }
64557     /* The following assert is true in all cases accept when
64558     ** the database file has been corrupted externally.
64559     **    assert( u.am.zRec!=0 || u.am.avail>=u.am.payloadSize || u.am.avail>=9 ); */
64560     u.am.szHdr = getVarint32((u8*)u.am.zData, u.am.offset);
64561
64562     /* Make sure a corrupt database has not given us an oversize header.
64563     ** Do this now to avoid an oversize memory allocation.
64564     **
64565     ** Type entries can be between 1 and 5 bytes each.  But 4 and 5 byte
64566     ** types use so much data space that there can only be 4096 and 32 of
64567     ** them, respectively.  So the maximum header length results from a
64568     ** 3-byte type for each of the maximum of 32768 columns plus three
64569     ** extra bytes for the header length itself.  32768*3 + 3 = 98307.
64570     */
64571     if( u.am.offset > 98307 ){
64572       rc = SQLITE_CORRUPT_BKPT;
64573       goto op_column_out;
64574     }
64575
64576     /* Compute in u.am.len the number of bytes of data we need to read in order
64577     ** to get u.am.nField type values.  u.am.offset is an upper bound on this.  But
64578     ** u.am.nField might be significantly less than the true number of columns
64579     ** in the table, and in that case, 5*u.am.nField+3 might be smaller than u.am.offset.
64580     ** We want to minimize u.am.len in order to limit the size of the memory
64581     ** allocation, especially if a corrupt database file has caused u.am.offset
64582     ** to be oversized. Offset is limited to 98307 above.  But 98307 might
64583     ** still exceed Robson memory allocation limits on some configurations.
64584     ** On systems that cannot tolerate large memory allocations, u.am.nField*5+3
64585     ** will likely be much smaller since u.am.nField will likely be less than
64586     ** 20 or so.  This insures that Robson memory allocation limits are
64587     ** not exceeded even for corrupt database files.
64588     */
64589     u.am.len = u.am.nField*5 + 3;
64590     if( u.am.len > (int)u.am.offset ) u.am.len = (int)u.am.offset;
64591
64592     /* The KeyFetch() or DataFetch() above are fast and will get the entire
64593     ** record header in most cases.  But they will fail to get the complete
64594     ** record header if the record header does not fit on a single page
64595     ** in the B-Tree.  When that happens, use sqlite3VdbeMemFromBtree() to
64596     ** acquire the complete header text.
64597     */
64598     if( !u.am.zRec && u.am.avail<u.am.len ){
64599       u.am.sMem.flags = 0;
64600       u.am.sMem.db = 0;
64601       rc = sqlite3VdbeMemFromBtree(u.am.pCrsr, 0, u.am.len, u.am.pC->isIndex, &u.am.sMem);
64602       if( rc!=SQLITE_OK ){
64603         goto op_column_out;
64604       }
64605       u.am.zData = u.am.sMem.z;
64606     }
64607     u.am.zEndHdr = (u8 *)&u.am.zData[u.am.len];
64608     u.am.zIdx = (u8 *)&u.am.zData[u.am.szHdr];
64609
64610     /* Scan the header and use it to fill in the u.am.aType[] and u.am.aOffset[]
64611     ** arrays.  u.am.aType[u.am.i] will contain the type integer for the u.am.i-th
64612     ** column and u.am.aOffset[u.am.i] will contain the u.am.offset from the beginning
64613     ** of the record to the start of the data for the u.am.i-th column
64614     */
64615     for(u.am.i=0; u.am.i<u.am.nField; u.am.i++){
64616       if( u.am.zIdx<u.am.zEndHdr ){
64617         u.am.aOffset[u.am.i] = u.am.offset;
64618         u.am.zIdx += getVarint32(u.am.zIdx, u.am.aType[u.am.i]);
64619         u.am.szField = sqlite3VdbeSerialTypeLen(u.am.aType[u.am.i]);
64620         u.am.offset += u.am.szField;
64621         if( u.am.offset<u.am.szField ){  /* True if u.am.offset overflows */
64622           u.am.zIdx = &u.am.zEndHdr[1];  /* Forces SQLITE_CORRUPT return below */
64623           break;
64624         }
64625       }else{
64626         /* If u.am.i is less that u.am.nField, then there are less fields in this
64627         ** record than SetNumColumns indicated there are columns in the
64628         ** table. Set the u.am.offset for any extra columns not present in
64629         ** the record to 0. This tells code below to store a NULL
64630         ** instead of deserializing a value from the record.
64631         */
64632         u.am.aOffset[u.am.i] = 0;
64633       }
64634     }
64635     sqlite3VdbeMemRelease(&u.am.sMem);
64636     u.am.sMem.flags = MEM_Null;
64637
64638     /* If we have read more header data than was contained in the header,
64639     ** or if the end of the last field appears to be past the end of the
64640     ** record, or if the end of the last field appears to be before the end
64641     ** of the record (when all fields present), then we must be dealing
64642     ** with a corrupt database.
64643     */
64644     if( (u.am.zIdx > u.am.zEndHdr) || (u.am.offset > u.am.payloadSize)
64645          || (u.am.zIdx==u.am.zEndHdr && u.am.offset!=u.am.payloadSize) ){
64646       rc = SQLITE_CORRUPT_BKPT;
64647       goto op_column_out;
64648     }
64649   }
64650
64651   /* Get the column information. If u.am.aOffset[u.am.p2] is non-zero, then
64652   ** deserialize the value from the record. If u.am.aOffset[u.am.p2] is zero,
64653   ** then there are not enough fields in the record to satisfy the
64654   ** request.  In this case, set the value NULL or to P4 if P4 is
64655   ** a pointer to a Mem object.
64656   */
64657   if( u.am.aOffset[u.am.p2] ){
64658     assert( rc==SQLITE_OK );
64659     if( u.am.zRec ){
64660       sqlite3VdbeMemReleaseExternal(u.am.pDest);
64661       sqlite3VdbeSerialGet((u8 *)&u.am.zRec[u.am.aOffset[u.am.p2]], u.am.aType[u.am.p2], u.am.pDest);
64662     }else{
64663       u.am.len = sqlite3VdbeSerialTypeLen(u.am.aType[u.am.p2]);
64664       sqlite3VdbeMemMove(&u.am.sMem, u.am.pDest);
64665       rc = sqlite3VdbeMemFromBtree(u.am.pCrsr, u.am.aOffset[u.am.p2], u.am.len, u.am.pC->isIndex, &u.am.sMem);
64666       if( rc!=SQLITE_OK ){
64667         goto op_column_out;
64668       }
64669       u.am.zData = u.am.sMem.z;
64670       sqlite3VdbeSerialGet((u8*)u.am.zData, u.am.aType[u.am.p2], u.am.pDest);
64671     }
64672     u.am.pDest->enc = encoding;
64673   }else{
64674     if( pOp->p4type==P4_MEM ){
64675       sqlite3VdbeMemShallowCopy(u.am.pDest, pOp->p4.pMem, MEM_Static);
64676     }else{
64677       assert( u.am.pDest->flags&MEM_Null );
64678     }
64679   }
64680
64681   /* If we dynamically allocated space to hold the data (in the
64682   ** sqlite3VdbeMemFromBtree() call above) then transfer control of that
64683   ** dynamically allocated space over to the u.am.pDest structure.
64684   ** This prevents a memory copy.
64685   */
64686   if( u.am.sMem.zMalloc ){
64687     assert( u.am.sMem.z==u.am.sMem.zMalloc );
64688     assert( !(u.am.pDest->flags & MEM_Dyn) );
64689     assert( !(u.am.pDest->flags & (MEM_Blob|MEM_Str)) || u.am.pDest->z==u.am.sMem.z );
64690     u.am.pDest->flags &= ~(MEM_Ephem|MEM_Static);
64691     u.am.pDest->flags |= MEM_Term;
64692     u.am.pDest->z = u.am.sMem.z;
64693     u.am.pDest->zMalloc = u.am.sMem.zMalloc;
64694   }
64695
64696   rc = sqlite3VdbeMemMakeWriteable(u.am.pDest);
64697
64698 op_column_out:
64699   UPDATE_MAX_BLOBSIZE(u.am.pDest);
64700   REGISTER_TRACE(pOp->p3, u.am.pDest);
64701   break;
64702 }
64703
64704 /* Opcode: Affinity P1 P2 * P4 *
64705 **
64706 ** Apply affinities to a range of P2 registers starting with P1.
64707 **
64708 ** P4 is a string that is P2 characters long. The nth character of the
64709 ** string indicates the column affinity that should be used for the nth
64710 ** memory cell in the range.
64711 */
64712 case OP_Affinity: {
64713 #if 0  /* local variables moved into u.an */
64714   const char *zAffinity;   /* The affinity to be applied */
64715   char cAff;               /* A single character of affinity */
64716 #endif /* local variables moved into u.an */
64717
64718   u.an.zAffinity = pOp->p4.z;
64719   assert( u.an.zAffinity!=0 );
64720   assert( u.an.zAffinity[pOp->p2]==0 );
64721   pIn1 = &aMem[pOp->p1];
64722   while( (u.an.cAff = *(u.an.zAffinity++))!=0 ){
64723     assert( pIn1 <= &p->aMem[p->nMem] );
64724     assert( memIsValid(pIn1) );
64725     ExpandBlob(pIn1);
64726     applyAffinity(pIn1, u.an.cAff, encoding);
64727     pIn1++;
64728   }
64729   break;
64730 }
64731
64732 /* Opcode: MakeRecord P1 P2 P3 P4 *
64733 **
64734 ** Convert P2 registers beginning with P1 into the [record format]
64735 ** use as a data record in a database table or as a key
64736 ** in an index.  The OP_Column opcode can decode the record later.
64737 **
64738 ** P4 may be a string that is P2 characters long.  The nth character of the
64739 ** string indicates the column affinity that should be used for the nth
64740 ** field of the index key.
64741 **
64742 ** The mapping from character to affinity is given by the SQLITE_AFF_
64743 ** macros defined in sqliteInt.h.
64744 **
64745 ** If P4 is NULL then all index fields have the affinity NONE.
64746 */
64747 case OP_MakeRecord: {
64748 #if 0  /* local variables moved into u.ao */
64749   u8 *zNewRecord;        /* A buffer to hold the data for the new record */
64750   Mem *pRec;             /* The new record */
64751   u64 nData;             /* Number of bytes of data space */
64752   int nHdr;              /* Number of bytes of header space */
64753   i64 nByte;             /* Data space required for this record */
64754   int nZero;             /* Number of zero bytes at the end of the record */
64755   int nVarint;           /* Number of bytes in a varint */
64756   u32 serial_type;       /* Type field */
64757   Mem *pData0;           /* First field to be combined into the record */
64758   Mem *pLast;            /* Last field of the record */
64759   int nField;            /* Number of fields in the record */
64760   char *zAffinity;       /* The affinity string for the record */
64761   int file_format;       /* File format to use for encoding */
64762   int i;                 /* Space used in zNewRecord[] */
64763   int len;               /* Length of a field */
64764 #endif /* local variables moved into u.ao */
64765
64766   /* Assuming the record contains N fields, the record format looks
64767   ** like this:
64768   **
64769   ** ------------------------------------------------------------------------
64770   ** | hdr-size | type 0 | type 1 | ... | type N-1 | data0 | ... | data N-1 |
64771   ** ------------------------------------------------------------------------
64772   **
64773   ** Data(0) is taken from register P1.  Data(1) comes from register P1+1
64774   ** and so froth.
64775   **
64776   ** Each type field is a varint representing the serial type of the
64777   ** corresponding data element (see sqlite3VdbeSerialType()). The
64778   ** hdr-size field is also a varint which is the offset from the beginning
64779   ** of the record to data0.
64780   */
64781   u.ao.nData = 0;         /* Number of bytes of data space */
64782   u.ao.nHdr = 0;          /* Number of bytes of header space */
64783   u.ao.nZero = 0;         /* Number of zero bytes at the end of the record */
64784   u.ao.nField = pOp->p1;
64785   u.ao.zAffinity = pOp->p4.z;
64786   assert( u.ao.nField>0 && pOp->p2>0 && pOp->p2+u.ao.nField<=p->nMem+1 );
64787   u.ao.pData0 = &aMem[u.ao.nField];
64788   u.ao.nField = pOp->p2;
64789   u.ao.pLast = &u.ao.pData0[u.ao.nField-1];
64790   u.ao.file_format = p->minWriteFileFormat;
64791
64792   /* Identify the output register */
64793   assert( pOp->p3<pOp->p1 || pOp->p3>=pOp->p1+pOp->p2 );
64794   pOut = &aMem[pOp->p3];
64795   memAboutToChange(p, pOut);
64796
64797   /* Loop through the elements that will make up the record to figure
64798   ** out how much space is required for the new record.
64799   */
64800   for(u.ao.pRec=u.ao.pData0; u.ao.pRec<=u.ao.pLast; u.ao.pRec++){
64801     assert( memIsValid(u.ao.pRec) );
64802     if( u.ao.zAffinity ){
64803       applyAffinity(u.ao.pRec, u.ao.zAffinity[u.ao.pRec-u.ao.pData0], encoding);
64804     }
64805     if( u.ao.pRec->flags&MEM_Zero && u.ao.pRec->n>0 ){
64806       sqlite3VdbeMemExpandBlob(u.ao.pRec);
64807     }
64808     u.ao.serial_type = sqlite3VdbeSerialType(u.ao.pRec, u.ao.file_format);
64809     u.ao.len = sqlite3VdbeSerialTypeLen(u.ao.serial_type);
64810     u.ao.nData += u.ao.len;
64811     u.ao.nHdr += sqlite3VarintLen(u.ao.serial_type);
64812     if( u.ao.pRec->flags & MEM_Zero ){
64813       /* Only pure zero-filled BLOBs can be input to this Opcode.
64814       ** We do not allow blobs with a prefix and a zero-filled tail. */
64815       u.ao.nZero += u.ao.pRec->u.nZero;
64816     }else if( u.ao.len ){
64817       u.ao.nZero = 0;
64818     }
64819   }
64820
64821   /* Add the initial header varint and total the size */
64822   u.ao.nHdr += u.ao.nVarint = sqlite3VarintLen(u.ao.nHdr);
64823   if( u.ao.nVarint<sqlite3VarintLen(u.ao.nHdr) ){
64824     u.ao.nHdr++;
64825   }
64826   u.ao.nByte = u.ao.nHdr+u.ao.nData-u.ao.nZero;
64827   if( u.ao.nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
64828     goto too_big;
64829   }
64830
64831   /* Make sure the output register has a buffer large enough to store
64832   ** the new record. The output register (pOp->p3) is not allowed to
64833   ** be one of the input registers (because the following call to
64834   ** sqlite3VdbeMemGrow() could clobber the value before it is used).
64835   */
64836   if( sqlite3VdbeMemGrow(pOut, (int)u.ao.nByte, 0) ){
64837     goto no_mem;
64838   }
64839   u.ao.zNewRecord = (u8 *)pOut->z;
64840
64841   /* Write the record */
64842   u.ao.i = putVarint32(u.ao.zNewRecord, u.ao.nHdr);
64843   for(u.ao.pRec=u.ao.pData0; u.ao.pRec<=u.ao.pLast; u.ao.pRec++){
64844     u.ao.serial_type = sqlite3VdbeSerialType(u.ao.pRec, u.ao.file_format);
64845     u.ao.i += putVarint32(&u.ao.zNewRecord[u.ao.i], u.ao.serial_type);      /* serial type */
64846   }
64847   for(u.ao.pRec=u.ao.pData0; u.ao.pRec<=u.ao.pLast; u.ao.pRec++){  /* serial data */
64848     u.ao.i += sqlite3VdbeSerialPut(&u.ao.zNewRecord[u.ao.i], (int)(u.ao.nByte-u.ao.i), u.ao.pRec,u.ao.file_format);
64849   }
64850   assert( u.ao.i==u.ao.nByte );
64851
64852   assert( pOp->p3>0 && pOp->p3<=p->nMem );
64853   pOut->n = (int)u.ao.nByte;
64854   pOut->flags = MEM_Blob | MEM_Dyn;
64855   pOut->xDel = 0;
64856   if( u.ao.nZero ){
64857     pOut->u.nZero = u.ao.nZero;
64858     pOut->flags |= MEM_Zero;
64859   }
64860   pOut->enc = SQLITE_UTF8;  /* In case the blob is ever converted to text */
64861   REGISTER_TRACE(pOp->p3, pOut);
64862   UPDATE_MAX_BLOBSIZE(pOut);
64863   break;
64864 }
64865
64866 /* Opcode: Count P1 P2 * * *
64867 **
64868 ** Store the number of entries (an integer value) in the table or index 
64869 ** opened by cursor P1 in register P2
64870 */
64871 #ifndef SQLITE_OMIT_BTREECOUNT
64872 case OP_Count: {         /* out2-prerelease */
64873 #if 0  /* local variables moved into u.ap */
64874   i64 nEntry;
64875   BtCursor *pCrsr;
64876 #endif /* local variables moved into u.ap */
64877
64878   u.ap.pCrsr = p->apCsr[pOp->p1]->pCursor;
64879   if( u.ap.pCrsr ){
64880     rc = sqlite3BtreeCount(u.ap.pCrsr, &u.ap.nEntry);
64881   }else{
64882     u.ap.nEntry = 0;
64883   }
64884   pOut->u.i = u.ap.nEntry;
64885   break;
64886 }
64887 #endif
64888
64889 /* Opcode: Savepoint P1 * * P4 *
64890 **
64891 ** Open, release or rollback the savepoint named by parameter P4, depending
64892 ** on the value of P1. To open a new savepoint, P1==0. To release (commit) an
64893 ** existing savepoint, P1==1, or to rollback an existing savepoint P1==2.
64894 */
64895 case OP_Savepoint: {
64896 #if 0  /* local variables moved into u.aq */
64897   int p1;                         /* Value of P1 operand */
64898   char *zName;                    /* Name of savepoint */
64899   int nName;
64900   Savepoint *pNew;
64901   Savepoint *pSavepoint;
64902   Savepoint *pTmp;
64903   int iSavepoint;
64904   int ii;
64905 #endif /* local variables moved into u.aq */
64906
64907   u.aq.p1 = pOp->p1;
64908   u.aq.zName = pOp->p4.z;
64909
64910   /* Assert that the u.aq.p1 parameter is valid. Also that if there is no open
64911   ** transaction, then there cannot be any savepoints.
64912   */
64913   assert( db->pSavepoint==0 || db->autoCommit==0 );
64914   assert( u.aq.p1==SAVEPOINT_BEGIN||u.aq.p1==SAVEPOINT_RELEASE||u.aq.p1==SAVEPOINT_ROLLBACK );
64915   assert( db->pSavepoint || db->isTransactionSavepoint==0 );
64916   assert( checkSavepointCount(db) );
64917
64918   if( u.aq.p1==SAVEPOINT_BEGIN ){
64919     if( db->writeVdbeCnt>0 ){
64920       /* A new savepoint cannot be created if there are active write
64921       ** statements (i.e. open read/write incremental blob handles).
64922       */
64923       sqlite3SetString(&p->zErrMsg, db, "cannot open savepoint - "
64924         "SQL statements in progress");
64925       rc = SQLITE_BUSY;
64926     }else{
64927       u.aq.nName = sqlite3Strlen30(u.aq.zName);
64928
64929       /* Create a new savepoint structure. */
64930       u.aq.pNew = sqlite3DbMallocRaw(db, sizeof(Savepoint)+u.aq.nName+1);
64931       if( u.aq.pNew ){
64932         u.aq.pNew->zName = (char *)&u.aq.pNew[1];
64933         memcpy(u.aq.pNew->zName, u.aq.zName, u.aq.nName+1);
64934
64935         /* If there is no open transaction, then mark this as a special
64936         ** "transaction savepoint". */
64937         if( db->autoCommit ){
64938           db->autoCommit = 0;
64939           db->isTransactionSavepoint = 1;
64940         }else{
64941           db->nSavepoint++;
64942         }
64943
64944         /* Link the new savepoint into the database handle's list. */
64945         u.aq.pNew->pNext = db->pSavepoint;
64946         db->pSavepoint = u.aq.pNew;
64947         u.aq.pNew->nDeferredCons = db->nDeferredCons;
64948       }
64949     }
64950   }else{
64951     u.aq.iSavepoint = 0;
64952
64953     /* Find the named savepoint. If there is no such savepoint, then an
64954     ** an error is returned to the user.  */
64955     for(
64956       u.aq.pSavepoint = db->pSavepoint;
64957       u.aq.pSavepoint && sqlite3StrICmp(u.aq.pSavepoint->zName, u.aq.zName);
64958       u.aq.pSavepoint = u.aq.pSavepoint->pNext
64959     ){
64960       u.aq.iSavepoint++;
64961     }
64962     if( !u.aq.pSavepoint ){
64963       sqlite3SetString(&p->zErrMsg, db, "no such savepoint: %s", u.aq.zName);
64964       rc = SQLITE_ERROR;
64965     }else if(
64966         db->writeVdbeCnt>0 || (u.aq.p1==SAVEPOINT_ROLLBACK && db->activeVdbeCnt>1)
64967     ){
64968       /* It is not possible to release (commit) a savepoint if there are
64969       ** active write statements. It is not possible to rollback a savepoint
64970       ** if there are any active statements at all.
64971       */
64972       sqlite3SetString(&p->zErrMsg, db,
64973         "cannot %s savepoint - SQL statements in progress",
64974         (u.aq.p1==SAVEPOINT_ROLLBACK ? "rollback": "release")
64975       );
64976       rc = SQLITE_BUSY;
64977     }else{
64978
64979       /* Determine whether or not this is a transaction savepoint. If so,
64980       ** and this is a RELEASE command, then the current transaction
64981       ** is committed.
64982       */
64983       int isTransaction = u.aq.pSavepoint->pNext==0 && db->isTransactionSavepoint;
64984       if( isTransaction && u.aq.p1==SAVEPOINT_RELEASE ){
64985         if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){
64986           goto vdbe_return;
64987         }
64988         db->autoCommit = 1;
64989         if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){
64990           p->pc = pc;
64991           db->autoCommit = 0;
64992           p->rc = rc = SQLITE_BUSY;
64993           goto vdbe_return;
64994         }
64995         db->isTransactionSavepoint = 0;
64996         rc = p->rc;
64997       }else{
64998         u.aq.iSavepoint = db->nSavepoint - u.aq.iSavepoint - 1;
64999         for(u.aq.ii=0; u.aq.ii<db->nDb; u.aq.ii++){
65000           rc = sqlite3BtreeSavepoint(db->aDb[u.aq.ii].pBt, u.aq.p1, u.aq.iSavepoint);
65001           if( rc!=SQLITE_OK ){
65002             goto abort_due_to_error;
65003           }
65004         }
65005         if( u.aq.p1==SAVEPOINT_ROLLBACK && (db->flags&SQLITE_InternChanges)!=0 ){
65006           sqlite3ExpirePreparedStatements(db);
65007           sqlite3ResetInternalSchema(db, -1);
65008           db->flags = (db->flags | SQLITE_InternChanges);
65009         }
65010       }
65011
65012       /* Regardless of whether this is a RELEASE or ROLLBACK, destroy all
65013       ** savepoints nested inside of the savepoint being operated on. */
65014       while( db->pSavepoint!=u.aq.pSavepoint ){
65015         u.aq.pTmp = db->pSavepoint;
65016         db->pSavepoint = u.aq.pTmp->pNext;
65017         sqlite3DbFree(db, u.aq.pTmp);
65018         db->nSavepoint--;
65019       }
65020
65021       /* If it is a RELEASE, then destroy the savepoint being operated on
65022       ** too. If it is a ROLLBACK TO, then set the number of deferred
65023       ** constraint violations present in the database to the value stored
65024       ** when the savepoint was created.  */
65025       if( u.aq.p1==SAVEPOINT_RELEASE ){
65026         assert( u.aq.pSavepoint==db->pSavepoint );
65027         db->pSavepoint = u.aq.pSavepoint->pNext;
65028         sqlite3DbFree(db, u.aq.pSavepoint);
65029         if( !isTransaction ){
65030           db->nSavepoint--;
65031         }
65032       }else{
65033         db->nDeferredCons = u.aq.pSavepoint->nDeferredCons;
65034       }
65035     }
65036   }
65037
65038   break;
65039 }
65040
65041 /* Opcode: AutoCommit P1 P2 * * *
65042 **
65043 ** Set the database auto-commit flag to P1 (1 or 0). If P2 is true, roll
65044 ** back any currently active btree transactions. If there are any active
65045 ** VMs (apart from this one), then a ROLLBACK fails.  A COMMIT fails if
65046 ** there are active writing VMs or active VMs that use shared cache.
65047 **
65048 ** This instruction causes the VM to halt.
65049 */
65050 case OP_AutoCommit: {
65051 #if 0  /* local variables moved into u.ar */
65052   int desiredAutoCommit;
65053   int iRollback;
65054   int turnOnAC;
65055 #endif /* local variables moved into u.ar */
65056
65057   u.ar.desiredAutoCommit = pOp->p1;
65058   u.ar.iRollback = pOp->p2;
65059   u.ar.turnOnAC = u.ar.desiredAutoCommit && !db->autoCommit;
65060   assert( u.ar.desiredAutoCommit==1 || u.ar.desiredAutoCommit==0 );
65061   assert( u.ar.desiredAutoCommit==1 || u.ar.iRollback==0 );
65062   assert( db->activeVdbeCnt>0 );  /* At least this one VM is active */
65063
65064   if( u.ar.turnOnAC && u.ar.iRollback && db->activeVdbeCnt>1 ){
65065     /* If this instruction implements a ROLLBACK and other VMs are
65066     ** still running, and a transaction is active, return an error indicating
65067     ** that the other VMs must complete first.
65068     */
65069     sqlite3SetString(&p->zErrMsg, db, "cannot rollback transaction - "
65070         "SQL statements in progress");
65071     rc = SQLITE_BUSY;
65072   }else if( u.ar.turnOnAC && !u.ar.iRollback && db->writeVdbeCnt>0 ){
65073     /* If this instruction implements a COMMIT and other VMs are writing
65074     ** return an error indicating that the other VMs must complete first.
65075     */
65076     sqlite3SetString(&p->zErrMsg, db, "cannot commit transaction - "
65077         "SQL statements in progress");
65078     rc = SQLITE_BUSY;
65079   }else if( u.ar.desiredAutoCommit!=db->autoCommit ){
65080     if( u.ar.iRollback ){
65081       assert( u.ar.desiredAutoCommit==1 );
65082       sqlite3RollbackAll(db);
65083       db->autoCommit = 1;
65084     }else if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){
65085       goto vdbe_return;
65086     }else{
65087       db->autoCommit = (u8)u.ar.desiredAutoCommit;
65088       if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){
65089         p->pc = pc;
65090         db->autoCommit = (u8)(1-u.ar.desiredAutoCommit);
65091         p->rc = rc = SQLITE_BUSY;
65092         goto vdbe_return;
65093       }
65094     }
65095     assert( db->nStatement==0 );
65096     sqlite3CloseSavepoints(db);
65097     if( p->rc==SQLITE_OK ){
65098       rc = SQLITE_DONE;
65099     }else{
65100       rc = SQLITE_ERROR;
65101     }
65102     goto vdbe_return;
65103   }else{
65104     sqlite3SetString(&p->zErrMsg, db,
65105         (!u.ar.desiredAutoCommit)?"cannot start a transaction within a transaction":(
65106         (u.ar.iRollback)?"cannot rollback - no transaction is active":
65107                    "cannot commit - no transaction is active"));
65108
65109     rc = SQLITE_ERROR;
65110   }
65111   break;
65112 }
65113
65114 /* Opcode: Transaction P1 P2 * * *
65115 **
65116 ** Begin a transaction.  The transaction ends when a Commit or Rollback
65117 ** opcode is encountered.  Depending on the ON CONFLICT setting, the
65118 ** transaction might also be rolled back if an error is encountered.
65119 **
65120 ** P1 is the index of the database file on which the transaction is
65121 ** started.  Index 0 is the main database file and index 1 is the
65122 ** file used for temporary tables.  Indices of 2 or more are used for
65123 ** attached databases.
65124 **
65125 ** If P2 is non-zero, then a write-transaction is started.  A RESERVED lock is
65126 ** obtained on the database file when a write-transaction is started.  No
65127 ** other process can start another write transaction while this transaction is
65128 ** underway.  Starting a write transaction also creates a rollback journal. A
65129 ** write transaction must be started before any changes can be made to the
65130 ** database.  If P2 is 2 or greater then an EXCLUSIVE lock is also obtained
65131 ** on the file.
65132 **
65133 ** If a write-transaction is started and the Vdbe.usesStmtJournal flag is
65134 ** true (this flag is set if the Vdbe may modify more than one row and may
65135 ** throw an ABORT exception), a statement transaction may also be opened.
65136 ** More specifically, a statement transaction is opened iff the database
65137 ** connection is currently not in autocommit mode, or if there are other
65138 ** active statements. A statement transaction allows the affects of this
65139 ** VDBE to be rolled back after an error without having to roll back the
65140 ** entire transaction. If no error is encountered, the statement transaction
65141 ** will automatically commit when the VDBE halts.
65142 **
65143 ** If P2 is zero, then a read-lock is obtained on the database file.
65144 */
65145 case OP_Transaction: {
65146 #if 0  /* local variables moved into u.as */
65147   Btree *pBt;
65148 #endif /* local variables moved into u.as */
65149
65150   assert( pOp->p1>=0 && pOp->p1<db->nDb );
65151   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
65152   u.as.pBt = db->aDb[pOp->p1].pBt;
65153
65154   if( u.as.pBt ){
65155     rc = sqlite3BtreeBeginTrans(u.as.pBt, pOp->p2);
65156     if( rc==SQLITE_BUSY ){
65157       p->pc = pc;
65158       p->rc = rc = SQLITE_BUSY;
65159       goto vdbe_return;
65160     }
65161     if( rc!=SQLITE_OK ){
65162       goto abort_due_to_error;
65163     }
65164
65165     if( pOp->p2 && p->usesStmtJournal
65166      && (db->autoCommit==0 || db->activeVdbeCnt>1)
65167     ){
65168       assert( sqlite3BtreeIsInTrans(u.as.pBt) );
65169       if( p->iStatement==0 ){
65170         assert( db->nStatement>=0 && db->nSavepoint>=0 );
65171         db->nStatement++;
65172         p->iStatement = db->nSavepoint + db->nStatement;
65173       }
65174       rc = sqlite3BtreeBeginStmt(u.as.pBt, p->iStatement);
65175
65176       /* Store the current value of the database handles deferred constraint
65177       ** counter. If the statement transaction needs to be rolled back,
65178       ** the value of this counter needs to be restored too.  */
65179       p->nStmtDefCons = db->nDeferredCons;
65180     }
65181   }
65182   break;
65183 }
65184
65185 /* Opcode: ReadCookie P1 P2 P3 * *
65186 **
65187 ** Read cookie number P3 from database P1 and write it into register P2.
65188 ** P3==1 is the schema version.  P3==2 is the database format.
65189 ** P3==3 is the recommended pager cache size, and so forth.  P1==0 is
65190 ** the main database file and P1==1 is the database file used to store
65191 ** temporary tables.
65192 **
65193 ** There must be a read-lock on the database (either a transaction
65194 ** must be started or there must be an open cursor) before
65195 ** executing this instruction.
65196 */
65197 case OP_ReadCookie: {               /* out2-prerelease */
65198 #if 0  /* local variables moved into u.at */
65199   int iMeta;
65200   int iDb;
65201   int iCookie;
65202 #endif /* local variables moved into u.at */
65203
65204   u.at.iDb = pOp->p1;
65205   u.at.iCookie = pOp->p3;
65206   assert( pOp->p3<SQLITE_N_BTREE_META );
65207   assert( u.at.iDb>=0 && u.at.iDb<db->nDb );
65208   assert( db->aDb[u.at.iDb].pBt!=0 );
65209   assert( (p->btreeMask & (((yDbMask)1)<<u.at.iDb))!=0 );
65210
65211   sqlite3BtreeGetMeta(db->aDb[u.at.iDb].pBt, u.at.iCookie, (u32 *)&u.at.iMeta);
65212   pOut->u.i = u.at.iMeta;
65213   break;
65214 }
65215
65216 /* Opcode: SetCookie P1 P2 P3 * *
65217 **
65218 ** Write the content of register P3 (interpreted as an integer)
65219 ** into cookie number P2 of database P1.  P2==1 is the schema version.  
65220 ** P2==2 is the database format. P2==3 is the recommended pager cache 
65221 ** size, and so forth.  P1==0 is the main database file and P1==1 is the 
65222 ** database file used to store temporary tables.
65223 **
65224 ** A transaction must be started before executing this opcode.
65225 */
65226 case OP_SetCookie: {       /* in3 */
65227 #if 0  /* local variables moved into u.au */
65228   Db *pDb;
65229 #endif /* local variables moved into u.au */
65230   assert( pOp->p2<SQLITE_N_BTREE_META );
65231   assert( pOp->p1>=0 && pOp->p1<db->nDb );
65232   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
65233   u.au.pDb = &db->aDb[pOp->p1];
65234   assert( u.au.pDb->pBt!=0 );
65235   assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
65236   pIn3 = &aMem[pOp->p3];
65237   sqlite3VdbeMemIntegerify(pIn3);
65238   /* See note about index shifting on OP_ReadCookie */
65239   rc = sqlite3BtreeUpdateMeta(u.au.pDb->pBt, pOp->p2, (int)pIn3->u.i);
65240   if( pOp->p2==BTREE_SCHEMA_VERSION ){
65241     /* When the schema cookie changes, record the new cookie internally */
65242     u.au.pDb->pSchema->schema_cookie = (int)pIn3->u.i;
65243     db->flags |= SQLITE_InternChanges;
65244   }else if( pOp->p2==BTREE_FILE_FORMAT ){
65245     /* Record changes in the file format */
65246     u.au.pDb->pSchema->file_format = (u8)pIn3->u.i;
65247   }
65248   if( pOp->p1==1 ){
65249     /* Invalidate all prepared statements whenever the TEMP database
65250     ** schema is changed.  Ticket #1644 */
65251     sqlite3ExpirePreparedStatements(db);
65252     p->expired = 0;
65253   }
65254   break;
65255 }
65256
65257 /* Opcode: VerifyCookie P1 P2 P3 * *
65258 **
65259 ** Check the value of global database parameter number 0 (the
65260 ** schema version) and make sure it is equal to P2 and that the
65261 ** generation counter on the local schema parse equals P3.
65262 **
65263 ** P1 is the database number which is 0 for the main database file
65264 ** and 1 for the file holding temporary tables and some higher number
65265 ** for auxiliary databases.
65266 **
65267 ** The cookie changes its value whenever the database schema changes.
65268 ** This operation is used to detect when that the cookie has changed
65269 ** and that the current process needs to reread the schema.
65270 **
65271 ** Either a transaction needs to have been started or an OP_Open needs
65272 ** to be executed (to establish a read lock) before this opcode is
65273 ** invoked.
65274 */
65275 case OP_VerifyCookie: {
65276 #if 0  /* local variables moved into u.av */
65277   int iMeta;
65278   int iGen;
65279   Btree *pBt;
65280 #endif /* local variables moved into u.av */
65281
65282   assert( pOp->p1>=0 && pOp->p1<db->nDb );
65283   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
65284   assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
65285   u.av.pBt = db->aDb[pOp->p1].pBt;
65286   if( u.av.pBt ){
65287     sqlite3BtreeGetMeta(u.av.pBt, BTREE_SCHEMA_VERSION, (u32 *)&u.av.iMeta);
65288     u.av.iGen = db->aDb[pOp->p1].pSchema->iGeneration;
65289   }else{
65290     u.av.iGen = u.av.iMeta = 0;
65291   }
65292   if( u.av.iMeta!=pOp->p2 || u.av.iGen!=pOp->p3 ){
65293     sqlite3DbFree(db, p->zErrMsg);
65294     p->zErrMsg = sqlite3DbStrDup(db, "database schema has changed");
65295     /* If the schema-cookie from the database file matches the cookie
65296     ** stored with the in-memory representation of the schema, do
65297     ** not reload the schema from the database file.
65298     **
65299     ** If virtual-tables are in use, this is not just an optimization.
65300     ** Often, v-tables store their data in other SQLite tables, which
65301     ** are queried from within xNext() and other v-table methods using
65302     ** prepared queries. If such a query is out-of-date, we do not want to
65303     ** discard the database schema, as the user code implementing the
65304     ** v-table would have to be ready for the sqlite3_vtab structure itself
65305     ** to be invalidated whenever sqlite3_step() is called from within
65306     ** a v-table method.
65307     */
65308     if( db->aDb[pOp->p1].pSchema->schema_cookie!=u.av.iMeta ){
65309       sqlite3ResetInternalSchema(db, pOp->p1);
65310     }
65311
65312     p->expired = 1;
65313     rc = SQLITE_SCHEMA;
65314   }
65315   break;
65316 }
65317
65318 /* Opcode: OpenRead P1 P2 P3 P4 P5
65319 **
65320 ** Open a read-only cursor for the database table whose root page is
65321 ** P2 in a database file.  The database file is determined by P3. 
65322 ** P3==0 means the main database, P3==1 means the database used for 
65323 ** temporary tables, and P3>1 means used the corresponding attached
65324 ** database.  Give the new cursor an identifier of P1.  The P1
65325 ** values need not be contiguous but all P1 values should be small integers.
65326 ** It is an error for P1 to be negative.
65327 **
65328 ** If P5!=0 then use the content of register P2 as the root page, not
65329 ** the value of P2 itself.
65330 **
65331 ** There will be a read lock on the database whenever there is an
65332 ** open cursor.  If the database was unlocked prior to this instruction
65333 ** then a read lock is acquired as part of this instruction.  A read
65334 ** lock allows other processes to read the database but prohibits
65335 ** any other process from modifying the database.  The read lock is
65336 ** released when all cursors are closed.  If this instruction attempts
65337 ** to get a read lock but fails, the script terminates with an
65338 ** SQLITE_BUSY error code.
65339 **
65340 ** The P4 value may be either an integer (P4_INT32) or a pointer to
65341 ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo 
65342 ** structure, then said structure defines the content and collating 
65343 ** sequence of the index being opened. Otherwise, if P4 is an integer 
65344 ** value, it is set to the number of columns in the table.
65345 **
65346 ** See also OpenWrite.
65347 */
65348 /* Opcode: OpenWrite P1 P2 P3 P4 P5
65349 **
65350 ** Open a read/write cursor named P1 on the table or index whose root
65351 ** page is P2.  Or if P5!=0 use the content of register P2 to find the
65352 ** root page.
65353 **
65354 ** The P4 value may be either an integer (P4_INT32) or a pointer to
65355 ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo 
65356 ** structure, then said structure defines the content and collating 
65357 ** sequence of the index being opened. Otherwise, if P4 is an integer 
65358 ** value, it is set to the number of columns in the table, or to the
65359 ** largest index of any column of the table that is actually used.
65360 **
65361 ** This instruction works just like OpenRead except that it opens the cursor
65362 ** in read/write mode.  For a given table, there can be one or more read-only
65363 ** cursors or a single read/write cursor but not both.
65364 **
65365 ** See also OpenRead.
65366 */
65367 case OP_OpenRead:
65368 case OP_OpenWrite: {
65369 #if 0  /* local variables moved into u.aw */
65370   int nField;
65371   KeyInfo *pKeyInfo;
65372   int p2;
65373   int iDb;
65374   int wrFlag;
65375   Btree *pX;
65376   VdbeCursor *pCur;
65377   Db *pDb;
65378 #endif /* local variables moved into u.aw */
65379
65380   if( p->expired ){
65381     rc = SQLITE_ABORT;
65382     break;
65383   }
65384
65385   u.aw.nField = 0;
65386   u.aw.pKeyInfo = 0;
65387   u.aw.p2 = pOp->p2;
65388   u.aw.iDb = pOp->p3;
65389   assert( u.aw.iDb>=0 && u.aw.iDb<db->nDb );
65390   assert( (p->btreeMask & (((yDbMask)1)<<u.aw.iDb))!=0 );
65391   u.aw.pDb = &db->aDb[u.aw.iDb];
65392   u.aw.pX = u.aw.pDb->pBt;
65393   assert( u.aw.pX!=0 );
65394   if( pOp->opcode==OP_OpenWrite ){
65395     u.aw.wrFlag = 1;
65396     assert( sqlite3SchemaMutexHeld(db, u.aw.iDb, 0) );
65397     if( u.aw.pDb->pSchema->file_format < p->minWriteFileFormat ){
65398       p->minWriteFileFormat = u.aw.pDb->pSchema->file_format;
65399     }
65400   }else{
65401     u.aw.wrFlag = 0;
65402   }
65403   if( pOp->p5 ){
65404     assert( u.aw.p2>0 );
65405     assert( u.aw.p2<=p->nMem );
65406     pIn2 = &aMem[u.aw.p2];
65407     assert( memIsValid(pIn2) );
65408     assert( (pIn2->flags & MEM_Int)!=0 );
65409     sqlite3VdbeMemIntegerify(pIn2);
65410     u.aw.p2 = (int)pIn2->u.i;
65411     /* The u.aw.p2 value always comes from a prior OP_CreateTable opcode and
65412     ** that opcode will always set the u.aw.p2 value to 2 or more or else fail.
65413     ** If there were a failure, the prepared statement would have halted
65414     ** before reaching this instruction. */
65415     if( NEVER(u.aw.p2<2) ) {
65416       rc = SQLITE_CORRUPT_BKPT;
65417       goto abort_due_to_error;
65418     }
65419   }
65420   if( pOp->p4type==P4_KEYINFO ){
65421     u.aw.pKeyInfo = pOp->p4.pKeyInfo;
65422     u.aw.pKeyInfo->enc = ENC(p->db);
65423     u.aw.nField = u.aw.pKeyInfo->nField+1;
65424   }else if( pOp->p4type==P4_INT32 ){
65425     u.aw.nField = pOp->p4.i;
65426   }
65427   assert( pOp->p1>=0 );
65428   u.aw.pCur = allocateCursor(p, pOp->p1, u.aw.nField, u.aw.iDb, 1);
65429   if( u.aw.pCur==0 ) goto no_mem;
65430   u.aw.pCur->nullRow = 1;
65431   u.aw.pCur->isOrdered = 1;
65432   rc = sqlite3BtreeCursor(u.aw.pX, u.aw.p2, u.aw.wrFlag, u.aw.pKeyInfo, u.aw.pCur->pCursor);
65433   u.aw.pCur->pKeyInfo = u.aw.pKeyInfo;
65434
65435   /* Since it performs no memory allocation or IO, the only values that
65436   ** sqlite3BtreeCursor() may return are SQLITE_EMPTY and SQLITE_OK.
65437   ** SQLITE_EMPTY is only returned when attempting to open the table
65438   ** rooted at page 1 of a zero-byte database.  */
65439   assert( rc==SQLITE_EMPTY || rc==SQLITE_OK );
65440   if( rc==SQLITE_EMPTY ){
65441     u.aw.pCur->pCursor = 0;
65442     rc = SQLITE_OK;
65443   }
65444
65445   /* Set the VdbeCursor.isTable and isIndex variables. Previous versions of
65446   ** SQLite used to check if the root-page flags were sane at this point
65447   ** and report database corruption if they were not, but this check has
65448   ** since moved into the btree layer.  */
65449   u.aw.pCur->isTable = pOp->p4type!=P4_KEYINFO;
65450   u.aw.pCur->isIndex = !u.aw.pCur->isTable;
65451   break;
65452 }
65453
65454 /* Opcode: OpenEphemeral P1 P2 * P4 *
65455 **
65456 ** Open a new cursor P1 to a transient table.
65457 ** The cursor is always opened read/write even if 
65458 ** the main database is read-only.  The ephemeral
65459 ** table is deleted automatically when the cursor is closed.
65460 **
65461 ** P2 is the number of columns in the ephemeral table.
65462 ** The cursor points to a BTree table if P4==0 and to a BTree index
65463 ** if P4 is not 0.  If P4 is not NULL, it points to a KeyInfo structure
65464 ** that defines the format of keys in the index.
65465 **
65466 ** This opcode was once called OpenTemp.  But that created
65467 ** confusion because the term "temp table", might refer either
65468 ** to a TEMP table at the SQL level, or to a table opened by
65469 ** this opcode.  Then this opcode was call OpenVirtual.  But
65470 ** that created confusion with the whole virtual-table idea.
65471 */
65472 /* Opcode: OpenAutoindex P1 P2 * P4 *
65473 **
65474 ** This opcode works the same as OP_OpenEphemeral.  It has a
65475 ** different name to distinguish its use.  Tables created using
65476 ** by this opcode will be used for automatically created transient
65477 ** indices in joins.
65478 */
65479 case OP_OpenAutoindex: 
65480 case OP_OpenEphemeral: {
65481 #if 0  /* local variables moved into u.ax */
65482   VdbeCursor *pCx;
65483 #endif /* local variables moved into u.ax */
65484   static const int vfsFlags =
65485       SQLITE_OPEN_READWRITE |
65486       SQLITE_OPEN_CREATE |
65487       SQLITE_OPEN_EXCLUSIVE |
65488       SQLITE_OPEN_DELETEONCLOSE |
65489       SQLITE_OPEN_TRANSIENT_DB;
65490
65491   assert( pOp->p1>=0 );
65492   u.ax.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1);
65493   if( u.ax.pCx==0 ) goto no_mem;
65494   u.ax.pCx->nullRow = 1;
65495   rc = sqlite3BtreeOpen(0, db, &u.ax.pCx->pBt,
65496                         BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5, vfsFlags);
65497   if( rc==SQLITE_OK ){
65498     rc = sqlite3BtreeBeginTrans(u.ax.pCx->pBt, 1);
65499   }
65500   if( rc==SQLITE_OK ){
65501     /* If a transient index is required, create it by calling
65502     ** sqlite3BtreeCreateTable() with the BTREE_BLOBKEY flag before
65503     ** opening it. If a transient table is required, just use the
65504     ** automatically created table with root-page 1 (an BLOB_INTKEY table).
65505     */
65506     if( pOp->p4.pKeyInfo ){
65507       int pgno;
65508       assert( pOp->p4type==P4_KEYINFO );
65509       rc = sqlite3BtreeCreateTable(u.ax.pCx->pBt, &pgno, BTREE_BLOBKEY);
65510       if( rc==SQLITE_OK ){
65511         assert( pgno==MASTER_ROOT+1 );
65512         rc = sqlite3BtreeCursor(u.ax.pCx->pBt, pgno, 1,
65513                                 (KeyInfo*)pOp->p4.z, u.ax.pCx->pCursor);
65514         u.ax.pCx->pKeyInfo = pOp->p4.pKeyInfo;
65515         u.ax.pCx->pKeyInfo->enc = ENC(p->db);
65516       }
65517       u.ax.pCx->isTable = 0;
65518     }else{
65519       rc = sqlite3BtreeCursor(u.ax.pCx->pBt, MASTER_ROOT, 1, 0, u.ax.pCx->pCursor);
65520       u.ax.pCx->isTable = 1;
65521     }
65522   }
65523   u.ax.pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
65524   u.ax.pCx->isIndex = !u.ax.pCx->isTable;
65525   break;
65526 }
65527
65528 /* Opcode: OpenPseudo P1 P2 P3 * *
65529 **
65530 ** Open a new cursor that points to a fake table that contains a single
65531 ** row of data.  The content of that one row in the content of memory
65532 ** register P2.  In other words, cursor P1 becomes an alias for the 
65533 ** MEM_Blob content contained in register P2.
65534 **
65535 ** A pseudo-table created by this opcode is used to hold a single
65536 ** row output from the sorter so that the row can be decomposed into
65537 ** individual columns using the OP_Column opcode.  The OP_Column opcode
65538 ** is the only cursor opcode that works with a pseudo-table.
65539 **
65540 ** P3 is the number of fields in the records that will be stored by
65541 ** the pseudo-table.
65542 */
65543 case OP_OpenPseudo: {
65544 #if 0  /* local variables moved into u.ay */
65545   VdbeCursor *pCx;
65546 #endif /* local variables moved into u.ay */
65547
65548   assert( pOp->p1>=0 );
65549   u.ay.pCx = allocateCursor(p, pOp->p1, pOp->p3, -1, 0);
65550   if( u.ay.pCx==0 ) goto no_mem;
65551   u.ay.pCx->nullRow = 1;
65552   u.ay.pCx->pseudoTableReg = pOp->p2;
65553   u.ay.pCx->isTable = 1;
65554   u.ay.pCx->isIndex = 0;
65555   break;
65556 }
65557
65558 /* Opcode: Close P1 * * * *
65559 **
65560 ** Close a cursor previously opened as P1.  If P1 is not
65561 ** currently open, this instruction is a no-op.
65562 */
65563 case OP_Close: {
65564   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
65565   sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]);
65566   p->apCsr[pOp->p1] = 0;
65567   break;
65568 }
65569
65570 /* Opcode: SeekGe P1 P2 P3 P4 *
65571 **
65572 ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), 
65573 ** use the value in register P3 as the key.  If cursor P1 refers 
65574 ** to an SQL index, then P3 is the first in an array of P4 registers 
65575 ** that are used as an unpacked index key. 
65576 **
65577 ** Reposition cursor P1 so that  it points to the smallest entry that 
65578 ** is greater than or equal to the key value. If there are no records 
65579 ** greater than or equal to the key and P2 is not zero, then jump to P2.
65580 **
65581 ** See also: Found, NotFound, Distinct, SeekLt, SeekGt, SeekLe
65582 */
65583 /* Opcode: SeekGt P1 P2 P3 P4 *
65584 **
65585 ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), 
65586 ** use the value in register P3 as a key. If cursor P1 refers 
65587 ** to an SQL index, then P3 is the first in an array of P4 registers 
65588 ** that are used as an unpacked index key. 
65589 **
65590 ** Reposition cursor P1 so that  it points to the smallest entry that 
65591 ** is greater than the key value. If there are no records greater than 
65592 ** the key and P2 is not zero, then jump to P2.
65593 **
65594 ** See also: Found, NotFound, Distinct, SeekLt, SeekGe, SeekLe
65595 */
65596 /* Opcode: SeekLt P1 P2 P3 P4 * 
65597 **
65598 ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), 
65599 ** use the value in register P3 as a key. If cursor P1 refers 
65600 ** to an SQL index, then P3 is the first in an array of P4 registers 
65601 ** that are used as an unpacked index key. 
65602 **
65603 ** Reposition cursor P1 so that  it points to the largest entry that 
65604 ** is less than the key value. If there are no records less than 
65605 ** the key and P2 is not zero, then jump to P2.
65606 **
65607 ** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLe
65608 */
65609 /* Opcode: SeekLe P1 P2 P3 P4 *
65610 **
65611 ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys), 
65612 ** use the value in register P3 as a key. If cursor P1 refers 
65613 ** to an SQL index, then P3 is the first in an array of P4 registers 
65614 ** that are used as an unpacked index key. 
65615 **
65616 ** Reposition cursor P1 so that it points to the largest entry that 
65617 ** is less than or equal to the key value. If there are no records 
65618 ** less than or equal to the key and P2 is not zero, then jump to P2.
65619 **
65620 ** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLt
65621 */
65622 case OP_SeekLt:         /* jump, in3 */
65623 case OP_SeekLe:         /* jump, in3 */
65624 case OP_SeekGe:         /* jump, in3 */
65625 case OP_SeekGt: {       /* jump, in3 */
65626 #if 0  /* local variables moved into u.az */
65627   int res;
65628   int oc;
65629   VdbeCursor *pC;
65630   UnpackedRecord r;
65631   int nField;
65632   i64 iKey;      /* The rowid we are to seek to */
65633 #endif /* local variables moved into u.az */
65634
65635   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
65636   assert( pOp->p2!=0 );
65637   u.az.pC = p->apCsr[pOp->p1];
65638   assert( u.az.pC!=0 );
65639   assert( u.az.pC->pseudoTableReg==0 );
65640   assert( OP_SeekLe == OP_SeekLt+1 );
65641   assert( OP_SeekGe == OP_SeekLt+2 );
65642   assert( OP_SeekGt == OP_SeekLt+3 );
65643   assert( u.az.pC->isOrdered );
65644   if( u.az.pC->pCursor!=0 ){
65645     u.az.oc = pOp->opcode;
65646     u.az.pC->nullRow = 0;
65647     if( u.az.pC->isTable ){
65648       /* The input value in P3 might be of any type: integer, real, string,
65649       ** blob, or NULL.  But it needs to be an integer before we can do
65650       ** the seek, so covert it. */
65651       pIn3 = &aMem[pOp->p3];
65652       applyNumericAffinity(pIn3);
65653       u.az.iKey = sqlite3VdbeIntValue(pIn3);
65654       u.az.pC->rowidIsValid = 0;
65655
65656       /* If the P3 value could not be converted into an integer without
65657       ** loss of information, then special processing is required... */
65658       if( (pIn3->flags & MEM_Int)==0 ){
65659         if( (pIn3->flags & MEM_Real)==0 ){
65660           /* If the P3 value cannot be converted into any kind of a number,
65661           ** then the seek is not possible, so jump to P2 */
65662           pc = pOp->p2 - 1;
65663           break;
65664         }
65665         /* If we reach this point, then the P3 value must be a floating
65666         ** point number. */
65667         assert( (pIn3->flags & MEM_Real)!=0 );
65668
65669         if( u.az.iKey==SMALLEST_INT64 && (pIn3->r<(double)u.az.iKey || pIn3->r>0) ){
65670           /* The P3 value is too large in magnitude to be expressed as an
65671           ** integer. */
65672           u.az.res = 1;
65673           if( pIn3->r<0 ){
65674             if( u.az.oc>=OP_SeekGe ){  assert( u.az.oc==OP_SeekGe || u.az.oc==OP_SeekGt );
65675               rc = sqlite3BtreeFirst(u.az.pC->pCursor, &u.az.res);
65676               if( rc!=SQLITE_OK ) goto abort_due_to_error;
65677             }
65678           }else{
65679             if( u.az.oc<=OP_SeekLe ){  assert( u.az.oc==OP_SeekLt || u.az.oc==OP_SeekLe );
65680               rc = sqlite3BtreeLast(u.az.pC->pCursor, &u.az.res);
65681               if( rc!=SQLITE_OK ) goto abort_due_to_error;
65682             }
65683           }
65684           if( u.az.res ){
65685             pc = pOp->p2 - 1;
65686           }
65687           break;
65688         }else if( u.az.oc==OP_SeekLt || u.az.oc==OP_SeekGe ){
65689           /* Use the ceiling() function to convert real->int */
65690           if( pIn3->r > (double)u.az.iKey ) u.az.iKey++;
65691         }else{
65692           /* Use the floor() function to convert real->int */
65693           assert( u.az.oc==OP_SeekLe || u.az.oc==OP_SeekGt );
65694           if( pIn3->r < (double)u.az.iKey ) u.az.iKey--;
65695         }
65696       }
65697       rc = sqlite3BtreeMovetoUnpacked(u.az.pC->pCursor, 0, (u64)u.az.iKey, 0, &u.az.res);
65698       if( rc!=SQLITE_OK ){
65699         goto abort_due_to_error;
65700       }
65701       if( u.az.res==0 ){
65702         u.az.pC->rowidIsValid = 1;
65703         u.az.pC->lastRowid = u.az.iKey;
65704       }
65705     }else{
65706       u.az.nField = pOp->p4.i;
65707       assert( pOp->p4type==P4_INT32 );
65708       assert( u.az.nField>0 );
65709       u.az.r.pKeyInfo = u.az.pC->pKeyInfo;
65710       u.az.r.nField = (u16)u.az.nField;
65711
65712       /* The next line of code computes as follows, only faster:
65713       **   if( u.az.oc==OP_SeekGt || u.az.oc==OP_SeekLe ){
65714       **     u.az.r.flags = UNPACKED_INCRKEY;
65715       **   }else{
65716       **     u.az.r.flags = 0;
65717       **   }
65718       */
65719       u.az.r.flags = (u16)(UNPACKED_INCRKEY * (1 & (u.az.oc - OP_SeekLt)));
65720       assert( u.az.oc!=OP_SeekGt || u.az.r.flags==UNPACKED_INCRKEY );
65721       assert( u.az.oc!=OP_SeekLe || u.az.r.flags==UNPACKED_INCRKEY );
65722       assert( u.az.oc!=OP_SeekGe || u.az.r.flags==0 );
65723       assert( u.az.oc!=OP_SeekLt || u.az.r.flags==0 );
65724
65725       u.az.r.aMem = &aMem[pOp->p3];
65726 #ifdef SQLITE_DEBUG
65727       { int i; for(i=0; i<u.az.r.nField; i++) assert( memIsValid(&u.az.r.aMem[i]) ); }
65728 #endif
65729       ExpandBlob(u.az.r.aMem);
65730       rc = sqlite3BtreeMovetoUnpacked(u.az.pC->pCursor, &u.az.r, 0, 0, &u.az.res);
65731       if( rc!=SQLITE_OK ){
65732         goto abort_due_to_error;
65733       }
65734       u.az.pC->rowidIsValid = 0;
65735     }
65736     u.az.pC->deferredMoveto = 0;
65737     u.az.pC->cacheStatus = CACHE_STALE;
65738 #ifdef SQLITE_TEST
65739     sqlite3_search_count++;
65740 #endif
65741     if( u.az.oc>=OP_SeekGe ){  assert( u.az.oc==OP_SeekGe || u.az.oc==OP_SeekGt );
65742       if( u.az.res<0 || (u.az.res==0 && u.az.oc==OP_SeekGt) ){
65743         rc = sqlite3BtreeNext(u.az.pC->pCursor, &u.az.res);
65744         if( rc!=SQLITE_OK ) goto abort_due_to_error;
65745         u.az.pC->rowidIsValid = 0;
65746       }else{
65747         u.az.res = 0;
65748       }
65749     }else{
65750       assert( u.az.oc==OP_SeekLt || u.az.oc==OP_SeekLe );
65751       if( u.az.res>0 || (u.az.res==0 && u.az.oc==OP_SeekLt) ){
65752         rc = sqlite3BtreePrevious(u.az.pC->pCursor, &u.az.res);
65753         if( rc!=SQLITE_OK ) goto abort_due_to_error;
65754         u.az.pC->rowidIsValid = 0;
65755       }else{
65756         /* u.az.res might be negative because the table is empty.  Check to
65757         ** see if this is the case.
65758         */
65759         u.az.res = sqlite3BtreeEof(u.az.pC->pCursor);
65760       }
65761     }
65762     assert( pOp->p2>0 );
65763     if( u.az.res ){
65764       pc = pOp->p2 - 1;
65765     }
65766   }else{
65767     /* This happens when attempting to open the sqlite3_master table
65768     ** for read access returns SQLITE_EMPTY. In this case always
65769     ** take the jump (since there are no records in the table).
65770     */
65771     pc = pOp->p2 - 1;
65772   }
65773   break;
65774 }
65775
65776 /* Opcode: Seek P1 P2 * * *
65777 **
65778 ** P1 is an open table cursor and P2 is a rowid integer.  Arrange
65779 ** for P1 to move so that it points to the rowid given by P2.
65780 **
65781 ** This is actually a deferred seek.  Nothing actually happens until
65782 ** the cursor is used to read a record.  That way, if no reads
65783 ** occur, no unnecessary I/O happens.
65784 */
65785 case OP_Seek: {    /* in2 */
65786 #if 0  /* local variables moved into u.ba */
65787   VdbeCursor *pC;
65788 #endif /* local variables moved into u.ba */
65789
65790   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
65791   u.ba.pC = p->apCsr[pOp->p1];
65792   assert( u.ba.pC!=0 );
65793   if( ALWAYS(u.ba.pC->pCursor!=0) ){
65794     assert( u.ba.pC->isTable );
65795     u.ba.pC->nullRow = 0;
65796     pIn2 = &aMem[pOp->p2];
65797     u.ba.pC->movetoTarget = sqlite3VdbeIntValue(pIn2);
65798     u.ba.pC->rowidIsValid = 0;
65799     u.ba.pC->deferredMoveto = 1;
65800   }
65801   break;
65802 }
65803   
65804
65805 /* Opcode: Found P1 P2 P3 P4 *
65806 **
65807 ** If P4==0 then register P3 holds a blob constructed by MakeRecord.  If
65808 ** P4>0 then register P3 is the first of P4 registers that form an unpacked
65809 ** record.
65810 **
65811 ** Cursor P1 is on an index btree.  If the record identified by P3 and P4
65812 ** is a prefix of any entry in P1 then a jump is made to P2 and
65813 ** P1 is left pointing at the matching entry.
65814 */
65815 /* Opcode: NotFound P1 P2 P3 P4 *
65816 **
65817 ** If P4==0 then register P3 holds a blob constructed by MakeRecord.  If
65818 ** P4>0 then register P3 is the first of P4 registers that form an unpacked
65819 ** record.
65820 ** 
65821 ** Cursor P1 is on an index btree.  If the record identified by P3 and P4
65822 ** is not the prefix of any entry in P1 then a jump is made to P2.  If P1 
65823 ** does contain an entry whose prefix matches the P3/P4 record then control
65824 ** falls through to the next instruction and P1 is left pointing at the
65825 ** matching entry.
65826 **
65827 ** See also: Found, NotExists, IsUnique
65828 */
65829 case OP_NotFound:       /* jump, in3 */
65830 case OP_Found: {        /* jump, in3 */
65831 #if 0  /* local variables moved into u.bb */
65832   int alreadyExists;
65833   VdbeCursor *pC;
65834   int res;
65835   UnpackedRecord *pIdxKey;
65836   UnpackedRecord r;
65837   char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7];
65838 #endif /* local variables moved into u.bb */
65839
65840 #ifdef SQLITE_TEST
65841   sqlite3_found_count++;
65842 #endif
65843
65844   u.bb.alreadyExists = 0;
65845   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
65846   assert( pOp->p4type==P4_INT32 );
65847   u.bb.pC = p->apCsr[pOp->p1];
65848   assert( u.bb.pC!=0 );
65849   pIn3 = &aMem[pOp->p3];
65850   if( ALWAYS(u.bb.pC->pCursor!=0) ){
65851
65852     assert( u.bb.pC->isTable==0 );
65853     if( pOp->p4.i>0 ){
65854       u.bb.r.pKeyInfo = u.bb.pC->pKeyInfo;
65855       u.bb.r.nField = (u16)pOp->p4.i;
65856       u.bb.r.aMem = pIn3;
65857 #ifdef SQLITE_DEBUG
65858       { int i; for(i=0; i<u.bb.r.nField; i++) assert( memIsValid(&u.bb.r.aMem[i]) ); }
65859 #endif
65860       u.bb.r.flags = UNPACKED_PREFIX_MATCH;
65861       u.bb.pIdxKey = &u.bb.r;
65862     }else{
65863       assert( pIn3->flags & MEM_Blob );
65864       assert( (pIn3->flags & MEM_Zero)==0 );  /* zeroblobs already expanded */
65865       u.bb.pIdxKey = sqlite3VdbeRecordUnpack(u.bb.pC->pKeyInfo, pIn3->n, pIn3->z,
65866                                         u.bb.aTempRec, sizeof(u.bb.aTempRec));
65867       if( u.bb.pIdxKey==0 ){
65868         goto no_mem;
65869       }
65870       u.bb.pIdxKey->flags |= UNPACKED_PREFIX_MATCH;
65871     }
65872     rc = sqlite3BtreeMovetoUnpacked(u.bb.pC->pCursor, u.bb.pIdxKey, 0, 0, &u.bb.res);
65873     if( pOp->p4.i==0 ){
65874       sqlite3VdbeDeleteUnpackedRecord(u.bb.pIdxKey);
65875     }
65876     if( rc!=SQLITE_OK ){
65877       break;
65878     }
65879     u.bb.alreadyExists = (u.bb.res==0);
65880     u.bb.pC->deferredMoveto = 0;
65881     u.bb.pC->cacheStatus = CACHE_STALE;
65882   }
65883   if( pOp->opcode==OP_Found ){
65884     if( u.bb.alreadyExists ) pc = pOp->p2 - 1;
65885   }else{
65886     if( !u.bb.alreadyExists ) pc = pOp->p2 - 1;
65887   }
65888   break;
65889 }
65890
65891 /* Opcode: IsUnique P1 P2 P3 P4 *
65892 **
65893 ** Cursor P1 is open on an index b-tree - that is to say, a btree which
65894 ** no data and where the key are records generated by OP_MakeRecord with
65895 ** the list field being the integer ROWID of the entry that the index
65896 ** entry refers to.
65897 **
65898 ** The P3 register contains an integer record number. Call this record 
65899 ** number R. Register P4 is the first in a set of N contiguous registers
65900 ** that make up an unpacked index key that can be used with cursor P1.
65901 ** The value of N can be inferred from the cursor. N includes the rowid
65902 ** value appended to the end of the index record. This rowid value may
65903 ** or may not be the same as R.
65904 **
65905 ** If any of the N registers beginning with register P4 contains a NULL
65906 ** value, jump immediately to P2.
65907 **
65908 ** Otherwise, this instruction checks if cursor P1 contains an entry
65909 ** where the first (N-1) fields match but the rowid value at the end
65910 ** of the index entry is not R. If there is no such entry, control jumps
65911 ** to instruction P2. Otherwise, the rowid of the conflicting index
65912 ** entry is copied to register P3 and control falls through to the next
65913 ** instruction.
65914 **
65915 ** See also: NotFound, NotExists, Found
65916 */
65917 case OP_IsUnique: {        /* jump, in3 */
65918 #if 0  /* local variables moved into u.bc */
65919   u16 ii;
65920   VdbeCursor *pCx;
65921   BtCursor *pCrsr;
65922   u16 nField;
65923   Mem *aMx;
65924   UnpackedRecord r;                  /* B-Tree index search key */
65925   i64 R;                             /* Rowid stored in register P3 */
65926 #endif /* local variables moved into u.bc */
65927
65928   pIn3 = &aMem[pOp->p3];
65929   u.bc.aMx = &aMem[pOp->p4.i];
65930   /* Assert that the values of parameters P1 and P4 are in range. */
65931   assert( pOp->p4type==P4_INT32 );
65932   assert( pOp->p4.i>0 && pOp->p4.i<=p->nMem );
65933   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
65934
65935   /* Find the index cursor. */
65936   u.bc.pCx = p->apCsr[pOp->p1];
65937   assert( u.bc.pCx->deferredMoveto==0 );
65938   u.bc.pCx->seekResult = 0;
65939   u.bc.pCx->cacheStatus = CACHE_STALE;
65940   u.bc.pCrsr = u.bc.pCx->pCursor;
65941
65942   /* If any of the values are NULL, take the jump. */
65943   u.bc.nField = u.bc.pCx->pKeyInfo->nField;
65944   for(u.bc.ii=0; u.bc.ii<u.bc.nField; u.bc.ii++){
65945     if( u.bc.aMx[u.bc.ii].flags & MEM_Null ){
65946       pc = pOp->p2 - 1;
65947       u.bc.pCrsr = 0;
65948       break;
65949     }
65950   }
65951   assert( (u.bc.aMx[u.bc.nField].flags & MEM_Null)==0 );
65952
65953   if( u.bc.pCrsr!=0 ){
65954     /* Populate the index search key. */
65955     u.bc.r.pKeyInfo = u.bc.pCx->pKeyInfo;
65956     u.bc.r.nField = u.bc.nField + 1;
65957     u.bc.r.flags = UNPACKED_PREFIX_SEARCH;
65958     u.bc.r.aMem = u.bc.aMx;
65959 #ifdef SQLITE_DEBUG
65960     { int i; for(i=0; i<u.bc.r.nField; i++) assert( memIsValid(&u.bc.r.aMem[i]) ); }
65961 #endif
65962
65963     /* Extract the value of u.bc.R from register P3. */
65964     sqlite3VdbeMemIntegerify(pIn3);
65965     u.bc.R = pIn3->u.i;
65966
65967     /* Search the B-Tree index. If no conflicting record is found, jump
65968     ** to P2. Otherwise, copy the rowid of the conflicting record to
65969     ** register P3 and fall through to the next instruction.  */
65970     rc = sqlite3BtreeMovetoUnpacked(u.bc.pCrsr, &u.bc.r, 0, 0, &u.bc.pCx->seekResult);
65971     if( (u.bc.r.flags & UNPACKED_PREFIX_SEARCH) || u.bc.r.rowid==u.bc.R ){
65972       pc = pOp->p2 - 1;
65973     }else{
65974       pIn3->u.i = u.bc.r.rowid;
65975     }
65976   }
65977   break;
65978 }
65979
65980 /* Opcode: NotExists P1 P2 P3 * *
65981 **
65982 ** Use the content of register P3 as a integer key.  If a record 
65983 ** with that key does not exist in table of P1, then jump to P2. 
65984 ** If the record does exist, then fall through.  The cursor is left 
65985 ** pointing to the record if it exists.
65986 **
65987 ** The difference between this operation and NotFound is that this
65988 ** operation assumes the key is an integer and that P1 is a table whereas
65989 ** NotFound assumes key is a blob constructed from MakeRecord and
65990 ** P1 is an index.
65991 **
65992 ** See also: Found, NotFound, IsUnique
65993 */
65994 case OP_NotExists: {        /* jump, in3 */
65995 #if 0  /* local variables moved into u.bd */
65996   VdbeCursor *pC;
65997   BtCursor *pCrsr;
65998   int res;
65999   u64 iKey;
66000 #endif /* local variables moved into u.bd */
66001
66002   pIn3 = &aMem[pOp->p3];
66003   assert( pIn3->flags & MEM_Int );
66004   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66005   u.bd.pC = p->apCsr[pOp->p1];
66006   assert( u.bd.pC!=0 );
66007   assert( u.bd.pC->isTable );
66008   assert( u.bd.pC->pseudoTableReg==0 );
66009   u.bd.pCrsr = u.bd.pC->pCursor;
66010   if( u.bd.pCrsr!=0 ){
66011     u.bd.res = 0;
66012     u.bd.iKey = pIn3->u.i;
66013     rc = sqlite3BtreeMovetoUnpacked(u.bd.pCrsr, 0, u.bd.iKey, 0, &u.bd.res);
66014     u.bd.pC->lastRowid = pIn3->u.i;
66015     u.bd.pC->rowidIsValid = u.bd.res==0 ?1:0;
66016     u.bd.pC->nullRow = 0;
66017     u.bd.pC->cacheStatus = CACHE_STALE;
66018     u.bd.pC->deferredMoveto = 0;
66019     if( u.bd.res!=0 ){
66020       pc = pOp->p2 - 1;
66021       assert( u.bd.pC->rowidIsValid==0 );
66022     }
66023     u.bd.pC->seekResult = u.bd.res;
66024   }else{
66025     /* This happens when an attempt to open a read cursor on the
66026     ** sqlite_master table returns SQLITE_EMPTY.
66027     */
66028     pc = pOp->p2 - 1;
66029     assert( u.bd.pC->rowidIsValid==0 );
66030     u.bd.pC->seekResult = 0;
66031   }
66032   break;
66033 }
66034
66035 /* Opcode: Sequence P1 P2 * * *
66036 **
66037 ** Find the next available sequence number for cursor P1.
66038 ** Write the sequence number into register P2.
66039 ** The sequence number on the cursor is incremented after this
66040 ** instruction.  
66041 */
66042 case OP_Sequence: {           /* out2-prerelease */
66043   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66044   assert( p->apCsr[pOp->p1]!=0 );
66045   pOut->u.i = p->apCsr[pOp->p1]->seqCount++;
66046   break;
66047 }
66048
66049
66050 /* Opcode: NewRowid P1 P2 P3 * *
66051 **
66052 ** Get a new integer record number (a.k.a "rowid") used as the key to a table.
66053 ** The record number is not previously used as a key in the database
66054 ** table that cursor P1 points to.  The new record number is written
66055 ** written to register P2.
66056 **
66057 ** If P3>0 then P3 is a register in the root frame of this VDBE that holds 
66058 ** the largest previously generated record number. No new record numbers are
66059 ** allowed to be less than this value. When this value reaches its maximum, 
66060 ** a SQLITE_FULL error is generated. The P3 register is updated with the '
66061 ** generated record number. This P3 mechanism is used to help implement the
66062 ** AUTOINCREMENT feature.
66063 */
66064 case OP_NewRowid: {           /* out2-prerelease */
66065 #if 0  /* local variables moved into u.be */
66066   i64 v;                 /* The new rowid */
66067   VdbeCursor *pC;        /* Cursor of table to get the new rowid */
66068   int res;               /* Result of an sqlite3BtreeLast() */
66069   int cnt;               /* Counter to limit the number of searches */
66070   Mem *pMem;             /* Register holding largest rowid for AUTOINCREMENT */
66071   VdbeFrame *pFrame;     /* Root frame of VDBE */
66072 #endif /* local variables moved into u.be */
66073
66074   u.be.v = 0;
66075   u.be.res = 0;
66076   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66077   u.be.pC = p->apCsr[pOp->p1];
66078   assert( u.be.pC!=0 );
66079   if( NEVER(u.be.pC->pCursor==0) ){
66080     /* The zero initialization above is all that is needed */
66081   }else{
66082     /* The next rowid or record number (different terms for the same
66083     ** thing) is obtained in a two-step algorithm.
66084     **
66085     ** First we attempt to find the largest existing rowid and add one
66086     ** to that.  But if the largest existing rowid is already the maximum
66087     ** positive integer, we have to fall through to the second
66088     ** probabilistic algorithm
66089     **
66090     ** The second algorithm is to select a rowid at random and see if
66091     ** it already exists in the table.  If it does not exist, we have
66092     ** succeeded.  If the random rowid does exist, we select a new one
66093     ** and try again, up to 100 times.
66094     */
66095     assert( u.be.pC->isTable );
66096
66097 #ifdef SQLITE_32BIT_ROWID
66098 #   define MAX_ROWID 0x7fffffff
66099 #else
66100     /* Some compilers complain about constants of the form 0x7fffffffffffffff.
66101     ** Others complain about 0x7ffffffffffffffffLL.  The following macro seems
66102     ** to provide the constant while making all compilers happy.
66103     */
66104 #   define MAX_ROWID  (i64)( (((u64)0x7fffffff)<<32) | (u64)0xffffffff )
66105 #endif
66106
66107     if( !u.be.pC->useRandomRowid ){
66108       u.be.v = sqlite3BtreeGetCachedRowid(u.be.pC->pCursor);
66109       if( u.be.v==0 ){
66110         rc = sqlite3BtreeLast(u.be.pC->pCursor, &u.be.res);
66111         if( rc!=SQLITE_OK ){
66112           goto abort_due_to_error;
66113         }
66114         if( u.be.res ){
66115           u.be.v = 1;   /* IMP: R-61914-48074 */
66116         }else{
66117           assert( sqlite3BtreeCursorIsValid(u.be.pC->pCursor) );
66118           rc = sqlite3BtreeKeySize(u.be.pC->pCursor, &u.be.v);
66119           assert( rc==SQLITE_OK );   /* Cannot fail following BtreeLast() */
66120           if( u.be.v==MAX_ROWID ){
66121             u.be.pC->useRandomRowid = 1;
66122           }else{
66123             u.be.v++;   /* IMP: R-29538-34987 */
66124           }
66125         }
66126       }
66127
66128 #ifndef SQLITE_OMIT_AUTOINCREMENT
66129       if( pOp->p3 ){
66130         /* Assert that P3 is a valid memory cell. */
66131         assert( pOp->p3>0 );
66132         if( p->pFrame ){
66133           for(u.be.pFrame=p->pFrame; u.be.pFrame->pParent; u.be.pFrame=u.be.pFrame->pParent);
66134           /* Assert that P3 is a valid memory cell. */
66135           assert( pOp->p3<=u.be.pFrame->nMem );
66136           u.be.pMem = &u.be.pFrame->aMem[pOp->p3];
66137         }else{
66138           /* Assert that P3 is a valid memory cell. */
66139           assert( pOp->p3<=p->nMem );
66140           u.be.pMem = &aMem[pOp->p3];
66141           memAboutToChange(p, u.be.pMem);
66142         }
66143         assert( memIsValid(u.be.pMem) );
66144
66145         REGISTER_TRACE(pOp->p3, u.be.pMem);
66146         sqlite3VdbeMemIntegerify(u.be.pMem);
66147         assert( (u.be.pMem->flags & MEM_Int)!=0 );  /* mem(P3) holds an integer */
66148         if( u.be.pMem->u.i==MAX_ROWID || u.be.pC->useRandomRowid ){
66149           rc = SQLITE_FULL;   /* IMP: R-12275-61338 */
66150           goto abort_due_to_error;
66151         }
66152         if( u.be.v<u.be.pMem->u.i+1 ){
66153           u.be.v = u.be.pMem->u.i + 1;
66154         }
66155         u.be.pMem->u.i = u.be.v;
66156       }
66157 #endif
66158
66159       sqlite3BtreeSetCachedRowid(u.be.pC->pCursor, u.be.v<MAX_ROWID ? u.be.v+1 : 0);
66160     }
66161     if( u.be.pC->useRandomRowid ){
66162       /* IMPLEMENTATION-OF: R-07677-41881 If the largest ROWID is equal to the
66163       ** largest possible integer (9223372036854775807) then the database
66164       ** engine starts picking positive candidate ROWIDs at random until
66165       ** it finds one that is not previously used. */
66166       assert( pOp->p3==0 );  /* We cannot be in random rowid mode if this is
66167                              ** an AUTOINCREMENT table. */
66168       /* on the first attempt, simply do one more than previous */
66169       u.be.v = db->lastRowid;
66170       u.be.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
66171       u.be.v++; /* ensure non-zero */
66172       u.be.cnt = 0;
66173       while(   ((rc = sqlite3BtreeMovetoUnpacked(u.be.pC->pCursor, 0, (u64)u.be.v,
66174                                                  0, &u.be.res))==SQLITE_OK)
66175             && (u.be.res==0)
66176             && (++u.be.cnt<100)){
66177         /* collision - try another random rowid */
66178         sqlite3_randomness(sizeof(u.be.v), &u.be.v);
66179         if( u.be.cnt<5 ){
66180           /* try "small" random rowids for the initial attempts */
66181           u.be.v &= 0xffffff;
66182         }else{
66183           u.be.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
66184         }
66185         u.be.v++; /* ensure non-zero */
66186       }
66187       if( rc==SQLITE_OK && u.be.res==0 ){
66188         rc = SQLITE_FULL;   /* IMP: R-38219-53002 */
66189         goto abort_due_to_error;
66190       }
66191       assert( u.be.v>0 );  /* EV: R-40812-03570 */
66192     }
66193     u.be.pC->rowidIsValid = 0;
66194     u.be.pC->deferredMoveto = 0;
66195     u.be.pC->cacheStatus = CACHE_STALE;
66196   }
66197   pOut->u.i = u.be.v;
66198   break;
66199 }
66200
66201 /* Opcode: Insert P1 P2 P3 P4 P5
66202 **
66203 ** Write an entry into the table of cursor P1.  A new entry is
66204 ** created if it doesn't already exist or the data for an existing
66205 ** entry is overwritten.  The data is the value MEM_Blob stored in register
66206 ** number P2. The key is stored in register P3. The key must
66207 ** be a MEM_Int.
66208 **
66209 ** If the OPFLAG_NCHANGE flag of P5 is set, then the row change count is
66210 ** incremented (otherwise not).  If the OPFLAG_LASTROWID flag of P5 is set,
66211 ** then rowid is stored for subsequent return by the
66212 ** sqlite3_last_insert_rowid() function (otherwise it is unmodified).
66213 **
66214 ** If the OPFLAG_USESEEKRESULT flag of P5 is set and if the result of
66215 ** the last seek operation (OP_NotExists) was a success, then this
66216 ** operation will not attempt to find the appropriate row before doing
66217 ** the insert but will instead overwrite the row that the cursor is
66218 ** currently pointing to.  Presumably, the prior OP_NotExists opcode
66219 ** has already positioned the cursor correctly.  This is an optimization
66220 ** that boosts performance by avoiding redundant seeks.
66221 **
66222 ** If the OPFLAG_ISUPDATE flag is set, then this opcode is part of an
66223 ** UPDATE operation.  Otherwise (if the flag is clear) then this opcode
66224 ** is part of an INSERT operation.  The difference is only important to
66225 ** the update hook.
66226 **
66227 ** Parameter P4 may point to a string containing the table-name, or
66228 ** may be NULL. If it is not NULL, then the update-hook 
66229 ** (sqlite3.xUpdateCallback) is invoked following a successful insert.
66230 **
66231 ** (WARNING/TODO: If P1 is a pseudo-cursor and P2 is dynamically
66232 ** allocated, then ownership of P2 is transferred to the pseudo-cursor
66233 ** and register P2 becomes ephemeral.  If the cursor is changed, the
66234 ** value of register P2 will then change.  Make sure this does not
66235 ** cause any problems.)
66236 **
66237 ** This instruction only works on tables.  The equivalent instruction
66238 ** for indices is OP_IdxInsert.
66239 */
66240 /* Opcode: InsertInt P1 P2 P3 P4 P5
66241 **
66242 ** This works exactly like OP_Insert except that the key is the
66243 ** integer value P3, not the value of the integer stored in register P3.
66244 */
66245 case OP_Insert: 
66246 case OP_InsertInt: {
66247 #if 0  /* local variables moved into u.bf */
66248   Mem *pData;       /* MEM cell holding data for the record to be inserted */
66249   Mem *pKey;        /* MEM cell holding key  for the record */
66250   i64 iKey;         /* The integer ROWID or key for the record to be inserted */
66251   VdbeCursor *pC;   /* Cursor to table into which insert is written */
66252   int nZero;        /* Number of zero-bytes to append */
66253   int seekResult;   /* Result of prior seek or 0 if no USESEEKRESULT flag */
66254   const char *zDb;  /* database name - used by the update hook */
66255   const char *zTbl; /* Table name - used by the opdate hook */
66256   int op;           /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
66257 #endif /* local variables moved into u.bf */
66258
66259   u.bf.pData = &aMem[pOp->p2];
66260   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66261   assert( memIsValid(u.bf.pData) );
66262   u.bf.pC = p->apCsr[pOp->p1];
66263   assert( u.bf.pC!=0 );
66264   assert( u.bf.pC->pCursor!=0 );
66265   assert( u.bf.pC->pseudoTableReg==0 );
66266   assert( u.bf.pC->isTable );
66267   REGISTER_TRACE(pOp->p2, u.bf.pData);
66268
66269   if( pOp->opcode==OP_Insert ){
66270     u.bf.pKey = &aMem[pOp->p3];
66271     assert( u.bf.pKey->flags & MEM_Int );
66272     assert( memIsValid(u.bf.pKey) );
66273     REGISTER_TRACE(pOp->p3, u.bf.pKey);
66274     u.bf.iKey = u.bf.pKey->u.i;
66275   }else{
66276     assert( pOp->opcode==OP_InsertInt );
66277     u.bf.iKey = pOp->p3;
66278   }
66279
66280   if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++;
66281   if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = u.bf.iKey;
66282   if( u.bf.pData->flags & MEM_Null ){
66283     u.bf.pData->z = 0;
66284     u.bf.pData->n = 0;
66285   }else{
66286     assert( u.bf.pData->flags & (MEM_Blob|MEM_Str) );
66287   }
66288   u.bf.seekResult = ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bf.pC->seekResult : 0);
66289   if( u.bf.pData->flags & MEM_Zero ){
66290     u.bf.nZero = u.bf.pData->u.nZero;
66291   }else{
66292     u.bf.nZero = 0;
66293   }
66294   sqlite3BtreeSetCachedRowid(u.bf.pC->pCursor, 0);
66295   rc = sqlite3BtreeInsert(u.bf.pC->pCursor, 0, u.bf.iKey,
66296                           u.bf.pData->z, u.bf.pData->n, u.bf.nZero,
66297                           pOp->p5 & OPFLAG_APPEND, u.bf.seekResult
66298   );
66299   u.bf.pC->rowidIsValid = 0;
66300   u.bf.pC->deferredMoveto = 0;
66301   u.bf.pC->cacheStatus = CACHE_STALE;
66302
66303   /* Invoke the update-hook if required. */
66304   if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){
66305     u.bf.zDb = db->aDb[u.bf.pC->iDb].zName;
66306     u.bf.zTbl = pOp->p4.z;
66307     u.bf.op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT);
66308     assert( u.bf.pC->isTable );
66309     db->xUpdateCallback(db->pUpdateArg, u.bf.op, u.bf.zDb, u.bf.zTbl, u.bf.iKey);
66310     assert( u.bf.pC->iDb>=0 );
66311   }
66312   break;
66313 }
66314
66315 /* Opcode: Delete P1 P2 * P4 *
66316 **
66317 ** Delete the record at which the P1 cursor is currently pointing.
66318 **
66319 ** The cursor will be left pointing at either the next or the previous
66320 ** record in the table. If it is left pointing at the next record, then
66321 ** the next Next instruction will be a no-op.  Hence it is OK to delete
66322 ** a record from within an Next loop.
66323 **
66324 ** If the OPFLAG_NCHANGE flag of P2 is set, then the row change count is
66325 ** incremented (otherwise not).
66326 **
66327 ** P1 must not be pseudo-table.  It has to be a real table with
66328 ** multiple rows.
66329 **
66330 ** If P4 is not NULL, then it is the name of the table that P1 is
66331 ** pointing to.  The update hook will be invoked, if it exists.
66332 ** If P4 is not NULL then the P1 cursor must have been positioned
66333 ** using OP_NotFound prior to invoking this opcode.
66334 */
66335 case OP_Delete: {
66336 #if 0  /* local variables moved into u.bg */
66337   i64 iKey;
66338   VdbeCursor *pC;
66339 #endif /* local variables moved into u.bg */
66340
66341   u.bg.iKey = 0;
66342   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66343   u.bg.pC = p->apCsr[pOp->p1];
66344   assert( u.bg.pC!=0 );
66345   assert( u.bg.pC->pCursor!=0 );  /* Only valid for real tables, no pseudotables */
66346
66347   /* If the update-hook will be invoked, set u.bg.iKey to the rowid of the
66348   ** row being deleted.
66349   */
66350   if( db->xUpdateCallback && pOp->p4.z ){
66351     assert( u.bg.pC->isTable );
66352     assert( u.bg.pC->rowidIsValid );  /* lastRowid set by previous OP_NotFound */
66353     u.bg.iKey = u.bg.pC->lastRowid;
66354   }
66355
66356   /* The OP_Delete opcode always follows an OP_NotExists or OP_Last or
66357   ** OP_Column on the same table without any intervening operations that
66358   ** might move or invalidate the cursor.  Hence cursor u.bg.pC is always pointing
66359   ** to the row to be deleted and the sqlite3VdbeCursorMoveto() operation
66360   ** below is always a no-op and cannot fail.  We will run it anyhow, though,
66361   ** to guard against future changes to the code generator.
66362   **/
66363   assert( u.bg.pC->deferredMoveto==0 );
66364   rc = sqlite3VdbeCursorMoveto(u.bg.pC);
66365   if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
66366
66367   sqlite3BtreeSetCachedRowid(u.bg.pC->pCursor, 0);
66368   rc = sqlite3BtreeDelete(u.bg.pC->pCursor);
66369   u.bg.pC->cacheStatus = CACHE_STALE;
66370
66371   /* Invoke the update-hook if required. */
66372   if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){
66373     const char *zDb = db->aDb[u.bg.pC->iDb].zName;
66374     const char *zTbl = pOp->p4.z;
66375     db->xUpdateCallback(db->pUpdateArg, SQLITE_DELETE, zDb, zTbl, u.bg.iKey);
66376     assert( u.bg.pC->iDb>=0 );
66377   }
66378   if( pOp->p2 & OPFLAG_NCHANGE ) p->nChange++;
66379   break;
66380 }
66381 /* Opcode: ResetCount * * * * *
66382 **
66383 ** The value of the change counter is copied to the database handle
66384 ** change counter (returned by subsequent calls to sqlite3_changes()).
66385 ** Then the VMs internal change counter resets to 0.
66386 ** This is used by trigger programs.
66387 */
66388 case OP_ResetCount: {
66389   sqlite3VdbeSetChanges(db, p->nChange);
66390   p->nChange = 0;
66391   break;
66392 }
66393
66394 /* Opcode: RowData P1 P2 * * *
66395 **
66396 ** Write into register P2 the complete row data for cursor P1.
66397 ** There is no interpretation of the data.  
66398 ** It is just copied onto the P2 register exactly as 
66399 ** it is found in the database file.
66400 **
66401 ** If the P1 cursor must be pointing to a valid row (not a NULL row)
66402 ** of a real table, not a pseudo-table.
66403 */
66404 /* Opcode: RowKey P1 P2 * * *
66405 **
66406 ** Write into register P2 the complete row key for cursor P1.
66407 ** There is no interpretation of the data.  
66408 ** The key is copied onto the P3 register exactly as 
66409 ** it is found in the database file.
66410 **
66411 ** If the P1 cursor must be pointing to a valid row (not a NULL row)
66412 ** of a real table, not a pseudo-table.
66413 */
66414 case OP_RowKey:
66415 case OP_RowData: {
66416 #if 0  /* local variables moved into u.bh */
66417   VdbeCursor *pC;
66418   BtCursor *pCrsr;
66419   u32 n;
66420   i64 n64;
66421 #endif /* local variables moved into u.bh */
66422
66423   pOut = &aMem[pOp->p2];
66424   memAboutToChange(p, pOut);
66425
66426   /* Note that RowKey and RowData are really exactly the same instruction */
66427   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66428   u.bh.pC = p->apCsr[pOp->p1];
66429   assert( u.bh.pC->isTable || pOp->opcode==OP_RowKey );
66430   assert( u.bh.pC->isIndex || pOp->opcode==OP_RowData );
66431   assert( u.bh.pC!=0 );
66432   assert( u.bh.pC->nullRow==0 );
66433   assert( u.bh.pC->pseudoTableReg==0 );
66434   assert( u.bh.pC->pCursor!=0 );
66435   u.bh.pCrsr = u.bh.pC->pCursor;
66436   assert( sqlite3BtreeCursorIsValid(u.bh.pCrsr) );
66437
66438   /* The OP_RowKey and OP_RowData opcodes always follow OP_NotExists or
66439   ** OP_Rewind/Op_Next with no intervening instructions that might invalidate
66440   ** the cursor.  Hence the following sqlite3VdbeCursorMoveto() call is always
66441   ** a no-op and can never fail.  But we leave it in place as a safety.
66442   */
66443   assert( u.bh.pC->deferredMoveto==0 );
66444   rc = sqlite3VdbeCursorMoveto(u.bh.pC);
66445   if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
66446
66447   if( u.bh.pC->isIndex ){
66448     assert( !u.bh.pC->isTable );
66449     rc = sqlite3BtreeKeySize(u.bh.pCrsr, &u.bh.n64);
66450     assert( rc==SQLITE_OK );    /* True because of CursorMoveto() call above */
66451     if( u.bh.n64>db->aLimit[SQLITE_LIMIT_LENGTH] ){
66452       goto too_big;
66453     }
66454     u.bh.n = (u32)u.bh.n64;
66455   }else{
66456     rc = sqlite3BtreeDataSize(u.bh.pCrsr, &u.bh.n);
66457     assert( rc==SQLITE_OK );    /* DataSize() cannot fail */
66458     if( u.bh.n>(u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
66459       goto too_big;
66460     }
66461   }
66462   if( sqlite3VdbeMemGrow(pOut, u.bh.n, 0) ){
66463     goto no_mem;
66464   }
66465   pOut->n = u.bh.n;
66466   MemSetTypeFlag(pOut, MEM_Blob);
66467   if( u.bh.pC->isIndex ){
66468     rc = sqlite3BtreeKey(u.bh.pCrsr, 0, u.bh.n, pOut->z);
66469   }else{
66470     rc = sqlite3BtreeData(u.bh.pCrsr, 0, u.bh.n, pOut->z);
66471   }
66472   pOut->enc = SQLITE_UTF8;  /* In case the blob is ever cast to text */
66473   UPDATE_MAX_BLOBSIZE(pOut);
66474   break;
66475 }
66476
66477 /* Opcode: Rowid P1 P2 * * *
66478 **
66479 ** Store in register P2 an integer which is the key of the table entry that
66480 ** P1 is currently point to.
66481 **
66482 ** P1 can be either an ordinary table or a virtual table.  There used to
66483 ** be a separate OP_VRowid opcode for use with virtual tables, but this
66484 ** one opcode now works for both table types.
66485 */
66486 case OP_Rowid: {                 /* out2-prerelease */
66487 #if 0  /* local variables moved into u.bi */
66488   VdbeCursor *pC;
66489   i64 v;
66490   sqlite3_vtab *pVtab;
66491   const sqlite3_module *pModule;
66492 #endif /* local variables moved into u.bi */
66493
66494   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66495   u.bi.pC = p->apCsr[pOp->p1];
66496   assert( u.bi.pC!=0 );
66497   assert( u.bi.pC->pseudoTableReg==0 );
66498   if( u.bi.pC->nullRow ){
66499     pOut->flags = MEM_Null;
66500     break;
66501   }else if( u.bi.pC->deferredMoveto ){
66502     u.bi.v = u.bi.pC->movetoTarget;
66503 #ifndef SQLITE_OMIT_VIRTUALTABLE
66504   }else if( u.bi.pC->pVtabCursor ){
66505     u.bi.pVtab = u.bi.pC->pVtabCursor->pVtab;
66506     u.bi.pModule = u.bi.pVtab->pModule;
66507     assert( u.bi.pModule->xRowid );
66508     rc = u.bi.pModule->xRowid(u.bi.pC->pVtabCursor, &u.bi.v);
66509     importVtabErrMsg(p, u.bi.pVtab);
66510 #endif /* SQLITE_OMIT_VIRTUALTABLE */
66511   }else{
66512     assert( u.bi.pC->pCursor!=0 );
66513     rc = sqlite3VdbeCursorMoveto(u.bi.pC);
66514     if( rc ) goto abort_due_to_error;
66515     if( u.bi.pC->rowidIsValid ){
66516       u.bi.v = u.bi.pC->lastRowid;
66517     }else{
66518       rc = sqlite3BtreeKeySize(u.bi.pC->pCursor, &u.bi.v);
66519       assert( rc==SQLITE_OK );  /* Always so because of CursorMoveto() above */
66520     }
66521   }
66522   pOut->u.i = u.bi.v;
66523   break;
66524 }
66525
66526 /* Opcode: NullRow P1 * * * *
66527 **
66528 ** Move the cursor P1 to a null row.  Any OP_Column operations
66529 ** that occur while the cursor is on the null row will always
66530 ** write a NULL.
66531 */
66532 case OP_NullRow: {
66533 #if 0  /* local variables moved into u.bj */
66534   VdbeCursor *pC;
66535 #endif /* local variables moved into u.bj */
66536
66537   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66538   u.bj.pC = p->apCsr[pOp->p1];
66539   assert( u.bj.pC!=0 );
66540   u.bj.pC->nullRow = 1;
66541   u.bj.pC->rowidIsValid = 0;
66542   if( u.bj.pC->pCursor ){
66543     sqlite3BtreeClearCursor(u.bj.pC->pCursor);
66544   }
66545   break;
66546 }
66547
66548 /* Opcode: Last P1 P2 * * *
66549 **
66550 ** The next use of the Rowid or Column or Next instruction for P1 
66551 ** will refer to the last entry in the database table or index.
66552 ** If the table or index is empty and P2>0, then jump immediately to P2.
66553 ** If P2 is 0 or if the table or index is not empty, fall through
66554 ** to the following instruction.
66555 */
66556 case OP_Last: {        /* jump */
66557 #if 0  /* local variables moved into u.bk */
66558   VdbeCursor *pC;
66559   BtCursor *pCrsr;
66560   int res;
66561 #endif /* local variables moved into u.bk */
66562
66563   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66564   u.bk.pC = p->apCsr[pOp->p1];
66565   assert( u.bk.pC!=0 );
66566   u.bk.pCrsr = u.bk.pC->pCursor;
66567   if( u.bk.pCrsr==0 ){
66568     u.bk.res = 1;
66569   }else{
66570     rc = sqlite3BtreeLast(u.bk.pCrsr, &u.bk.res);
66571   }
66572   u.bk.pC->nullRow = (u8)u.bk.res;
66573   u.bk.pC->deferredMoveto = 0;
66574   u.bk.pC->rowidIsValid = 0;
66575   u.bk.pC->cacheStatus = CACHE_STALE;
66576   if( pOp->p2>0 && u.bk.res ){
66577     pc = pOp->p2 - 1;
66578   }
66579   break;
66580 }
66581
66582
66583 /* Opcode: Sort P1 P2 * * *
66584 **
66585 ** This opcode does exactly the same thing as OP_Rewind except that
66586 ** it increments an undocumented global variable used for testing.
66587 **
66588 ** Sorting is accomplished by writing records into a sorting index,
66589 ** then rewinding that index and playing it back from beginning to
66590 ** end.  We use the OP_Sort opcode instead of OP_Rewind to do the
66591 ** rewinding so that the global variable will be incremented and
66592 ** regression tests can determine whether or not the optimizer is
66593 ** correctly optimizing out sorts.
66594 */
66595 case OP_Sort: {        /* jump */
66596 #ifdef SQLITE_TEST
66597   sqlite3_sort_count++;
66598   sqlite3_search_count--;
66599 #endif
66600   p->aCounter[SQLITE_STMTSTATUS_SORT-1]++;
66601   /* Fall through into OP_Rewind */
66602 }
66603 /* Opcode: Rewind P1 P2 * * *
66604 **
66605 ** The next use of the Rowid or Column or Next instruction for P1 
66606 ** will refer to the first entry in the database table or index.
66607 ** If the table or index is empty and P2>0, then jump immediately to P2.
66608 ** If P2 is 0 or if the table or index is not empty, fall through
66609 ** to the following instruction.
66610 */
66611 case OP_Rewind: {        /* jump */
66612 #if 0  /* local variables moved into u.bl */
66613   VdbeCursor *pC;
66614   BtCursor *pCrsr;
66615   int res;
66616 #endif /* local variables moved into u.bl */
66617
66618   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66619   u.bl.pC = p->apCsr[pOp->p1];
66620   assert( u.bl.pC!=0 );
66621   u.bl.res = 1;
66622   if( (u.bl.pCrsr = u.bl.pC->pCursor)!=0 ){
66623     rc = sqlite3BtreeFirst(u.bl.pCrsr, &u.bl.res);
66624     u.bl.pC->atFirst = u.bl.res==0 ?1:0;
66625     u.bl.pC->deferredMoveto = 0;
66626     u.bl.pC->cacheStatus = CACHE_STALE;
66627     u.bl.pC->rowidIsValid = 0;
66628   }
66629   u.bl.pC->nullRow = (u8)u.bl.res;
66630   assert( pOp->p2>0 && pOp->p2<p->nOp );
66631   if( u.bl.res ){
66632     pc = pOp->p2 - 1;
66633   }
66634   break;
66635 }
66636
66637 /* Opcode: Next P1 P2 * * P5
66638 **
66639 ** Advance cursor P1 so that it points to the next key/data pair in its
66640 ** table or index.  If there are no more key/value pairs then fall through
66641 ** to the following instruction.  But if the cursor advance was successful,
66642 ** jump immediately to P2.
66643 **
66644 ** The P1 cursor must be for a real table, not a pseudo-table.
66645 **
66646 ** If P5 is positive and the jump is taken, then event counter
66647 ** number P5-1 in the prepared statement is incremented.
66648 **
66649 ** See also: Prev
66650 */
66651 /* Opcode: Prev P1 P2 * * P5
66652 **
66653 ** Back up cursor P1 so that it points to the previous key/data pair in its
66654 ** table or index.  If there is no previous key/value pairs then fall through
66655 ** to the following instruction.  But if the cursor backup was successful,
66656 ** jump immediately to P2.
66657 **
66658 ** The P1 cursor must be for a real table, not a pseudo-table.
66659 **
66660 ** If P5 is positive and the jump is taken, then event counter
66661 ** number P5-1 in the prepared statement is incremented.
66662 */
66663 case OP_Prev:          /* jump */
66664 case OP_Next: {        /* jump */
66665 #if 0  /* local variables moved into u.bm */
66666   VdbeCursor *pC;
66667   BtCursor *pCrsr;
66668   int res;
66669 #endif /* local variables moved into u.bm */
66670
66671   CHECK_FOR_INTERRUPT;
66672   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66673   assert( pOp->p5<=ArraySize(p->aCounter) );
66674   u.bm.pC = p->apCsr[pOp->p1];
66675   if( u.bm.pC==0 ){
66676     break;  /* See ticket #2273 */
66677   }
66678   u.bm.pCrsr = u.bm.pC->pCursor;
66679   if( u.bm.pCrsr==0 ){
66680     u.bm.pC->nullRow = 1;
66681     break;
66682   }
66683   u.bm.res = 1;
66684   assert( u.bm.pC->deferredMoveto==0 );
66685   rc = pOp->opcode==OP_Next ? sqlite3BtreeNext(u.bm.pCrsr, &u.bm.res) :
66686                               sqlite3BtreePrevious(u.bm.pCrsr, &u.bm.res);
66687   u.bm.pC->nullRow = (u8)u.bm.res;
66688   u.bm.pC->cacheStatus = CACHE_STALE;
66689   if( u.bm.res==0 ){
66690     pc = pOp->p2 - 1;
66691     if( pOp->p5 ) p->aCounter[pOp->p5-1]++;
66692 #ifdef SQLITE_TEST
66693     sqlite3_search_count++;
66694 #endif
66695   }
66696   u.bm.pC->rowidIsValid = 0;
66697   break;
66698 }
66699
66700 /* Opcode: IdxInsert P1 P2 P3 * P5
66701 **
66702 ** Register P2 holds a SQL index key made using the
66703 ** MakeRecord instructions.  This opcode writes that key
66704 ** into the index P1.  Data for the entry is nil.
66705 **
66706 ** P3 is a flag that provides a hint to the b-tree layer that this
66707 ** insert is likely to be an append.
66708 **
66709 ** This instruction only works for indices.  The equivalent instruction
66710 ** for tables is OP_Insert.
66711 */
66712 case OP_IdxInsert: {        /* in2 */
66713 #if 0  /* local variables moved into u.bn */
66714   VdbeCursor *pC;
66715   BtCursor *pCrsr;
66716   int nKey;
66717   const char *zKey;
66718 #endif /* local variables moved into u.bn */
66719
66720   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66721   u.bn.pC = p->apCsr[pOp->p1];
66722   assert( u.bn.pC!=0 );
66723   pIn2 = &aMem[pOp->p2];
66724   assert( pIn2->flags & MEM_Blob );
66725   u.bn.pCrsr = u.bn.pC->pCursor;
66726   if( ALWAYS(u.bn.pCrsr!=0) ){
66727     assert( u.bn.pC->isTable==0 );
66728     rc = ExpandBlob(pIn2);
66729     if( rc==SQLITE_OK ){
66730       u.bn.nKey = pIn2->n;
66731       u.bn.zKey = pIn2->z;
66732       rc = sqlite3BtreeInsert(u.bn.pCrsr, u.bn.zKey, u.bn.nKey, "", 0, 0, pOp->p3,
66733           ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bn.pC->seekResult : 0)
66734       );
66735       assert( u.bn.pC->deferredMoveto==0 );
66736       u.bn.pC->cacheStatus = CACHE_STALE;
66737     }
66738   }
66739   break;
66740 }
66741
66742 /* Opcode: IdxDelete P1 P2 P3 * *
66743 **
66744 ** The content of P3 registers starting at register P2 form
66745 ** an unpacked index key. This opcode removes that entry from the 
66746 ** index opened by cursor P1.
66747 */
66748 case OP_IdxDelete: {
66749 #if 0  /* local variables moved into u.bo */
66750   VdbeCursor *pC;
66751   BtCursor *pCrsr;
66752   int res;
66753   UnpackedRecord r;
66754 #endif /* local variables moved into u.bo */
66755
66756   assert( pOp->p3>0 );
66757   assert( pOp->p2>0 && pOp->p2+pOp->p3<=p->nMem+1 );
66758   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66759   u.bo.pC = p->apCsr[pOp->p1];
66760   assert( u.bo.pC!=0 );
66761   u.bo.pCrsr = u.bo.pC->pCursor;
66762   if( ALWAYS(u.bo.pCrsr!=0) ){
66763     u.bo.r.pKeyInfo = u.bo.pC->pKeyInfo;
66764     u.bo.r.nField = (u16)pOp->p3;
66765     u.bo.r.flags = 0;
66766     u.bo.r.aMem = &aMem[pOp->p2];
66767 #ifdef SQLITE_DEBUG
66768     { int i; for(i=0; i<u.bo.r.nField; i++) assert( memIsValid(&u.bo.r.aMem[i]) ); }
66769 #endif
66770     rc = sqlite3BtreeMovetoUnpacked(u.bo.pCrsr, &u.bo.r, 0, 0, &u.bo.res);
66771     if( rc==SQLITE_OK && u.bo.res==0 ){
66772       rc = sqlite3BtreeDelete(u.bo.pCrsr);
66773     }
66774     assert( u.bo.pC->deferredMoveto==0 );
66775     u.bo.pC->cacheStatus = CACHE_STALE;
66776   }
66777   break;
66778 }
66779
66780 /* Opcode: IdxRowid P1 P2 * * *
66781 **
66782 ** Write into register P2 an integer which is the last entry in the record at
66783 ** the end of the index key pointed to by cursor P1.  This integer should be
66784 ** the rowid of the table entry to which this index entry points.
66785 **
66786 ** See also: Rowid, MakeRecord.
66787 */
66788 case OP_IdxRowid: {              /* out2-prerelease */
66789 #if 0  /* local variables moved into u.bp */
66790   BtCursor *pCrsr;
66791   VdbeCursor *pC;
66792   i64 rowid;
66793 #endif /* local variables moved into u.bp */
66794
66795   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66796   u.bp.pC = p->apCsr[pOp->p1];
66797   assert( u.bp.pC!=0 );
66798   u.bp.pCrsr = u.bp.pC->pCursor;
66799   pOut->flags = MEM_Null;
66800   if( ALWAYS(u.bp.pCrsr!=0) ){
66801     rc = sqlite3VdbeCursorMoveto(u.bp.pC);
66802     if( NEVER(rc) ) goto abort_due_to_error;
66803     assert( u.bp.pC->deferredMoveto==0 );
66804     assert( u.bp.pC->isTable==0 );
66805     if( !u.bp.pC->nullRow ){
66806       rc = sqlite3VdbeIdxRowid(db, u.bp.pCrsr, &u.bp.rowid);
66807       if( rc!=SQLITE_OK ){
66808         goto abort_due_to_error;
66809       }
66810       pOut->u.i = u.bp.rowid;
66811       pOut->flags = MEM_Int;
66812     }
66813   }
66814   break;
66815 }
66816
66817 /* Opcode: IdxGE P1 P2 P3 P4 P5
66818 **
66819 ** The P4 register values beginning with P3 form an unpacked index 
66820 ** key that omits the ROWID.  Compare this key value against the index 
66821 ** that P1 is currently pointing to, ignoring the ROWID on the P1 index.
66822 **
66823 ** If the P1 index entry is greater than or equal to the key value
66824 ** then jump to P2.  Otherwise fall through to the next instruction.
66825 **
66826 ** If P5 is non-zero then the key value is increased by an epsilon 
66827 ** prior to the comparison.  This make the opcode work like IdxGT except
66828 ** that if the key from register P3 is a prefix of the key in the cursor,
66829 ** the result is false whereas it would be true with IdxGT.
66830 */
66831 /* Opcode: IdxLT P1 P2 P3 P4 P5
66832 **
66833 ** The P4 register values beginning with P3 form an unpacked index 
66834 ** key that omits the ROWID.  Compare this key value against the index 
66835 ** that P1 is currently pointing to, ignoring the ROWID on the P1 index.
66836 **
66837 ** If the P1 index entry is less than the key value then jump to P2.
66838 ** Otherwise fall through to the next instruction.
66839 **
66840 ** If P5 is non-zero then the key value is increased by an epsilon prior 
66841 ** to the comparison.  This makes the opcode work like IdxLE.
66842 */
66843 case OP_IdxLT:          /* jump */
66844 case OP_IdxGE: {        /* jump */
66845 #if 0  /* local variables moved into u.bq */
66846   VdbeCursor *pC;
66847   int res;
66848   UnpackedRecord r;
66849 #endif /* local variables moved into u.bq */
66850
66851   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66852   u.bq.pC = p->apCsr[pOp->p1];
66853   assert( u.bq.pC!=0 );
66854   assert( u.bq.pC->isOrdered );
66855   if( ALWAYS(u.bq.pC->pCursor!=0) ){
66856     assert( u.bq.pC->deferredMoveto==0 );
66857     assert( pOp->p5==0 || pOp->p5==1 );
66858     assert( pOp->p4type==P4_INT32 );
66859     u.bq.r.pKeyInfo = u.bq.pC->pKeyInfo;
66860     u.bq.r.nField = (u16)pOp->p4.i;
66861     if( pOp->p5 ){
66862       u.bq.r.flags = UNPACKED_INCRKEY | UNPACKED_IGNORE_ROWID;
66863     }else{
66864       u.bq.r.flags = UNPACKED_IGNORE_ROWID;
66865     }
66866     u.bq.r.aMem = &aMem[pOp->p3];
66867 #ifdef SQLITE_DEBUG
66868     { int i; for(i=0; i<u.bq.r.nField; i++) assert( memIsValid(&u.bq.r.aMem[i]) ); }
66869 #endif
66870     rc = sqlite3VdbeIdxKeyCompare(u.bq.pC, &u.bq.r, &u.bq.res);
66871     if( pOp->opcode==OP_IdxLT ){
66872       u.bq.res = -u.bq.res;
66873     }else{
66874       assert( pOp->opcode==OP_IdxGE );
66875       u.bq.res++;
66876     }
66877     if( u.bq.res>0 ){
66878       pc = pOp->p2 - 1 ;
66879     }
66880   }
66881   break;
66882 }
66883
66884 /* Opcode: Destroy P1 P2 P3 * *
66885 **
66886 ** Delete an entire database table or index whose root page in the database
66887 ** file is given by P1.
66888 **
66889 ** The table being destroyed is in the main database file if P3==0.  If
66890 ** P3==1 then the table to be clear is in the auxiliary database file
66891 ** that is used to store tables create using CREATE TEMPORARY TABLE.
66892 **
66893 ** If AUTOVACUUM is enabled then it is possible that another root page
66894 ** might be moved into the newly deleted root page in order to keep all
66895 ** root pages contiguous at the beginning of the database.  The former
66896 ** value of the root page that moved - its value before the move occurred -
66897 ** is stored in register P2.  If no page 
66898 ** movement was required (because the table being dropped was already 
66899 ** the last one in the database) then a zero is stored in register P2.
66900 ** If AUTOVACUUM is disabled then a zero is stored in register P2.
66901 **
66902 ** See also: Clear
66903 */
66904 case OP_Destroy: {     /* out2-prerelease */
66905 #if 0  /* local variables moved into u.br */
66906   int iMoved;
66907   int iCnt;
66908   Vdbe *pVdbe;
66909   int iDb;
66910 #endif /* local variables moved into u.br */
66911 #ifndef SQLITE_OMIT_VIRTUALTABLE
66912   u.br.iCnt = 0;
66913   for(u.br.pVdbe=db->pVdbe; u.br.pVdbe; u.br.pVdbe = u.br.pVdbe->pNext){
66914     if( u.br.pVdbe->magic==VDBE_MAGIC_RUN && u.br.pVdbe->inVtabMethod<2 && u.br.pVdbe->pc>=0 ){
66915       u.br.iCnt++;
66916     }
66917   }
66918 #else
66919   u.br.iCnt = db->activeVdbeCnt;
66920 #endif
66921   pOut->flags = MEM_Null;
66922   if( u.br.iCnt>1 ){
66923     rc = SQLITE_LOCKED;
66924     p->errorAction = OE_Abort;
66925   }else{
66926     u.br.iDb = pOp->p3;
66927     assert( u.br.iCnt==1 );
66928     assert( (p->btreeMask & (((yDbMask)1)<<u.br.iDb))!=0 );
66929     rc = sqlite3BtreeDropTable(db->aDb[u.br.iDb].pBt, pOp->p1, &u.br.iMoved);
66930     pOut->flags = MEM_Int;
66931     pOut->u.i = u.br.iMoved;
66932 #ifndef SQLITE_OMIT_AUTOVACUUM
66933     if( rc==SQLITE_OK && u.br.iMoved!=0 ){
66934       sqlite3RootPageMoved(db, u.br.iDb, u.br.iMoved, pOp->p1);
66935       /* All OP_Destroy operations occur on the same btree */
66936       assert( resetSchemaOnFault==0 || resetSchemaOnFault==u.br.iDb+1 );
66937       resetSchemaOnFault = u.br.iDb+1;
66938     }
66939 #endif
66940   }
66941   break;
66942 }
66943
66944 /* Opcode: Clear P1 P2 P3
66945 **
66946 ** Delete all contents of the database table or index whose root page
66947 ** in the database file is given by P1.  But, unlike Destroy, do not
66948 ** remove the table or index from the database file.
66949 **
66950 ** The table being clear is in the main database file if P2==0.  If
66951 ** P2==1 then the table to be clear is in the auxiliary database file
66952 ** that is used to store tables create using CREATE TEMPORARY TABLE.
66953 **
66954 ** If the P3 value is non-zero, then the table referred to must be an
66955 ** intkey table (an SQL table, not an index). In this case the row change 
66956 ** count is incremented by the number of rows in the table being cleared. 
66957 ** If P3 is greater than zero, then the value stored in register P3 is
66958 ** also incremented by the number of rows in the table being cleared.
66959 **
66960 ** See also: Destroy
66961 */
66962 case OP_Clear: {
66963 #if 0  /* local variables moved into u.bs */
66964   int nChange;
66965 #endif /* local variables moved into u.bs */
66966
66967   u.bs.nChange = 0;
66968   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p2))!=0 );
66969   rc = sqlite3BtreeClearTable(
66970       db->aDb[pOp->p2].pBt, pOp->p1, (pOp->p3 ? &u.bs.nChange : 0)
66971   );
66972   if( pOp->p3 ){
66973     p->nChange += u.bs.nChange;
66974     if( pOp->p3>0 ){
66975       assert( memIsValid(&aMem[pOp->p3]) );
66976       memAboutToChange(p, &aMem[pOp->p3]);
66977       aMem[pOp->p3].u.i += u.bs.nChange;
66978     }
66979   }
66980   break;
66981 }
66982
66983 /* Opcode: CreateTable P1 P2 * * *
66984 **
66985 ** Allocate a new table in the main database file if P1==0 or in the
66986 ** auxiliary database file if P1==1 or in an attached database if
66987 ** P1>1.  Write the root page number of the new table into
66988 ** register P2
66989 **
66990 ** The difference between a table and an index is this:  A table must
66991 ** have a 4-byte integer key and can have arbitrary data.  An index
66992 ** has an arbitrary key but no data.
66993 **
66994 ** See also: CreateIndex
66995 */
66996 /* Opcode: CreateIndex P1 P2 * * *
66997 **
66998 ** Allocate a new index in the main database file if P1==0 or in the
66999 ** auxiliary database file if P1==1 or in an attached database if
67000 ** P1>1.  Write the root page number of the new table into
67001 ** register P2.
67002 **
67003 ** See documentation on OP_CreateTable for additional information.
67004 */
67005 case OP_CreateIndex:            /* out2-prerelease */
67006 case OP_CreateTable: {          /* out2-prerelease */
67007 #if 0  /* local variables moved into u.bt */
67008   int pgno;
67009   int flags;
67010   Db *pDb;
67011 #endif /* local variables moved into u.bt */
67012
67013   u.bt.pgno = 0;
67014   assert( pOp->p1>=0 && pOp->p1<db->nDb );
67015   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
67016   u.bt.pDb = &db->aDb[pOp->p1];
67017   assert( u.bt.pDb->pBt!=0 );
67018   if( pOp->opcode==OP_CreateTable ){
67019     /* u.bt.flags = BTREE_INTKEY; */
67020     u.bt.flags = BTREE_INTKEY;
67021   }else{
67022     u.bt.flags = BTREE_BLOBKEY;
67023   }
67024   rc = sqlite3BtreeCreateTable(u.bt.pDb->pBt, &u.bt.pgno, u.bt.flags);
67025   pOut->u.i = u.bt.pgno;
67026   break;
67027 }
67028
67029 /* Opcode: ParseSchema P1 * * P4 *
67030 **
67031 ** Read and parse all entries from the SQLITE_MASTER table of database P1
67032 ** that match the WHERE clause P4. 
67033 **
67034 ** This opcode invokes the parser to create a new virtual machine,
67035 ** then runs the new virtual machine.  It is thus a re-entrant opcode.
67036 */
67037 case OP_ParseSchema: {
67038 #if 0  /* local variables moved into u.bu */
67039   int iDb;
67040   const char *zMaster;
67041   char *zSql;
67042   InitData initData;
67043 #endif /* local variables moved into u.bu */
67044
67045   /* Any prepared statement that invokes this opcode will hold mutexes
67046   ** on every btree.  This is a prerequisite for invoking
67047   ** sqlite3InitCallback().
67048   */
67049 #ifdef SQLITE_DEBUG
67050   for(u.bu.iDb=0; u.bu.iDb<db->nDb; u.bu.iDb++){
67051     assert( u.bu.iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[u.bu.iDb].pBt) );
67052   }
67053 #endif
67054
67055   u.bu.iDb = pOp->p1;
67056   assert( u.bu.iDb>=0 && u.bu.iDb<db->nDb );
67057   assert( DbHasProperty(db, u.bu.iDb, DB_SchemaLoaded) );
67058   /* Used to be a conditional */ {
67059     u.bu.zMaster = SCHEMA_TABLE(u.bu.iDb);
67060     u.bu.initData.db = db;
67061     u.bu.initData.iDb = pOp->p1;
67062     u.bu.initData.pzErrMsg = &p->zErrMsg;
67063     u.bu.zSql = sqlite3MPrintf(db,
67064        "SELECT name, rootpage, sql FROM '%q'.%s WHERE %s ORDER BY rowid",
67065        db->aDb[u.bu.iDb].zName, u.bu.zMaster, pOp->p4.z);
67066     if( u.bu.zSql==0 ){
67067       rc = SQLITE_NOMEM;
67068     }else{
67069       assert( db->init.busy==0 );
67070       db->init.busy = 1;
67071       u.bu.initData.rc = SQLITE_OK;
67072       assert( !db->mallocFailed );
67073       rc = sqlite3_exec(db, u.bu.zSql, sqlite3InitCallback, &u.bu.initData, 0);
67074       if( rc==SQLITE_OK ) rc = u.bu.initData.rc;
67075       sqlite3DbFree(db, u.bu.zSql);
67076       db->init.busy = 0;
67077     }
67078   }
67079   if( rc==SQLITE_NOMEM ){
67080     goto no_mem;
67081   }
67082   break;
67083 }
67084
67085 #if !defined(SQLITE_OMIT_ANALYZE)
67086 /* Opcode: LoadAnalysis P1 * * * *
67087 **
67088 ** Read the sqlite_stat1 table for database P1 and load the content
67089 ** of that table into the internal index hash table.  This will cause
67090 ** the analysis to be used when preparing all subsequent queries.
67091 */
67092 case OP_LoadAnalysis: {
67093   assert( pOp->p1>=0 && pOp->p1<db->nDb );
67094   rc = sqlite3AnalysisLoad(db, pOp->p1);
67095   break;  
67096 }
67097 #endif /* !defined(SQLITE_OMIT_ANALYZE) */
67098
67099 /* Opcode: DropTable P1 * * P4 *
67100 **
67101 ** Remove the internal (in-memory) data structures that describe
67102 ** the table named P4 in database P1.  This is called after a table
67103 ** is dropped in order to keep the internal representation of the
67104 ** schema consistent with what is on disk.
67105 */
67106 case OP_DropTable: {
67107   sqlite3UnlinkAndDeleteTable(db, pOp->p1, pOp->p4.z);
67108   break;
67109 }
67110
67111 /* Opcode: DropIndex P1 * * P4 *
67112 **
67113 ** Remove the internal (in-memory) data structures that describe
67114 ** the index named P4 in database P1.  This is called after an index
67115 ** is dropped in order to keep the internal representation of the
67116 ** schema consistent with what is on disk.
67117 */
67118 case OP_DropIndex: {
67119   sqlite3UnlinkAndDeleteIndex(db, pOp->p1, pOp->p4.z);
67120   break;
67121 }
67122
67123 /* Opcode: DropTrigger P1 * * P4 *
67124 **
67125 ** Remove the internal (in-memory) data structures that describe
67126 ** the trigger named P4 in database P1.  This is called after a trigger
67127 ** is dropped in order to keep the internal representation of the
67128 ** schema consistent with what is on disk.
67129 */
67130 case OP_DropTrigger: {
67131   sqlite3UnlinkAndDeleteTrigger(db, pOp->p1, pOp->p4.z);
67132   break;
67133 }
67134
67135
67136 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
67137 /* Opcode: IntegrityCk P1 P2 P3 * P5
67138 **
67139 ** Do an analysis of the currently open database.  Store in
67140 ** register P1 the text of an error message describing any problems.
67141 ** If no problems are found, store a NULL in register P1.
67142 **
67143 ** The register P3 contains the maximum number of allowed errors.
67144 ** At most reg(P3) errors will be reported.
67145 ** In other words, the analysis stops as soon as reg(P1) errors are 
67146 ** seen.  Reg(P1) is updated with the number of errors remaining.
67147 **
67148 ** The root page numbers of all tables in the database are integer
67149 ** stored in reg(P1), reg(P1+1), reg(P1+2), ....  There are P2 tables
67150 ** total.
67151 **
67152 ** If P5 is not zero, the check is done on the auxiliary database
67153 ** file, not the main database file.
67154 **
67155 ** This opcode is used to implement the integrity_check pragma.
67156 */
67157 case OP_IntegrityCk: {
67158 #if 0  /* local variables moved into u.bv */
67159   int nRoot;      /* Number of tables to check.  (Number of root pages.) */
67160   int *aRoot;     /* Array of rootpage numbers for tables to be checked */
67161   int j;          /* Loop counter */
67162   int nErr;       /* Number of errors reported */
67163   char *z;        /* Text of the error report */
67164   Mem *pnErr;     /* Register keeping track of errors remaining */
67165 #endif /* local variables moved into u.bv */
67166
67167   u.bv.nRoot = pOp->p2;
67168   assert( u.bv.nRoot>0 );
67169   u.bv.aRoot = sqlite3DbMallocRaw(db, sizeof(int)*(u.bv.nRoot+1) );
67170   if( u.bv.aRoot==0 ) goto no_mem;
67171   assert( pOp->p3>0 && pOp->p3<=p->nMem );
67172   u.bv.pnErr = &aMem[pOp->p3];
67173   assert( (u.bv.pnErr->flags & MEM_Int)!=0 );
67174   assert( (u.bv.pnErr->flags & (MEM_Str|MEM_Blob))==0 );
67175   pIn1 = &aMem[pOp->p1];
67176   for(u.bv.j=0; u.bv.j<u.bv.nRoot; u.bv.j++){
67177     u.bv.aRoot[u.bv.j] = (int)sqlite3VdbeIntValue(&pIn1[u.bv.j]);
67178   }
67179   u.bv.aRoot[u.bv.j] = 0;
67180   assert( pOp->p5<db->nDb );
67181   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p5))!=0 );
67182   u.bv.z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, u.bv.aRoot, u.bv.nRoot,
67183                                  (int)u.bv.pnErr->u.i, &u.bv.nErr);
67184   sqlite3DbFree(db, u.bv.aRoot);
67185   u.bv.pnErr->u.i -= u.bv.nErr;
67186   sqlite3VdbeMemSetNull(pIn1);
67187   if( u.bv.nErr==0 ){
67188     assert( u.bv.z==0 );
67189   }else if( u.bv.z==0 ){
67190     goto no_mem;
67191   }else{
67192     sqlite3VdbeMemSetStr(pIn1, u.bv.z, -1, SQLITE_UTF8, sqlite3_free);
67193   }
67194   UPDATE_MAX_BLOBSIZE(pIn1);
67195   sqlite3VdbeChangeEncoding(pIn1, encoding);
67196   break;
67197 }
67198 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
67199
67200 /* Opcode: RowSetAdd P1 P2 * * *
67201 **
67202 ** Insert the integer value held by register P2 into a boolean index
67203 ** held in register P1.
67204 **
67205 ** An assertion fails if P2 is not an integer.
67206 */
67207 case OP_RowSetAdd: {       /* in1, in2 */
67208   pIn1 = &aMem[pOp->p1];
67209   pIn2 = &aMem[pOp->p2];
67210   assert( (pIn2->flags & MEM_Int)!=0 );
67211   if( (pIn1->flags & MEM_RowSet)==0 ){
67212     sqlite3VdbeMemSetRowSet(pIn1);
67213     if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem;
67214   }
67215   sqlite3RowSetInsert(pIn1->u.pRowSet, pIn2->u.i);
67216   break;
67217 }
67218
67219 /* Opcode: RowSetRead P1 P2 P3 * *
67220 **
67221 ** Extract the smallest value from boolean index P1 and put that value into
67222 ** register P3.  Or, if boolean index P1 is initially empty, leave P3
67223 ** unchanged and jump to instruction P2.
67224 */
67225 case OP_RowSetRead: {       /* jump, in1, out3 */
67226 #if 0  /* local variables moved into u.bw */
67227   i64 val;
67228 #endif /* local variables moved into u.bw */
67229   CHECK_FOR_INTERRUPT;
67230   pIn1 = &aMem[pOp->p1];
67231   if( (pIn1->flags & MEM_RowSet)==0
67232    || sqlite3RowSetNext(pIn1->u.pRowSet, &u.bw.val)==0
67233   ){
67234     /* The boolean index is empty */
67235     sqlite3VdbeMemSetNull(pIn1);
67236     pc = pOp->p2 - 1;
67237   }else{
67238     /* A value was pulled from the index */
67239     sqlite3VdbeMemSetInt64(&aMem[pOp->p3], u.bw.val);
67240   }
67241   break;
67242 }
67243
67244 /* Opcode: RowSetTest P1 P2 P3 P4
67245 **
67246 ** Register P3 is assumed to hold a 64-bit integer value. If register P1
67247 ** contains a RowSet object and that RowSet object contains
67248 ** the value held in P3, jump to register P2. Otherwise, insert the
67249 ** integer in P3 into the RowSet and continue on to the
67250 ** next opcode.
67251 **
67252 ** The RowSet object is optimized for the case where successive sets
67253 ** of integers, where each set contains no duplicates. Each set
67254 ** of values is identified by a unique P4 value. The first set
67255 ** must have P4==0, the final set P4=-1.  P4 must be either -1 or
67256 ** non-negative.  For non-negative values of P4 only the lower 4
67257 ** bits are significant.
67258 **
67259 ** This allows optimizations: (a) when P4==0 there is no need to test
67260 ** the rowset object for P3, as it is guaranteed not to contain it,
67261 ** (b) when P4==-1 there is no need to insert the value, as it will
67262 ** never be tested for, and (c) when a value that is part of set X is
67263 ** inserted, there is no need to search to see if the same value was
67264 ** previously inserted as part of set X (only if it was previously
67265 ** inserted as part of some other set).
67266 */
67267 case OP_RowSetTest: {                     /* jump, in1, in3 */
67268 #if 0  /* local variables moved into u.bx */
67269   int iSet;
67270   int exists;
67271 #endif /* local variables moved into u.bx */
67272
67273   pIn1 = &aMem[pOp->p1];
67274   pIn3 = &aMem[pOp->p3];
67275   u.bx.iSet = pOp->p4.i;
67276   assert( pIn3->flags&MEM_Int );
67277
67278   /* If there is anything other than a rowset object in memory cell P1,
67279   ** delete it now and initialize P1 with an empty rowset
67280   */
67281   if( (pIn1->flags & MEM_RowSet)==0 ){
67282     sqlite3VdbeMemSetRowSet(pIn1);
67283     if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem;
67284   }
67285
67286   assert( pOp->p4type==P4_INT32 );
67287   assert( u.bx.iSet==-1 || u.bx.iSet>=0 );
67288   if( u.bx.iSet ){
67289     u.bx.exists = sqlite3RowSetTest(pIn1->u.pRowSet,
67290                                (u8)(u.bx.iSet>=0 ? u.bx.iSet & 0xf : 0xff),
67291                                pIn3->u.i);
67292     if( u.bx.exists ){
67293       pc = pOp->p2 - 1;
67294       break;
67295     }
67296   }
67297   if( u.bx.iSet>=0 ){
67298     sqlite3RowSetInsert(pIn1->u.pRowSet, pIn3->u.i);
67299   }
67300   break;
67301 }
67302
67303
67304 #ifndef SQLITE_OMIT_TRIGGER
67305
67306 /* Opcode: Program P1 P2 P3 P4 *
67307 **
67308 ** Execute the trigger program passed as P4 (type P4_SUBPROGRAM). 
67309 **
67310 ** P1 contains the address of the memory cell that contains the first memory 
67311 ** cell in an array of values used as arguments to the sub-program. P2 
67312 ** contains the address to jump to if the sub-program throws an IGNORE 
67313 ** exception using the RAISE() function. Register P3 contains the address 
67314 ** of a memory cell in this (the parent) VM that is used to allocate the 
67315 ** memory required by the sub-vdbe at runtime.
67316 **
67317 ** P4 is a pointer to the VM containing the trigger program.
67318 */
67319 case OP_Program: {        /* jump */
67320 #if 0  /* local variables moved into u.by */
67321   int nMem;               /* Number of memory registers for sub-program */
67322   int nByte;              /* Bytes of runtime space required for sub-program */
67323   Mem *pRt;               /* Register to allocate runtime space */
67324   Mem *pMem;              /* Used to iterate through memory cells */
67325   Mem *pEnd;              /* Last memory cell in new array */
67326   VdbeFrame *pFrame;      /* New vdbe frame to execute in */
67327   SubProgram *pProgram;   /* Sub-program to execute */
67328   void *t;                /* Token identifying trigger */
67329 #endif /* local variables moved into u.by */
67330
67331   u.by.pProgram = pOp->p4.pProgram;
67332   u.by.pRt = &aMem[pOp->p3];
67333   assert( memIsValid(u.by.pRt) );
67334   assert( u.by.pProgram->nOp>0 );
67335
67336   /* If the p5 flag is clear, then recursive invocation of triggers is
67337   ** disabled for backwards compatibility (p5 is set if this sub-program
67338   ** is really a trigger, not a foreign key action, and the flag set
67339   ** and cleared by the "PRAGMA recursive_triggers" command is clear).
67340   **
67341   ** It is recursive invocation of triggers, at the SQL level, that is
67342   ** disabled. In some cases a single trigger may generate more than one
67343   ** SubProgram (if the trigger may be executed with more than one different
67344   ** ON CONFLICT algorithm). SubProgram structures associated with a
67345   ** single trigger all have the same value for the SubProgram.token
67346   ** variable.  */
67347   if( pOp->p5 ){
67348     u.by.t = u.by.pProgram->token;
67349     for(u.by.pFrame=p->pFrame; u.by.pFrame && u.by.pFrame->token!=u.by.t; u.by.pFrame=u.by.pFrame->pParent);
67350     if( u.by.pFrame ) break;
67351   }
67352
67353   if( p->nFrame>=db->aLimit[SQLITE_LIMIT_TRIGGER_DEPTH] ){
67354     rc = SQLITE_ERROR;
67355     sqlite3SetString(&p->zErrMsg, db, "too many levels of trigger recursion");
67356     break;
67357   }
67358
67359   /* Register u.by.pRt is used to store the memory required to save the state
67360   ** of the current program, and the memory required at runtime to execute
67361   ** the trigger program. If this trigger has been fired before, then u.by.pRt
67362   ** is already allocated. Otherwise, it must be initialized.  */
67363   if( (u.by.pRt->flags&MEM_Frame)==0 ){
67364     /* SubProgram.nMem is set to the number of memory cells used by the
67365     ** program stored in SubProgram.aOp. As well as these, one memory
67366     ** cell is required for each cursor used by the program. Set local
67367     ** variable u.by.nMem (and later, VdbeFrame.nChildMem) to this value.
67368     */
67369     u.by.nMem = u.by.pProgram->nMem + u.by.pProgram->nCsr;
67370     u.by.nByte = ROUND8(sizeof(VdbeFrame))
67371               + u.by.nMem * sizeof(Mem)
67372               + u.by.pProgram->nCsr * sizeof(VdbeCursor *);
67373     u.by.pFrame = sqlite3DbMallocZero(db, u.by.nByte);
67374     if( !u.by.pFrame ){
67375       goto no_mem;
67376     }
67377     sqlite3VdbeMemRelease(u.by.pRt);
67378     u.by.pRt->flags = MEM_Frame;
67379     u.by.pRt->u.pFrame = u.by.pFrame;
67380
67381     u.by.pFrame->v = p;
67382     u.by.pFrame->nChildMem = u.by.nMem;
67383     u.by.pFrame->nChildCsr = u.by.pProgram->nCsr;
67384     u.by.pFrame->pc = pc;
67385     u.by.pFrame->aMem = p->aMem;
67386     u.by.pFrame->nMem = p->nMem;
67387     u.by.pFrame->apCsr = p->apCsr;
67388     u.by.pFrame->nCursor = p->nCursor;
67389     u.by.pFrame->aOp = p->aOp;
67390     u.by.pFrame->nOp = p->nOp;
67391     u.by.pFrame->token = u.by.pProgram->token;
67392
67393     u.by.pEnd = &VdbeFrameMem(u.by.pFrame)[u.by.pFrame->nChildMem];
67394     for(u.by.pMem=VdbeFrameMem(u.by.pFrame); u.by.pMem!=u.by.pEnd; u.by.pMem++){
67395       u.by.pMem->flags = MEM_Null;
67396       u.by.pMem->db = db;
67397     }
67398   }else{
67399     u.by.pFrame = u.by.pRt->u.pFrame;
67400     assert( u.by.pProgram->nMem+u.by.pProgram->nCsr==u.by.pFrame->nChildMem );
67401     assert( u.by.pProgram->nCsr==u.by.pFrame->nChildCsr );
67402     assert( pc==u.by.pFrame->pc );
67403   }
67404
67405   p->nFrame++;
67406   u.by.pFrame->pParent = p->pFrame;
67407   u.by.pFrame->lastRowid = db->lastRowid;
67408   u.by.pFrame->nChange = p->nChange;
67409   p->nChange = 0;
67410   p->pFrame = u.by.pFrame;
67411   p->aMem = aMem = &VdbeFrameMem(u.by.pFrame)[-1];
67412   p->nMem = u.by.pFrame->nChildMem;
67413   p->nCursor = (u16)u.by.pFrame->nChildCsr;
67414   p->apCsr = (VdbeCursor **)&aMem[p->nMem+1];
67415   p->aOp = aOp = u.by.pProgram->aOp;
67416   p->nOp = u.by.pProgram->nOp;
67417   pc = -1;
67418
67419   break;
67420 }
67421
67422 /* Opcode: Param P1 P2 * * *
67423 **
67424 ** This opcode is only ever present in sub-programs called via the 
67425 ** OP_Program instruction. Copy a value currently stored in a memory 
67426 ** cell of the calling (parent) frame to cell P2 in the current frames 
67427 ** address space. This is used by trigger programs to access the new.* 
67428 ** and old.* values.
67429 **
67430 ** The address of the cell in the parent frame is determined by adding
67431 ** the value of the P1 argument to the value of the P1 argument to the
67432 ** calling OP_Program instruction.
67433 */
67434 case OP_Param: {           /* out2-prerelease */
67435 #if 0  /* local variables moved into u.bz */
67436   VdbeFrame *pFrame;
67437   Mem *pIn;
67438 #endif /* local variables moved into u.bz */
67439   u.bz.pFrame = p->pFrame;
67440   u.bz.pIn = &u.bz.pFrame->aMem[pOp->p1 + u.bz.pFrame->aOp[u.bz.pFrame->pc].p1];
67441   sqlite3VdbeMemShallowCopy(pOut, u.bz.pIn, MEM_Ephem);
67442   break;
67443 }
67444
67445 #endif /* #ifndef SQLITE_OMIT_TRIGGER */
67446
67447 #ifndef SQLITE_OMIT_FOREIGN_KEY
67448 /* Opcode: FkCounter P1 P2 * * *
67449 **
67450 ** Increment a "constraint counter" by P2 (P2 may be negative or positive).
67451 ** If P1 is non-zero, the database constraint counter is incremented 
67452 ** (deferred foreign key constraints). Otherwise, if P1 is zero, the 
67453 ** statement counter is incremented (immediate foreign key constraints).
67454 */
67455 case OP_FkCounter: {
67456   if( pOp->p1 ){
67457     db->nDeferredCons += pOp->p2;
67458   }else{
67459     p->nFkConstraint += pOp->p2;
67460   }
67461   break;
67462 }
67463
67464 /* Opcode: FkIfZero P1 P2 * * *
67465 **
67466 ** This opcode tests if a foreign key constraint-counter is currently zero.
67467 ** If so, jump to instruction P2. Otherwise, fall through to the next 
67468 ** instruction.
67469 **
67470 ** If P1 is non-zero, then the jump is taken if the database constraint-counter
67471 ** is zero (the one that counts deferred constraint violations). If P1 is
67472 ** zero, the jump is taken if the statement constraint-counter is zero
67473 ** (immediate foreign key constraint violations).
67474 */
67475 case OP_FkIfZero: {         /* jump */
67476   if( pOp->p1 ){
67477     if( db->nDeferredCons==0 ) pc = pOp->p2-1;
67478   }else{
67479     if( p->nFkConstraint==0 ) pc = pOp->p2-1;
67480   }
67481   break;
67482 }
67483 #endif /* #ifndef SQLITE_OMIT_FOREIGN_KEY */
67484
67485 #ifndef SQLITE_OMIT_AUTOINCREMENT
67486 /* Opcode: MemMax P1 P2 * * *
67487 **
67488 ** P1 is a register in the root frame of this VM (the root frame is
67489 ** different from the current frame if this instruction is being executed
67490 ** within a sub-program). Set the value of register P1 to the maximum of 
67491 ** its current value and the value in register P2.
67492 **
67493 ** This instruction throws an error if the memory cell is not initially
67494 ** an integer.
67495 */
67496 case OP_MemMax: {        /* in2 */
67497 #if 0  /* local variables moved into u.ca */
67498   Mem *pIn1;
67499   VdbeFrame *pFrame;
67500 #endif /* local variables moved into u.ca */
67501   if( p->pFrame ){
67502     for(u.ca.pFrame=p->pFrame; u.ca.pFrame->pParent; u.ca.pFrame=u.ca.pFrame->pParent);
67503     u.ca.pIn1 = &u.ca.pFrame->aMem[pOp->p1];
67504   }else{
67505     u.ca.pIn1 = &aMem[pOp->p1];
67506   }
67507   assert( memIsValid(u.ca.pIn1) );
67508   sqlite3VdbeMemIntegerify(u.ca.pIn1);
67509   pIn2 = &aMem[pOp->p2];
67510   sqlite3VdbeMemIntegerify(pIn2);
67511   if( u.ca.pIn1->u.i<pIn2->u.i){
67512     u.ca.pIn1->u.i = pIn2->u.i;
67513   }
67514   break;
67515 }
67516 #endif /* SQLITE_OMIT_AUTOINCREMENT */
67517
67518 /* Opcode: IfPos P1 P2 * * *
67519 **
67520 ** If the value of register P1 is 1 or greater, jump to P2.
67521 **
67522 ** It is illegal to use this instruction on a register that does
67523 ** not contain an integer.  An assertion fault will result if you try.
67524 */
67525 case OP_IfPos: {        /* jump, in1 */
67526   pIn1 = &aMem[pOp->p1];
67527   assert( pIn1->flags&MEM_Int );
67528   if( pIn1->u.i>0 ){
67529      pc = pOp->p2 - 1;
67530   }
67531   break;
67532 }
67533
67534 /* Opcode: IfNeg P1 P2 * * *
67535 **
67536 ** If the value of register P1 is less than zero, jump to P2. 
67537 **
67538 ** It is illegal to use this instruction on a register that does
67539 ** not contain an integer.  An assertion fault will result if you try.
67540 */
67541 case OP_IfNeg: {        /* jump, in1 */
67542   pIn1 = &aMem[pOp->p1];
67543   assert( pIn1->flags&MEM_Int );
67544   if( pIn1->u.i<0 ){
67545      pc = pOp->p2 - 1;
67546   }
67547   break;
67548 }
67549
67550 /* Opcode: IfZero P1 P2 P3 * *
67551 **
67552 ** The register P1 must contain an integer.  Add literal P3 to the
67553 ** value in register P1.  If the result is exactly 0, jump to P2. 
67554 **
67555 ** It is illegal to use this instruction on a register that does
67556 ** not contain an integer.  An assertion fault will result if you try.
67557 */
67558 case OP_IfZero: {        /* jump, in1 */
67559   pIn1 = &aMem[pOp->p1];
67560   assert( pIn1->flags&MEM_Int );
67561   pIn1->u.i += pOp->p3;
67562   if( pIn1->u.i==0 ){
67563      pc = pOp->p2 - 1;
67564   }
67565   break;
67566 }
67567
67568 /* Opcode: AggStep * P2 P3 P4 P5
67569 **
67570 ** Execute the step function for an aggregate.  The
67571 ** function has P5 arguments.   P4 is a pointer to the FuncDef
67572 ** structure that specifies the function.  Use register
67573 ** P3 as the accumulator.
67574 **
67575 ** The P5 arguments are taken from register P2 and its
67576 ** successors.
67577 */
67578 case OP_AggStep: {
67579 #if 0  /* local variables moved into u.cb */
67580   int n;
67581   int i;
67582   Mem *pMem;
67583   Mem *pRec;
67584   sqlite3_context ctx;
67585   sqlite3_value **apVal;
67586 #endif /* local variables moved into u.cb */
67587
67588   u.cb.n = pOp->p5;
67589   assert( u.cb.n>=0 );
67590   u.cb.pRec = &aMem[pOp->p2];
67591   u.cb.apVal = p->apArg;
67592   assert( u.cb.apVal || u.cb.n==0 );
67593   for(u.cb.i=0; u.cb.i<u.cb.n; u.cb.i++, u.cb.pRec++){
67594     assert( memIsValid(u.cb.pRec) );
67595     u.cb.apVal[u.cb.i] = u.cb.pRec;
67596     memAboutToChange(p, u.cb.pRec);
67597     sqlite3VdbeMemStoreType(u.cb.pRec);
67598   }
67599   u.cb.ctx.pFunc = pOp->p4.pFunc;
67600   assert( pOp->p3>0 && pOp->p3<=p->nMem );
67601   u.cb.ctx.pMem = u.cb.pMem = &aMem[pOp->p3];
67602   u.cb.pMem->n++;
67603   u.cb.ctx.s.flags = MEM_Null;
67604   u.cb.ctx.s.z = 0;
67605   u.cb.ctx.s.zMalloc = 0;
67606   u.cb.ctx.s.xDel = 0;
67607   u.cb.ctx.s.db = db;
67608   u.cb.ctx.isError = 0;
67609   u.cb.ctx.pColl = 0;
67610   if( u.cb.ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
67611     assert( pOp>p->aOp );
67612     assert( pOp[-1].p4type==P4_COLLSEQ );
67613     assert( pOp[-1].opcode==OP_CollSeq );
67614     u.cb.ctx.pColl = pOp[-1].p4.pColl;
67615   }
67616   (u.cb.ctx.pFunc->xStep)(&u.cb.ctx, u.cb.n, u.cb.apVal); /* IMP: R-24505-23230 */
67617   if( u.cb.ctx.isError ){
67618     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.cb.ctx.s));
67619     rc = u.cb.ctx.isError;
67620   }
67621
67622   sqlite3VdbeMemRelease(&u.cb.ctx.s);
67623
67624   break;
67625 }
67626
67627 /* Opcode: AggFinal P1 P2 * P4 *
67628 **
67629 ** Execute the finalizer function for an aggregate.  P1 is
67630 ** the memory location that is the accumulator for the aggregate.
67631 **
67632 ** P2 is the number of arguments that the step function takes and
67633 ** P4 is a pointer to the FuncDef for this function.  The P2
67634 ** argument is not used by this opcode.  It is only there to disambiguate
67635 ** functions that can take varying numbers of arguments.  The
67636 ** P4 argument is only needed for the degenerate case where
67637 ** the step function was not previously called.
67638 */
67639 case OP_AggFinal: {
67640 #if 0  /* local variables moved into u.cc */
67641   Mem *pMem;
67642 #endif /* local variables moved into u.cc */
67643   assert( pOp->p1>0 && pOp->p1<=p->nMem );
67644   u.cc.pMem = &aMem[pOp->p1];
67645   assert( (u.cc.pMem->flags & ~(MEM_Null|MEM_Agg))==0 );
67646   rc = sqlite3VdbeMemFinalize(u.cc.pMem, pOp->p4.pFunc);
67647   if( rc ){
67648     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(u.cc.pMem));
67649   }
67650   sqlite3VdbeChangeEncoding(u.cc.pMem, encoding);
67651   UPDATE_MAX_BLOBSIZE(u.cc.pMem);
67652   if( sqlite3VdbeMemTooBig(u.cc.pMem) ){
67653     goto too_big;
67654   }
67655   break;
67656 }
67657
67658 #ifndef SQLITE_OMIT_WAL
67659 /* Opcode: Checkpoint P1 P2 P3 * *
67660 **
67661 ** Checkpoint database P1. This is a no-op if P1 is not currently in
67662 ** WAL mode. Parameter P2 is one of SQLITE_CHECKPOINT_PASSIVE, FULL
67663 ** or RESTART.  Write 1 or 0 into mem[P3] if the checkpoint returns
67664 ** SQLITE_BUSY or not, respectively.  Write the number of pages in the
67665 ** WAL after the checkpoint into mem[P3+1] and the number of pages
67666 ** in the WAL that have been checkpointed after the checkpoint
67667 ** completes into mem[P3+2].  However on an error, mem[P3+1] and
67668 ** mem[P3+2] are initialized to -1.
67669 */
67670 case OP_Checkpoint: {
67671 #if 0  /* local variables moved into u.cd */
67672   int i;                          /* Loop counter */
67673   int aRes[3];                    /* Results */
67674   Mem *pMem;                      /* Write results here */
67675 #endif /* local variables moved into u.cd */
67676
67677   u.cd.aRes[0] = 0;
67678   u.cd.aRes[1] = u.cd.aRes[2] = -1;
67679   assert( pOp->p2==SQLITE_CHECKPOINT_PASSIVE
67680        || pOp->p2==SQLITE_CHECKPOINT_FULL
67681        || pOp->p2==SQLITE_CHECKPOINT_RESTART
67682   );
67683   rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &u.cd.aRes[1], &u.cd.aRes[2]);
67684   if( rc==SQLITE_BUSY ){
67685     rc = SQLITE_OK;
67686     u.cd.aRes[0] = 1;
67687   }
67688   for(u.cd.i=0, u.cd.pMem = &aMem[pOp->p3]; u.cd.i<3; u.cd.i++, u.cd.pMem++){
67689     sqlite3VdbeMemSetInt64(u.cd.pMem, (i64)u.cd.aRes[u.cd.i]);
67690   }
67691   break;
67692 };  
67693 #endif
67694
67695 #ifndef SQLITE_OMIT_PRAGMA
67696 /* Opcode: JournalMode P1 P2 P3 * P5
67697 **
67698 ** Change the journal mode of database P1 to P3. P3 must be one of the
67699 ** PAGER_JOURNALMODE_XXX values. If changing between the various rollback
67700 ** modes (delete, truncate, persist, off and memory), this is a simple
67701 ** operation. No IO is required.
67702 **
67703 ** If changing into or out of WAL mode the procedure is more complicated.
67704 **
67705 ** Write a string containing the final journal-mode to register P2.
67706 */
67707 case OP_JournalMode: {    /* out2-prerelease */
67708 #if 0  /* local variables moved into u.ce */
67709   Btree *pBt;                     /* Btree to change journal mode of */
67710   Pager *pPager;                  /* Pager associated with pBt */
67711   int eNew;                       /* New journal mode */
67712   int eOld;                       /* The old journal mode */
67713   const char *zFilename;          /* Name of database file for pPager */
67714 #endif /* local variables moved into u.ce */
67715
67716   u.ce.eNew = pOp->p3;
67717   assert( u.ce.eNew==PAGER_JOURNALMODE_DELETE
67718        || u.ce.eNew==PAGER_JOURNALMODE_TRUNCATE
67719        || u.ce.eNew==PAGER_JOURNALMODE_PERSIST
67720        || u.ce.eNew==PAGER_JOURNALMODE_OFF
67721        || u.ce.eNew==PAGER_JOURNALMODE_MEMORY
67722        || u.ce.eNew==PAGER_JOURNALMODE_WAL
67723        || u.ce.eNew==PAGER_JOURNALMODE_QUERY
67724   );
67725   assert( pOp->p1>=0 && pOp->p1<db->nDb );
67726
67727   u.ce.pBt = db->aDb[pOp->p1].pBt;
67728   u.ce.pPager = sqlite3BtreePager(u.ce.pBt);
67729   u.ce.eOld = sqlite3PagerGetJournalMode(u.ce.pPager);
67730   if( u.ce.eNew==PAGER_JOURNALMODE_QUERY ) u.ce.eNew = u.ce.eOld;
67731   if( !sqlite3PagerOkToChangeJournalMode(u.ce.pPager) ) u.ce.eNew = u.ce.eOld;
67732
67733 #ifndef SQLITE_OMIT_WAL
67734   u.ce.zFilename = sqlite3PagerFilename(u.ce.pPager);
67735
67736   /* Do not allow a transition to journal_mode=WAL for a database
67737   ** in temporary storage or if the VFS does not support shared memory
67738   */
67739   if( u.ce.eNew==PAGER_JOURNALMODE_WAL
67740    && (u.ce.zFilename[0]==0                         /* Temp file */
67741        || !sqlite3PagerWalSupported(u.ce.pPager))   /* No shared-memory support */
67742   ){
67743     u.ce.eNew = u.ce.eOld;
67744   }
67745
67746   if( (u.ce.eNew!=u.ce.eOld)
67747    && (u.ce.eOld==PAGER_JOURNALMODE_WAL || u.ce.eNew==PAGER_JOURNALMODE_WAL)
67748   ){
67749     if( !db->autoCommit || db->activeVdbeCnt>1 ){
67750       rc = SQLITE_ERROR;
67751       sqlite3SetString(&p->zErrMsg, db,
67752           "cannot change %s wal mode from within a transaction",
67753           (u.ce.eNew==PAGER_JOURNALMODE_WAL ? "into" : "out of")
67754       );
67755       break;
67756     }else{
67757
67758       if( u.ce.eOld==PAGER_JOURNALMODE_WAL ){
67759         /* If leaving WAL mode, close the log file. If successful, the call
67760         ** to PagerCloseWal() checkpoints and deletes the write-ahead-log
67761         ** file. An EXCLUSIVE lock may still be held on the database file
67762         ** after a successful return.
67763         */
67764         rc = sqlite3PagerCloseWal(u.ce.pPager);
67765         if( rc==SQLITE_OK ){
67766           sqlite3PagerSetJournalMode(u.ce.pPager, u.ce.eNew);
67767         }
67768       }else if( u.ce.eOld==PAGER_JOURNALMODE_MEMORY ){
67769         /* Cannot transition directly from MEMORY to WAL.  Use mode OFF
67770         ** as an intermediate */
67771         sqlite3PagerSetJournalMode(u.ce.pPager, PAGER_JOURNALMODE_OFF);
67772       }
67773
67774       /* Open a transaction on the database file. Regardless of the journal
67775       ** mode, this transaction always uses a rollback journal.
67776       */
67777       assert( sqlite3BtreeIsInTrans(u.ce.pBt)==0 );
67778       if( rc==SQLITE_OK ){
67779         rc = sqlite3BtreeSetVersion(u.ce.pBt, (u.ce.eNew==PAGER_JOURNALMODE_WAL ? 2 : 1));
67780       }
67781     }
67782   }
67783 #endif /* ifndef SQLITE_OMIT_WAL */
67784
67785   if( rc ){
67786     u.ce.eNew = u.ce.eOld;
67787   }
67788   u.ce.eNew = sqlite3PagerSetJournalMode(u.ce.pPager, u.ce.eNew);
67789
67790   pOut = &aMem[pOp->p2];
67791   pOut->flags = MEM_Str|MEM_Static|MEM_Term;
67792   pOut->z = (char *)sqlite3JournalModename(u.ce.eNew);
67793   pOut->n = sqlite3Strlen30(pOut->z);
67794   pOut->enc = SQLITE_UTF8;
67795   sqlite3VdbeChangeEncoding(pOut, encoding);
67796   break;
67797 };
67798 #endif /* SQLITE_OMIT_PRAGMA */
67799
67800 #if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH)
67801 /* Opcode: Vacuum * * * * *
67802 **
67803 ** Vacuum the entire database.  This opcode will cause other virtual
67804 ** machines to be created and run.  It may not be called from within
67805 ** a transaction.
67806 */
67807 case OP_Vacuum: {
67808   rc = sqlite3RunVacuum(&p->zErrMsg, db);
67809   break;
67810 }
67811 #endif
67812
67813 #if !defined(SQLITE_OMIT_AUTOVACUUM)
67814 /* Opcode: IncrVacuum P1 P2 * * *
67815 **
67816 ** Perform a single step of the incremental vacuum procedure on
67817 ** the P1 database. If the vacuum has finished, jump to instruction
67818 ** P2. Otherwise, fall through to the next instruction.
67819 */
67820 case OP_IncrVacuum: {        /* jump */
67821 #if 0  /* local variables moved into u.cf */
67822   Btree *pBt;
67823 #endif /* local variables moved into u.cf */
67824
67825   assert( pOp->p1>=0 && pOp->p1<db->nDb );
67826   assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
67827   u.cf.pBt = db->aDb[pOp->p1].pBt;
67828   rc = sqlite3BtreeIncrVacuum(u.cf.pBt);
67829   if( rc==SQLITE_DONE ){
67830     pc = pOp->p2 - 1;
67831     rc = SQLITE_OK;
67832   }
67833   break;
67834 }
67835 #endif
67836
67837 /* Opcode: Expire P1 * * * *
67838 **
67839 ** Cause precompiled statements to become expired. An expired statement
67840 ** fails with an error code of SQLITE_SCHEMA if it is ever executed 
67841 ** (via sqlite3_step()).
67842 ** 
67843 ** If P1 is 0, then all SQL statements become expired. If P1 is non-zero,
67844 ** then only the currently executing statement is affected. 
67845 */
67846 case OP_Expire: {
67847   if( !pOp->p1 ){
67848     sqlite3ExpirePreparedStatements(db);
67849   }else{
67850     p->expired = 1;
67851   }
67852   break;
67853 }
67854
67855 #ifndef SQLITE_OMIT_SHARED_CACHE
67856 /* Opcode: TableLock P1 P2 P3 P4 *
67857 **
67858 ** Obtain a lock on a particular table. This instruction is only used when
67859 ** the shared-cache feature is enabled. 
67860 **
67861 ** P1 is the index of the database in sqlite3.aDb[] of the database
67862 ** on which the lock is acquired.  A readlock is obtained if P3==0 or
67863 ** a write lock if P3==1.
67864 **
67865 ** P2 contains the root-page of the table to lock.
67866 **
67867 ** P4 contains a pointer to the name of the table being locked. This is only
67868 ** used to generate an error message if the lock cannot be obtained.
67869 */
67870 case OP_TableLock: {
67871   u8 isWriteLock = (u8)pOp->p3;
67872   if( isWriteLock || 0==(db->flags&SQLITE_ReadUncommitted) ){
67873     int p1 = pOp->p1; 
67874     assert( p1>=0 && p1<db->nDb );
67875     assert( (p->btreeMask & (((yDbMask)1)<<p1))!=0 );
67876     assert( isWriteLock==0 || isWriteLock==1 );
67877     rc = sqlite3BtreeLockTable(db->aDb[p1].pBt, pOp->p2, isWriteLock);
67878     if( (rc&0xFF)==SQLITE_LOCKED ){
67879       const char *z = pOp->p4.z;
67880       sqlite3SetString(&p->zErrMsg, db, "database table is locked: %s", z);
67881     }
67882   }
67883   break;
67884 }
67885 #endif /* SQLITE_OMIT_SHARED_CACHE */
67886
67887 #ifndef SQLITE_OMIT_VIRTUALTABLE
67888 /* Opcode: VBegin * * * P4 *
67889 **
67890 ** P4 may be a pointer to an sqlite3_vtab structure. If so, call the 
67891 ** xBegin method for that table.
67892 **
67893 ** Also, whether or not P4 is set, check that this is not being called from
67894 ** within a callback to a virtual table xSync() method. If it is, the error
67895 ** code will be set to SQLITE_LOCKED.
67896 */
67897 case OP_VBegin: {
67898 #if 0  /* local variables moved into u.cg */
67899   VTable *pVTab;
67900 #endif /* local variables moved into u.cg */
67901   u.cg.pVTab = pOp->p4.pVtab;
67902   rc = sqlite3VtabBegin(db, u.cg.pVTab);
67903   if( u.cg.pVTab ) importVtabErrMsg(p, u.cg.pVTab->pVtab);
67904   break;
67905 }
67906 #endif /* SQLITE_OMIT_VIRTUALTABLE */
67907
67908 #ifndef SQLITE_OMIT_VIRTUALTABLE
67909 /* Opcode: VCreate P1 * * P4 *
67910 **
67911 ** P4 is the name of a virtual table in database P1. Call the xCreate method
67912 ** for that table.
67913 */
67914 case OP_VCreate: {
67915   rc = sqlite3VtabCallCreate(db, pOp->p1, pOp->p4.z, &p->zErrMsg);
67916   break;
67917 }
67918 #endif /* SQLITE_OMIT_VIRTUALTABLE */
67919
67920 #ifndef SQLITE_OMIT_VIRTUALTABLE
67921 /* Opcode: VDestroy P1 * * P4 *
67922 **
67923 ** P4 is the name of a virtual table in database P1.  Call the xDestroy method
67924 ** of that table.
67925 */
67926 case OP_VDestroy: {
67927   p->inVtabMethod = 2;
67928   rc = sqlite3VtabCallDestroy(db, pOp->p1, pOp->p4.z);
67929   p->inVtabMethod = 0;
67930   break;
67931 }
67932 #endif /* SQLITE_OMIT_VIRTUALTABLE */
67933
67934 #ifndef SQLITE_OMIT_VIRTUALTABLE
67935 /* Opcode: VOpen P1 * * P4 *
67936 **
67937 ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
67938 ** P1 is a cursor number.  This opcode opens a cursor to the virtual
67939 ** table and stores that cursor in P1.
67940 */
67941 case OP_VOpen: {
67942 #if 0  /* local variables moved into u.ch */
67943   VdbeCursor *pCur;
67944   sqlite3_vtab_cursor *pVtabCursor;
67945   sqlite3_vtab *pVtab;
67946   sqlite3_module *pModule;
67947 #endif /* local variables moved into u.ch */
67948
67949   u.ch.pCur = 0;
67950   u.ch.pVtabCursor = 0;
67951   u.ch.pVtab = pOp->p4.pVtab->pVtab;
67952   u.ch.pModule = (sqlite3_module *)u.ch.pVtab->pModule;
67953   assert(u.ch.pVtab && u.ch.pModule);
67954   rc = u.ch.pModule->xOpen(u.ch.pVtab, &u.ch.pVtabCursor);
67955   importVtabErrMsg(p, u.ch.pVtab);
67956   if( SQLITE_OK==rc ){
67957     /* Initialize sqlite3_vtab_cursor base class */
67958     u.ch.pVtabCursor->pVtab = u.ch.pVtab;
67959
67960     /* Initialise vdbe cursor object */
67961     u.ch.pCur = allocateCursor(p, pOp->p1, 0, -1, 0);
67962     if( u.ch.pCur ){
67963       u.ch.pCur->pVtabCursor = u.ch.pVtabCursor;
67964       u.ch.pCur->pModule = u.ch.pVtabCursor->pVtab->pModule;
67965     }else{
67966       db->mallocFailed = 1;
67967       u.ch.pModule->xClose(u.ch.pVtabCursor);
67968     }
67969   }
67970   break;
67971 }
67972 #endif /* SQLITE_OMIT_VIRTUALTABLE */
67973
67974 #ifndef SQLITE_OMIT_VIRTUALTABLE
67975 /* Opcode: VFilter P1 P2 P3 P4 *
67976 **
67977 ** P1 is a cursor opened using VOpen.  P2 is an address to jump to if
67978 ** the filtered result set is empty.
67979 **
67980 ** P4 is either NULL or a string that was generated by the xBestIndex
67981 ** method of the module.  The interpretation of the P4 string is left
67982 ** to the module implementation.
67983 **
67984 ** This opcode invokes the xFilter method on the virtual table specified
67985 ** by P1.  The integer query plan parameter to xFilter is stored in register
67986 ** P3. Register P3+1 stores the argc parameter to be passed to the
67987 ** xFilter method. Registers P3+2..P3+1+argc are the argc
67988 ** additional parameters which are passed to
67989 ** xFilter as argv. Register P3+2 becomes argv[0] when passed to xFilter.
67990 **
67991 ** A jump is made to P2 if the result set after filtering would be empty.
67992 */
67993 case OP_VFilter: {   /* jump */
67994 #if 0  /* local variables moved into u.ci */
67995   int nArg;
67996   int iQuery;
67997   const sqlite3_module *pModule;
67998   Mem *pQuery;
67999   Mem *pArgc;
68000   sqlite3_vtab_cursor *pVtabCursor;
68001   sqlite3_vtab *pVtab;
68002   VdbeCursor *pCur;
68003   int res;
68004   int i;
68005   Mem **apArg;
68006 #endif /* local variables moved into u.ci */
68007
68008   u.ci.pQuery = &aMem[pOp->p3];
68009   u.ci.pArgc = &u.ci.pQuery[1];
68010   u.ci.pCur = p->apCsr[pOp->p1];
68011   assert( memIsValid(u.ci.pQuery) );
68012   REGISTER_TRACE(pOp->p3, u.ci.pQuery);
68013   assert( u.ci.pCur->pVtabCursor );
68014   u.ci.pVtabCursor = u.ci.pCur->pVtabCursor;
68015   u.ci.pVtab = u.ci.pVtabCursor->pVtab;
68016   u.ci.pModule = u.ci.pVtab->pModule;
68017
68018   /* Grab the index number and argc parameters */
68019   assert( (u.ci.pQuery->flags&MEM_Int)!=0 && u.ci.pArgc->flags==MEM_Int );
68020   u.ci.nArg = (int)u.ci.pArgc->u.i;
68021   u.ci.iQuery = (int)u.ci.pQuery->u.i;
68022
68023   /* Invoke the xFilter method */
68024   {
68025     u.ci.res = 0;
68026     u.ci.apArg = p->apArg;
68027     for(u.ci.i = 0; u.ci.i<u.ci.nArg; u.ci.i++){
68028       u.ci.apArg[u.ci.i] = &u.ci.pArgc[u.ci.i+1];
68029       sqlite3VdbeMemStoreType(u.ci.apArg[u.ci.i]);
68030     }
68031
68032     p->inVtabMethod = 1;
68033     rc = u.ci.pModule->xFilter(u.ci.pVtabCursor, u.ci.iQuery, pOp->p4.z, u.ci.nArg, u.ci.apArg);
68034     p->inVtabMethod = 0;
68035     importVtabErrMsg(p, u.ci.pVtab);
68036     if( rc==SQLITE_OK ){
68037       u.ci.res = u.ci.pModule->xEof(u.ci.pVtabCursor);
68038     }
68039
68040     if( u.ci.res ){
68041       pc = pOp->p2 - 1;
68042     }
68043   }
68044   u.ci.pCur->nullRow = 0;
68045
68046   break;
68047 }
68048 #endif /* SQLITE_OMIT_VIRTUALTABLE */
68049
68050 #ifndef SQLITE_OMIT_VIRTUALTABLE
68051 /* Opcode: VColumn P1 P2 P3 * *
68052 **
68053 ** Store the value of the P2-th column of
68054 ** the row of the virtual-table that the 
68055 ** P1 cursor is pointing to into register P3.
68056 */
68057 case OP_VColumn: {
68058 #if 0  /* local variables moved into u.cj */
68059   sqlite3_vtab *pVtab;
68060   const sqlite3_module *pModule;
68061   Mem *pDest;
68062   sqlite3_context sContext;
68063 #endif /* local variables moved into u.cj */
68064
68065   VdbeCursor *pCur = p->apCsr[pOp->p1];
68066   assert( pCur->pVtabCursor );
68067   assert( pOp->p3>0 && pOp->p3<=p->nMem );
68068   u.cj.pDest = &aMem[pOp->p3];
68069   memAboutToChange(p, u.cj.pDest);
68070   if( pCur->nullRow ){
68071     sqlite3VdbeMemSetNull(u.cj.pDest);
68072     break;
68073   }
68074   u.cj.pVtab = pCur->pVtabCursor->pVtab;
68075   u.cj.pModule = u.cj.pVtab->pModule;
68076   assert( u.cj.pModule->xColumn );
68077   memset(&u.cj.sContext, 0, sizeof(u.cj.sContext));
68078
68079   /* The output cell may already have a buffer allocated. Move
68080   ** the current contents to u.cj.sContext.s so in case the user-function
68081   ** can use the already allocated buffer instead of allocating a
68082   ** new one.
68083   */
68084   sqlite3VdbeMemMove(&u.cj.sContext.s, u.cj.pDest);
68085   MemSetTypeFlag(&u.cj.sContext.s, MEM_Null);
68086
68087   rc = u.cj.pModule->xColumn(pCur->pVtabCursor, &u.cj.sContext, pOp->p2);
68088   importVtabErrMsg(p, u.cj.pVtab);
68089   if( u.cj.sContext.isError ){
68090     rc = u.cj.sContext.isError;
68091   }
68092
68093   /* Copy the result of the function to the P3 register. We
68094   ** do this regardless of whether or not an error occurred to ensure any
68095   ** dynamic allocation in u.cj.sContext.s (a Mem struct) is  released.
68096   */
68097   sqlite3VdbeChangeEncoding(&u.cj.sContext.s, encoding);
68098   sqlite3VdbeMemMove(u.cj.pDest, &u.cj.sContext.s);
68099   REGISTER_TRACE(pOp->p3, u.cj.pDest);
68100   UPDATE_MAX_BLOBSIZE(u.cj.pDest);
68101
68102   if( sqlite3VdbeMemTooBig(u.cj.pDest) ){
68103     goto too_big;
68104   }
68105   break;
68106 }
68107 #endif /* SQLITE_OMIT_VIRTUALTABLE */
68108
68109 #ifndef SQLITE_OMIT_VIRTUALTABLE
68110 /* Opcode: VNext P1 P2 * * *
68111 **
68112 ** Advance virtual table P1 to the next row in its result set and
68113 ** jump to instruction P2.  Or, if the virtual table has reached
68114 ** the end of its result set, then fall through to the next instruction.
68115 */
68116 case OP_VNext: {   /* jump */
68117 #if 0  /* local variables moved into u.ck */
68118   sqlite3_vtab *pVtab;
68119   const sqlite3_module *pModule;
68120   int res;
68121   VdbeCursor *pCur;
68122 #endif /* local variables moved into u.ck */
68123
68124   u.ck.res = 0;
68125   u.ck.pCur = p->apCsr[pOp->p1];
68126   assert( u.ck.pCur->pVtabCursor );
68127   if( u.ck.pCur->nullRow ){
68128     break;
68129   }
68130   u.ck.pVtab = u.ck.pCur->pVtabCursor->pVtab;
68131   u.ck.pModule = u.ck.pVtab->pModule;
68132   assert( u.ck.pModule->xNext );
68133
68134   /* Invoke the xNext() method of the module. There is no way for the
68135   ** underlying implementation to return an error if one occurs during
68136   ** xNext(). Instead, if an error occurs, true is returned (indicating that
68137   ** data is available) and the error code returned when xColumn or
68138   ** some other method is next invoked on the save virtual table cursor.
68139   */
68140   p->inVtabMethod = 1;
68141   rc = u.ck.pModule->xNext(u.ck.pCur->pVtabCursor);
68142   p->inVtabMethod = 0;
68143   importVtabErrMsg(p, u.ck.pVtab);
68144   if( rc==SQLITE_OK ){
68145     u.ck.res = u.ck.pModule->xEof(u.ck.pCur->pVtabCursor);
68146   }
68147
68148   if( !u.ck.res ){
68149     /* If there is data, jump to P2 */
68150     pc = pOp->p2 - 1;
68151   }
68152   break;
68153 }
68154 #endif /* SQLITE_OMIT_VIRTUALTABLE */
68155
68156 #ifndef SQLITE_OMIT_VIRTUALTABLE
68157 /* Opcode: VRename P1 * * P4 *
68158 **
68159 ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
68160 ** This opcode invokes the corresponding xRename method. The value
68161 ** in register P1 is passed as the zName argument to the xRename method.
68162 */
68163 case OP_VRename: {
68164 #if 0  /* local variables moved into u.cl */
68165   sqlite3_vtab *pVtab;
68166   Mem *pName;
68167 #endif /* local variables moved into u.cl */
68168
68169   u.cl.pVtab = pOp->p4.pVtab->pVtab;
68170   u.cl.pName = &aMem[pOp->p1];
68171   assert( u.cl.pVtab->pModule->xRename );
68172   assert( memIsValid(u.cl.pName) );
68173   REGISTER_TRACE(pOp->p1, u.cl.pName);
68174   assert( u.cl.pName->flags & MEM_Str );
68175   rc = u.cl.pVtab->pModule->xRename(u.cl.pVtab, u.cl.pName->z);
68176   importVtabErrMsg(p, u.cl.pVtab);
68177   p->expired = 0;
68178
68179   break;
68180 }
68181 #endif
68182
68183 #ifndef SQLITE_OMIT_VIRTUALTABLE
68184 /* Opcode: VUpdate P1 P2 P3 P4 *
68185 **
68186 ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
68187 ** This opcode invokes the corresponding xUpdate method. P2 values
68188 ** are contiguous memory cells starting at P3 to pass to the xUpdate 
68189 ** invocation. The value in register (P3+P2-1) corresponds to the 
68190 ** p2th element of the argv array passed to xUpdate.
68191 **
68192 ** The xUpdate method will do a DELETE or an INSERT or both.
68193 ** The argv[0] element (which corresponds to memory cell P3)
68194 ** is the rowid of a row to delete.  If argv[0] is NULL then no 
68195 ** deletion occurs.  The argv[1] element is the rowid of the new 
68196 ** row.  This can be NULL to have the virtual table select the new 
68197 ** rowid for itself.  The subsequent elements in the array are 
68198 ** the values of columns in the new row.
68199 **
68200 ** If P2==1 then no insert is performed.  argv[0] is the rowid of
68201 ** a row to delete.
68202 **
68203 ** P1 is a boolean flag. If it is set to true and the xUpdate call
68204 ** is successful, then the value returned by sqlite3_last_insert_rowid() 
68205 ** is set to the value of the rowid for the row just inserted.
68206 */
68207 case OP_VUpdate: {
68208 #if 0  /* local variables moved into u.cm */
68209   sqlite3_vtab *pVtab;
68210   sqlite3_module *pModule;
68211   int nArg;
68212   int i;
68213   sqlite_int64 rowid;
68214   Mem **apArg;
68215   Mem *pX;
68216 #endif /* local variables moved into u.cm */
68217
68218   u.cm.pVtab = pOp->p4.pVtab->pVtab;
68219   u.cm.pModule = (sqlite3_module *)u.cm.pVtab->pModule;
68220   u.cm.nArg = pOp->p2;
68221   assert( pOp->p4type==P4_VTAB );
68222   if( ALWAYS(u.cm.pModule->xUpdate) ){
68223     u.cm.apArg = p->apArg;
68224     u.cm.pX = &aMem[pOp->p3];
68225     for(u.cm.i=0; u.cm.i<u.cm.nArg; u.cm.i++){
68226       assert( memIsValid(u.cm.pX) );
68227       memAboutToChange(p, u.cm.pX);
68228       sqlite3VdbeMemStoreType(u.cm.pX);
68229       u.cm.apArg[u.cm.i] = u.cm.pX;
68230       u.cm.pX++;
68231     }
68232     rc = u.cm.pModule->xUpdate(u.cm.pVtab, u.cm.nArg, u.cm.apArg, &u.cm.rowid);
68233     importVtabErrMsg(p, u.cm.pVtab);
68234     if( rc==SQLITE_OK && pOp->p1 ){
68235       assert( u.cm.nArg>1 && u.cm.apArg[0] && (u.cm.apArg[0]->flags&MEM_Null) );
68236       db->lastRowid = u.cm.rowid;
68237     }
68238     p->nChange++;
68239   }
68240   break;
68241 }
68242 #endif /* SQLITE_OMIT_VIRTUALTABLE */
68243
68244 #ifndef  SQLITE_OMIT_PAGER_PRAGMAS
68245 /* Opcode: Pagecount P1 P2 * * *
68246 **
68247 ** Write the current number of pages in database P1 to memory cell P2.
68248 */
68249 case OP_Pagecount: {            /* out2-prerelease */
68250   pOut->u.i = sqlite3BtreeLastPage(db->aDb[pOp->p1].pBt);
68251   break;
68252 }
68253 #endif
68254
68255
68256 #ifndef  SQLITE_OMIT_PAGER_PRAGMAS
68257 /* Opcode: MaxPgcnt P1 P2 P3 * *
68258 **
68259 ** Try to set the maximum page count for database P1 to the value in P3.
68260 ** Do not let the maximum page count fall below the current page count and
68261 ** do not change the maximum page count value if P3==0.
68262 **
68263 ** Store the maximum page count after the change in register P2.
68264 */
68265 case OP_MaxPgcnt: {            /* out2-prerelease */
68266   unsigned int newMax;
68267   Btree *pBt;
68268
68269   pBt = db->aDb[pOp->p1].pBt;
68270   newMax = 0;
68271   if( pOp->p3 ){
68272     newMax = sqlite3BtreeLastPage(pBt);
68273     if( newMax < (unsigned)pOp->p3 ) newMax = (unsigned)pOp->p3;
68274   }
68275   pOut->u.i = sqlite3BtreeMaxPageCount(pBt, newMax);
68276   break;
68277 }
68278 #endif
68279
68280
68281 #ifndef SQLITE_OMIT_TRACE
68282 /* Opcode: Trace * * * P4 *
68283 **
68284 ** If tracing is enabled (by the sqlite3_trace()) interface, then
68285 ** the UTF-8 string contained in P4 is emitted on the trace callback.
68286 */
68287 case OP_Trace: {
68288 #if 0  /* local variables moved into u.cn */
68289   char *zTrace;
68290 #endif /* local variables moved into u.cn */
68291
68292   u.cn.zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql);
68293   if( u.cn.zTrace ){
68294     if( db->xTrace ){
68295       char *z = sqlite3VdbeExpandSql(p, u.cn.zTrace);
68296       db->xTrace(db->pTraceArg, z);
68297       sqlite3DbFree(db, z);
68298     }
68299 #ifdef SQLITE_DEBUG
68300     if( (db->flags & SQLITE_SqlTrace)!=0 ){
68301       sqlite3DebugPrintf("SQL-trace: %s\n", u.cn.zTrace);
68302     }
68303 #endif /* SQLITE_DEBUG */
68304   }
68305   break;
68306 }
68307 #endif
68308
68309
68310 /* Opcode: Noop * * * * *
68311 **
68312 ** Do nothing.  This instruction is often useful as a jump
68313 ** destination.
68314 */
68315 /*
68316 ** The magic Explain opcode are only inserted when explain==2 (which
68317 ** is to say when the EXPLAIN QUERY PLAN syntax is used.)
68318 ** This opcode records information from the optimizer.  It is the
68319 ** the same as a no-op.  This opcodesnever appears in a real VM program.
68320 */
68321 default: {          /* This is really OP_Noop and OP_Explain */
68322   assert( pOp->opcode==OP_Noop || pOp->opcode==OP_Explain );
68323   break;
68324 }
68325
68326 /*****************************************************************************
68327 ** The cases of the switch statement above this line should all be indented
68328 ** by 6 spaces.  But the left-most 6 spaces have been removed to improve the
68329 ** readability.  From this point on down, the normal indentation rules are
68330 ** restored.
68331 *****************************************************************************/
68332     }
68333
68334 #ifdef VDBE_PROFILE
68335     {
68336       u64 elapsed = sqlite3Hwtime() - start;
68337       pOp->cycles += elapsed;
68338       pOp->cnt++;
68339 #if 0
68340         fprintf(stdout, "%10llu ", elapsed);
68341         sqlite3VdbePrintOp(stdout, origPc, &aOp[origPc]);
68342 #endif
68343     }
68344 #endif
68345
68346     /* The following code adds nothing to the actual functionality
68347     ** of the program.  It is only here for testing and debugging.
68348     ** On the other hand, it does burn CPU cycles every time through
68349     ** the evaluator loop.  So we can leave it out when NDEBUG is defined.
68350     */
68351 #ifndef NDEBUG
68352     assert( pc>=-1 && pc<p->nOp );
68353
68354 #ifdef SQLITE_DEBUG
68355     if( p->trace ){
68356       if( rc!=0 ) fprintf(p->trace,"rc=%d\n",rc);
68357       if( pOp->opflags & (OPFLG_OUT2_PRERELEASE|OPFLG_OUT2) ){
68358         registerTrace(p->trace, pOp->p2, &aMem[pOp->p2]);
68359       }
68360       if( pOp->opflags & OPFLG_OUT3 ){
68361         registerTrace(p->trace, pOp->p3, &aMem[pOp->p3]);
68362       }
68363     }
68364 #endif  /* SQLITE_DEBUG */
68365 #endif  /* NDEBUG */
68366   }  /* The end of the for(;;) loop the loops through opcodes */
68367
68368   /* If we reach this point, it means that execution is finished with
68369   ** an error of some kind.
68370   */
68371 vdbe_error_halt:
68372   assert( rc );
68373   p->rc = rc;
68374   testcase( sqlite3GlobalConfig.xLog!=0 );
68375   sqlite3_log(rc, "statement aborts at %d: [%s] %s", 
68376                    pc, p->zSql, p->zErrMsg);
68377   sqlite3VdbeHalt(p);
68378   if( rc==SQLITE_IOERR_NOMEM ) db->mallocFailed = 1;
68379   rc = SQLITE_ERROR;
68380   if( resetSchemaOnFault>0 ){
68381     sqlite3ResetInternalSchema(db, resetSchemaOnFault-1);
68382   }
68383
68384   /* This is the only way out of this procedure.  We have to
68385   ** release the mutexes on btrees that were acquired at the
68386   ** top. */
68387 vdbe_return:
68388   sqlite3VdbeLeave(p);
68389   return rc;
68390
68391   /* Jump to here if a string or blob larger than SQLITE_MAX_LENGTH
68392   ** is encountered.
68393   */
68394 too_big:
68395   sqlite3SetString(&p->zErrMsg, db, "string or blob too big");
68396   rc = SQLITE_TOOBIG;
68397   goto vdbe_error_halt;
68398
68399   /* Jump to here if a malloc() fails.
68400   */
68401 no_mem:
68402   db->mallocFailed = 1;
68403   sqlite3SetString(&p->zErrMsg, db, "out of memory");
68404   rc = SQLITE_NOMEM;
68405   goto vdbe_error_halt;
68406
68407   /* Jump to here for any other kind of fatal error.  The "rc" variable
68408   ** should hold the error number.
68409   */
68410 abort_due_to_error:
68411   assert( p->zErrMsg==0 );
68412   if( db->mallocFailed ) rc = SQLITE_NOMEM;
68413   if( rc!=SQLITE_IOERR_NOMEM ){
68414     sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc));
68415   }
68416   goto vdbe_error_halt;
68417
68418   /* Jump to here if the sqlite3_interrupt() API sets the interrupt
68419   ** flag.
68420   */
68421 abort_due_to_interrupt:
68422   assert( db->u1.isInterrupted );
68423   rc = SQLITE_INTERRUPT;
68424   p->rc = rc;
68425   sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc));
68426   goto vdbe_error_halt;
68427 }
68428
68429 /************** End of vdbe.c ************************************************/
68430 /************** Begin file vdbeblob.c ****************************************/
68431 /*
68432 ** 2007 May 1
68433 **
68434 ** The author disclaims copyright to this source code.  In place of
68435 ** a legal notice, here is a blessing:
68436 **
68437 **    May you do good and not evil.
68438 **    May you find forgiveness for yourself and forgive others.
68439 **    May you share freely, never taking more than you give.
68440 **
68441 *************************************************************************
68442 **
68443 ** This file contains code used to implement incremental BLOB I/O.
68444 */
68445
68446
68447 #ifndef SQLITE_OMIT_INCRBLOB
68448
68449 /*
68450 ** Valid sqlite3_blob* handles point to Incrblob structures.
68451 */
68452 typedef struct Incrblob Incrblob;
68453 struct Incrblob {
68454   int flags;              /* Copy of "flags" passed to sqlite3_blob_open() */
68455   int nByte;              /* Size of open blob, in bytes */
68456   int iOffset;            /* Byte offset of blob in cursor data */
68457   int iCol;               /* Table column this handle is open on */
68458   BtCursor *pCsr;         /* Cursor pointing at blob row */
68459   sqlite3_stmt *pStmt;    /* Statement holding cursor open */
68460   sqlite3 *db;            /* The associated database */
68461 };
68462
68463
68464 /*
68465 ** This function is used by both blob_open() and blob_reopen(). It seeks
68466 ** the b-tree cursor associated with blob handle p to point to row iRow.
68467 ** If successful, SQLITE_OK is returned and subsequent calls to
68468 ** sqlite3_blob_read() or sqlite3_blob_write() access the specified row.
68469 **
68470 ** If an error occurs, or if the specified row does not exist or does not
68471 ** contain a value of type TEXT or BLOB in the column nominated when the
68472 ** blob handle was opened, then an error code is returned and *pzErr may
68473 ** be set to point to a buffer containing an error message. It is the
68474 ** responsibility of the caller to free the error message buffer using
68475 ** sqlite3DbFree().
68476 **
68477 ** If an error does occur, then the b-tree cursor is closed. All subsequent
68478 ** calls to sqlite3_blob_read(), blob_write() or blob_reopen() will 
68479 ** immediately return SQLITE_ABORT.
68480 */
68481 static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){
68482   int rc;                         /* Error code */
68483   char *zErr = 0;                 /* Error message */
68484   Vdbe *v = (Vdbe *)p->pStmt;
68485
68486   /* Set the value of the SQL statements only variable to integer iRow. 
68487   ** This is done directly instead of using sqlite3_bind_int64() to avoid 
68488   ** triggering asserts related to mutexes.
68489   */
68490   assert( v->aVar[0].flags&MEM_Int );
68491   v->aVar[0].u.i = iRow;
68492
68493   rc = sqlite3_step(p->pStmt);
68494   if( rc==SQLITE_ROW ){
68495     u32 type = v->apCsr[0]->aType[p->iCol];
68496     if( type<12 ){
68497       zErr = sqlite3MPrintf(p->db, "cannot open value of type %s",
68498           type==0?"null": type==7?"real": "integer"
68499       );
68500       rc = SQLITE_ERROR;
68501       sqlite3_finalize(p->pStmt);
68502       p->pStmt = 0;
68503     }else{
68504       p->iOffset = v->apCsr[0]->aOffset[p->iCol];
68505       p->nByte = sqlite3VdbeSerialTypeLen(type);
68506       p->pCsr =  v->apCsr[0]->pCursor;
68507       sqlite3BtreeEnterCursor(p->pCsr);
68508       sqlite3BtreeCacheOverflow(p->pCsr);
68509       sqlite3BtreeLeaveCursor(p->pCsr);
68510     }
68511   }
68512
68513   if( rc==SQLITE_ROW ){
68514     rc = SQLITE_OK;
68515   }else if( p->pStmt ){
68516     rc = sqlite3_finalize(p->pStmt);
68517     p->pStmt = 0;
68518     if( rc==SQLITE_OK ){
68519       zErr = sqlite3MPrintf(p->db, "no such rowid: %lld", iRow);
68520       rc = SQLITE_ERROR;
68521     }else{
68522       zErr = sqlite3MPrintf(p->db, "%s", sqlite3_errmsg(p->db));
68523     }
68524   }
68525
68526   assert( rc!=SQLITE_OK || zErr==0 );
68527   assert( rc!=SQLITE_ROW && rc!=SQLITE_DONE );
68528
68529   *pzErr = zErr;
68530   return rc;
68531 }
68532
68533 /*
68534 ** Open a blob handle.
68535 */
68536 SQLITE_API int sqlite3_blob_open(
68537   sqlite3* db,            /* The database connection */
68538   const char *zDb,        /* The attached database containing the blob */
68539   const char *zTable,     /* The table containing the blob */
68540   const char *zColumn,    /* The column containing the blob */
68541   sqlite_int64 iRow,      /* The row containing the glob */
68542   int flags,              /* True -> read/write access, false -> read-only */
68543   sqlite3_blob **ppBlob   /* Handle for accessing the blob returned here */
68544 ){
68545   int nAttempt = 0;
68546   int iCol;               /* Index of zColumn in row-record */
68547
68548   /* This VDBE program seeks a btree cursor to the identified 
68549   ** db/table/row entry. The reason for using a vdbe program instead
68550   ** of writing code to use the b-tree layer directly is that the
68551   ** vdbe program will take advantage of the various transaction,
68552   ** locking and error handling infrastructure built into the vdbe.
68553   **
68554   ** After seeking the cursor, the vdbe executes an OP_ResultRow.
68555   ** Code external to the Vdbe then "borrows" the b-tree cursor and
68556   ** uses it to implement the blob_read(), blob_write() and 
68557   ** blob_bytes() functions.
68558   **
68559   ** The sqlite3_blob_close() function finalizes the vdbe program,
68560   ** which closes the b-tree cursor and (possibly) commits the 
68561   ** transaction.
68562   */
68563   static const VdbeOpList openBlob[] = {
68564     {OP_Transaction, 0, 0, 0},     /* 0: Start a transaction */
68565     {OP_VerifyCookie, 0, 0, 0},    /* 1: Check the schema cookie */
68566     {OP_TableLock, 0, 0, 0},       /* 2: Acquire a read or write lock */
68567
68568     /* One of the following two instructions is replaced by an OP_Noop. */
68569     {OP_OpenRead, 0, 0, 0},        /* 3: Open cursor 0 for reading */
68570     {OP_OpenWrite, 0, 0, 0},       /* 4: Open cursor 0 for read/write */
68571
68572     {OP_Variable, 1, 1, 1},        /* 5: Push the rowid to the stack */
68573     {OP_NotExists, 0, 10, 1},      /* 6: Seek the cursor */
68574     {OP_Column, 0, 0, 1},          /* 7  */
68575     {OP_ResultRow, 1, 0, 0},       /* 8  */
68576     {OP_Goto, 0, 5, 0},            /* 9  */
68577     {OP_Close, 0, 0, 0},           /* 10 */
68578     {OP_Halt, 0, 0, 0},            /* 11 */
68579   };
68580
68581   int rc = SQLITE_OK;
68582   char *zErr = 0;
68583   Table *pTab;
68584   Parse *pParse = 0;
68585   Incrblob *pBlob = 0;
68586
68587   flags = !!flags;                /* flags = (flags ? 1 : 0); */
68588   *ppBlob = 0;
68589
68590   sqlite3_mutex_enter(db->mutex);
68591
68592   pBlob = (Incrblob *)sqlite3DbMallocZero(db, sizeof(Incrblob));
68593   if( !pBlob ) goto blob_open_out;
68594   pParse = sqlite3StackAllocRaw(db, sizeof(*pParse));
68595   if( !pParse ) goto blob_open_out;
68596
68597   do {
68598     memset(pParse, 0, sizeof(Parse));
68599     pParse->db = db;
68600     sqlite3DbFree(db, zErr);
68601     zErr = 0;
68602
68603     sqlite3BtreeEnterAll(db);
68604     pTab = sqlite3LocateTable(pParse, 0, zTable, zDb);
68605     if( pTab && IsVirtual(pTab) ){
68606       pTab = 0;
68607       sqlite3ErrorMsg(pParse, "cannot open virtual table: %s", zTable);
68608     }
68609 #ifndef SQLITE_OMIT_VIEW
68610     if( pTab && pTab->pSelect ){
68611       pTab = 0;
68612       sqlite3ErrorMsg(pParse, "cannot open view: %s", zTable);
68613     }
68614 #endif
68615     if( !pTab ){
68616       if( pParse->zErrMsg ){
68617         sqlite3DbFree(db, zErr);
68618         zErr = pParse->zErrMsg;
68619         pParse->zErrMsg = 0;
68620       }
68621       rc = SQLITE_ERROR;
68622       sqlite3BtreeLeaveAll(db);
68623       goto blob_open_out;
68624     }
68625
68626     /* Now search pTab for the exact column. */
68627     for(iCol=0; iCol<pTab->nCol; iCol++) {
68628       if( sqlite3StrICmp(pTab->aCol[iCol].zName, zColumn)==0 ){
68629         break;
68630       }
68631     }
68632     if( iCol==pTab->nCol ){
68633       sqlite3DbFree(db, zErr);
68634       zErr = sqlite3MPrintf(db, "no such column: \"%s\"", zColumn);
68635       rc = SQLITE_ERROR;
68636       sqlite3BtreeLeaveAll(db);
68637       goto blob_open_out;
68638     }
68639
68640     /* If the value is being opened for writing, check that the
68641     ** column is not indexed, and that it is not part of a foreign key. 
68642     ** It is against the rules to open a column to which either of these
68643     ** descriptions applies for writing.  */
68644     if( flags ){
68645       const char *zFault = 0;
68646       Index *pIdx;
68647 #ifndef SQLITE_OMIT_FOREIGN_KEY
68648       if( db->flags&SQLITE_ForeignKeys ){
68649         /* Check that the column is not part of an FK child key definition. It
68650         ** is not necessary to check if it is part of a parent key, as parent
68651         ** key columns must be indexed. The check below will pick up this 
68652         ** case.  */
68653         FKey *pFKey;
68654         for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){
68655           int j;
68656           for(j=0; j<pFKey->nCol; j++){
68657             if( pFKey->aCol[j].iFrom==iCol ){
68658               zFault = "foreign key";
68659             }
68660           }
68661         }
68662       }
68663 #endif
68664       for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
68665         int j;
68666         for(j=0; j<pIdx->nColumn; j++){
68667           if( pIdx->aiColumn[j]==iCol ){
68668             zFault = "indexed";
68669           }
68670         }
68671       }
68672       if( zFault ){
68673         sqlite3DbFree(db, zErr);
68674         zErr = sqlite3MPrintf(db, "cannot open %s column for writing", zFault);
68675         rc = SQLITE_ERROR;
68676         sqlite3BtreeLeaveAll(db);
68677         goto blob_open_out;
68678       }
68679     }
68680
68681     pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(db);
68682     assert( pBlob->pStmt || db->mallocFailed );
68683     if( pBlob->pStmt ){
68684       Vdbe *v = (Vdbe *)pBlob->pStmt;
68685       int iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
68686
68687       sqlite3VdbeAddOpList(v, sizeof(openBlob)/sizeof(VdbeOpList), openBlob);
68688
68689
68690       /* Configure the OP_Transaction */
68691       sqlite3VdbeChangeP1(v, 0, iDb);
68692       sqlite3VdbeChangeP2(v, 0, flags);
68693
68694       /* Configure the OP_VerifyCookie */
68695       sqlite3VdbeChangeP1(v, 1, iDb);
68696       sqlite3VdbeChangeP2(v, 1, pTab->pSchema->schema_cookie);
68697       sqlite3VdbeChangeP3(v, 1, pTab->pSchema->iGeneration);
68698
68699       /* Make sure a mutex is held on the table to be accessed */
68700       sqlite3VdbeUsesBtree(v, iDb); 
68701
68702       /* Configure the OP_TableLock instruction */
68703 #ifdef SQLITE_OMIT_SHARED_CACHE
68704       sqlite3VdbeChangeToNoop(v, 2, 1);
68705 #else
68706       sqlite3VdbeChangeP1(v, 2, iDb);
68707       sqlite3VdbeChangeP2(v, 2, pTab->tnum);
68708       sqlite3VdbeChangeP3(v, 2, flags);
68709       sqlite3VdbeChangeP4(v, 2, pTab->zName, P4_TRANSIENT);
68710 #endif
68711
68712       /* Remove either the OP_OpenWrite or OpenRead. Set the P2 
68713       ** parameter of the other to pTab->tnum.  */
68714       sqlite3VdbeChangeToNoop(v, 4 - flags, 1);
68715       sqlite3VdbeChangeP2(v, 3 + flags, pTab->tnum);
68716       sqlite3VdbeChangeP3(v, 3 + flags, iDb);
68717
68718       /* Configure the number of columns. Configure the cursor to
68719       ** think that the table has one more column than it really
68720       ** does. An OP_Column to retrieve this imaginary column will
68721       ** always return an SQL NULL. This is useful because it means
68722       ** we can invoke OP_Column to fill in the vdbe cursors type 
68723       ** and offset cache without causing any IO.
68724       */
68725       sqlite3VdbeChangeP4(v, 3+flags, SQLITE_INT_TO_PTR(pTab->nCol+1),P4_INT32);
68726       sqlite3VdbeChangeP2(v, 7, pTab->nCol);
68727       if( !db->mallocFailed ){
68728         sqlite3VdbeMakeReady(v, 1, 1, 1, 0, 0, 0);
68729       }
68730     }
68731    
68732     pBlob->flags = flags;
68733     pBlob->iCol = iCol;
68734     pBlob->db = db;
68735     sqlite3BtreeLeaveAll(db);
68736     if( db->mallocFailed ){
68737       goto blob_open_out;
68738     }
68739     sqlite3_bind_int64(pBlob->pStmt, 1, iRow);
68740     rc = blobSeekToRow(pBlob, iRow, &zErr);
68741   } while( (++nAttempt)<5 && rc==SQLITE_SCHEMA );
68742
68743 blob_open_out:
68744   if( rc==SQLITE_OK && db->mallocFailed==0 ){
68745     *ppBlob = (sqlite3_blob *)pBlob;
68746   }else{
68747     if( pBlob && pBlob->pStmt ) sqlite3VdbeFinalize((Vdbe *)pBlob->pStmt);
68748     sqlite3DbFree(db, pBlob);
68749   }
68750   sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr);
68751   sqlite3DbFree(db, zErr);
68752   sqlite3StackFree(db, pParse);
68753   rc = sqlite3ApiExit(db, rc);
68754   sqlite3_mutex_leave(db->mutex);
68755   return rc;
68756 }
68757
68758 /*
68759 ** Close a blob handle that was previously created using
68760 ** sqlite3_blob_open().
68761 */
68762 SQLITE_API int sqlite3_blob_close(sqlite3_blob *pBlob){
68763   Incrblob *p = (Incrblob *)pBlob;
68764   int rc;
68765   sqlite3 *db;
68766
68767   if( p ){
68768     db = p->db;
68769     sqlite3_mutex_enter(db->mutex);
68770     rc = sqlite3_finalize(p->pStmt);
68771     sqlite3DbFree(db, p);
68772     sqlite3_mutex_leave(db->mutex);
68773   }else{
68774     rc = SQLITE_OK;
68775   }
68776   return rc;
68777 }
68778
68779 /*
68780 ** Perform a read or write operation on a blob
68781 */
68782 static int blobReadWrite(
68783   sqlite3_blob *pBlob, 
68784   void *z, 
68785   int n, 
68786   int iOffset, 
68787   int (*xCall)(BtCursor*, u32, u32, void*)
68788 ){
68789   int rc;
68790   Incrblob *p = (Incrblob *)pBlob;
68791   Vdbe *v;
68792   sqlite3 *db;
68793
68794   if( p==0 ) return SQLITE_MISUSE_BKPT;
68795   db = p->db;
68796   sqlite3_mutex_enter(db->mutex);
68797   v = (Vdbe*)p->pStmt;
68798
68799   if( n<0 || iOffset<0 || (iOffset+n)>p->nByte ){
68800     /* Request is out of range. Return a transient error. */
68801     rc = SQLITE_ERROR;
68802     sqlite3Error(db, SQLITE_ERROR, 0);
68803   }else if( v==0 ){
68804     /* If there is no statement handle, then the blob-handle has
68805     ** already been invalidated. Return SQLITE_ABORT in this case.
68806     */
68807     rc = SQLITE_ABORT;
68808   }else{
68809     /* Call either BtreeData() or BtreePutData(). If SQLITE_ABORT is
68810     ** returned, clean-up the statement handle.
68811     */
68812     assert( db == v->db );
68813     sqlite3BtreeEnterCursor(p->pCsr);
68814     rc = xCall(p->pCsr, iOffset+p->iOffset, n, z);
68815     sqlite3BtreeLeaveCursor(p->pCsr);
68816     if( rc==SQLITE_ABORT ){
68817       sqlite3VdbeFinalize(v);
68818       p->pStmt = 0;
68819     }else{
68820       db->errCode = rc;
68821       v->rc = rc;
68822     }
68823   }
68824   rc = sqlite3ApiExit(db, rc);
68825   sqlite3_mutex_leave(db->mutex);
68826   return rc;
68827 }
68828
68829 /*
68830 ** Read data from a blob handle.
68831 */
68832 SQLITE_API int sqlite3_blob_read(sqlite3_blob *pBlob, void *z, int n, int iOffset){
68833   return blobReadWrite(pBlob, z, n, iOffset, sqlite3BtreeData);
68834 }
68835
68836 /*
68837 ** Write data to a blob handle.
68838 */
68839 SQLITE_API int sqlite3_blob_write(sqlite3_blob *pBlob, const void *z, int n, int iOffset){
68840   return blobReadWrite(pBlob, (void *)z, n, iOffset, sqlite3BtreePutData);
68841 }
68842
68843 /*
68844 ** Query a blob handle for the size of the data.
68845 **
68846 ** The Incrblob.nByte field is fixed for the lifetime of the Incrblob
68847 ** so no mutex is required for access.
68848 */
68849 SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *pBlob){
68850   Incrblob *p = (Incrblob *)pBlob;
68851   return (p && p->pStmt) ? p->nByte : 0;
68852 }
68853
68854 /*
68855 ** Move an existing blob handle to point to a different row of the same
68856 ** database table.
68857 **
68858 ** If an error occurs, or if the specified row does not exist or does not
68859 ** contain a blob or text value, then an error code is returned and the
68860 ** database handle error code and message set. If this happens, then all 
68861 ** subsequent calls to sqlite3_blob_xxx() functions (except blob_close()) 
68862 ** immediately return SQLITE_ABORT.
68863 */
68864 SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){
68865   int rc;
68866   Incrblob *p = (Incrblob *)pBlob;
68867   sqlite3 *db;
68868
68869   if( p==0 ) return SQLITE_MISUSE_BKPT;
68870   db = p->db;
68871   sqlite3_mutex_enter(db->mutex);
68872
68873   if( p->pStmt==0 ){
68874     /* If there is no statement handle, then the blob-handle has
68875     ** already been invalidated. Return SQLITE_ABORT in this case.
68876     */
68877     rc = SQLITE_ABORT;
68878   }else{
68879     char *zErr;
68880     rc = blobSeekToRow(p, iRow, &zErr);
68881     if( rc!=SQLITE_OK ){
68882       sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr);
68883       sqlite3DbFree(db, zErr);
68884     }
68885     assert( rc!=SQLITE_SCHEMA );
68886   }
68887
68888   rc = sqlite3ApiExit(db, rc);
68889   assert( rc==SQLITE_OK || p->pStmt==0 );
68890   sqlite3_mutex_leave(db->mutex);
68891   return rc;
68892 }
68893
68894 #endif /* #ifndef SQLITE_OMIT_INCRBLOB */
68895
68896 /************** End of vdbeblob.c ********************************************/
68897 /************** Begin file journal.c *****************************************/
68898 /*
68899 ** 2007 August 22
68900 **
68901 ** The author disclaims copyright to this source code.  In place of
68902 ** a legal notice, here is a blessing:
68903 **
68904 **    May you do good and not evil.
68905 **    May you find forgiveness for yourself and forgive others.
68906 **    May you share freely, never taking more than you give.
68907 **
68908 *************************************************************************
68909 **
68910 ** This file implements a special kind of sqlite3_file object used
68911 ** by SQLite to create journal files if the atomic-write optimization
68912 ** is enabled.
68913 **
68914 ** The distinctive characteristic of this sqlite3_file is that the
68915 ** actual on disk file is created lazily. When the file is created,
68916 ** the caller specifies a buffer size for an in-memory buffer to
68917 ** be used to service read() and write() requests. The actual file
68918 ** on disk is not created or populated until either:
68919 **
68920 **   1) The in-memory representation grows too large for the allocated 
68921 **      buffer, or
68922 **   2) The sqlite3JournalCreate() function is called.
68923 */
68924 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
68925
68926
68927 /*
68928 ** A JournalFile object is a subclass of sqlite3_file used by
68929 ** as an open file handle for journal files.
68930 */
68931 struct JournalFile {
68932   sqlite3_io_methods *pMethod;    /* I/O methods on journal files */
68933   int nBuf;                       /* Size of zBuf[] in bytes */
68934   char *zBuf;                     /* Space to buffer journal writes */
68935   int iSize;                      /* Amount of zBuf[] currently used */
68936   int flags;                      /* xOpen flags */
68937   sqlite3_vfs *pVfs;              /* The "real" underlying VFS */
68938   sqlite3_file *pReal;            /* The "real" underlying file descriptor */
68939   const char *zJournal;           /* Name of the journal file */
68940 };
68941 typedef struct JournalFile JournalFile;
68942
68943 /*
68944 ** If it does not already exists, create and populate the on-disk file 
68945 ** for JournalFile p.
68946 */
68947 static int createFile(JournalFile *p){
68948   int rc = SQLITE_OK;
68949   if( !p->pReal ){
68950     sqlite3_file *pReal = (sqlite3_file *)&p[1];
68951     rc = sqlite3OsOpen(p->pVfs, p->zJournal, pReal, p->flags, 0);
68952     if( rc==SQLITE_OK ){
68953       p->pReal = pReal;
68954       if( p->iSize>0 ){
68955         assert(p->iSize<=p->nBuf);
68956         rc = sqlite3OsWrite(p->pReal, p->zBuf, p->iSize, 0);
68957       }
68958     }
68959   }
68960   return rc;
68961 }
68962
68963 /*
68964 ** Close the file.
68965 */
68966 static int jrnlClose(sqlite3_file *pJfd){
68967   JournalFile *p = (JournalFile *)pJfd;
68968   if( p->pReal ){
68969     sqlite3OsClose(p->pReal);
68970   }
68971   sqlite3_free(p->zBuf);
68972   return SQLITE_OK;
68973 }
68974
68975 /*
68976 ** Read data from the file.
68977 */
68978 static int jrnlRead(
68979   sqlite3_file *pJfd,    /* The journal file from which to read */
68980   void *zBuf,            /* Put the results here */
68981   int iAmt,              /* Number of bytes to read */
68982   sqlite_int64 iOfst     /* Begin reading at this offset */
68983 ){
68984   int rc = SQLITE_OK;
68985   JournalFile *p = (JournalFile *)pJfd;
68986   if( p->pReal ){
68987     rc = sqlite3OsRead(p->pReal, zBuf, iAmt, iOfst);
68988   }else if( (iAmt+iOfst)>p->iSize ){
68989     rc = SQLITE_IOERR_SHORT_READ;
68990   }else{
68991     memcpy(zBuf, &p->zBuf[iOfst], iAmt);
68992   }
68993   return rc;
68994 }
68995
68996 /*
68997 ** Write data to the file.
68998 */
68999 static int jrnlWrite(
69000   sqlite3_file *pJfd,    /* The journal file into which to write */
69001   const void *zBuf,      /* Take data to be written from here */
69002   int iAmt,              /* Number of bytes to write */
69003   sqlite_int64 iOfst     /* Begin writing at this offset into the file */
69004 ){
69005   int rc = SQLITE_OK;
69006   JournalFile *p = (JournalFile *)pJfd;
69007   if( !p->pReal && (iOfst+iAmt)>p->nBuf ){
69008     rc = createFile(p);
69009   }
69010   if( rc==SQLITE_OK ){
69011     if( p->pReal ){
69012       rc = sqlite3OsWrite(p->pReal, zBuf, iAmt, iOfst);
69013     }else{
69014       memcpy(&p->zBuf[iOfst], zBuf, iAmt);
69015       if( p->iSize<(iOfst+iAmt) ){
69016         p->iSize = (iOfst+iAmt);
69017       }
69018     }
69019   }
69020   return rc;
69021 }
69022
69023 /*
69024 ** Truncate the file.
69025 */
69026 static int jrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){
69027   int rc = SQLITE_OK;
69028   JournalFile *p = (JournalFile *)pJfd;
69029   if( p->pReal ){
69030     rc = sqlite3OsTruncate(p->pReal, size);
69031   }else if( size<p->iSize ){
69032     p->iSize = size;
69033   }
69034   return rc;
69035 }
69036
69037 /*
69038 ** Sync the file.
69039 */
69040 static int jrnlSync(sqlite3_file *pJfd, int flags){
69041   int rc;
69042   JournalFile *p = (JournalFile *)pJfd;
69043   if( p->pReal ){
69044     rc = sqlite3OsSync(p->pReal, flags);
69045   }else{
69046     rc = SQLITE_OK;
69047   }
69048   return rc;
69049 }
69050
69051 /*
69052 ** Query the size of the file in bytes.
69053 */
69054 static int jrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){
69055   int rc = SQLITE_OK;
69056   JournalFile *p = (JournalFile *)pJfd;
69057   if( p->pReal ){
69058     rc = sqlite3OsFileSize(p->pReal, pSize);
69059   }else{
69060     *pSize = (sqlite_int64) p->iSize;
69061   }
69062   return rc;
69063 }
69064
69065 /*
69066 ** Table of methods for JournalFile sqlite3_file object.
69067 */
69068 static struct sqlite3_io_methods JournalFileMethods = {
69069   1,             /* iVersion */
69070   jrnlClose,     /* xClose */
69071   jrnlRead,      /* xRead */
69072   jrnlWrite,     /* xWrite */
69073   jrnlTruncate,  /* xTruncate */
69074   jrnlSync,      /* xSync */
69075   jrnlFileSize,  /* xFileSize */
69076   0,             /* xLock */
69077   0,             /* xUnlock */
69078   0,             /* xCheckReservedLock */
69079   0,             /* xFileControl */
69080   0,             /* xSectorSize */
69081   0,             /* xDeviceCharacteristics */
69082   0,             /* xShmMap */
69083   0,             /* xShmLock */
69084   0,             /* xShmBarrier */
69085   0              /* xShmUnmap */
69086 };
69087
69088 /* 
69089 ** Open a journal file.
69090 */
69091 SQLITE_PRIVATE int sqlite3JournalOpen(
69092   sqlite3_vfs *pVfs,         /* The VFS to use for actual file I/O */
69093   const char *zName,         /* Name of the journal file */
69094   sqlite3_file *pJfd,        /* Preallocated, blank file handle */
69095   int flags,                 /* Opening flags */
69096   int nBuf                   /* Bytes buffered before opening the file */
69097 ){
69098   JournalFile *p = (JournalFile *)pJfd;
69099   memset(p, 0, sqlite3JournalSize(pVfs));
69100   if( nBuf>0 ){
69101     p->zBuf = sqlite3MallocZero(nBuf);
69102     if( !p->zBuf ){
69103       return SQLITE_NOMEM;
69104     }
69105   }else{
69106     return sqlite3OsOpen(pVfs, zName, pJfd, flags, 0);
69107   }
69108   p->pMethod = &JournalFileMethods;
69109   p->nBuf = nBuf;
69110   p->flags = flags;
69111   p->zJournal = zName;
69112   p->pVfs = pVfs;
69113   return SQLITE_OK;
69114 }
69115
69116 /*
69117 ** If the argument p points to a JournalFile structure, and the underlying
69118 ** file has not yet been created, create it now.
69119 */
69120 SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *p){
69121   if( p->pMethods!=&JournalFileMethods ){
69122     return SQLITE_OK;
69123   }
69124   return createFile((JournalFile *)p);
69125 }
69126
69127 /* 
69128 ** Return the number of bytes required to store a JournalFile that uses vfs
69129 ** pVfs to create the underlying on-disk files.
69130 */
69131 SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *pVfs){
69132   return (pVfs->szOsFile+sizeof(JournalFile));
69133 }
69134 #endif
69135
69136 /************** End of journal.c *********************************************/
69137 /************** Begin file memjournal.c **************************************/
69138 /*
69139 ** 2008 October 7
69140 **
69141 ** The author disclaims copyright to this source code.  In place of
69142 ** a legal notice, here is a blessing:
69143 **
69144 **    May you do good and not evil.
69145 **    May you find forgiveness for yourself and forgive others.
69146 **    May you share freely, never taking more than you give.
69147 **
69148 *************************************************************************
69149 **
69150 ** This file contains code use to implement an in-memory rollback journal.
69151 ** The in-memory rollback journal is used to journal transactions for
69152 ** ":memory:" databases and when the journal_mode=MEMORY pragma is used.
69153 */
69154
69155 /* Forward references to internal structures */
69156 typedef struct MemJournal MemJournal;
69157 typedef struct FilePoint FilePoint;
69158 typedef struct FileChunk FileChunk;
69159
69160 /* Space to hold the rollback journal is allocated in increments of
69161 ** this many bytes.
69162 **
69163 ** The size chosen is a little less than a power of two.  That way,
69164 ** the FileChunk object will have a size that almost exactly fills
69165 ** a power-of-two allocation.  This mimimizes wasted space in power-of-two
69166 ** memory allocators.
69167 */
69168 #define JOURNAL_CHUNKSIZE ((int)(1024-sizeof(FileChunk*)))
69169
69170 /* Macro to find the minimum of two numeric values.
69171 */
69172 #ifndef MIN
69173 # define MIN(x,y) ((x)<(y)?(x):(y))
69174 #endif
69175
69176 /*
69177 ** The rollback journal is composed of a linked list of these structures.
69178 */
69179 struct FileChunk {
69180   FileChunk *pNext;               /* Next chunk in the journal */
69181   u8 zChunk[JOURNAL_CHUNKSIZE];   /* Content of this chunk */
69182 };
69183
69184 /*
69185 ** An instance of this object serves as a cursor into the rollback journal.
69186 ** The cursor can be either for reading or writing.
69187 */
69188 struct FilePoint {
69189   sqlite3_int64 iOffset;          /* Offset from the beginning of the file */
69190   FileChunk *pChunk;              /* Specific chunk into which cursor points */
69191 };
69192
69193 /*
69194 ** This subclass is a subclass of sqlite3_file.  Each open memory-journal
69195 ** is an instance of this class.
69196 */
69197 struct MemJournal {
69198   sqlite3_io_methods *pMethod;    /* Parent class. MUST BE FIRST */
69199   FileChunk *pFirst;              /* Head of in-memory chunk-list */
69200   FilePoint endpoint;             /* Pointer to the end of the file */
69201   FilePoint readpoint;            /* Pointer to the end of the last xRead() */
69202 };
69203
69204 /*
69205 ** Read data from the in-memory journal file.  This is the implementation
69206 ** of the sqlite3_vfs.xRead method.
69207 */
69208 static int memjrnlRead(
69209   sqlite3_file *pJfd,    /* The journal file from which to read */
69210   void *zBuf,            /* Put the results here */
69211   int iAmt,              /* Number of bytes to read */
69212   sqlite_int64 iOfst     /* Begin reading at this offset */
69213 ){
69214   MemJournal *p = (MemJournal *)pJfd;
69215   u8 *zOut = zBuf;
69216   int nRead = iAmt;
69217   int iChunkOffset;
69218   FileChunk *pChunk;
69219
69220   /* SQLite never tries to read past the end of a rollback journal file */
69221   assert( iOfst+iAmt<=p->endpoint.iOffset );
69222
69223   if( p->readpoint.iOffset!=iOfst || iOfst==0 ){
69224     sqlite3_int64 iOff = 0;
69225     for(pChunk=p->pFirst; 
69226         ALWAYS(pChunk) && (iOff+JOURNAL_CHUNKSIZE)<=iOfst;
69227         pChunk=pChunk->pNext
69228     ){
69229       iOff += JOURNAL_CHUNKSIZE;
69230     }
69231   }else{
69232     pChunk = p->readpoint.pChunk;
69233   }
69234
69235   iChunkOffset = (int)(iOfst%JOURNAL_CHUNKSIZE);
69236   do {
69237     int iSpace = JOURNAL_CHUNKSIZE - iChunkOffset;
69238     int nCopy = MIN(nRead, (JOURNAL_CHUNKSIZE - iChunkOffset));
69239     memcpy(zOut, &pChunk->zChunk[iChunkOffset], nCopy);
69240     zOut += nCopy;
69241     nRead -= iSpace;
69242     iChunkOffset = 0;
69243   } while( nRead>=0 && (pChunk=pChunk->pNext)!=0 && nRead>0 );
69244   p->readpoint.iOffset = iOfst+iAmt;
69245   p->readpoint.pChunk = pChunk;
69246
69247   return SQLITE_OK;
69248 }
69249
69250 /*
69251 ** Write data to the file.
69252 */
69253 static int memjrnlWrite(
69254   sqlite3_file *pJfd,    /* The journal file into which to write */
69255   const void *zBuf,      /* Take data to be written from here */
69256   int iAmt,              /* Number of bytes to write */
69257   sqlite_int64 iOfst     /* Begin writing at this offset into the file */
69258 ){
69259   MemJournal *p = (MemJournal *)pJfd;
69260   int nWrite = iAmt;
69261   u8 *zWrite = (u8 *)zBuf;
69262
69263   /* An in-memory journal file should only ever be appended to. Random
69264   ** access writes are not required by sqlite.
69265   */
69266   assert( iOfst==p->endpoint.iOffset );
69267   UNUSED_PARAMETER(iOfst);
69268
69269   while( nWrite>0 ){
69270     FileChunk *pChunk = p->endpoint.pChunk;
69271     int iChunkOffset = (int)(p->endpoint.iOffset%JOURNAL_CHUNKSIZE);
69272     int iSpace = MIN(nWrite, JOURNAL_CHUNKSIZE - iChunkOffset);
69273
69274     if( iChunkOffset==0 ){
69275       /* New chunk is required to extend the file. */
69276       FileChunk *pNew = sqlite3_malloc(sizeof(FileChunk));
69277       if( !pNew ){
69278         return SQLITE_IOERR_NOMEM;
69279       }
69280       pNew->pNext = 0;
69281       if( pChunk ){
69282         assert( p->pFirst );
69283         pChunk->pNext = pNew;
69284       }else{
69285         assert( !p->pFirst );
69286         p->pFirst = pNew;
69287       }
69288       p->endpoint.pChunk = pNew;
69289     }
69290
69291     memcpy(&p->endpoint.pChunk->zChunk[iChunkOffset], zWrite, iSpace);
69292     zWrite += iSpace;
69293     nWrite -= iSpace;
69294     p->endpoint.iOffset += iSpace;
69295   }
69296
69297   return SQLITE_OK;
69298 }
69299
69300 /*
69301 ** Truncate the file.
69302 */
69303 static int memjrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){
69304   MemJournal *p = (MemJournal *)pJfd;
69305   FileChunk *pChunk;
69306   assert(size==0);
69307   UNUSED_PARAMETER(size);
69308   pChunk = p->pFirst;
69309   while( pChunk ){
69310     FileChunk *pTmp = pChunk;
69311     pChunk = pChunk->pNext;
69312     sqlite3_free(pTmp);
69313   }
69314   sqlite3MemJournalOpen(pJfd);
69315   return SQLITE_OK;
69316 }
69317
69318 /*
69319 ** Close the file.
69320 */
69321 static int memjrnlClose(sqlite3_file *pJfd){
69322   memjrnlTruncate(pJfd, 0);
69323   return SQLITE_OK;
69324 }
69325
69326
69327 /*
69328 ** Sync the file.
69329 **
69330 ** Syncing an in-memory journal is a no-op.  And, in fact, this routine
69331 ** is never called in a working implementation.  This implementation
69332 ** exists purely as a contingency, in case some malfunction in some other
69333 ** part of SQLite causes Sync to be called by mistake.
69334 */
69335 static int memjrnlSync(sqlite3_file *NotUsed, int NotUsed2){
69336   UNUSED_PARAMETER2(NotUsed, NotUsed2);
69337   return SQLITE_OK;
69338 }
69339
69340 /*
69341 ** Query the size of the file in bytes.
69342 */
69343 static int memjrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){
69344   MemJournal *p = (MemJournal *)pJfd;
69345   *pSize = (sqlite_int64) p->endpoint.iOffset;
69346   return SQLITE_OK;
69347 }
69348
69349 /*
69350 ** Table of methods for MemJournal sqlite3_file object.
69351 */
69352 static const struct sqlite3_io_methods MemJournalMethods = {
69353   1,                /* iVersion */
69354   memjrnlClose,     /* xClose */
69355   memjrnlRead,      /* xRead */
69356   memjrnlWrite,     /* xWrite */
69357   memjrnlTruncate,  /* xTruncate */
69358   memjrnlSync,      /* xSync */
69359   memjrnlFileSize,  /* xFileSize */
69360   0,                /* xLock */
69361   0,                /* xUnlock */
69362   0,                /* xCheckReservedLock */
69363   0,                /* xFileControl */
69364   0,                /* xSectorSize */
69365   0,                /* xDeviceCharacteristics */
69366   0,                /* xShmMap */
69367   0,                /* xShmLock */
69368   0,                /* xShmBarrier */
69369   0                 /* xShmUnlock */
69370 };
69371
69372 /* 
69373 ** Open a journal file.
69374 */
69375 SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *pJfd){
69376   MemJournal *p = (MemJournal *)pJfd;
69377   assert( EIGHT_BYTE_ALIGNMENT(p) );
69378   memset(p, 0, sqlite3MemJournalSize());
69379   p->pMethod = (sqlite3_io_methods*)&MemJournalMethods;
69380 }
69381
69382 /*
69383 ** Return true if the file-handle passed as an argument is 
69384 ** an in-memory journal 
69385 */
69386 SQLITE_PRIVATE int sqlite3IsMemJournal(sqlite3_file *pJfd){
69387   return pJfd->pMethods==&MemJournalMethods;
69388 }
69389
69390 /* 
69391 ** Return the number of bytes required to store a MemJournal file descriptor.
69392 */
69393 SQLITE_PRIVATE int sqlite3MemJournalSize(void){
69394   return sizeof(MemJournal);
69395 }
69396
69397 /************** End of memjournal.c ******************************************/
69398 /************** Begin file walker.c ******************************************/
69399 /*
69400 ** 2008 August 16
69401 **
69402 ** The author disclaims copyright to this source code.  In place of
69403 ** a legal notice, here is a blessing:
69404 **
69405 **    May you do good and not evil.
69406 **    May you find forgiveness for yourself and forgive others.
69407 **    May you share freely, never taking more than you give.
69408 **
69409 *************************************************************************
69410 ** This file contains routines used for walking the parser tree for
69411 ** an SQL statement.
69412 */
69413
69414
69415 /*
69416 ** Walk an expression tree.  Invoke the callback once for each node
69417 ** of the expression, while decending.  (In other words, the callback
69418 ** is invoked before visiting children.)
69419 **
69420 ** The return value from the callback should be one of the WRC_*
69421 ** constants to specify how to proceed with the walk.
69422 **
69423 **    WRC_Continue      Continue descending down the tree.
69424 **
69425 **    WRC_Prune         Do not descend into child nodes.  But allow
69426 **                      the walk to continue with sibling nodes.
69427 **
69428 **    WRC_Abort         Do no more callbacks.  Unwind the stack and
69429 **                      return the top-level walk call.
69430 **
69431 ** The return value from this routine is WRC_Abort to abandon the tree walk
69432 ** and WRC_Continue to continue.
69433 */
69434 SQLITE_PRIVATE int sqlite3WalkExpr(Walker *pWalker, Expr *pExpr){
69435   int rc;
69436   if( pExpr==0 ) return WRC_Continue;
69437   testcase( ExprHasProperty(pExpr, EP_TokenOnly) );
69438   testcase( ExprHasProperty(pExpr, EP_Reduced) );
69439   rc = pWalker->xExprCallback(pWalker, pExpr);
69440   if( rc==WRC_Continue
69441               && !ExprHasAnyProperty(pExpr,EP_TokenOnly) ){
69442     if( sqlite3WalkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort;
69443     if( sqlite3WalkExpr(pWalker, pExpr->pRight) ) return WRC_Abort;
69444     if( ExprHasProperty(pExpr, EP_xIsSelect) ){
69445       if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort;
69446     }else{
69447       if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort;
69448     }
69449   }
69450   return rc & WRC_Abort;
69451 }
69452
69453 /*
69454 ** Call sqlite3WalkExpr() for every expression in list p or until
69455 ** an abort request is seen.
69456 */
69457 SQLITE_PRIVATE int sqlite3WalkExprList(Walker *pWalker, ExprList *p){
69458   int i;
69459   struct ExprList_item *pItem;
69460   if( p ){
69461     for(i=p->nExpr, pItem=p->a; i>0; i--, pItem++){
69462       if( sqlite3WalkExpr(pWalker, pItem->pExpr) ) return WRC_Abort;
69463     }
69464   }
69465   return WRC_Continue;
69466 }
69467
69468 /*
69469 ** Walk all expressions associated with SELECT statement p.  Do
69470 ** not invoke the SELECT callback on p, but do (of course) invoke
69471 ** any expr callbacks and SELECT callbacks that come from subqueries.
69472 ** Return WRC_Abort or WRC_Continue.
69473 */
69474 SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){
69475   if( sqlite3WalkExprList(pWalker, p->pEList) ) return WRC_Abort;
69476   if( sqlite3WalkExpr(pWalker, p->pWhere) ) return WRC_Abort;
69477   if( sqlite3WalkExprList(pWalker, p->pGroupBy) ) return WRC_Abort;
69478   if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort;
69479   if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort;
69480   if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort;
69481   if( sqlite3WalkExpr(pWalker, p->pOffset) ) return WRC_Abort;
69482   return WRC_Continue;
69483 }
69484
69485 /*
69486 ** Walk the parse trees associated with all subqueries in the
69487 ** FROM clause of SELECT statement p.  Do not invoke the select
69488 ** callback on p, but do invoke it on each FROM clause subquery
69489 ** and on any subqueries further down in the tree.  Return 
69490 ** WRC_Abort or WRC_Continue;
69491 */
69492 SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){
69493   SrcList *pSrc;
69494   int i;
69495   struct SrcList_item *pItem;
69496
69497   pSrc = p->pSrc;
69498   if( ALWAYS(pSrc) ){
69499     for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
69500       if( sqlite3WalkSelect(pWalker, pItem->pSelect) ){
69501         return WRC_Abort;
69502       }
69503     }
69504   }
69505   return WRC_Continue;
69506
69507
69508 /*
69509 ** Call sqlite3WalkExpr() for every expression in Select statement p.
69510 ** Invoke sqlite3WalkSelect() for subqueries in the FROM clause and
69511 ** on the compound select chain, p->pPrior.
69512 **
69513 ** Return WRC_Continue under normal conditions.  Return WRC_Abort if
69514 ** there is an abort request.
69515 **
69516 ** If the Walker does not have an xSelectCallback() then this routine
69517 ** is a no-op returning WRC_Continue.
69518 */
69519 SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){
69520   int rc;
69521   if( p==0 || pWalker->xSelectCallback==0 ) return WRC_Continue;
69522   rc = WRC_Continue;
69523   while( p  ){
69524     rc = pWalker->xSelectCallback(pWalker, p);
69525     if( rc ) break;
69526     if( sqlite3WalkSelectExpr(pWalker, p) ) return WRC_Abort;
69527     if( sqlite3WalkSelectFrom(pWalker, p) ) return WRC_Abort;
69528     p = p->pPrior;
69529   }
69530   return rc & WRC_Abort;
69531 }
69532
69533 /************** End of walker.c **********************************************/
69534 /************** Begin file resolve.c *****************************************/
69535 /*
69536 ** 2008 August 18
69537 **
69538 ** The author disclaims copyright to this source code.  In place of
69539 ** a legal notice, here is a blessing:
69540 **
69541 **    May you do good and not evil.
69542 **    May you find forgiveness for yourself and forgive others.
69543 **    May you share freely, never taking more than you give.
69544 **
69545 *************************************************************************
69546 **
69547 ** This file contains routines used for walking the parser tree and
69548 ** resolve all identifiers by associating them with a particular
69549 ** table and column.
69550 */
69551
69552 /*
69553 ** Turn the pExpr expression into an alias for the iCol-th column of the
69554 ** result set in pEList.
69555 **
69556 ** If the result set column is a simple column reference, then this routine
69557 ** makes an exact copy.  But for any other kind of expression, this
69558 ** routine make a copy of the result set column as the argument to the
69559 ** TK_AS operator.  The TK_AS operator causes the expression to be
69560 ** evaluated just once and then reused for each alias.
69561 **
69562 ** The reason for suppressing the TK_AS term when the expression is a simple
69563 ** column reference is so that the column reference will be recognized as
69564 ** usable by indices within the WHERE clause processing logic. 
69565 **
69566 ** Hack:  The TK_AS operator is inhibited if zType[0]=='G'.  This means
69567 ** that in a GROUP BY clause, the expression is evaluated twice.  Hence:
69568 **
69569 **     SELECT random()%5 AS x, count(*) FROM tab GROUP BY x
69570 **
69571 ** Is equivalent to:
69572 **
69573 **     SELECT random()%5 AS x, count(*) FROM tab GROUP BY random()%5
69574 **
69575 ** The result of random()%5 in the GROUP BY clause is probably different
69576 ** from the result in the result-set.  We might fix this someday.  Or
69577 ** then again, we might not...
69578 */
69579 static void resolveAlias(
69580   Parse *pParse,         /* Parsing context */
69581   ExprList *pEList,      /* A result set */
69582   int iCol,              /* A column in the result set.  0..pEList->nExpr-1 */
69583   Expr *pExpr,           /* Transform this into an alias to the result set */
69584   const char *zType      /* "GROUP" or "ORDER" or "" */
69585 ){
69586   Expr *pOrig;           /* The iCol-th column of the result set */
69587   Expr *pDup;            /* Copy of pOrig */
69588   sqlite3 *db;           /* The database connection */
69589
69590   assert( iCol>=0 && iCol<pEList->nExpr );
69591   pOrig = pEList->a[iCol].pExpr;
69592   assert( pOrig!=0 );
69593   assert( pOrig->flags & EP_Resolved );
69594   db = pParse->db;
69595   if( pOrig->op!=TK_COLUMN && zType[0]!='G' ){
69596     pDup = sqlite3ExprDup(db, pOrig, 0);
69597     pDup = sqlite3PExpr(pParse, TK_AS, pDup, 0, 0);
69598     if( pDup==0 ) return;
69599     if( pEList->a[iCol].iAlias==0 ){
69600       pEList->a[iCol].iAlias = (u16)(++pParse->nAlias);
69601     }
69602     pDup->iTable = pEList->a[iCol].iAlias;
69603   }else if( ExprHasProperty(pOrig, EP_IntValue) || pOrig->u.zToken==0 ){
69604     pDup = sqlite3ExprDup(db, pOrig, 0);
69605     if( pDup==0 ) return;
69606   }else{
69607     char *zToken = pOrig->u.zToken;
69608     assert( zToken!=0 );
69609     pOrig->u.zToken = 0;
69610     pDup = sqlite3ExprDup(db, pOrig, 0);
69611     pOrig->u.zToken = zToken;
69612     if( pDup==0 ) return;
69613     assert( (pDup->flags & (EP_Reduced|EP_TokenOnly))==0 );
69614     pDup->flags2 |= EP2_MallocedToken;
69615     pDup->u.zToken = sqlite3DbStrDup(db, zToken);
69616   }
69617   if( pExpr->flags & EP_ExpCollate ){
69618     pDup->pColl = pExpr->pColl;
69619     pDup->flags |= EP_ExpCollate;
69620   }
69621
69622   /* Before calling sqlite3ExprDelete(), set the EP_Static flag. This 
69623   ** prevents ExprDelete() from deleting the Expr structure itself,
69624   ** allowing it to be repopulated by the memcpy() on the following line.
69625   */
69626   ExprSetProperty(pExpr, EP_Static);
69627   sqlite3ExprDelete(db, pExpr);
69628   memcpy(pExpr, pDup, sizeof(*pExpr));
69629   sqlite3DbFree(db, pDup);
69630 }
69631
69632 /*
69633 ** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up
69634 ** that name in the set of source tables in pSrcList and make the pExpr 
69635 ** expression node refer back to that source column.  The following changes
69636 ** are made to pExpr:
69637 **
69638 **    pExpr->iDb           Set the index in db->aDb[] of the database X
69639 **                         (even if X is implied).
69640 **    pExpr->iTable        Set to the cursor number for the table obtained
69641 **                         from pSrcList.
69642 **    pExpr->pTab          Points to the Table structure of X.Y (even if
69643 **                         X and/or Y are implied.)
69644 **    pExpr->iColumn       Set to the column number within the table.
69645 **    pExpr->op            Set to TK_COLUMN.
69646 **    pExpr->pLeft         Any expression this points to is deleted
69647 **    pExpr->pRight        Any expression this points to is deleted.
69648 **
69649 ** The zDb variable is the name of the database (the "X").  This value may be
69650 ** NULL meaning that name is of the form Y.Z or Z.  Any available database
69651 ** can be used.  The zTable variable is the name of the table (the "Y").  This
69652 ** value can be NULL if zDb is also NULL.  If zTable is NULL it
69653 ** means that the form of the name is Z and that columns from any table
69654 ** can be used.
69655 **
69656 ** If the name cannot be resolved unambiguously, leave an error message
69657 ** in pParse and return WRC_Abort.  Return WRC_Prune on success.
69658 */
69659 static int lookupName(
69660   Parse *pParse,       /* The parsing context */
69661   const char *zDb,     /* Name of the database containing table, or NULL */
69662   const char *zTab,    /* Name of table containing column, or NULL */
69663   const char *zCol,    /* Name of the column. */
69664   NameContext *pNC,    /* The name context used to resolve the name */
69665   Expr *pExpr          /* Make this EXPR node point to the selected column */
69666 ){
69667   int i, j;            /* Loop counters */
69668   int cnt = 0;                      /* Number of matching column names */
69669   int cntTab = 0;                   /* Number of matching table names */
69670   sqlite3 *db = pParse->db;         /* The database connection */
69671   struct SrcList_item *pItem;       /* Use for looping over pSrcList items */
69672   struct SrcList_item *pMatch = 0;  /* The matching pSrcList item */
69673   NameContext *pTopNC = pNC;        /* First namecontext in the list */
69674   Schema *pSchema = 0;              /* Schema of the expression */
69675   int isTrigger = 0;
69676
69677   assert( pNC );     /* the name context cannot be NULL. */
69678   assert( zCol );    /* The Z in X.Y.Z cannot be NULL */
69679   assert( ~ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
69680
69681   /* Initialize the node to no-match */
69682   pExpr->iTable = -1;
69683   pExpr->pTab = 0;
69684   ExprSetIrreducible(pExpr);
69685
69686   /* Start at the inner-most context and move outward until a match is found */
69687   while( pNC && cnt==0 ){
69688     ExprList *pEList;
69689     SrcList *pSrcList = pNC->pSrcList;
69690
69691     if( pSrcList ){
69692       for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){
69693         Table *pTab;
69694         int iDb;
69695         Column *pCol;
69696   
69697         pTab = pItem->pTab;
69698         assert( pTab!=0 && pTab->zName!=0 );
69699         iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
69700         assert( pTab->nCol>0 );
69701         if( zTab ){
69702           if( pItem->zAlias ){
69703             char *zTabName = pItem->zAlias;
69704             if( sqlite3StrICmp(zTabName, zTab)!=0 ) continue;
69705           }else{
69706             char *zTabName = pTab->zName;
69707             if( NEVER(zTabName==0) || sqlite3StrICmp(zTabName, zTab)!=0 ){
69708               continue;
69709             }
69710             if( zDb!=0 && sqlite3StrICmp(db->aDb[iDb].zName, zDb)!=0 ){
69711               continue;
69712             }
69713           }
69714         }
69715         if( 0==(cntTab++) ){
69716           pExpr->iTable = pItem->iCursor;
69717           pExpr->pTab = pTab;
69718           pSchema = pTab->pSchema;
69719           pMatch = pItem;
69720         }
69721         for(j=0, pCol=pTab->aCol; j<pTab->nCol; j++, pCol++){
69722           if( sqlite3StrICmp(pCol->zName, zCol)==0 ){
69723             IdList *pUsing;
69724             cnt++;
69725             pExpr->iTable = pItem->iCursor;
69726             pExpr->pTab = pTab;
69727             pMatch = pItem;
69728             pSchema = pTab->pSchema;
69729             /* Substitute the rowid (column -1) for the INTEGER PRIMARY KEY */
69730             pExpr->iColumn = j==pTab->iPKey ? -1 : (i16)j;
69731             if( i<pSrcList->nSrc-1 ){
69732               if( pItem[1].jointype & JT_NATURAL ){
69733                 /* If this match occurred in the left table of a natural join,
69734                 ** then skip the right table to avoid a duplicate match */
69735                 pItem++;
69736                 i++;
69737               }else if( (pUsing = pItem[1].pUsing)!=0 ){
69738                 /* If this match occurs on a column that is in the USING clause
69739                 ** of a join, skip the search of the right table of the join
69740                 ** to avoid a duplicate match there. */
69741                 int k;
69742                 for(k=0; k<pUsing->nId; k++){
69743                   if( sqlite3StrICmp(pUsing->a[k].zName, zCol)==0 ){
69744                     pItem++;
69745                     i++;
69746                     break;
69747                   }
69748                 }
69749               }
69750             }
69751             break;
69752           }
69753         }
69754       }
69755     }
69756
69757 #ifndef SQLITE_OMIT_TRIGGER
69758     /* If we have not already resolved the name, then maybe 
69759     ** it is a new.* or old.* trigger argument reference
69760     */
69761     if( zDb==0 && zTab!=0 && cnt==0 && pParse->pTriggerTab!=0 ){
69762       int op = pParse->eTriggerOp;
69763       Table *pTab = 0;
69764       assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT );
69765       if( op!=TK_DELETE && sqlite3StrICmp("new",zTab) == 0 ){
69766         pExpr->iTable = 1;
69767         pTab = pParse->pTriggerTab;
69768       }else if( op!=TK_INSERT && sqlite3StrICmp("old",zTab)==0 ){
69769         pExpr->iTable = 0;
69770         pTab = pParse->pTriggerTab;
69771       }
69772
69773       if( pTab ){ 
69774         int iCol;
69775         pSchema = pTab->pSchema;
69776         cntTab++;
69777         for(iCol=0; iCol<pTab->nCol; iCol++){
69778           Column *pCol = &pTab->aCol[iCol];
69779           if( sqlite3StrICmp(pCol->zName, zCol)==0 ){
69780             if( iCol==pTab->iPKey ){
69781               iCol = -1;
69782             }
69783             break;
69784           }
69785         }
69786         if( iCol>=pTab->nCol && sqlite3IsRowid(zCol) ){
69787           iCol = -1;        /* IMP: R-44911-55124 */
69788         }
69789         if( iCol<pTab->nCol ){
69790           cnt++;
69791           if( iCol<0 ){
69792             pExpr->affinity = SQLITE_AFF_INTEGER;
69793           }else if( pExpr->iTable==0 ){
69794             testcase( iCol==31 );
69795             testcase( iCol==32 );
69796             pParse->oldmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
69797           }else{
69798             testcase( iCol==31 );
69799             testcase( iCol==32 );
69800             pParse->newmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
69801           }
69802           pExpr->iColumn = (i16)iCol;
69803           pExpr->pTab = pTab;
69804           isTrigger = 1;
69805         }
69806       }
69807     }
69808 #endif /* !defined(SQLITE_OMIT_TRIGGER) */
69809
69810     /*
69811     ** Perhaps the name is a reference to the ROWID
69812     */
69813     if( cnt==0 && cntTab==1 && sqlite3IsRowid(zCol) ){
69814       cnt = 1;
69815       pExpr->iColumn = -1;     /* IMP: R-44911-55124 */
69816       pExpr->affinity = SQLITE_AFF_INTEGER;
69817     }
69818
69819     /*
69820     ** If the input is of the form Z (not Y.Z or X.Y.Z) then the name Z
69821     ** might refer to an result-set alias.  This happens, for example, when
69822     ** we are resolving names in the WHERE clause of the following command:
69823     **
69824     **     SELECT a+b AS x FROM table WHERE x<10;
69825     **
69826     ** In cases like this, replace pExpr with a copy of the expression that
69827     ** forms the result set entry ("a+b" in the example) and return immediately.
69828     ** Note that the expression in the result set should have already been
69829     ** resolved by the time the WHERE clause is resolved.
69830     */
69831     if( cnt==0 && (pEList = pNC->pEList)!=0 && zTab==0 ){
69832       for(j=0; j<pEList->nExpr; j++){
69833         char *zAs = pEList->a[j].zName;
69834         if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){
69835           Expr *pOrig;
69836           assert( pExpr->pLeft==0 && pExpr->pRight==0 );
69837           assert( pExpr->x.pList==0 );
69838           assert( pExpr->x.pSelect==0 );
69839           pOrig = pEList->a[j].pExpr;
69840           if( !pNC->allowAgg && ExprHasProperty(pOrig, EP_Agg) ){
69841             sqlite3ErrorMsg(pParse, "misuse of aliased aggregate %s", zAs);
69842             return WRC_Abort;
69843           }
69844           resolveAlias(pParse, pEList, j, pExpr, "");
69845           cnt = 1;
69846           pMatch = 0;
69847           assert( zTab==0 && zDb==0 );
69848           goto lookupname_end;
69849         }
69850       } 
69851     }
69852
69853     /* Advance to the next name context.  The loop will exit when either
69854     ** we have a match (cnt>0) or when we run out of name contexts.
69855     */
69856     if( cnt==0 ){
69857       pNC = pNC->pNext;
69858     }
69859   }
69860
69861   /*
69862   ** If X and Y are NULL (in other words if only the column name Z is
69863   ** supplied) and the value of Z is enclosed in double-quotes, then
69864   ** Z is a string literal if it doesn't match any column names.  In that
69865   ** case, we need to return right away and not make any changes to
69866   ** pExpr.
69867   **
69868   ** Because no reference was made to outer contexts, the pNC->nRef
69869   ** fields are not changed in any context.
69870   */
69871   if( cnt==0 && zTab==0 && ExprHasProperty(pExpr,EP_DblQuoted) ){
69872     pExpr->op = TK_STRING;
69873     pExpr->pTab = 0;
69874     return WRC_Prune;
69875   }
69876
69877   /*
69878   ** cnt==0 means there was not match.  cnt>1 means there were two or
69879   ** more matches.  Either way, we have an error.
69880   */
69881   if( cnt!=1 ){
69882     const char *zErr;
69883     zErr = cnt==0 ? "no such column" : "ambiguous column name";
69884     if( zDb ){
69885       sqlite3ErrorMsg(pParse, "%s: %s.%s.%s", zErr, zDb, zTab, zCol);
69886     }else if( zTab ){
69887       sqlite3ErrorMsg(pParse, "%s: %s.%s", zErr, zTab, zCol);
69888     }else{
69889       sqlite3ErrorMsg(pParse, "%s: %s", zErr, zCol);
69890     }
69891     pParse->checkSchema = 1;
69892     pTopNC->nErr++;
69893   }
69894
69895   /* If a column from a table in pSrcList is referenced, then record
69896   ** this fact in the pSrcList.a[].colUsed bitmask.  Column 0 causes
69897   ** bit 0 to be set.  Column 1 sets bit 1.  And so forth.  If the
69898   ** column number is greater than the number of bits in the bitmask
69899   ** then set the high-order bit of the bitmask.
69900   */
69901   if( pExpr->iColumn>=0 && pMatch!=0 ){
69902     int n = pExpr->iColumn;
69903     testcase( n==BMS-1 );
69904     if( n>=BMS ){
69905       n = BMS-1;
69906     }
69907     assert( pMatch->iCursor==pExpr->iTable );
69908     pMatch->colUsed |= ((Bitmask)1)<<n;
69909   }
69910
69911   /* Clean up and return
69912   */
69913   sqlite3ExprDelete(db, pExpr->pLeft);
69914   pExpr->pLeft = 0;
69915   sqlite3ExprDelete(db, pExpr->pRight);
69916   pExpr->pRight = 0;
69917   pExpr->op = (isTrigger ? TK_TRIGGER : TK_COLUMN);
69918 lookupname_end:
69919   if( cnt==1 ){
69920     assert( pNC!=0 );
69921     sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList);
69922     /* Increment the nRef value on all name contexts from TopNC up to
69923     ** the point where the name matched. */
69924     for(;;){
69925       assert( pTopNC!=0 );
69926       pTopNC->nRef++;
69927       if( pTopNC==pNC ) break;
69928       pTopNC = pTopNC->pNext;
69929     }
69930     return WRC_Prune;
69931   } else {
69932     return WRC_Abort;
69933   }
69934 }
69935
69936 /*
69937 ** Allocate and return a pointer to an expression to load the column iCol
69938 ** from datasource iSrc in SrcList pSrc.
69939 */
69940 SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *db, SrcList *pSrc, int iSrc, int iCol){
69941   Expr *p = sqlite3ExprAlloc(db, TK_COLUMN, 0, 0);
69942   if( p ){
69943     struct SrcList_item *pItem = &pSrc->a[iSrc];
69944     p->pTab = pItem->pTab;
69945     p->iTable = pItem->iCursor;
69946     if( p->pTab->iPKey==iCol ){
69947       p->iColumn = -1;
69948     }else{
69949       p->iColumn = (ynVar)iCol;
69950       testcase( iCol==BMS );
69951       testcase( iCol==BMS-1 );
69952       pItem->colUsed |= ((Bitmask)1)<<(iCol>=BMS ? BMS-1 : iCol);
69953     }
69954     ExprSetProperty(p, EP_Resolved);
69955   }
69956   return p;
69957 }
69958
69959 /*
69960 ** This routine is callback for sqlite3WalkExpr().
69961 **
69962 ** Resolve symbolic names into TK_COLUMN operators for the current
69963 ** node in the expression tree.  Return 0 to continue the search down
69964 ** the tree or 2 to abort the tree walk.
69965 **
69966 ** This routine also does error checking and name resolution for
69967 ** function names.  The operator for aggregate functions is changed
69968 ** to TK_AGG_FUNCTION.
69969 */
69970 static int resolveExprStep(Walker *pWalker, Expr *pExpr){
69971   NameContext *pNC;
69972   Parse *pParse;
69973
69974   pNC = pWalker->u.pNC;
69975   assert( pNC!=0 );
69976   pParse = pNC->pParse;
69977   assert( pParse==pWalker->pParse );
69978
69979   if( ExprHasAnyProperty(pExpr, EP_Resolved) ) return WRC_Prune;
69980   ExprSetProperty(pExpr, EP_Resolved);
69981 #ifndef NDEBUG
69982   if( pNC->pSrcList && pNC->pSrcList->nAlloc>0 ){
69983     SrcList *pSrcList = pNC->pSrcList;
69984     int i;
69985     for(i=0; i<pNC->pSrcList->nSrc; i++){
69986       assert( pSrcList->a[i].iCursor>=0 && pSrcList->a[i].iCursor<pParse->nTab);
69987     }
69988   }
69989 #endif
69990   switch( pExpr->op ){
69991
69992 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
69993     /* The special operator TK_ROW means use the rowid for the first
69994     ** column in the FROM clause.  This is used by the LIMIT and ORDER BY
69995     ** clause processing on UPDATE and DELETE statements.
69996     */
69997     case TK_ROW: {
69998       SrcList *pSrcList = pNC->pSrcList;
69999       struct SrcList_item *pItem;
70000       assert( pSrcList && pSrcList->nSrc==1 );
70001       pItem = pSrcList->a; 
70002       pExpr->op = TK_COLUMN;
70003       pExpr->pTab = pItem->pTab;
70004       pExpr->iTable = pItem->iCursor;
70005       pExpr->iColumn = -1;
70006       pExpr->affinity = SQLITE_AFF_INTEGER;
70007       break;
70008     }
70009 #endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */
70010
70011     /* A lone identifier is the name of a column.
70012     */
70013     case TK_ID: {
70014       return lookupName(pParse, 0, 0, pExpr->u.zToken, pNC, pExpr);
70015     }
70016   
70017     /* A table name and column name:     ID.ID
70018     ** Or a database, table and column:  ID.ID.ID
70019     */
70020     case TK_DOT: {
70021       const char *zColumn;
70022       const char *zTable;
70023       const char *zDb;
70024       Expr *pRight;
70025
70026       /* if( pSrcList==0 ) break; */
70027       pRight = pExpr->pRight;
70028       if( pRight->op==TK_ID ){
70029         zDb = 0;
70030         zTable = pExpr->pLeft->u.zToken;
70031         zColumn = pRight->u.zToken;
70032       }else{
70033         assert( pRight->op==TK_DOT );
70034         zDb = pExpr->pLeft->u.zToken;
70035         zTable = pRight->pLeft->u.zToken;
70036         zColumn = pRight->pRight->u.zToken;
70037       }
70038       return lookupName(pParse, zDb, zTable, zColumn, pNC, pExpr);
70039     }
70040
70041     /* Resolve function names
70042     */
70043     case TK_CONST_FUNC:
70044     case TK_FUNCTION: {
70045       ExprList *pList = pExpr->x.pList;    /* The argument list */
70046       int n = pList ? pList->nExpr : 0;    /* Number of arguments */
70047       int no_such_func = 0;       /* True if no such function exists */
70048       int wrong_num_args = 0;     /* True if wrong number of arguments */
70049       int is_agg = 0;             /* True if is an aggregate function */
70050       int auth;                   /* Authorization to use the function */
70051       int nId;                    /* Number of characters in function name */
70052       const char *zId;            /* The function name. */
70053       FuncDef *pDef;              /* Information about the function */
70054       u8 enc = ENC(pParse->db);   /* The database encoding */
70055
70056       testcase( pExpr->op==TK_CONST_FUNC );
70057       assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
70058       zId = pExpr->u.zToken;
70059       nId = sqlite3Strlen30(zId);
70060       pDef = sqlite3FindFunction(pParse->db, zId, nId, n, enc, 0);
70061       if( pDef==0 ){
70062         pDef = sqlite3FindFunction(pParse->db, zId, nId, -1, enc, 0);
70063         if( pDef==0 ){
70064           no_such_func = 1;
70065         }else{
70066           wrong_num_args = 1;
70067         }
70068       }else{
70069         is_agg = pDef->xFunc==0;
70070       }
70071 #ifndef SQLITE_OMIT_AUTHORIZATION
70072       if( pDef ){
70073         auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0);
70074         if( auth!=SQLITE_OK ){
70075           if( auth==SQLITE_DENY ){
70076             sqlite3ErrorMsg(pParse, "not authorized to use function: %s",
70077                                     pDef->zName);
70078             pNC->nErr++;
70079           }
70080           pExpr->op = TK_NULL;
70081           return WRC_Prune;
70082         }
70083       }
70084 #endif
70085       if( is_agg && !pNC->allowAgg ){
70086         sqlite3ErrorMsg(pParse, "misuse of aggregate function %.*s()", nId,zId);
70087         pNC->nErr++;
70088         is_agg = 0;
70089       }else if( no_such_func ){
70090         sqlite3ErrorMsg(pParse, "no such function: %.*s", nId, zId);
70091         pNC->nErr++;
70092       }else if( wrong_num_args ){
70093         sqlite3ErrorMsg(pParse,"wrong number of arguments to function %.*s()",
70094              nId, zId);
70095         pNC->nErr++;
70096       }
70097       if( is_agg ){
70098         pExpr->op = TK_AGG_FUNCTION;
70099         pNC->hasAgg = 1;
70100       }
70101       if( is_agg ) pNC->allowAgg = 0;
70102       sqlite3WalkExprList(pWalker, pList);
70103       if( is_agg ) pNC->allowAgg = 1;
70104       /* FIX ME:  Compute pExpr->affinity based on the expected return
70105       ** type of the function 
70106       */
70107       return WRC_Prune;
70108     }
70109 #ifndef SQLITE_OMIT_SUBQUERY
70110     case TK_SELECT:
70111     case TK_EXISTS:  testcase( pExpr->op==TK_EXISTS );
70112 #endif
70113     case TK_IN: {
70114       testcase( pExpr->op==TK_IN );
70115       if( ExprHasProperty(pExpr, EP_xIsSelect) ){
70116         int nRef = pNC->nRef;
70117 #ifndef SQLITE_OMIT_CHECK
70118         if( pNC->isCheck ){
70119           sqlite3ErrorMsg(pParse,"subqueries prohibited in CHECK constraints");
70120         }
70121 #endif
70122         sqlite3WalkSelect(pWalker, pExpr->x.pSelect);
70123         assert( pNC->nRef>=nRef );
70124         if( nRef!=pNC->nRef ){
70125           ExprSetProperty(pExpr, EP_VarSelect);
70126         }
70127       }
70128       break;
70129     }
70130 #ifndef SQLITE_OMIT_CHECK
70131     case TK_VARIABLE: {
70132       if( pNC->isCheck ){
70133         sqlite3ErrorMsg(pParse,"parameters prohibited in CHECK constraints");
70134       }
70135       break;
70136     }
70137 #endif
70138   }
70139   return (pParse->nErr || pParse->db->mallocFailed) ? WRC_Abort : WRC_Continue;
70140 }
70141
70142 /*
70143 ** pEList is a list of expressions which are really the result set of the
70144 ** a SELECT statement.  pE is a term in an ORDER BY or GROUP BY clause.
70145 ** This routine checks to see if pE is a simple identifier which corresponds
70146 ** to the AS-name of one of the terms of the expression list.  If it is,
70147 ** this routine return an integer between 1 and N where N is the number of
70148 ** elements in pEList, corresponding to the matching entry.  If there is
70149 ** no match, or if pE is not a simple identifier, then this routine
70150 ** return 0.
70151 **
70152 ** pEList has been resolved.  pE has not.
70153 */
70154 static int resolveAsName(
70155   Parse *pParse,     /* Parsing context for error messages */
70156   ExprList *pEList,  /* List of expressions to scan */
70157   Expr *pE           /* Expression we are trying to match */
70158 ){
70159   int i;             /* Loop counter */
70160
70161   UNUSED_PARAMETER(pParse);
70162
70163   if( pE->op==TK_ID ){
70164     char *zCol = pE->u.zToken;
70165     for(i=0; i<pEList->nExpr; i++){
70166       char *zAs = pEList->a[i].zName;
70167       if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){
70168         return i+1;
70169       }
70170     }
70171   }
70172   return 0;
70173 }
70174
70175 /*
70176 ** pE is a pointer to an expression which is a single term in the
70177 ** ORDER BY of a compound SELECT.  The expression has not been
70178 ** name resolved.
70179 **
70180 ** At the point this routine is called, we already know that the
70181 ** ORDER BY term is not an integer index into the result set.  That
70182 ** case is handled by the calling routine.
70183 **
70184 ** Attempt to match pE against result set columns in the left-most
70185 ** SELECT statement.  Return the index i of the matching column,
70186 ** as an indication to the caller that it should sort by the i-th column.
70187 ** The left-most column is 1.  In other words, the value returned is the
70188 ** same integer value that would be used in the SQL statement to indicate
70189 ** the column.
70190 **
70191 ** If there is no match, return 0.  Return -1 if an error occurs.
70192 */
70193 static int resolveOrderByTermToExprList(
70194   Parse *pParse,     /* Parsing context for error messages */
70195   Select *pSelect,   /* The SELECT statement with the ORDER BY clause */
70196   Expr *pE           /* The specific ORDER BY term */
70197 ){
70198   int i;             /* Loop counter */
70199   ExprList *pEList;  /* The columns of the result set */
70200   NameContext nc;    /* Name context for resolving pE */
70201   sqlite3 *db;       /* Database connection */
70202   int rc;            /* Return code from subprocedures */
70203   u8 savedSuppErr;   /* Saved value of db->suppressErr */
70204
70205   assert( sqlite3ExprIsInteger(pE, &i)==0 );
70206   pEList = pSelect->pEList;
70207
70208   /* Resolve all names in the ORDER BY term expression
70209   */
70210   memset(&nc, 0, sizeof(nc));
70211   nc.pParse = pParse;
70212   nc.pSrcList = pSelect->pSrc;
70213   nc.pEList = pEList;
70214   nc.allowAgg = 1;
70215   nc.nErr = 0;
70216   db = pParse->db;
70217   savedSuppErr = db->suppressErr;
70218   db->suppressErr = 1;
70219   rc = sqlite3ResolveExprNames(&nc, pE);
70220   db->suppressErr = savedSuppErr;
70221   if( rc ) return 0;
70222
70223   /* Try to match the ORDER BY expression against an expression
70224   ** in the result set.  Return an 1-based index of the matching
70225   ** result-set entry.
70226   */
70227   for(i=0; i<pEList->nExpr; i++){
70228     if( sqlite3ExprCompare(pEList->a[i].pExpr, pE)<2 ){
70229       return i+1;
70230     }
70231   }
70232
70233   /* If no match, return 0. */
70234   return 0;
70235 }
70236
70237 /*
70238 ** Generate an ORDER BY or GROUP BY term out-of-range error.
70239 */
70240 static void resolveOutOfRangeError(
70241   Parse *pParse,         /* The error context into which to write the error */
70242   const char *zType,     /* "ORDER" or "GROUP" */
70243   int i,                 /* The index (1-based) of the term out of range */
70244   int mx                 /* Largest permissible value of i */
70245 ){
70246   sqlite3ErrorMsg(pParse, 
70247     "%r %s BY term out of range - should be "
70248     "between 1 and %d", i, zType, mx);
70249 }
70250
70251 /*
70252 ** Analyze the ORDER BY clause in a compound SELECT statement.   Modify
70253 ** each term of the ORDER BY clause is a constant integer between 1
70254 ** and N where N is the number of columns in the compound SELECT.
70255 **
70256 ** ORDER BY terms that are already an integer between 1 and N are
70257 ** unmodified.  ORDER BY terms that are integers outside the range of
70258 ** 1 through N generate an error.  ORDER BY terms that are expressions
70259 ** are matched against result set expressions of compound SELECT
70260 ** beginning with the left-most SELECT and working toward the right.
70261 ** At the first match, the ORDER BY expression is transformed into
70262 ** the integer column number.
70263 **
70264 ** Return the number of errors seen.
70265 */
70266 static int resolveCompoundOrderBy(
70267   Parse *pParse,        /* Parsing context.  Leave error messages here */
70268   Select *pSelect       /* The SELECT statement containing the ORDER BY */
70269 ){
70270   int i;
70271   ExprList *pOrderBy;
70272   ExprList *pEList;
70273   sqlite3 *db;
70274   int moreToDo = 1;
70275
70276   pOrderBy = pSelect->pOrderBy;
70277   if( pOrderBy==0 ) return 0;
70278   db = pParse->db;
70279 #if SQLITE_MAX_COLUMN
70280   if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
70281     sqlite3ErrorMsg(pParse, "too many terms in ORDER BY clause");
70282     return 1;
70283   }
70284 #endif
70285   for(i=0; i<pOrderBy->nExpr; i++){
70286     pOrderBy->a[i].done = 0;
70287   }
70288   pSelect->pNext = 0;
70289   while( pSelect->pPrior ){
70290     pSelect->pPrior->pNext = pSelect;
70291     pSelect = pSelect->pPrior;
70292   }
70293   while( pSelect && moreToDo ){
70294     struct ExprList_item *pItem;
70295     moreToDo = 0;
70296     pEList = pSelect->pEList;
70297     assert( pEList!=0 );
70298     for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
70299       int iCol = -1;
70300       Expr *pE, *pDup;
70301       if( pItem->done ) continue;
70302       pE = pItem->pExpr;
70303       if( sqlite3ExprIsInteger(pE, &iCol) ){
70304         if( iCol<=0 || iCol>pEList->nExpr ){
70305           resolveOutOfRangeError(pParse, "ORDER", i+1, pEList->nExpr);
70306           return 1;
70307         }
70308       }else{
70309         iCol = resolveAsName(pParse, pEList, pE);
70310         if( iCol==0 ){
70311           pDup = sqlite3ExprDup(db, pE, 0);
70312           if( !db->mallocFailed ){
70313             assert(pDup);
70314             iCol = resolveOrderByTermToExprList(pParse, pSelect, pDup);
70315           }
70316           sqlite3ExprDelete(db, pDup);
70317         }
70318       }
70319       if( iCol>0 ){
70320         CollSeq *pColl = pE->pColl;
70321         int flags = pE->flags & EP_ExpCollate;
70322         sqlite3ExprDelete(db, pE);
70323         pItem->pExpr = pE = sqlite3Expr(db, TK_INTEGER, 0);
70324         if( pE==0 ) return 1;
70325         pE->pColl = pColl;
70326         pE->flags |= EP_IntValue | flags;
70327         pE->u.iValue = iCol;
70328         pItem->iCol = (u16)iCol;
70329         pItem->done = 1;
70330       }else{
70331         moreToDo = 1;
70332       }
70333     }
70334     pSelect = pSelect->pNext;
70335   }
70336   for(i=0; i<pOrderBy->nExpr; i++){
70337     if( pOrderBy->a[i].done==0 ){
70338       sqlite3ErrorMsg(pParse, "%r ORDER BY term does not match any "
70339             "column in the result set", i+1);
70340       return 1;
70341     }
70342   }
70343   return 0;
70344 }
70345
70346 /*
70347 ** Check every term in the ORDER BY or GROUP BY clause pOrderBy of
70348 ** the SELECT statement pSelect.  If any term is reference to a
70349 ** result set expression (as determined by the ExprList.a.iCol field)
70350 ** then convert that term into a copy of the corresponding result set
70351 ** column.
70352 **
70353 ** If any errors are detected, add an error message to pParse and
70354 ** return non-zero.  Return zero if no errors are seen.
70355 */
70356 SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(
70357   Parse *pParse,        /* Parsing context.  Leave error messages here */
70358   Select *pSelect,      /* The SELECT statement containing the clause */
70359   ExprList *pOrderBy,   /* The ORDER BY or GROUP BY clause to be processed */
70360   const char *zType     /* "ORDER" or "GROUP" */
70361 ){
70362   int i;
70363   sqlite3 *db = pParse->db;
70364   ExprList *pEList;
70365   struct ExprList_item *pItem;
70366
70367   if( pOrderBy==0 || pParse->db->mallocFailed ) return 0;
70368 #if SQLITE_MAX_COLUMN
70369   if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
70370     sqlite3ErrorMsg(pParse, "too many terms in %s BY clause", zType);
70371     return 1;
70372   }
70373 #endif
70374   pEList = pSelect->pEList;
70375   assert( pEList!=0 );  /* sqlite3SelectNew() guarantees this */
70376   for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
70377     if( pItem->iCol ){
70378       if( pItem->iCol>pEList->nExpr ){
70379         resolveOutOfRangeError(pParse, zType, i+1, pEList->nExpr);
70380         return 1;
70381       }
70382       resolveAlias(pParse, pEList, pItem->iCol-1, pItem->pExpr, zType);
70383     }
70384   }
70385   return 0;
70386 }
70387
70388 /*
70389 ** pOrderBy is an ORDER BY or GROUP BY clause in SELECT statement pSelect.
70390 ** The Name context of the SELECT statement is pNC.  zType is either
70391 ** "ORDER" or "GROUP" depending on which type of clause pOrderBy is.
70392 **
70393 ** This routine resolves each term of the clause into an expression.
70394 ** If the order-by term is an integer I between 1 and N (where N is the
70395 ** number of columns in the result set of the SELECT) then the expression
70396 ** in the resolution is a copy of the I-th result-set expression.  If
70397 ** the order-by term is an identify that corresponds to the AS-name of
70398 ** a result-set expression, then the term resolves to a copy of the
70399 ** result-set expression.  Otherwise, the expression is resolved in
70400 ** the usual way - using sqlite3ResolveExprNames().
70401 **
70402 ** This routine returns the number of errors.  If errors occur, then
70403 ** an appropriate error message might be left in pParse.  (OOM errors
70404 ** excepted.)
70405 */
70406 static int resolveOrderGroupBy(
70407   NameContext *pNC,     /* The name context of the SELECT statement */
70408   Select *pSelect,      /* The SELECT statement holding pOrderBy */
70409   ExprList *pOrderBy,   /* An ORDER BY or GROUP BY clause to resolve */
70410   const char *zType     /* Either "ORDER" or "GROUP", as appropriate */
70411 ){
70412   int i;                         /* Loop counter */
70413   int iCol;                      /* Column number */
70414   struct ExprList_item *pItem;   /* A term of the ORDER BY clause */
70415   Parse *pParse;                 /* Parsing context */
70416   int nResult;                   /* Number of terms in the result set */
70417
70418   if( pOrderBy==0 ) return 0;
70419   nResult = pSelect->pEList->nExpr;
70420   pParse = pNC->pParse;
70421   for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
70422     Expr *pE = pItem->pExpr;
70423     iCol = resolveAsName(pParse, pSelect->pEList, pE);
70424     if( iCol>0 ){
70425       /* If an AS-name match is found, mark this ORDER BY column as being
70426       ** a copy of the iCol-th result-set column.  The subsequent call to
70427       ** sqlite3ResolveOrderGroupBy() will convert the expression to a
70428       ** copy of the iCol-th result-set expression. */
70429       pItem->iCol = (u16)iCol;
70430       continue;
70431     }
70432     if( sqlite3ExprIsInteger(pE, &iCol) ){
70433       /* The ORDER BY term is an integer constant.  Again, set the column
70434       ** number so that sqlite3ResolveOrderGroupBy() will convert the
70435       ** order-by term to a copy of the result-set expression */
70436       if( iCol<1 ){
70437         resolveOutOfRangeError(pParse, zType, i+1, nResult);
70438         return 1;
70439       }
70440       pItem->iCol = (u16)iCol;
70441       continue;
70442     }
70443
70444     /* Otherwise, treat the ORDER BY term as an ordinary expression */
70445     pItem->iCol = 0;
70446     if( sqlite3ResolveExprNames(pNC, pE) ){
70447       return 1;
70448     }
70449   }
70450   return sqlite3ResolveOrderGroupBy(pParse, pSelect, pOrderBy, zType);
70451 }
70452
70453 /*
70454 ** Resolve names in the SELECT statement p and all of its descendents.
70455 */
70456 static int resolveSelectStep(Walker *pWalker, Select *p){
70457   NameContext *pOuterNC;  /* Context that contains this SELECT */
70458   NameContext sNC;        /* Name context of this SELECT */
70459   int isCompound;         /* True if p is a compound select */
70460   int nCompound;          /* Number of compound terms processed so far */
70461   Parse *pParse;          /* Parsing context */
70462   ExprList *pEList;       /* Result set expression list */
70463   int i;                  /* Loop counter */
70464   ExprList *pGroupBy;     /* The GROUP BY clause */
70465   Select *pLeftmost;      /* Left-most of SELECT of a compound */
70466   sqlite3 *db;            /* Database connection */
70467   
70468
70469   assert( p!=0 );
70470   if( p->selFlags & SF_Resolved ){
70471     return WRC_Prune;
70472   }
70473   pOuterNC = pWalker->u.pNC;
70474   pParse = pWalker->pParse;
70475   db = pParse->db;
70476
70477   /* Normally sqlite3SelectExpand() will be called first and will have
70478   ** already expanded this SELECT.  However, if this is a subquery within
70479   ** an expression, sqlite3ResolveExprNames() will be called without a
70480   ** prior call to sqlite3SelectExpand().  When that happens, let
70481   ** sqlite3SelectPrep() do all of the processing for this SELECT.
70482   ** sqlite3SelectPrep() will invoke both sqlite3SelectExpand() and
70483   ** this routine in the correct order.
70484   */
70485   if( (p->selFlags & SF_Expanded)==0 ){
70486     sqlite3SelectPrep(pParse, p, pOuterNC);
70487     return (pParse->nErr || db->mallocFailed) ? WRC_Abort : WRC_Prune;
70488   }
70489
70490   isCompound = p->pPrior!=0;
70491   nCompound = 0;
70492   pLeftmost = p;
70493   while( p ){
70494     assert( (p->selFlags & SF_Expanded)!=0 );
70495     assert( (p->selFlags & SF_Resolved)==0 );
70496     p->selFlags |= SF_Resolved;
70497
70498     /* Resolve the expressions in the LIMIT and OFFSET clauses. These
70499     ** are not allowed to refer to any names, so pass an empty NameContext.
70500     */
70501     memset(&sNC, 0, sizeof(sNC));
70502     sNC.pParse = pParse;
70503     if( sqlite3ResolveExprNames(&sNC, p->pLimit) ||
70504         sqlite3ResolveExprNames(&sNC, p->pOffset) ){
70505       return WRC_Abort;
70506     }
70507   
70508     /* Set up the local name-context to pass to sqlite3ResolveExprNames() to
70509     ** resolve the result-set expression list.
70510     */
70511     sNC.allowAgg = 1;
70512     sNC.pSrcList = p->pSrc;
70513     sNC.pNext = pOuterNC;
70514   
70515     /* Resolve names in the result set. */
70516     pEList = p->pEList;
70517     assert( pEList!=0 );
70518     for(i=0; i<pEList->nExpr; i++){
70519       Expr *pX = pEList->a[i].pExpr;
70520       if( sqlite3ResolveExprNames(&sNC, pX) ){
70521         return WRC_Abort;
70522       }
70523     }
70524   
70525     /* Recursively resolve names in all subqueries
70526     */
70527     for(i=0; i<p->pSrc->nSrc; i++){
70528       struct SrcList_item *pItem = &p->pSrc->a[i];
70529       if( pItem->pSelect ){
70530         const char *zSavedContext = pParse->zAuthContext;
70531         if( pItem->zName ) pParse->zAuthContext = pItem->zName;
70532         sqlite3ResolveSelectNames(pParse, pItem->pSelect, pOuterNC);
70533         pParse->zAuthContext = zSavedContext;
70534         if( pParse->nErr || db->mallocFailed ) return WRC_Abort;
70535       }
70536     }
70537   
70538     /* If there are no aggregate functions in the result-set, and no GROUP BY 
70539     ** expression, do not allow aggregates in any of the other expressions.
70540     */
70541     assert( (p->selFlags & SF_Aggregate)==0 );
70542     pGroupBy = p->pGroupBy;
70543     if( pGroupBy || sNC.hasAgg ){
70544       p->selFlags |= SF_Aggregate;
70545     }else{
70546       sNC.allowAgg = 0;
70547     }
70548   
70549     /* If a HAVING clause is present, then there must be a GROUP BY clause.
70550     */
70551     if( p->pHaving && !pGroupBy ){
70552       sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING");
70553       return WRC_Abort;
70554     }
70555   
70556     /* Add the expression list to the name-context before parsing the
70557     ** other expressions in the SELECT statement. This is so that
70558     ** expressions in the WHERE clause (etc.) can refer to expressions by
70559     ** aliases in the result set.
70560     **
70561     ** Minor point: If this is the case, then the expression will be
70562     ** re-evaluated for each reference to it.
70563     */
70564     sNC.pEList = p->pEList;
70565     if( sqlite3ResolveExprNames(&sNC, p->pWhere) ||
70566        sqlite3ResolveExprNames(&sNC, p->pHaving)
70567     ){
70568       return WRC_Abort;
70569     }
70570
70571     /* The ORDER BY and GROUP BY clauses may not refer to terms in
70572     ** outer queries 
70573     */
70574     sNC.pNext = 0;
70575     sNC.allowAgg = 1;
70576
70577     /* Process the ORDER BY clause for singleton SELECT statements.
70578     ** The ORDER BY clause for compounds SELECT statements is handled
70579     ** below, after all of the result-sets for all of the elements of
70580     ** the compound have been resolved.
70581     */
70582     if( !isCompound && resolveOrderGroupBy(&sNC, p, p->pOrderBy, "ORDER") ){
70583       return WRC_Abort;
70584     }
70585     if( db->mallocFailed ){
70586       return WRC_Abort;
70587     }
70588   
70589     /* Resolve the GROUP BY clause.  At the same time, make sure 
70590     ** the GROUP BY clause does not contain aggregate functions.
70591     */
70592     if( pGroupBy ){
70593       struct ExprList_item *pItem;
70594     
70595       if( resolveOrderGroupBy(&sNC, p, pGroupBy, "GROUP") || db->mallocFailed ){
70596         return WRC_Abort;
70597       }
70598       for(i=0, pItem=pGroupBy->a; i<pGroupBy->nExpr; i++, pItem++){
70599         if( ExprHasProperty(pItem->pExpr, EP_Agg) ){
70600           sqlite3ErrorMsg(pParse, "aggregate functions are not allowed in "
70601               "the GROUP BY clause");
70602           return WRC_Abort;
70603         }
70604       }
70605     }
70606
70607     /* Advance to the next term of the compound
70608     */
70609     p = p->pPrior;
70610     nCompound++;
70611   }
70612
70613   /* Resolve the ORDER BY on a compound SELECT after all terms of
70614   ** the compound have been resolved.
70615   */
70616   if( isCompound && resolveCompoundOrderBy(pParse, pLeftmost) ){
70617     return WRC_Abort;
70618   }
70619
70620   return WRC_Prune;
70621 }
70622
70623 /*
70624 ** This routine walks an expression tree and resolves references to
70625 ** table columns and result-set columns.  At the same time, do error
70626 ** checking on function usage and set a flag if any aggregate functions
70627 ** are seen.
70628 **
70629 ** To resolve table columns references we look for nodes (or subtrees) of the 
70630 ** form X.Y.Z or Y.Z or just Z where
70631 **
70632 **      X:   The name of a database.  Ex:  "main" or "temp" or
70633 **           the symbolic name assigned to an ATTACH-ed database.
70634 **
70635 **      Y:   The name of a table in a FROM clause.  Or in a trigger
70636 **           one of the special names "old" or "new".
70637 **
70638 **      Z:   The name of a column in table Y.
70639 **
70640 ** The node at the root of the subtree is modified as follows:
70641 **
70642 **    Expr.op        Changed to TK_COLUMN
70643 **    Expr.pTab      Points to the Table object for X.Y
70644 **    Expr.iColumn   The column index in X.Y.  -1 for the rowid.
70645 **    Expr.iTable    The VDBE cursor number for X.Y
70646 **
70647 **
70648 ** To resolve result-set references, look for expression nodes of the
70649 ** form Z (with no X and Y prefix) where the Z matches the right-hand
70650 ** size of an AS clause in the result-set of a SELECT.  The Z expression
70651 ** is replaced by a copy of the left-hand side of the result-set expression.
70652 ** Table-name and function resolution occurs on the substituted expression
70653 ** tree.  For example, in:
70654 **
70655 **      SELECT a+b AS x, c+d AS y FROM t1 ORDER BY x;
70656 **
70657 ** The "x" term of the order by is replaced by "a+b" to render:
70658 **
70659 **      SELECT a+b AS x, c+d AS y FROM t1 ORDER BY a+b;
70660 **
70661 ** Function calls are checked to make sure that the function is 
70662 ** defined and that the correct number of arguments are specified.
70663 ** If the function is an aggregate function, then the pNC->hasAgg is
70664 ** set and the opcode is changed from TK_FUNCTION to TK_AGG_FUNCTION.
70665 ** If an expression contains aggregate functions then the EP_Agg
70666 ** property on the expression is set.
70667 **
70668 ** An error message is left in pParse if anything is amiss.  The number
70669 ** if errors is returned.
70670 */
70671 SQLITE_PRIVATE int sqlite3ResolveExprNames( 
70672   NameContext *pNC,       /* Namespace to resolve expressions in. */
70673   Expr *pExpr             /* The expression to be analyzed. */
70674 ){
70675   int savedHasAgg;
70676   Walker w;
70677
70678   if( pExpr==0 ) return 0;
70679 #if SQLITE_MAX_EXPR_DEPTH>0
70680   {
70681     Parse *pParse = pNC->pParse;
70682     if( sqlite3ExprCheckHeight(pParse, pExpr->nHeight+pNC->pParse->nHeight) ){
70683       return 1;
70684     }
70685     pParse->nHeight += pExpr->nHeight;
70686   }
70687 #endif
70688   savedHasAgg = pNC->hasAgg;
70689   pNC->hasAgg = 0;
70690   w.xExprCallback = resolveExprStep;
70691   w.xSelectCallback = resolveSelectStep;
70692   w.pParse = pNC->pParse;
70693   w.u.pNC = pNC;
70694   sqlite3WalkExpr(&w, pExpr);
70695 #if SQLITE_MAX_EXPR_DEPTH>0
70696   pNC->pParse->nHeight -= pExpr->nHeight;
70697 #endif
70698   if( pNC->nErr>0 || w.pParse->nErr>0 ){
70699     ExprSetProperty(pExpr, EP_Error);
70700   }
70701   if( pNC->hasAgg ){
70702     ExprSetProperty(pExpr, EP_Agg);
70703   }else if( savedHasAgg ){
70704     pNC->hasAgg = 1;
70705   }
70706   return ExprHasProperty(pExpr, EP_Error);
70707 }
70708
70709
70710 /*
70711 ** Resolve all names in all expressions of a SELECT and in all
70712 ** decendents of the SELECT, including compounds off of p->pPrior,
70713 ** subqueries in expressions, and subqueries used as FROM clause
70714 ** terms.
70715 **
70716 ** See sqlite3ResolveExprNames() for a description of the kinds of
70717 ** transformations that occur.
70718 **
70719 ** All SELECT statements should have been expanded using
70720 ** sqlite3SelectExpand() prior to invoking this routine.
70721 */
70722 SQLITE_PRIVATE void sqlite3ResolveSelectNames(
70723   Parse *pParse,         /* The parser context */
70724   Select *p,             /* The SELECT statement being coded. */
70725   NameContext *pOuterNC  /* Name context for parent SELECT statement */
70726 ){
70727   Walker w;
70728
70729   assert( p!=0 );
70730   w.xExprCallback = resolveExprStep;
70731   w.xSelectCallback = resolveSelectStep;
70732   w.pParse = pParse;
70733   w.u.pNC = pOuterNC;
70734   sqlite3WalkSelect(&w, p);
70735 }
70736
70737 /************** End of resolve.c *********************************************/
70738 /************** Begin file expr.c ********************************************/
70739 /*
70740 ** 2001 September 15
70741 **
70742 ** The author disclaims copyright to this source code.  In place of
70743 ** a legal notice, here is a blessing:
70744 **
70745 **    May you do good and not evil.
70746 **    May you find forgiveness for yourself and forgive others.
70747 **    May you share freely, never taking more than you give.
70748 **
70749 *************************************************************************
70750 ** This file contains routines used for analyzing expressions and
70751 ** for generating VDBE code that evaluates expressions in SQLite.
70752 */
70753
70754 /*
70755 ** Return the 'affinity' of the expression pExpr if any.
70756 **
70757 ** If pExpr is a column, a reference to a column via an 'AS' alias,
70758 ** or a sub-select with a column as the return value, then the 
70759 ** affinity of that column is returned. Otherwise, 0x00 is returned,
70760 ** indicating no affinity for the expression.
70761 **
70762 ** i.e. the WHERE clause expresssions in the following statements all
70763 ** have an affinity:
70764 **
70765 ** CREATE TABLE t1(a);
70766 ** SELECT * FROM t1 WHERE a;
70767 ** SELECT a AS b FROM t1 WHERE b;
70768 ** SELECT * FROM t1 WHERE (select a from t1);
70769 */
70770 SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr){
70771   int op = pExpr->op;
70772   if( op==TK_SELECT ){
70773     assert( pExpr->flags&EP_xIsSelect );
70774     return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr);
70775   }
70776 #ifndef SQLITE_OMIT_CAST
70777   if( op==TK_CAST ){
70778     assert( !ExprHasProperty(pExpr, EP_IntValue) );
70779     return sqlite3AffinityType(pExpr->u.zToken);
70780   }
70781 #endif
70782   if( (op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER) 
70783    && pExpr->pTab!=0
70784   ){
70785     /* op==TK_REGISTER && pExpr->pTab!=0 happens when pExpr was originally
70786     ** a TK_COLUMN but was previously evaluated and cached in a register */
70787     int j = pExpr->iColumn;
70788     if( j<0 ) return SQLITE_AFF_INTEGER;
70789     assert( pExpr->pTab && j<pExpr->pTab->nCol );
70790     return pExpr->pTab->aCol[j].affinity;
70791   }
70792   return pExpr->affinity;
70793 }
70794
70795 /*
70796 ** Set the explicit collating sequence for an expression to the
70797 ** collating sequence supplied in the second argument.
70798 */
70799 SQLITE_PRIVATE Expr *sqlite3ExprSetColl(Expr *pExpr, CollSeq *pColl){
70800   if( pExpr && pColl ){
70801     pExpr->pColl = pColl;
70802     pExpr->flags |= EP_ExpCollate;
70803   }
70804   return pExpr;
70805 }
70806
70807 /*
70808 ** Set the collating sequence for expression pExpr to be the collating
70809 ** sequence named by pToken.   Return a pointer to the revised expression.
70810 ** The collating sequence is marked as "explicit" using the EP_ExpCollate
70811 ** flag.  An explicit collating sequence will override implicit
70812 ** collating sequences.
70813 */
70814 SQLITE_PRIVATE Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr *pExpr, Token *pCollName){
70815   char *zColl = 0;            /* Dequoted name of collation sequence */
70816   CollSeq *pColl;
70817   sqlite3 *db = pParse->db;
70818   zColl = sqlite3NameFromToken(db, pCollName);
70819   pColl = sqlite3LocateCollSeq(pParse, zColl);
70820   sqlite3ExprSetColl(pExpr, pColl);
70821   sqlite3DbFree(db, zColl);
70822   return pExpr;
70823 }
70824
70825 /*
70826 ** Return the default collation sequence for the expression pExpr. If
70827 ** there is no default collation type, return 0.
70828 */
70829 SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){
70830   CollSeq *pColl = 0;
70831   Expr *p = pExpr;
70832   while( p ){
70833     int op;
70834     pColl = p->pColl;
70835     if( pColl ) break;
70836     op = p->op;
70837     if( p->pTab!=0 && (
70838         op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER || op==TK_TRIGGER
70839     )){
70840       /* op==TK_REGISTER && p->pTab!=0 happens when pExpr was originally
70841       ** a TK_COLUMN but was previously evaluated and cached in a register */
70842       const char *zColl;
70843       int j = p->iColumn;
70844       if( j>=0 ){
70845         sqlite3 *db = pParse->db;
70846         zColl = p->pTab->aCol[j].zColl;
70847         pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0);
70848         pExpr->pColl = pColl;
70849       }
70850       break;
70851     }
70852     if( op!=TK_CAST && op!=TK_UPLUS ){
70853       break;
70854     }
70855     p = p->pLeft;
70856   }
70857   if( sqlite3CheckCollSeq(pParse, pColl) ){ 
70858     pColl = 0;
70859   }
70860   return pColl;
70861 }
70862
70863 /*
70864 ** pExpr is an operand of a comparison operator.  aff2 is the
70865 ** type affinity of the other operand.  This routine returns the
70866 ** type affinity that should be used for the comparison operator.
70867 */
70868 SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2){
70869   char aff1 = sqlite3ExprAffinity(pExpr);
70870   if( aff1 && aff2 ){
70871     /* Both sides of the comparison are columns. If one has numeric
70872     ** affinity, use that. Otherwise use no affinity.
70873     */
70874     if( sqlite3IsNumericAffinity(aff1) || sqlite3IsNumericAffinity(aff2) ){
70875       return SQLITE_AFF_NUMERIC;
70876     }else{
70877       return SQLITE_AFF_NONE;
70878     }
70879   }else if( !aff1 && !aff2 ){
70880     /* Neither side of the comparison is a column.  Compare the
70881     ** results directly.
70882     */
70883     return SQLITE_AFF_NONE;
70884   }else{
70885     /* One side is a column, the other is not. Use the columns affinity. */
70886     assert( aff1==0 || aff2==0 );
70887     return (aff1 + aff2);
70888   }
70889 }
70890
70891 /*
70892 ** pExpr is a comparison operator.  Return the type affinity that should
70893 ** be applied to both operands prior to doing the comparison.
70894 */
70895 static char comparisonAffinity(Expr *pExpr){
70896   char aff;
70897   assert( pExpr->op==TK_EQ || pExpr->op==TK_IN || pExpr->op==TK_LT ||
70898           pExpr->op==TK_GT || pExpr->op==TK_GE || pExpr->op==TK_LE ||
70899           pExpr->op==TK_NE || pExpr->op==TK_IS || pExpr->op==TK_ISNOT );
70900   assert( pExpr->pLeft );
70901   aff = sqlite3ExprAffinity(pExpr->pLeft);
70902   if( pExpr->pRight ){
70903     aff = sqlite3CompareAffinity(pExpr->pRight, aff);
70904   }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){
70905     aff = sqlite3CompareAffinity(pExpr->x.pSelect->pEList->a[0].pExpr, aff);
70906   }else if( !aff ){
70907     aff = SQLITE_AFF_NONE;
70908   }
70909   return aff;
70910 }
70911
70912 /*
70913 ** pExpr is a comparison expression, eg. '=', '<', IN(...) etc.
70914 ** idx_affinity is the affinity of an indexed column. Return true
70915 ** if the index with affinity idx_affinity may be used to implement
70916 ** the comparison in pExpr.
70917 */
70918 SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity){
70919   char aff = comparisonAffinity(pExpr);
70920   switch( aff ){
70921     case SQLITE_AFF_NONE:
70922       return 1;
70923     case SQLITE_AFF_TEXT:
70924       return idx_affinity==SQLITE_AFF_TEXT;
70925     default:
70926       return sqlite3IsNumericAffinity(idx_affinity);
70927   }
70928 }
70929
70930 /*
70931 ** Return the P5 value that should be used for a binary comparison
70932 ** opcode (OP_Eq, OP_Ge etc.) used to compare pExpr1 and pExpr2.
70933 */
70934 static u8 binaryCompareP5(Expr *pExpr1, Expr *pExpr2, int jumpIfNull){
70935   u8 aff = (char)sqlite3ExprAffinity(pExpr2);
70936   aff = (u8)sqlite3CompareAffinity(pExpr1, aff) | (u8)jumpIfNull;
70937   return aff;
70938 }
70939
70940 /*
70941 ** Return a pointer to the collation sequence that should be used by
70942 ** a binary comparison operator comparing pLeft and pRight.
70943 **
70944 ** If the left hand expression has a collating sequence type, then it is
70945 ** used. Otherwise the collation sequence for the right hand expression
70946 ** is used, or the default (BINARY) if neither expression has a collating
70947 ** type.
70948 **
70949 ** Argument pRight (but not pLeft) may be a null pointer. In this case,
70950 ** it is not considered.
70951 */
70952 SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq(
70953   Parse *pParse, 
70954   Expr *pLeft, 
70955   Expr *pRight
70956 ){
70957   CollSeq *pColl;
70958   assert( pLeft );
70959   if( pLeft->flags & EP_ExpCollate ){
70960     assert( pLeft->pColl );
70961     pColl = pLeft->pColl;
70962   }else if( pRight && pRight->flags & EP_ExpCollate ){
70963     assert( pRight->pColl );
70964     pColl = pRight->pColl;
70965   }else{
70966     pColl = sqlite3ExprCollSeq(pParse, pLeft);
70967     if( !pColl ){
70968       pColl = sqlite3ExprCollSeq(pParse, pRight);
70969     }
70970   }
70971   return pColl;
70972 }
70973
70974 /*
70975 ** Generate code for a comparison operator.
70976 */
70977 static int codeCompare(
70978   Parse *pParse,    /* The parsing (and code generating) context */
70979   Expr *pLeft,      /* The left operand */
70980   Expr *pRight,     /* The right operand */
70981   int opcode,       /* The comparison opcode */
70982   int in1, int in2, /* Register holding operands */
70983   int dest,         /* Jump here if true.  */
70984   int jumpIfNull    /* If true, jump if either operand is NULL */
70985 ){
70986   int p5;
70987   int addr;
70988   CollSeq *p4;
70989
70990   p4 = sqlite3BinaryCompareCollSeq(pParse, pLeft, pRight);
70991   p5 = binaryCompareP5(pLeft, pRight, jumpIfNull);
70992   addr = sqlite3VdbeAddOp4(pParse->pVdbe, opcode, in2, dest, in1,
70993                            (void*)p4, P4_COLLSEQ);
70994   sqlite3VdbeChangeP5(pParse->pVdbe, (u8)p5);
70995   return addr;
70996 }
70997
70998 #if SQLITE_MAX_EXPR_DEPTH>0
70999 /*
71000 ** Check that argument nHeight is less than or equal to the maximum
71001 ** expression depth allowed. If it is not, leave an error message in
71002 ** pParse.
71003 */
71004 SQLITE_PRIVATE int sqlite3ExprCheckHeight(Parse *pParse, int nHeight){
71005   int rc = SQLITE_OK;
71006   int mxHeight = pParse->db->aLimit[SQLITE_LIMIT_EXPR_DEPTH];
71007   if( nHeight>mxHeight ){
71008     sqlite3ErrorMsg(pParse, 
71009        "Expression tree is too large (maximum depth %d)", mxHeight
71010     );
71011     rc = SQLITE_ERROR;
71012   }
71013   return rc;
71014 }
71015
71016 /* The following three functions, heightOfExpr(), heightOfExprList()
71017 ** and heightOfSelect(), are used to determine the maximum height
71018 ** of any expression tree referenced by the structure passed as the
71019 ** first argument.
71020 **
71021 ** If this maximum height is greater than the current value pointed
71022 ** to by pnHeight, the second parameter, then set *pnHeight to that
71023 ** value.
71024 */
71025 static void heightOfExpr(Expr *p, int *pnHeight){
71026   if( p ){
71027     if( p->nHeight>*pnHeight ){
71028       *pnHeight = p->nHeight;
71029     }
71030   }
71031 }
71032 static void heightOfExprList(ExprList *p, int *pnHeight){
71033   if( p ){
71034     int i;
71035     for(i=0; i<p->nExpr; i++){
71036       heightOfExpr(p->a[i].pExpr, pnHeight);
71037     }
71038   }
71039 }
71040 static void heightOfSelect(Select *p, int *pnHeight){
71041   if( p ){
71042     heightOfExpr(p->pWhere, pnHeight);
71043     heightOfExpr(p->pHaving, pnHeight);
71044     heightOfExpr(p->pLimit, pnHeight);
71045     heightOfExpr(p->pOffset, pnHeight);
71046     heightOfExprList(p->pEList, pnHeight);
71047     heightOfExprList(p->pGroupBy, pnHeight);
71048     heightOfExprList(p->pOrderBy, pnHeight);
71049     heightOfSelect(p->pPrior, pnHeight);
71050   }
71051 }
71052
71053 /*
71054 ** Set the Expr.nHeight variable in the structure passed as an 
71055 ** argument. An expression with no children, Expr.pList or 
71056 ** Expr.pSelect member has a height of 1. Any other expression
71057 ** has a height equal to the maximum height of any other 
71058 ** referenced Expr plus one.
71059 */
71060 static void exprSetHeight(Expr *p){
71061   int nHeight = 0;
71062   heightOfExpr(p->pLeft, &nHeight);
71063   heightOfExpr(p->pRight, &nHeight);
71064   if( ExprHasProperty(p, EP_xIsSelect) ){
71065     heightOfSelect(p->x.pSelect, &nHeight);
71066   }else{
71067     heightOfExprList(p->x.pList, &nHeight);
71068   }
71069   p->nHeight = nHeight + 1;
71070 }
71071
71072 /*
71073 ** Set the Expr.nHeight variable using the exprSetHeight() function. If
71074 ** the height is greater than the maximum allowed expression depth,
71075 ** leave an error in pParse.
71076 */
71077 SQLITE_PRIVATE void sqlite3ExprSetHeight(Parse *pParse, Expr *p){
71078   exprSetHeight(p);
71079   sqlite3ExprCheckHeight(pParse, p->nHeight);
71080 }
71081
71082 /*
71083 ** Return the maximum height of any expression tree referenced
71084 ** by the select statement passed as an argument.
71085 */
71086 SQLITE_PRIVATE int sqlite3SelectExprHeight(Select *p){
71087   int nHeight = 0;
71088   heightOfSelect(p, &nHeight);
71089   return nHeight;
71090 }
71091 #else
71092   #define exprSetHeight(y)
71093 #endif /* SQLITE_MAX_EXPR_DEPTH>0 */
71094
71095 /*
71096 ** This routine is the core allocator for Expr nodes.
71097 **
71098 ** Construct a new expression node and return a pointer to it.  Memory
71099 ** for this node and for the pToken argument is a single allocation
71100 ** obtained from sqlite3DbMalloc().  The calling function
71101 ** is responsible for making sure the node eventually gets freed.
71102 **
71103 ** If dequote is true, then the token (if it exists) is dequoted.
71104 ** If dequote is false, no dequoting is performance.  The deQuote
71105 ** parameter is ignored if pToken is NULL or if the token does not
71106 ** appear to be quoted.  If the quotes were of the form "..." (double-quotes)
71107 ** then the EP_DblQuoted flag is set on the expression node.
71108 **
71109 ** Special case:  If op==TK_INTEGER and pToken points to a string that
71110 ** can be translated into a 32-bit integer, then the token is not
71111 ** stored in u.zToken.  Instead, the integer values is written
71112 ** into u.iValue and the EP_IntValue flag is set.  No extra storage
71113 ** is allocated to hold the integer text and the dequote flag is ignored.
71114 */
71115 SQLITE_PRIVATE Expr *sqlite3ExprAlloc(
71116   sqlite3 *db,            /* Handle for sqlite3DbMallocZero() (may be null) */
71117   int op,                 /* Expression opcode */
71118   const Token *pToken,    /* Token argument.  Might be NULL */
71119   int dequote             /* True to dequote */
71120 ){
71121   Expr *pNew;
71122   int nExtra = 0;
71123   int iValue = 0;
71124
71125   if( pToken ){
71126     if( op!=TK_INTEGER || pToken->z==0
71127           || sqlite3GetInt32(pToken->z, &iValue)==0 ){
71128       nExtra = pToken->n+1;
71129       assert( iValue>=0 );
71130     }
71131   }
71132   pNew = sqlite3DbMallocZero(db, sizeof(Expr)+nExtra);
71133   if( pNew ){
71134     pNew->op = (u8)op;
71135     pNew->iAgg = -1;
71136     if( pToken ){
71137       if( nExtra==0 ){
71138         pNew->flags |= EP_IntValue;
71139         pNew->u.iValue = iValue;
71140       }else{
71141         int c;
71142         pNew->u.zToken = (char*)&pNew[1];
71143         memcpy(pNew->u.zToken, pToken->z, pToken->n);
71144         pNew->u.zToken[pToken->n] = 0;
71145         if( dequote && nExtra>=3 
71146              && ((c = pToken->z[0])=='\'' || c=='"' || c=='[' || c=='`') ){
71147           sqlite3Dequote(pNew->u.zToken);
71148           if( c=='"' ) pNew->flags |= EP_DblQuoted;
71149         }
71150       }
71151     }
71152 #if SQLITE_MAX_EXPR_DEPTH>0
71153     pNew->nHeight = 1;
71154 #endif  
71155   }
71156   return pNew;
71157 }
71158
71159 /*
71160 ** Allocate a new expression node from a zero-terminated token that has
71161 ** already been dequoted.
71162 */
71163 SQLITE_PRIVATE Expr *sqlite3Expr(
71164   sqlite3 *db,            /* Handle for sqlite3DbMallocZero() (may be null) */
71165   int op,                 /* Expression opcode */
71166   const char *zToken      /* Token argument.  Might be NULL */
71167 ){
71168   Token x;
71169   x.z = zToken;
71170   x.n = zToken ? sqlite3Strlen30(zToken) : 0;
71171   return sqlite3ExprAlloc(db, op, &x, 0);
71172 }
71173
71174 /*
71175 ** Attach subtrees pLeft and pRight to the Expr node pRoot.
71176 **
71177 ** If pRoot==NULL that means that a memory allocation error has occurred.
71178 ** In that case, delete the subtrees pLeft and pRight.
71179 */
71180 SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(
71181   sqlite3 *db,
71182   Expr *pRoot,
71183   Expr *pLeft,
71184   Expr *pRight
71185 ){
71186   if( pRoot==0 ){
71187     assert( db->mallocFailed );
71188     sqlite3ExprDelete(db, pLeft);
71189     sqlite3ExprDelete(db, pRight);
71190   }else{
71191     if( pRight ){
71192       pRoot->pRight = pRight;
71193       if( pRight->flags & EP_ExpCollate ){
71194         pRoot->flags |= EP_ExpCollate;
71195         pRoot->pColl = pRight->pColl;
71196       }
71197     }
71198     if( pLeft ){
71199       pRoot->pLeft = pLeft;
71200       if( pLeft->flags & EP_ExpCollate ){
71201         pRoot->flags |= EP_ExpCollate;
71202         pRoot->pColl = pLeft->pColl;
71203       }
71204     }
71205     exprSetHeight(pRoot);
71206   }
71207 }
71208
71209 /*
71210 ** Allocate a Expr node which joins as many as two subtrees.
71211 **
71212 ** One or both of the subtrees can be NULL.  Return a pointer to the new
71213 ** Expr node.  Or, if an OOM error occurs, set pParse->db->mallocFailed,
71214 ** free the subtrees and return NULL.
71215 */
71216 SQLITE_PRIVATE Expr *sqlite3PExpr(
71217   Parse *pParse,          /* Parsing context */
71218   int op,                 /* Expression opcode */
71219   Expr *pLeft,            /* Left operand */
71220   Expr *pRight,           /* Right operand */
71221   const Token *pToken     /* Argument token */
71222 ){
71223   Expr *p = sqlite3ExprAlloc(pParse->db, op, pToken, 1);
71224   sqlite3ExprAttachSubtrees(pParse->db, p, pLeft, pRight);
71225   if( p ) {
71226     sqlite3ExprCheckHeight(pParse, p->nHeight);
71227   }
71228   return p;
71229 }
71230
71231 /*
71232 ** Join two expressions using an AND operator.  If either expression is
71233 ** NULL, then just return the other expression.
71234 */
71235 SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3 *db, Expr *pLeft, Expr *pRight){
71236   if( pLeft==0 ){
71237     return pRight;
71238   }else if( pRight==0 ){
71239     return pLeft;
71240   }else{
71241     Expr *pNew = sqlite3ExprAlloc(db, TK_AND, 0, 0);
71242     sqlite3ExprAttachSubtrees(db, pNew, pLeft, pRight);
71243     return pNew;
71244   }
71245 }
71246
71247 /*
71248 ** Construct a new expression node for a function with multiple
71249 ** arguments.
71250 */
71251 SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *pToken){
71252   Expr *pNew;
71253   sqlite3 *db = pParse->db;
71254   assert( pToken );
71255   pNew = sqlite3ExprAlloc(db, TK_FUNCTION, pToken, 1);
71256   if( pNew==0 ){
71257     sqlite3ExprListDelete(db, pList); /* Avoid memory leak when malloc fails */
71258     return 0;
71259   }
71260   pNew->x.pList = pList;
71261   assert( !ExprHasProperty(pNew, EP_xIsSelect) );
71262   sqlite3ExprSetHeight(pParse, pNew);
71263   return pNew;
71264 }
71265
71266 /*
71267 ** Assign a variable number to an expression that encodes a wildcard
71268 ** in the original SQL statement.  
71269 **
71270 ** Wildcards consisting of a single "?" are assigned the next sequential
71271 ** variable number.
71272 **
71273 ** Wildcards of the form "?nnn" are assigned the number "nnn".  We make
71274 ** sure "nnn" is not too be to avoid a denial of service attack when
71275 ** the SQL statement comes from an external source.
71276 **
71277 ** Wildcards of the form ":aaa", "@aaa", or "$aaa" are assigned the same number
71278 ** as the previous instance of the same wildcard.  Or if this is the first
71279 ** instance of the wildcard, the next sequenial variable number is
71280 ** assigned.
71281 */
71282 SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){
71283   sqlite3 *db = pParse->db;
71284   const char *z;
71285
71286   if( pExpr==0 ) return;
71287   assert( !ExprHasAnyProperty(pExpr, EP_IntValue|EP_Reduced|EP_TokenOnly) );
71288   z = pExpr->u.zToken;
71289   assert( z!=0 );
71290   assert( z[0]!=0 );
71291   if( z[1]==0 ){
71292     /* Wildcard of the form "?".  Assign the next variable number */
71293     assert( z[0]=='?' );
71294     pExpr->iColumn = (ynVar)(++pParse->nVar);
71295   }else if( z[0]=='?' ){
71296     /* Wildcard of the form "?nnn".  Convert "nnn" to an integer and
71297     ** use it as the variable number */
71298     i64 i;
71299     int bOk = 0==sqlite3Atoi64(&z[1], &i, sqlite3Strlen30(&z[1]), SQLITE_UTF8);
71300     pExpr->iColumn = (ynVar)i;
71301     testcase( i==0 );
71302     testcase( i==1 );
71303     testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]-1 );
71304     testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] );
71305     if( bOk==0 || i<1 || i>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){
71306       sqlite3ErrorMsg(pParse, "variable number must be between ?1 and ?%d",
71307           db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]);
71308     }
71309     if( i>pParse->nVar ){
71310       pParse->nVar = (int)i;
71311     }
71312   }else{
71313     /* Wildcards like ":aaa", "$aaa" or "@aaa".  Reuse the same variable
71314     ** number as the prior appearance of the same name, or if the name
71315     ** has never appeared before, reuse the same variable number
71316     */
71317     int i;
71318     for(i=0; i<pParse->nVarExpr; i++){
71319       Expr *pE = pParse->apVarExpr[i];
71320       assert( pE!=0 );
71321       if( strcmp(pE->u.zToken, z)==0 ){
71322         pExpr->iColumn = pE->iColumn;
71323         break;
71324       }
71325     }
71326     if( i>=pParse->nVarExpr ){
71327       pExpr->iColumn = (ynVar)(++pParse->nVar);
71328       if( pParse->nVarExpr>=pParse->nVarExprAlloc-1 ){
71329         pParse->nVarExprAlloc += pParse->nVarExprAlloc + 10;
71330         pParse->apVarExpr =
71331             sqlite3DbReallocOrFree(
71332               db,
71333               pParse->apVarExpr,
71334               pParse->nVarExprAlloc*sizeof(pParse->apVarExpr[0])
71335             );
71336       }
71337       if( !db->mallocFailed ){
71338         assert( pParse->apVarExpr!=0 );
71339         pParse->apVarExpr[pParse->nVarExpr++] = pExpr;
71340       }
71341     }
71342   } 
71343   if( !pParse->nErr && pParse->nVar>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){
71344     sqlite3ErrorMsg(pParse, "too many SQL variables");
71345   }
71346 }
71347
71348 /*
71349 ** Recursively delete an expression tree.
71350 */
71351 SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){
71352   if( p==0 ) return;
71353   /* Sanity check: Assert that the IntValue is non-negative if it exists */
71354   assert( !ExprHasProperty(p, EP_IntValue) || p->u.iValue>=0 );
71355   if( !ExprHasAnyProperty(p, EP_TokenOnly) ){
71356     sqlite3ExprDelete(db, p->pLeft);
71357     sqlite3ExprDelete(db, p->pRight);
71358     if( !ExprHasProperty(p, EP_Reduced) && (p->flags2 & EP2_MallocedToken)!=0 ){
71359       sqlite3DbFree(db, p->u.zToken);
71360     }
71361     if( ExprHasProperty(p, EP_xIsSelect) ){
71362       sqlite3SelectDelete(db, p->x.pSelect);
71363     }else{
71364       sqlite3ExprListDelete(db, p->x.pList);
71365     }
71366   }
71367   if( !ExprHasProperty(p, EP_Static) ){
71368     sqlite3DbFree(db, p);
71369   }
71370 }
71371
71372 /*
71373 ** Return the number of bytes allocated for the expression structure 
71374 ** passed as the first argument. This is always one of EXPR_FULLSIZE,
71375 ** EXPR_REDUCEDSIZE or EXPR_TOKENONLYSIZE.
71376 */
71377 static int exprStructSize(Expr *p){
71378   if( ExprHasProperty(p, EP_TokenOnly) ) return EXPR_TOKENONLYSIZE;
71379   if( ExprHasProperty(p, EP_Reduced) ) return EXPR_REDUCEDSIZE;
71380   return EXPR_FULLSIZE;
71381 }
71382
71383 /*
71384 ** The dupedExpr*Size() routines each return the number of bytes required
71385 ** to store a copy of an expression or expression tree.  They differ in
71386 ** how much of the tree is measured.
71387 **
71388 **     dupedExprStructSize()     Size of only the Expr structure 
71389 **     dupedExprNodeSize()       Size of Expr + space for token
71390 **     dupedExprSize()           Expr + token + subtree components
71391 **
71392 ***************************************************************************
71393 **
71394 ** The dupedExprStructSize() function returns two values OR-ed together:  
71395 ** (1) the space required for a copy of the Expr structure only and 
71396 ** (2) the EP_xxx flags that indicate what the structure size should be.
71397 ** The return values is always one of:
71398 **
71399 **      EXPR_FULLSIZE
71400 **      EXPR_REDUCEDSIZE   | EP_Reduced
71401 **      EXPR_TOKENONLYSIZE | EP_TokenOnly
71402 **
71403 ** The size of the structure can be found by masking the return value
71404 ** of this routine with 0xfff.  The flags can be found by masking the
71405 ** return value with EP_Reduced|EP_TokenOnly.
71406 **
71407 ** Note that with flags==EXPRDUP_REDUCE, this routines works on full-size
71408 ** (unreduced) Expr objects as they or originally constructed by the parser.
71409 ** During expression analysis, extra information is computed and moved into
71410 ** later parts of teh Expr object and that extra information might get chopped
71411 ** off if the expression is reduced.  Note also that it does not work to
71412 ** make a EXPRDUP_REDUCE copy of a reduced expression.  It is only legal
71413 ** to reduce a pristine expression tree from the parser.  The implementation
71414 ** of dupedExprStructSize() contain multiple assert() statements that attempt
71415 ** to enforce this constraint.
71416 */
71417 static int dupedExprStructSize(Expr *p, int flags){
71418   int nSize;
71419   assert( flags==EXPRDUP_REDUCE || flags==0 ); /* Only one flag value allowed */
71420   if( 0==(flags&EXPRDUP_REDUCE) ){
71421     nSize = EXPR_FULLSIZE;
71422   }else{
71423     assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) );
71424     assert( !ExprHasProperty(p, EP_FromJoin) ); 
71425     assert( (p->flags2 & EP2_MallocedToken)==0 );
71426     assert( (p->flags2 & EP2_Irreducible)==0 );
71427     if( p->pLeft || p->pRight || p->pColl || p->x.pList ){
71428       nSize = EXPR_REDUCEDSIZE | EP_Reduced;
71429     }else{
71430       nSize = EXPR_TOKENONLYSIZE | EP_TokenOnly;
71431     }
71432   }
71433   return nSize;
71434 }
71435
71436 /*
71437 ** This function returns the space in bytes required to store the copy 
71438 ** of the Expr structure and a copy of the Expr.u.zToken string (if that
71439 ** string is defined.)
71440 */
71441 static int dupedExprNodeSize(Expr *p, int flags){
71442   int nByte = dupedExprStructSize(p, flags) & 0xfff;
71443   if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
71444     nByte += sqlite3Strlen30(p->u.zToken)+1;
71445   }
71446   return ROUND8(nByte);
71447 }
71448
71449 /*
71450 ** Return the number of bytes required to create a duplicate of the 
71451 ** expression passed as the first argument. The second argument is a
71452 ** mask containing EXPRDUP_XXX flags.
71453 **
71454 ** The value returned includes space to create a copy of the Expr struct
71455 ** itself and the buffer referred to by Expr.u.zToken, if any.
71456 **
71457 ** If the EXPRDUP_REDUCE flag is set, then the return value includes 
71458 ** space to duplicate all Expr nodes in the tree formed by Expr.pLeft 
71459 ** and Expr.pRight variables (but not for any structures pointed to or 
71460 ** descended from the Expr.x.pList or Expr.x.pSelect variables).
71461 */
71462 static int dupedExprSize(Expr *p, int flags){
71463   int nByte = 0;
71464   if( p ){
71465     nByte = dupedExprNodeSize(p, flags);
71466     if( flags&EXPRDUP_REDUCE ){
71467       nByte += dupedExprSize(p->pLeft, flags) + dupedExprSize(p->pRight, flags);
71468     }
71469   }
71470   return nByte;
71471 }
71472
71473 /*
71474 ** This function is similar to sqlite3ExprDup(), except that if pzBuffer 
71475 ** is not NULL then *pzBuffer is assumed to point to a buffer large enough 
71476 ** to store the copy of expression p, the copies of p->u.zToken
71477 ** (if applicable), and the copies of the p->pLeft and p->pRight expressions,
71478 ** if any. Before returning, *pzBuffer is set to the first byte passed the
71479 ** portion of the buffer copied into by this function.
71480 */
71481 static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){
71482   Expr *pNew = 0;                      /* Value to return */
71483   if( p ){
71484     const int isReduced = (flags&EXPRDUP_REDUCE);
71485     u8 *zAlloc;
71486     u32 staticFlag = 0;
71487
71488     assert( pzBuffer==0 || isReduced );
71489
71490     /* Figure out where to write the new Expr structure. */
71491     if( pzBuffer ){
71492       zAlloc = *pzBuffer;
71493       staticFlag = EP_Static;
71494     }else{
71495       zAlloc = sqlite3DbMallocRaw(db, dupedExprSize(p, flags));
71496     }
71497     pNew = (Expr *)zAlloc;
71498
71499     if( pNew ){
71500       /* Set nNewSize to the size allocated for the structure pointed to
71501       ** by pNew. This is either EXPR_FULLSIZE, EXPR_REDUCEDSIZE or
71502       ** EXPR_TOKENONLYSIZE. nToken is set to the number of bytes consumed
71503       ** by the copy of the p->u.zToken string (if any).
71504       */
71505       const unsigned nStructSize = dupedExprStructSize(p, flags);
71506       const int nNewSize = nStructSize & 0xfff;
71507       int nToken;
71508       if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
71509         nToken = sqlite3Strlen30(p->u.zToken) + 1;
71510       }else{
71511         nToken = 0;
71512       }
71513       if( isReduced ){
71514         assert( ExprHasProperty(p, EP_Reduced)==0 );
71515         memcpy(zAlloc, p, nNewSize);
71516       }else{
71517         int nSize = exprStructSize(p);
71518         memcpy(zAlloc, p, nSize);
71519         if( EXPR_FULLSIZE>nSize ){
71520           memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize);
71521         }
71522       }
71523
71524       /* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */
71525       pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static);
71526       pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly);
71527       pNew->flags |= staticFlag;
71528
71529       /* Copy the p->u.zToken string, if any. */
71530       if( nToken ){
71531         char *zToken = pNew->u.zToken = (char*)&zAlloc[nNewSize];
71532         memcpy(zToken, p->u.zToken, nToken);
71533       }
71534
71535       if( 0==((p->flags|pNew->flags) & EP_TokenOnly) ){
71536         /* Fill in the pNew->x.pSelect or pNew->x.pList member. */
71537         if( ExprHasProperty(p, EP_xIsSelect) ){
71538           pNew->x.pSelect = sqlite3SelectDup(db, p->x.pSelect, isReduced);
71539         }else{
71540           pNew->x.pList = sqlite3ExprListDup(db, p->x.pList, isReduced);
71541         }
71542       }
71543
71544       /* Fill in pNew->pLeft and pNew->pRight. */
71545       if( ExprHasAnyProperty(pNew, EP_Reduced|EP_TokenOnly) ){
71546         zAlloc += dupedExprNodeSize(p, flags);
71547         if( ExprHasProperty(pNew, EP_Reduced) ){
71548           pNew->pLeft = exprDup(db, p->pLeft, EXPRDUP_REDUCE, &zAlloc);
71549           pNew->pRight = exprDup(db, p->pRight, EXPRDUP_REDUCE, &zAlloc);
71550         }
71551         if( pzBuffer ){
71552           *pzBuffer = zAlloc;
71553         }
71554       }else{
71555         pNew->flags2 = 0;
71556         if( !ExprHasAnyProperty(p, EP_TokenOnly) ){
71557           pNew->pLeft = sqlite3ExprDup(db, p->pLeft, 0);
71558           pNew->pRight = sqlite3ExprDup(db, p->pRight, 0);
71559         }
71560       }
71561
71562     }
71563   }
71564   return pNew;
71565 }
71566
71567 /*
71568 ** The following group of routines make deep copies of expressions,
71569 ** expression lists, ID lists, and select statements.  The copies can
71570 ** be deleted (by being passed to their respective ...Delete() routines)
71571 ** without effecting the originals.
71572 **
71573 ** The expression list, ID, and source lists return by sqlite3ExprListDup(),
71574 ** sqlite3IdListDup(), and sqlite3SrcListDup() can not be further expanded 
71575 ** by subsequent calls to sqlite*ListAppend() routines.
71576 **
71577 ** Any tables that the SrcList might point to are not duplicated.
71578 **
71579 ** The flags parameter contains a combination of the EXPRDUP_XXX flags.
71580 ** If the EXPRDUP_REDUCE flag is set, then the structure returned is a
71581 ** truncated version of the usual Expr structure that will be stored as
71582 ** part of the in-memory representation of the database schema.
71583 */
71584 SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3 *db, Expr *p, int flags){
71585   return exprDup(db, p, flags, 0);
71586 }
71587 SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags){
71588   ExprList *pNew;
71589   struct ExprList_item *pItem, *pOldItem;
71590   int i;
71591   if( p==0 ) return 0;
71592   pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
71593   if( pNew==0 ) return 0;
71594   pNew->iECursor = 0;
71595   pNew->nExpr = pNew->nAlloc = p->nExpr;
71596   pNew->a = pItem = sqlite3DbMallocRaw(db,  p->nExpr*sizeof(p->a[0]) );
71597   if( pItem==0 ){
71598     sqlite3DbFree(db, pNew);
71599     return 0;
71600   } 
71601   pOldItem = p->a;
71602   for(i=0; i<p->nExpr; i++, pItem++, pOldItem++){
71603     Expr *pOldExpr = pOldItem->pExpr;
71604     pItem->pExpr = sqlite3ExprDup(db, pOldExpr, flags);
71605     pItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
71606     pItem->zSpan = sqlite3DbStrDup(db, pOldItem->zSpan);
71607     pItem->sortOrder = pOldItem->sortOrder;
71608     pItem->done = 0;
71609     pItem->iCol = pOldItem->iCol;
71610     pItem->iAlias = pOldItem->iAlias;
71611   }
71612   return pNew;
71613 }
71614
71615 /*
71616 ** If cursors, triggers, views and subqueries are all omitted from
71617 ** the build, then none of the following routines, except for 
71618 ** sqlite3SelectDup(), can be called. sqlite3SelectDup() is sometimes
71619 ** called with a NULL argument.
71620 */
71621 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) \
71622  || !defined(SQLITE_OMIT_SUBQUERY)
71623 SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int flags){
71624   SrcList *pNew;
71625   int i;
71626   int nByte;
71627   if( p==0 ) return 0;
71628   nByte = sizeof(*p) + (p->nSrc>0 ? sizeof(p->a[0]) * (p->nSrc-1) : 0);
71629   pNew = sqlite3DbMallocRaw(db, nByte );
71630   if( pNew==0 ) return 0;
71631   pNew->nSrc = pNew->nAlloc = p->nSrc;
71632   for(i=0; i<p->nSrc; i++){
71633     struct SrcList_item *pNewItem = &pNew->a[i];
71634     struct SrcList_item *pOldItem = &p->a[i];
71635     Table *pTab;
71636     pNewItem->zDatabase = sqlite3DbStrDup(db, pOldItem->zDatabase);
71637     pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
71638     pNewItem->zAlias = sqlite3DbStrDup(db, pOldItem->zAlias);
71639     pNewItem->jointype = pOldItem->jointype;
71640     pNewItem->iCursor = pOldItem->iCursor;
71641     pNewItem->isPopulated = pOldItem->isPopulated;
71642     pNewItem->zIndex = sqlite3DbStrDup(db, pOldItem->zIndex);
71643     pNewItem->notIndexed = pOldItem->notIndexed;
71644     pNewItem->pIndex = pOldItem->pIndex;
71645     pTab = pNewItem->pTab = pOldItem->pTab;
71646     if( pTab ){
71647       pTab->nRef++;
71648     }
71649     pNewItem->pSelect = sqlite3SelectDup(db, pOldItem->pSelect, flags);
71650     pNewItem->pOn = sqlite3ExprDup(db, pOldItem->pOn, flags);
71651     pNewItem->pUsing = sqlite3IdListDup(db, pOldItem->pUsing);
71652     pNewItem->colUsed = pOldItem->colUsed;
71653   }
71654   return pNew;
71655 }
71656 SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){
71657   IdList *pNew;
71658   int i;
71659   if( p==0 ) return 0;
71660   pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
71661   if( pNew==0 ) return 0;
71662   pNew->nId = pNew->nAlloc = p->nId;
71663   pNew->a = sqlite3DbMallocRaw(db, p->nId*sizeof(p->a[0]) );
71664   if( pNew->a==0 ){
71665     sqlite3DbFree(db, pNew);
71666     return 0;
71667   }
71668   for(i=0; i<p->nId; i++){
71669     struct IdList_item *pNewItem = &pNew->a[i];
71670     struct IdList_item *pOldItem = &p->a[i];
71671     pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
71672     pNewItem->idx = pOldItem->idx;
71673   }
71674   return pNew;
71675 }
71676 SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
71677   Select *pNew;
71678   if( p==0 ) return 0;
71679   pNew = sqlite3DbMallocRaw(db, sizeof(*p) );
71680   if( pNew==0 ) return 0;
71681   pNew->pEList = sqlite3ExprListDup(db, p->pEList, flags);
71682   pNew->pSrc = sqlite3SrcListDup(db, p->pSrc, flags);
71683   pNew->pWhere = sqlite3ExprDup(db, p->pWhere, flags);
71684   pNew->pGroupBy = sqlite3ExprListDup(db, p->pGroupBy, flags);
71685   pNew->pHaving = sqlite3ExprDup(db, p->pHaving, flags);
71686   pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, flags);
71687   pNew->op = p->op;
71688   pNew->pPrior = sqlite3SelectDup(db, p->pPrior, flags);
71689   pNew->pLimit = sqlite3ExprDup(db, p->pLimit, flags);
71690   pNew->pOffset = sqlite3ExprDup(db, p->pOffset, flags);
71691   pNew->iLimit = 0;
71692   pNew->iOffset = 0;
71693   pNew->selFlags = p->selFlags & ~SF_UsesEphemeral;
71694   pNew->pRightmost = 0;
71695   pNew->addrOpenEphm[0] = -1;
71696   pNew->addrOpenEphm[1] = -1;
71697   pNew->addrOpenEphm[2] = -1;
71698   return pNew;
71699 }
71700 #else
71701 SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
71702   assert( p==0 );
71703   return 0;
71704 }
71705 #endif
71706
71707
71708 /*
71709 ** Add a new element to the end of an expression list.  If pList is
71710 ** initially NULL, then create a new expression list.
71711 **
71712 ** If a memory allocation error occurs, the entire list is freed and
71713 ** NULL is returned.  If non-NULL is returned, then it is guaranteed
71714 ** that the new entry was successfully appended.
71715 */
71716 SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(
71717   Parse *pParse,          /* Parsing context */
71718   ExprList *pList,        /* List to which to append. Might be NULL */
71719   Expr *pExpr             /* Expression to be appended. Might be NULL */
71720 ){
71721   sqlite3 *db = pParse->db;
71722   if( pList==0 ){
71723     pList = sqlite3DbMallocZero(db, sizeof(ExprList) );
71724     if( pList==0 ){
71725       goto no_mem;
71726     }
71727     assert( pList->nAlloc==0 );
71728   }
71729   if( pList->nAlloc<=pList->nExpr ){
71730     struct ExprList_item *a;
71731     int n = pList->nAlloc*2 + 4;
71732     a = sqlite3DbRealloc(db, pList->a, n*sizeof(pList->a[0]));
71733     if( a==0 ){
71734       goto no_mem;
71735     }
71736     pList->a = a;
71737     pList->nAlloc = sqlite3DbMallocSize(db, a)/sizeof(a[0]);
71738   }
71739   assert( pList->a!=0 );
71740   if( 1 ){
71741     struct ExprList_item *pItem = &pList->a[pList->nExpr++];
71742     memset(pItem, 0, sizeof(*pItem));
71743     pItem->pExpr = pExpr;
71744   }
71745   return pList;
71746
71747 no_mem:     
71748   /* Avoid leaking memory if malloc has failed. */
71749   sqlite3ExprDelete(db, pExpr);
71750   sqlite3ExprListDelete(db, pList);
71751   return 0;
71752 }
71753
71754 /*
71755 ** Set the ExprList.a[].zName element of the most recently added item
71756 ** on the expression list.
71757 **
71758 ** pList might be NULL following an OOM error.  But pName should never be
71759 ** NULL.  If a memory allocation fails, the pParse->db->mallocFailed flag
71760 ** is set.
71761 */
71762 SQLITE_PRIVATE void sqlite3ExprListSetName(
71763   Parse *pParse,          /* Parsing context */
71764   ExprList *pList,        /* List to which to add the span. */
71765   Token *pName,           /* Name to be added */
71766   int dequote             /* True to cause the name to be dequoted */
71767 ){
71768   assert( pList!=0 || pParse->db->mallocFailed!=0 );
71769   if( pList ){
71770     struct ExprList_item *pItem;
71771     assert( pList->nExpr>0 );
71772     pItem = &pList->a[pList->nExpr-1];
71773     assert( pItem->zName==0 );
71774     pItem->zName = sqlite3DbStrNDup(pParse->db, pName->z, pName->n);
71775     if( dequote && pItem->zName ) sqlite3Dequote(pItem->zName);
71776   }
71777 }
71778
71779 /*
71780 ** Set the ExprList.a[].zSpan element of the most recently added item
71781 ** on the expression list.
71782 **
71783 ** pList might be NULL following an OOM error.  But pSpan should never be
71784 ** NULL.  If a memory allocation fails, the pParse->db->mallocFailed flag
71785 ** is set.
71786 */
71787 SQLITE_PRIVATE void sqlite3ExprListSetSpan(
71788   Parse *pParse,          /* Parsing context */
71789   ExprList *pList,        /* List to which to add the span. */
71790   ExprSpan *pSpan         /* The span to be added */
71791 ){
71792   sqlite3 *db = pParse->db;
71793   assert( pList!=0 || db->mallocFailed!=0 );
71794   if( pList ){
71795     struct ExprList_item *pItem = &pList->a[pList->nExpr-1];
71796     assert( pList->nExpr>0 );
71797     assert( db->mallocFailed || pItem->pExpr==pSpan->pExpr );
71798     sqlite3DbFree(db, pItem->zSpan);
71799     pItem->zSpan = sqlite3DbStrNDup(db, (char*)pSpan->zStart,
71800                                     (int)(pSpan->zEnd - pSpan->zStart));
71801   }
71802 }
71803
71804 /*
71805 ** If the expression list pEList contains more than iLimit elements,
71806 ** leave an error message in pParse.
71807 */
71808 SQLITE_PRIVATE void sqlite3ExprListCheckLength(
71809   Parse *pParse,
71810   ExprList *pEList,
71811   const char *zObject
71812 ){
71813   int mx = pParse->db->aLimit[SQLITE_LIMIT_COLUMN];
71814   testcase( pEList && pEList->nExpr==mx );
71815   testcase( pEList && pEList->nExpr==mx+1 );
71816   if( pEList && pEList->nExpr>mx ){
71817     sqlite3ErrorMsg(pParse, "too many columns in %s", zObject);
71818   }
71819 }
71820
71821 /*
71822 ** Delete an entire expression list.
71823 */
71824 SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
71825   int i;
71826   struct ExprList_item *pItem;
71827   if( pList==0 ) return;
71828   assert( pList->a!=0 || (pList->nExpr==0 && pList->nAlloc==0) );
71829   assert( pList->nExpr<=pList->nAlloc );
71830   for(pItem=pList->a, i=0; i<pList->nExpr; i++, pItem++){
71831     sqlite3ExprDelete(db, pItem->pExpr);
71832     sqlite3DbFree(db, pItem->zName);
71833     sqlite3DbFree(db, pItem->zSpan);
71834   }
71835   sqlite3DbFree(db, pList->a);
71836   sqlite3DbFree(db, pList);
71837 }
71838
71839 /*
71840 ** These routines are Walker callbacks.  Walker.u.pi is a pointer
71841 ** to an integer.  These routines are checking an expression to see
71842 ** if it is a constant.  Set *Walker.u.pi to 0 if the expression is
71843 ** not constant.
71844 **
71845 ** These callback routines are used to implement the following:
71846 **
71847 **     sqlite3ExprIsConstant()
71848 **     sqlite3ExprIsConstantNotJoin()
71849 **     sqlite3ExprIsConstantOrFunction()
71850 **
71851 */
71852 static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
71853
71854   /* If pWalker->u.i is 3 then any term of the expression that comes from
71855   ** the ON or USING clauses of a join disqualifies the expression
71856   ** from being considered constant. */
71857   if( pWalker->u.i==3 && ExprHasAnyProperty(pExpr, EP_FromJoin) ){
71858     pWalker->u.i = 0;
71859     return WRC_Abort;
71860   }
71861
71862   switch( pExpr->op ){
71863     /* Consider functions to be constant if all their arguments are constant
71864     ** and pWalker->u.i==2 */
71865     case TK_FUNCTION:
71866       if( pWalker->u.i==2 ) return 0;
71867       /* Fall through */
71868     case TK_ID:
71869     case TK_COLUMN:
71870     case TK_AGG_FUNCTION:
71871     case TK_AGG_COLUMN:
71872       testcase( pExpr->op==TK_ID );
71873       testcase( pExpr->op==TK_COLUMN );
71874       testcase( pExpr->op==TK_AGG_FUNCTION );
71875       testcase( pExpr->op==TK_AGG_COLUMN );
71876       pWalker->u.i = 0;
71877       return WRC_Abort;
71878     default:
71879       testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */
71880       testcase( pExpr->op==TK_EXISTS ); /* selectNodeIsConstant will disallow */
71881       return WRC_Continue;
71882   }
71883 }
71884 static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){
71885   UNUSED_PARAMETER(NotUsed);
71886   pWalker->u.i = 0;
71887   return WRC_Abort;
71888 }
71889 static int exprIsConst(Expr *p, int initFlag){
71890   Walker w;
71891   w.u.i = initFlag;
71892   w.xExprCallback = exprNodeIsConstant;
71893   w.xSelectCallback = selectNodeIsConstant;
71894   sqlite3WalkExpr(&w, p);
71895   return w.u.i;
71896 }
71897
71898 /*
71899 ** Walk an expression tree.  Return 1 if the expression is constant
71900 ** and 0 if it involves variables or function calls.
71901 **
71902 ** For the purposes of this function, a double-quoted string (ex: "abc")
71903 ** is considered a variable but a single-quoted string (ex: 'abc') is
71904 ** a constant.
71905 */
71906 SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
71907   return exprIsConst(p, 1);
71908 }
71909
71910 /*
71911 ** Walk an expression tree.  Return 1 if the expression is constant
71912 ** that does no originate from the ON or USING clauses of a join.
71913 ** Return 0 if it involves variables or function calls or terms from
71914 ** an ON or USING clause.
71915 */
71916 SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
71917   return exprIsConst(p, 3);
71918 }
71919
71920 /*
71921 ** Walk an expression tree.  Return 1 if the expression is constant
71922 ** or a function call with constant arguments.  Return and 0 if there
71923 ** are any variables.
71924 **
71925 ** For the purposes of this function, a double-quoted string (ex: "abc")
71926 ** is considered a variable but a single-quoted string (ex: 'abc') is
71927 ** a constant.
71928 */
71929 SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p){
71930   return exprIsConst(p, 2);
71931 }
71932
71933 /*
71934 ** If the expression p codes a constant integer that is small enough
71935 ** to fit in a 32-bit integer, return 1 and put the value of the integer
71936 ** in *pValue.  If the expression is not an integer or if it is too big
71937 ** to fit in a signed 32-bit integer, return 0 and leave *pValue unchanged.
71938 */
71939 SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr *p, int *pValue){
71940   int rc = 0;
71941
71942   /* If an expression is an integer literal that fits in a signed 32-bit
71943   ** integer, then the EP_IntValue flag will have already been set */
71944   assert( p->op!=TK_INTEGER || (p->flags & EP_IntValue)!=0
71945            || sqlite3GetInt32(p->u.zToken, &rc)==0 );
71946
71947   if( p->flags & EP_IntValue ){
71948     *pValue = p->u.iValue;
71949     return 1;
71950   }
71951   switch( p->op ){
71952     case TK_UPLUS: {
71953       rc = sqlite3ExprIsInteger(p->pLeft, pValue);
71954       break;
71955     }
71956     case TK_UMINUS: {
71957       int v;
71958       if( sqlite3ExprIsInteger(p->pLeft, &v) ){
71959         *pValue = -v;
71960         rc = 1;
71961       }
71962       break;
71963     }
71964     default: break;
71965   }
71966   return rc;
71967 }
71968
71969 /*
71970 ** Return FALSE if there is no chance that the expression can be NULL.
71971 **
71972 ** If the expression might be NULL or if the expression is too complex
71973 ** to tell return TRUE.  
71974 **
71975 ** This routine is used as an optimization, to skip OP_IsNull opcodes
71976 ** when we know that a value cannot be NULL.  Hence, a false positive
71977 ** (returning TRUE when in fact the expression can never be NULL) might
71978 ** be a small performance hit but is otherwise harmless.  On the other
71979 ** hand, a false negative (returning FALSE when the result could be NULL)
71980 ** will likely result in an incorrect answer.  So when in doubt, return
71981 ** TRUE.
71982 */
71983 SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr *p){
71984   u8 op;
71985   while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ p = p->pLeft; }
71986   op = p->op;
71987   if( op==TK_REGISTER ) op = p->op2;
71988   switch( op ){
71989     case TK_INTEGER:
71990     case TK_STRING:
71991     case TK_FLOAT:
71992     case TK_BLOB:
71993       return 0;
71994     default:
71995       return 1;
71996   }
71997 }
71998
71999 /*
72000 ** Generate an OP_IsNull instruction that tests register iReg and jumps
72001 ** to location iDest if the value in iReg is NULL.  The value in iReg 
72002 ** was computed by pExpr.  If we can look at pExpr at compile-time and
72003 ** determine that it can never generate a NULL, then the OP_IsNull operation
72004 ** can be omitted.
72005 */
72006 SQLITE_PRIVATE void sqlite3ExprCodeIsNullJump(
72007   Vdbe *v,            /* The VDBE under construction */
72008   const Expr *pExpr,  /* Only generate OP_IsNull if this expr can be NULL */
72009   int iReg,           /* Test the value in this register for NULL */
72010   int iDest           /* Jump here if the value is null */
72011 ){
72012   if( sqlite3ExprCanBeNull(pExpr) ){
72013     sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iDest);
72014   }
72015 }
72016
72017 /*
72018 ** Return TRUE if the given expression is a constant which would be
72019 ** unchanged by OP_Affinity with the affinity given in the second
72020 ** argument.
72021 **
72022 ** This routine is used to determine if the OP_Affinity operation
72023 ** can be omitted.  When in doubt return FALSE.  A false negative
72024 ** is harmless.  A false positive, however, can result in the wrong
72025 ** answer.
72026 */
72027 SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr *p, char aff){
72028   u8 op;
72029   if( aff==SQLITE_AFF_NONE ) return 1;
72030   while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ p = p->pLeft; }
72031   op = p->op;
72032   if( op==TK_REGISTER ) op = p->op2;
72033   switch( op ){
72034     case TK_INTEGER: {
72035       return aff==SQLITE_AFF_INTEGER || aff==SQLITE_AFF_NUMERIC;
72036     }
72037     case TK_FLOAT: {
72038       return aff==SQLITE_AFF_REAL || aff==SQLITE_AFF_NUMERIC;
72039     }
72040     case TK_STRING: {
72041       return aff==SQLITE_AFF_TEXT;
72042     }
72043     case TK_BLOB: {
72044       return 1;
72045     }
72046     case TK_COLUMN: {
72047       assert( p->iTable>=0 );  /* p cannot be part of a CHECK constraint */
72048       return p->iColumn<0
72049           && (aff==SQLITE_AFF_INTEGER || aff==SQLITE_AFF_NUMERIC);
72050     }
72051     default: {
72052       return 0;
72053     }
72054   }
72055 }
72056
72057 /*
72058 ** Return TRUE if the given string is a row-id column name.
72059 */
72060 SQLITE_PRIVATE int sqlite3IsRowid(const char *z){
72061   if( sqlite3StrICmp(z, "_ROWID_")==0 ) return 1;
72062   if( sqlite3StrICmp(z, "ROWID")==0 ) return 1;
72063   if( sqlite3StrICmp(z, "OID")==0 ) return 1;
72064   return 0;
72065 }
72066
72067 /*
72068 ** Return true if we are able to the IN operator optimization on a
72069 ** query of the form
72070 **
72071 **       x IN (SELECT ...)
72072 **
72073 ** Where the SELECT... clause is as specified by the parameter to this
72074 ** routine.
72075 **
72076 ** The Select object passed in has already been preprocessed and no
72077 ** errors have been found.
72078 */
72079 #ifndef SQLITE_OMIT_SUBQUERY
72080 static int isCandidateForInOpt(Select *p){
72081   SrcList *pSrc;
72082   ExprList *pEList;
72083   Table *pTab;
72084   if( p==0 ) return 0;                   /* right-hand side of IN is SELECT */
72085   if( p->pPrior ) return 0;              /* Not a compound SELECT */
72086   if( p->selFlags & (SF_Distinct|SF_Aggregate) ){
72087     testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
72088     testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
72089     return 0; /* No DISTINCT keyword and no aggregate functions */
72090   }
72091   assert( p->pGroupBy==0 );              /* Has no GROUP BY clause */
72092   if( p->pLimit ) return 0;              /* Has no LIMIT clause */
72093   assert( p->pOffset==0 );               /* No LIMIT means no OFFSET */
72094   if( p->pWhere ) return 0;              /* Has no WHERE clause */
72095   pSrc = p->pSrc;
72096   assert( pSrc!=0 );
72097   if( pSrc->nSrc!=1 ) return 0;          /* Single term in FROM clause */
72098   if( pSrc->a[0].pSelect ) return 0;     /* FROM is not a subquery or view */
72099   pTab = pSrc->a[0].pTab;
72100   if( NEVER(pTab==0) ) return 0;
72101   assert( pTab->pSelect==0 );            /* FROM clause is not a view */
72102   if( IsVirtual(pTab) ) return 0;        /* FROM clause not a virtual table */
72103   pEList = p->pEList;
72104   if( pEList->nExpr!=1 ) return 0;       /* One column in the result set */
72105   if( pEList->a[0].pExpr->op!=TK_COLUMN ) return 0; /* Result is a column */
72106   return 1;
72107 }
72108 #endif /* SQLITE_OMIT_SUBQUERY */
72109
72110 /*
72111 ** This function is used by the implementation of the IN (...) operator.
72112 ** It's job is to find or create a b-tree structure that may be used
72113 ** either to test for membership of the (...) set or to iterate through
72114 ** its members, skipping duplicates.
72115 **
72116 ** The index of the cursor opened on the b-tree (database table, database index 
72117 ** or ephermal table) is stored in pX->iTable before this function returns.
72118 ** The returned value of this function indicates the b-tree type, as follows:
72119 **
72120 **   IN_INDEX_ROWID - The cursor was opened on a database table.
72121 **   IN_INDEX_INDEX - The cursor was opened on a database index.
72122 **   IN_INDEX_EPH -   The cursor was opened on a specially created and
72123 **                    populated epheremal table.
72124 **
72125 ** An existing b-tree may only be used if the SELECT is of the simple
72126 ** form:
72127 **
72128 **     SELECT <column> FROM <table>
72129 **
72130 ** If the prNotFound parameter is 0, then the b-tree will be used to iterate
72131 ** through the set members, skipping any duplicates. In this case an
72132 ** epheremal table must be used unless the selected <column> is guaranteed
72133 ** to be unique - either because it is an INTEGER PRIMARY KEY or it
72134 ** has a UNIQUE constraint or UNIQUE index.
72135 **
72136 ** If the prNotFound parameter is not 0, then the b-tree will be used 
72137 ** for fast set membership tests. In this case an epheremal table must 
72138 ** be used unless <column> is an INTEGER PRIMARY KEY or an index can 
72139 ** be found with <column> as its left-most column.
72140 **
72141 ** When the b-tree is being used for membership tests, the calling function
72142 ** needs to know whether or not the structure contains an SQL NULL 
72143 ** value in order to correctly evaluate expressions like "X IN (Y, Z)".
72144 ** If there is any chance that the (...) might contain a NULL value at
72145 ** runtime, then a register is allocated and the register number written
72146 ** to *prNotFound. If there is no chance that the (...) contains a
72147 ** NULL value, then *prNotFound is left unchanged.
72148 **
72149 ** If a register is allocated and its location stored in *prNotFound, then
72150 ** its initial value is NULL.  If the (...) does not remain constant
72151 ** for the duration of the query (i.e. the SELECT within the (...)
72152 ** is a correlated subquery) then the value of the allocated register is
72153 ** reset to NULL each time the subquery is rerun. This allows the
72154 ** caller to use vdbe code equivalent to the following:
72155 **
72156 **   if( register==NULL ){
72157 **     has_null = <test if data structure contains null>
72158 **     register = 1
72159 **   }
72160 **
72161 ** in order to avoid running the <test if data structure contains null>
72162 ** test more often than is necessary.
72163 */
72164 #ifndef SQLITE_OMIT_SUBQUERY
72165 SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, int *prNotFound){
72166   Select *p;                            /* SELECT to the right of IN operator */
72167   int eType = 0;                        /* Type of RHS table. IN_INDEX_* */
72168   int iTab = pParse->nTab++;            /* Cursor of the RHS table */
72169   int mustBeUnique = (prNotFound==0);   /* True if RHS must be unique */
72170
72171   assert( pX->op==TK_IN );
72172
72173   /* Check to see if an existing table or index can be used to
72174   ** satisfy the query.  This is preferable to generating a new 
72175   ** ephemeral table.
72176   */
72177   p = (ExprHasProperty(pX, EP_xIsSelect) ? pX->x.pSelect : 0);
72178   if( ALWAYS(pParse->nErr==0) && isCandidateForInOpt(p) ){
72179     sqlite3 *db = pParse->db;              /* Database connection */
72180     Expr *pExpr = p->pEList->a[0].pExpr;   /* Expression <column> */
72181     int iCol = pExpr->iColumn;             /* Index of column <column> */
72182     Vdbe *v = sqlite3GetVdbe(pParse);      /* Virtual machine being coded */
72183     Table *pTab = p->pSrc->a[0].pTab;      /* Table <table>. */
72184     int iDb;                               /* Database idx for pTab */
72185    
72186     /* Code an OP_VerifyCookie and OP_TableLock for <table>. */
72187     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
72188     sqlite3CodeVerifySchema(pParse, iDb);
72189     sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
72190
72191     /* This function is only called from two places. In both cases the vdbe
72192     ** has already been allocated. So assume sqlite3GetVdbe() is always
72193     ** successful here.
72194     */
72195     assert(v);
72196     if( iCol<0 ){
72197       int iMem = ++pParse->nMem;
72198       int iAddr;
72199
72200       iAddr = sqlite3VdbeAddOp1(v, OP_If, iMem);
72201       sqlite3VdbeAddOp2(v, OP_Integer, 1, iMem);
72202
72203       sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);
72204       eType = IN_INDEX_ROWID;
72205
72206       sqlite3VdbeJumpHere(v, iAddr);
72207     }else{
72208       Index *pIdx;                         /* Iterator variable */
72209
72210       /* The collation sequence used by the comparison. If an index is to
72211       ** be used in place of a temp-table, it must be ordered according
72212       ** to this collation sequence.  */
72213       CollSeq *pReq = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pExpr);
72214
72215       /* Check that the affinity that will be used to perform the 
72216       ** comparison is the same as the affinity of the column. If
72217       ** it is not, it is not possible to use any index.
72218       */
72219       char aff = comparisonAffinity(pX);
72220       int affinity_ok = (pTab->aCol[iCol].affinity==aff||aff==SQLITE_AFF_NONE);
72221
72222       for(pIdx=pTab->pIndex; pIdx && eType==0 && affinity_ok; pIdx=pIdx->pNext){
72223         if( (pIdx->aiColumn[0]==iCol)
72224          && sqlite3FindCollSeq(db, ENC(db), pIdx->azColl[0], 0)==pReq
72225          && (!mustBeUnique || (pIdx->nColumn==1 && pIdx->onError!=OE_None))
72226         ){
72227           int iMem = ++pParse->nMem;
72228           int iAddr;
72229           char *pKey;
72230   
72231           pKey = (char *)sqlite3IndexKeyinfo(pParse, pIdx);
72232           iAddr = sqlite3VdbeAddOp1(v, OP_If, iMem);
72233           sqlite3VdbeAddOp2(v, OP_Integer, 1, iMem);
72234   
72235           sqlite3VdbeAddOp4(v, OP_OpenRead, iTab, pIdx->tnum, iDb,
72236                                pKey,P4_KEYINFO_HANDOFF);
72237           VdbeComment((v, "%s", pIdx->zName));
72238           eType = IN_INDEX_INDEX;
72239
72240           sqlite3VdbeJumpHere(v, iAddr);
72241           if( prNotFound && !pTab->aCol[iCol].notNull ){
72242             *prNotFound = ++pParse->nMem;
72243           }
72244         }
72245       }
72246     }
72247   }
72248
72249   if( eType==0 ){
72250     /* Could not found an existing table or index to use as the RHS b-tree.
72251     ** We will have to generate an ephemeral table to do the job.
72252     */
72253     double savedNQueryLoop = pParse->nQueryLoop;
72254     int rMayHaveNull = 0;
72255     eType = IN_INDEX_EPH;
72256     if( prNotFound ){
72257       *prNotFound = rMayHaveNull = ++pParse->nMem;
72258     }else{
72259       testcase( pParse->nQueryLoop>(double)1 );
72260       pParse->nQueryLoop = (double)1;
72261       if( pX->pLeft->iColumn<0 && !ExprHasAnyProperty(pX, EP_xIsSelect) ){
72262         eType = IN_INDEX_ROWID;
72263       }
72264     }
72265     sqlite3CodeSubselect(pParse, pX, rMayHaveNull, eType==IN_INDEX_ROWID);
72266     pParse->nQueryLoop = savedNQueryLoop;
72267   }else{
72268     pX->iTable = iTab;
72269   }
72270   return eType;
72271 }
72272 #endif
72273
72274 /*
72275 ** Generate code for scalar subqueries used as a subquery expression, EXISTS,
72276 ** or IN operators.  Examples:
72277 **
72278 **     (SELECT a FROM b)          -- subquery
72279 **     EXISTS (SELECT a FROM b)   -- EXISTS subquery
72280 **     x IN (4,5,11)              -- IN operator with list on right-hand side
72281 **     x IN (SELECT a FROM b)     -- IN operator with subquery on the right
72282 **
72283 ** The pExpr parameter describes the expression that contains the IN
72284 ** operator or subquery.
72285 **
72286 ** If parameter isRowid is non-zero, then expression pExpr is guaranteed
72287 ** to be of the form "<rowid> IN (?, ?, ?)", where <rowid> is a reference
72288 ** to some integer key column of a table B-Tree. In this case, use an
72289 ** intkey B-Tree to store the set of IN(...) values instead of the usual
72290 ** (slower) variable length keys B-Tree.
72291 **
72292 ** If rMayHaveNull is non-zero, that means that the operation is an IN
72293 ** (not a SELECT or EXISTS) and that the RHS might contains NULLs.
72294 ** Furthermore, the IN is in a WHERE clause and that we really want
72295 ** to iterate over the RHS of the IN operator in order to quickly locate
72296 ** all corresponding LHS elements.  All this routine does is initialize
72297 ** the register given by rMayHaveNull to NULL.  Calling routines will take
72298 ** care of changing this register value to non-NULL if the RHS is NULL-free.
72299 **
72300 ** If rMayHaveNull is zero, that means that the subquery is being used
72301 ** for membership testing only.  There is no need to initialize any
72302 ** registers to indicate the presense or absence of NULLs on the RHS.
72303 **
72304 ** For a SELECT or EXISTS operator, return the register that holds the
72305 ** result.  For IN operators or if an error occurs, the return value is 0.
72306 */
72307 #ifndef SQLITE_OMIT_SUBQUERY
72308 SQLITE_PRIVATE int sqlite3CodeSubselect(
72309   Parse *pParse,          /* Parsing context */
72310   Expr *pExpr,            /* The IN, SELECT, or EXISTS operator */
72311   int rMayHaveNull,       /* Register that records whether NULLs exist in RHS */
72312   int isRowid             /* If true, LHS of IN operator is a rowid */
72313 ){
72314   int testAddr = 0;                       /* One-time test address */
72315   int rReg = 0;                           /* Register storing resulting */
72316   Vdbe *v = sqlite3GetVdbe(pParse);
72317   if( NEVER(v==0) ) return 0;
72318   sqlite3ExprCachePush(pParse);
72319
72320   /* This code must be run in its entirety every time it is encountered
72321   ** if any of the following is true:
72322   **
72323   **    *  The right-hand side is a correlated subquery
72324   **    *  The right-hand side is an expression list containing variables
72325   **    *  We are inside a trigger
72326   **
72327   ** If all of the above are false, then we can run this code just once
72328   ** save the results, and reuse the same result on subsequent invocations.
72329   */
72330   if( !ExprHasAnyProperty(pExpr, EP_VarSelect) && !pParse->pTriggerTab ){
72331     int mem = ++pParse->nMem;
72332     sqlite3VdbeAddOp1(v, OP_If, mem);
72333     testAddr = sqlite3VdbeAddOp2(v, OP_Integer, 1, mem);
72334     assert( testAddr>0 || pParse->db->mallocFailed );
72335   }
72336
72337 #ifndef SQLITE_OMIT_EXPLAIN
72338   if( pParse->explain==2 ){
72339     char *zMsg = sqlite3MPrintf(
72340         pParse->db, "EXECUTE %s%s SUBQUERY %d", testAddr?"":"CORRELATED ",
72341         pExpr->op==TK_IN?"LIST":"SCALAR", pParse->iNextSelectId
72342     );
72343     sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
72344   }
72345 #endif
72346
72347   switch( pExpr->op ){
72348     case TK_IN: {
72349       char affinity;              /* Affinity of the LHS of the IN */
72350       KeyInfo keyInfo;            /* Keyinfo for the generated table */
72351       int addr;                   /* Address of OP_OpenEphemeral instruction */
72352       Expr *pLeft = pExpr->pLeft; /* the LHS of the IN operator */
72353
72354       if( rMayHaveNull ){
72355         sqlite3VdbeAddOp2(v, OP_Null, 0, rMayHaveNull);
72356       }
72357
72358       affinity = sqlite3ExprAffinity(pLeft);
72359
72360       /* Whether this is an 'x IN(SELECT...)' or an 'x IN(<exprlist>)'
72361       ** expression it is handled the same way.  An ephemeral table is 
72362       ** filled with single-field index keys representing the results
72363       ** from the SELECT or the <exprlist>.
72364       **
72365       ** If the 'x' expression is a column value, or the SELECT...
72366       ** statement returns a column value, then the affinity of that
72367       ** column is used to build the index keys. If both 'x' and the
72368       ** SELECT... statement are columns, then numeric affinity is used
72369       ** if either column has NUMERIC or INTEGER affinity. If neither
72370       ** 'x' nor the SELECT... statement are columns, then numeric affinity
72371       ** is used.
72372       */
72373       pExpr->iTable = pParse->nTab++;
72374       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pExpr->iTable, !isRowid);
72375       if( rMayHaveNull==0 ) sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
72376       memset(&keyInfo, 0, sizeof(keyInfo));
72377       keyInfo.nField = 1;
72378
72379       if( ExprHasProperty(pExpr, EP_xIsSelect) ){
72380         /* Case 1:     expr IN (SELECT ...)
72381         **
72382         ** Generate code to write the results of the select into the temporary
72383         ** table allocated and opened above.
72384         */
72385         SelectDest dest;
72386         ExprList *pEList;
72387
72388         assert( !isRowid );
72389         sqlite3SelectDestInit(&dest, SRT_Set, pExpr->iTable);
72390         dest.affinity = (u8)affinity;
72391         assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable );
72392         pExpr->x.pSelect->iLimit = 0;
72393         if( sqlite3Select(pParse, pExpr->x.pSelect, &dest) ){
72394           return 0;
72395         }
72396         pEList = pExpr->x.pSelect->pEList;
72397         if( ALWAYS(pEList!=0 && pEList->nExpr>0) ){ 
72398           keyInfo.aColl[0] = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft,
72399               pEList->a[0].pExpr);
72400         }
72401       }else if( ALWAYS(pExpr->x.pList!=0) ){
72402         /* Case 2:     expr IN (exprlist)
72403         **
72404         ** For each expression, build an index key from the evaluation and
72405         ** store it in the temporary table. If <expr> is a column, then use
72406         ** that columns affinity when building index keys. If <expr> is not
72407         ** a column, use numeric affinity.
72408         */
72409         int i;
72410         ExprList *pList = pExpr->x.pList;
72411         struct ExprList_item *pItem;
72412         int r1, r2, r3;
72413
72414         if( !affinity ){
72415           affinity = SQLITE_AFF_NONE;
72416         }
72417         keyInfo.aColl[0] = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
72418
72419         /* Loop through each expression in <exprlist>. */
72420         r1 = sqlite3GetTempReg(pParse);
72421         r2 = sqlite3GetTempReg(pParse);
72422         sqlite3VdbeAddOp2(v, OP_Null, 0, r2);
72423         for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){
72424           Expr *pE2 = pItem->pExpr;
72425           int iValToIns;
72426
72427           /* If the expression is not constant then we will need to
72428           ** disable the test that was generated above that makes sure
72429           ** this code only executes once.  Because for a non-constant
72430           ** expression we need to rerun this code each time.
72431           */
72432           if( testAddr && !sqlite3ExprIsConstant(pE2) ){
72433             sqlite3VdbeChangeToNoop(v, testAddr-1, 2);
72434             testAddr = 0;
72435           }
72436
72437           /* Evaluate the expression and insert it into the temp table */
72438           if( isRowid && sqlite3ExprIsInteger(pE2, &iValToIns) ){
72439             sqlite3VdbeAddOp3(v, OP_InsertInt, pExpr->iTable, r2, iValToIns);
72440           }else{
72441             r3 = sqlite3ExprCodeTarget(pParse, pE2, r1);
72442             if( isRowid ){
72443               sqlite3VdbeAddOp2(v, OP_MustBeInt, r3,
72444                                 sqlite3VdbeCurrentAddr(v)+2);
72445               sqlite3VdbeAddOp3(v, OP_Insert, pExpr->iTable, r2, r3);
72446             }else{
72447               sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1);
72448               sqlite3ExprCacheAffinityChange(pParse, r3, 1);
72449               sqlite3VdbeAddOp2(v, OP_IdxInsert, pExpr->iTable, r2);
72450             }
72451           }
72452         }
72453         sqlite3ReleaseTempReg(pParse, r1);
72454         sqlite3ReleaseTempReg(pParse, r2);
72455       }
72456       if( !isRowid ){
72457         sqlite3VdbeChangeP4(v, addr, (void *)&keyInfo, P4_KEYINFO);
72458       }
72459       break;
72460     }
72461
72462     case TK_EXISTS:
72463     case TK_SELECT:
72464     default: {
72465       /* If this has to be a scalar SELECT.  Generate code to put the
72466       ** value of this select in a memory cell and record the number
72467       ** of the memory cell in iColumn.  If this is an EXISTS, write
72468       ** an integer 0 (not exists) or 1 (exists) into a memory cell
72469       ** and record that memory cell in iColumn.
72470       */
72471       Select *pSel;                         /* SELECT statement to encode */
72472       SelectDest dest;                      /* How to deal with SELECt result */
72473
72474       testcase( pExpr->op==TK_EXISTS );
72475       testcase( pExpr->op==TK_SELECT );
72476       assert( pExpr->op==TK_EXISTS || pExpr->op==TK_SELECT );
72477
72478       assert( ExprHasProperty(pExpr, EP_xIsSelect) );
72479       pSel = pExpr->x.pSelect;
72480       sqlite3SelectDestInit(&dest, 0, ++pParse->nMem);
72481       if( pExpr->op==TK_SELECT ){
72482         dest.eDest = SRT_Mem;
72483         sqlite3VdbeAddOp2(v, OP_Null, 0, dest.iParm);
72484         VdbeComment((v, "Init subquery result"));
72485       }else{
72486         dest.eDest = SRT_Exists;
72487         sqlite3VdbeAddOp2(v, OP_Integer, 0, dest.iParm);
72488         VdbeComment((v, "Init EXISTS result"));
72489       }
72490       sqlite3ExprDelete(pParse->db, pSel->pLimit);
72491       pSel->pLimit = sqlite3PExpr(pParse, TK_INTEGER, 0, 0,
72492                                   &sqlite3IntTokens[1]);
72493       pSel->iLimit = 0;
72494       if( sqlite3Select(pParse, pSel, &dest) ){
72495         return 0;
72496       }
72497       rReg = dest.iParm;
72498       ExprSetIrreducible(pExpr);
72499       break;
72500     }
72501   }
72502
72503   if( testAddr ){
72504     sqlite3VdbeJumpHere(v, testAddr-1);
72505   }
72506   sqlite3ExprCachePop(pParse, 1);
72507
72508   return rReg;
72509 }
72510 #endif /* SQLITE_OMIT_SUBQUERY */
72511
72512 #ifndef SQLITE_OMIT_SUBQUERY
72513 /*
72514 ** Generate code for an IN expression.
72515 **
72516 **      x IN (SELECT ...)
72517 **      x IN (value, value, ...)
72518 **
72519 ** The left-hand side (LHS) is a scalar expression.  The right-hand side (RHS)
72520 ** is an array of zero or more values.  The expression is true if the LHS is
72521 ** contained within the RHS.  The value of the expression is unknown (NULL)
72522 ** if the LHS is NULL or if the LHS is not contained within the RHS and the
72523 ** RHS contains one or more NULL values.
72524 **
72525 ** This routine generates code will jump to destIfFalse if the LHS is not 
72526 ** contained within the RHS.  If due to NULLs we cannot determine if the LHS
72527 ** is contained in the RHS then jump to destIfNull.  If the LHS is contained
72528 ** within the RHS then fall through.
72529 */
72530 static void sqlite3ExprCodeIN(
72531   Parse *pParse,        /* Parsing and code generating context */
72532   Expr *pExpr,          /* The IN expression */
72533   int destIfFalse,      /* Jump here if LHS is not contained in the RHS */
72534   int destIfNull        /* Jump here if the results are unknown due to NULLs */
72535 ){
72536   int rRhsHasNull = 0;  /* Register that is true if RHS contains NULL values */
72537   char affinity;        /* Comparison affinity to use */
72538   int eType;            /* Type of the RHS */
72539   int r1;               /* Temporary use register */
72540   Vdbe *v;              /* Statement under construction */
72541
72542   /* Compute the RHS.   After this step, the table with cursor
72543   ** pExpr->iTable will contains the values that make up the RHS.
72544   */
72545   v = pParse->pVdbe;
72546   assert( v!=0 );       /* OOM detected prior to this routine */
72547   VdbeNoopComment((v, "begin IN expr"));
72548   eType = sqlite3FindInIndex(pParse, pExpr, &rRhsHasNull);
72549
72550   /* Figure out the affinity to use to create a key from the results
72551   ** of the expression. affinityStr stores a static string suitable for
72552   ** P4 of OP_MakeRecord.
72553   */
72554   affinity = comparisonAffinity(pExpr);
72555
72556   /* Code the LHS, the <expr> from "<expr> IN (...)".
72557   */
72558   sqlite3ExprCachePush(pParse);
72559   r1 = sqlite3GetTempReg(pParse);
72560   sqlite3ExprCode(pParse, pExpr->pLeft, r1);
72561
72562   /* If the LHS is NULL, then the result is either false or NULL depending
72563   ** on whether the RHS is empty or not, respectively.
72564   */
72565   if( destIfNull==destIfFalse ){
72566     /* Shortcut for the common case where the false and NULL outcomes are
72567     ** the same. */
72568     sqlite3VdbeAddOp2(v, OP_IsNull, r1, destIfNull);
72569   }else{
72570     int addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, r1);
72571     sqlite3VdbeAddOp2(v, OP_Rewind, pExpr->iTable, destIfFalse);
72572     sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfNull);
72573     sqlite3VdbeJumpHere(v, addr1);
72574   }
72575
72576   if( eType==IN_INDEX_ROWID ){
72577     /* In this case, the RHS is the ROWID of table b-tree
72578     */
72579     sqlite3VdbeAddOp2(v, OP_MustBeInt, r1, destIfFalse);
72580     sqlite3VdbeAddOp3(v, OP_NotExists, pExpr->iTable, destIfFalse, r1);
72581   }else{
72582     /* In this case, the RHS is an index b-tree.
72583     */
72584     sqlite3VdbeAddOp4(v, OP_Affinity, r1, 1, 0, &affinity, 1);
72585
72586     /* If the set membership test fails, then the result of the 
72587     ** "x IN (...)" expression must be either 0 or NULL. If the set
72588     ** contains no NULL values, then the result is 0. If the set 
72589     ** contains one or more NULL values, then the result of the
72590     ** expression is also NULL.
72591     */
72592     if( rRhsHasNull==0 || destIfFalse==destIfNull ){
72593       /* This branch runs if it is known at compile time that the RHS
72594       ** cannot contain NULL values. This happens as the result
72595       ** of a "NOT NULL" constraint in the database schema.
72596       **
72597       ** Also run this branch if NULL is equivalent to FALSE
72598       ** for this particular IN operator.
72599       */
72600       sqlite3VdbeAddOp4Int(v, OP_NotFound, pExpr->iTable, destIfFalse, r1, 1);
72601
72602     }else{
72603       /* In this branch, the RHS of the IN might contain a NULL and
72604       ** the presence of a NULL on the RHS makes a difference in the
72605       ** outcome.
72606       */
72607       int j1, j2, j3;
72608
72609       /* First check to see if the LHS is contained in the RHS.  If so,
72610       ** then the presence of NULLs in the RHS does not matter, so jump
72611       ** over all of the code that follows.
72612       */
72613       j1 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, r1, 1);
72614
72615       /* Here we begin generating code that runs if the LHS is not
72616       ** contained within the RHS.  Generate additional code that
72617       ** tests the RHS for NULLs.  If the RHS contains a NULL then
72618       ** jump to destIfNull.  If there are no NULLs in the RHS then
72619       ** jump to destIfFalse.
72620       */
72621       j2 = sqlite3VdbeAddOp1(v, OP_NotNull, rRhsHasNull);
72622       j3 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, rRhsHasNull, 1);
72623       sqlite3VdbeAddOp2(v, OP_Integer, -1, rRhsHasNull);
72624       sqlite3VdbeJumpHere(v, j3);
72625       sqlite3VdbeAddOp2(v, OP_AddImm, rRhsHasNull, 1);
72626       sqlite3VdbeJumpHere(v, j2);
72627
72628       /* Jump to the appropriate target depending on whether or not
72629       ** the RHS contains a NULL
72630       */
72631       sqlite3VdbeAddOp2(v, OP_If, rRhsHasNull, destIfNull);
72632       sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfFalse);
72633
72634       /* The OP_Found at the top of this branch jumps here when true, 
72635       ** causing the overall IN expression evaluation to fall through.
72636       */
72637       sqlite3VdbeJumpHere(v, j1);
72638     }
72639   }
72640   sqlite3ReleaseTempReg(pParse, r1);
72641   sqlite3ExprCachePop(pParse, 1);
72642   VdbeComment((v, "end IN expr"));
72643 }
72644 #endif /* SQLITE_OMIT_SUBQUERY */
72645
72646 /*
72647 ** Duplicate an 8-byte value
72648 */
72649 static char *dup8bytes(Vdbe *v, const char *in){
72650   char *out = sqlite3DbMallocRaw(sqlite3VdbeDb(v), 8);
72651   if( out ){
72652     memcpy(out, in, 8);
72653   }
72654   return out;
72655 }
72656
72657 #ifndef SQLITE_OMIT_FLOATING_POINT
72658 /*
72659 ** Generate an instruction that will put the floating point
72660 ** value described by z[0..n-1] into register iMem.
72661 **
72662 ** The z[] string will probably not be zero-terminated.  But the 
72663 ** z[n] character is guaranteed to be something that does not look
72664 ** like the continuation of the number.
72665 */
72666 static void codeReal(Vdbe *v, const char *z, int negateFlag, int iMem){
72667   if( ALWAYS(z!=0) ){
72668     double value;
72669     char *zV;
72670     sqlite3AtoF(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
72671     assert( !sqlite3IsNaN(value) ); /* The new AtoF never returns NaN */
72672     if( negateFlag ) value = -value;
72673     zV = dup8bytes(v, (char*)&value);
72674     sqlite3VdbeAddOp4(v, OP_Real, 0, iMem, 0, zV, P4_REAL);
72675   }
72676 }
72677 #endif
72678
72679
72680 /*
72681 ** Generate an instruction that will put the integer describe by
72682 ** text z[0..n-1] into register iMem.
72683 **
72684 ** Expr.u.zToken is always UTF8 and zero-terminated.
72685 */
72686 static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
72687   Vdbe *v = pParse->pVdbe;
72688   if( pExpr->flags & EP_IntValue ){
72689     int i = pExpr->u.iValue;
72690     assert( i>=0 );
72691     if( negFlag ) i = -i;
72692     sqlite3VdbeAddOp2(v, OP_Integer, i, iMem);
72693   }else{
72694     int c;
72695     i64 value;
72696     const char *z = pExpr->u.zToken;
72697     assert( z!=0 );
72698     c = sqlite3Atoi64(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
72699     if( c==0 || (c==2 && negFlag) ){
72700       char *zV;
72701       if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; }
72702       zV = dup8bytes(v, (char*)&value);
72703       sqlite3VdbeAddOp4(v, OP_Int64, 0, iMem, 0, zV, P4_INT64);
72704     }else{
72705 #ifdef SQLITE_OMIT_FLOATING_POINT
72706       sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z);
72707 #else
72708       codeReal(v, z, negFlag, iMem);
72709 #endif
72710     }
72711   }
72712 }
72713
72714 /*
72715 ** Clear a cache entry.
72716 */
72717 static void cacheEntryClear(Parse *pParse, struct yColCache *p){
72718   if( p->tempReg ){
72719     if( pParse->nTempReg<ArraySize(pParse->aTempReg) ){
72720       pParse->aTempReg[pParse->nTempReg++] = p->iReg;
72721     }
72722     p->tempReg = 0;
72723   }
72724 }
72725
72726
72727 /*
72728 ** Record in the column cache that a particular column from a
72729 ** particular table is stored in a particular register.
72730 */
72731 SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse *pParse, int iTab, int iCol, int iReg){
72732   int i;
72733   int minLru;
72734   int idxLru;
72735   struct yColCache *p;
72736
72737   assert( iReg>0 );  /* Register numbers are always positive */
72738   assert( iCol>=-1 && iCol<32768 );  /* Finite column numbers */
72739
72740   /* The SQLITE_ColumnCache flag disables the column cache.  This is used
72741   ** for testing only - to verify that SQLite always gets the same answer
72742   ** with and without the column cache.
72743   */
72744   if( pParse->db->flags & SQLITE_ColumnCache ) return;
72745
72746   /* First replace any existing entry.
72747   **
72748   ** Actually, the way the column cache is currently used, we are guaranteed
72749   ** that the object will never already be in cache.  Verify this guarantee.
72750   */
72751 #ifndef NDEBUG
72752   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
72753 #if 0 /* This code wold remove the entry from the cache if it existed */
72754     if( p->iReg && p->iTable==iTab && p->iColumn==iCol ){
72755       cacheEntryClear(pParse, p);
72756       p->iLevel = pParse->iCacheLevel;
72757       p->iReg = iReg;
72758       p->lru = pParse->iCacheCnt++;
72759       return;
72760     }
72761 #endif
72762     assert( p->iReg==0 || p->iTable!=iTab || p->iColumn!=iCol );
72763   }
72764 #endif
72765
72766   /* Find an empty slot and replace it */
72767   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
72768     if( p->iReg==0 ){
72769       p->iLevel = pParse->iCacheLevel;
72770       p->iTable = iTab;
72771       p->iColumn = iCol;
72772       p->iReg = iReg;
72773       p->tempReg = 0;
72774       p->lru = pParse->iCacheCnt++;
72775       return;
72776     }
72777   }
72778
72779   /* Replace the last recently used */
72780   minLru = 0x7fffffff;
72781   idxLru = -1;
72782   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
72783     if( p->lru<minLru ){
72784       idxLru = i;
72785       minLru = p->lru;
72786     }
72787   }
72788   if( ALWAYS(idxLru>=0) ){
72789     p = &pParse->aColCache[idxLru];
72790     p->iLevel = pParse->iCacheLevel;
72791     p->iTable = iTab;
72792     p->iColumn = iCol;
72793     p->iReg = iReg;
72794     p->tempReg = 0;
72795     p->lru = pParse->iCacheCnt++;
72796     return;
72797   }
72798 }
72799
72800 /*
72801 ** Indicate that registers between iReg..iReg+nReg-1 are being overwritten.
72802 ** Purge the range of registers from the column cache.
72803 */
72804 SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int nReg){
72805   int i;
72806   int iLast = iReg + nReg - 1;
72807   struct yColCache *p;
72808   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
72809     int r = p->iReg;
72810     if( r>=iReg && r<=iLast ){
72811       cacheEntryClear(pParse, p);
72812       p->iReg = 0;
72813     }
72814   }
72815 }
72816
72817 /*
72818 ** Remember the current column cache context.  Any new entries added
72819 ** added to the column cache after this call are removed when the
72820 ** corresponding pop occurs.
72821 */
72822 SQLITE_PRIVATE void sqlite3ExprCachePush(Parse *pParse){
72823   pParse->iCacheLevel++;
72824 }
72825
72826 /*
72827 ** Remove from the column cache any entries that were added since the
72828 ** the previous N Push operations.  In other words, restore the cache
72829 ** to the state it was in N Pushes ago.
72830 */
72831 SQLITE_PRIVATE void sqlite3ExprCachePop(Parse *pParse, int N){
72832   int i;
72833   struct yColCache *p;
72834   assert( N>0 );
72835   assert( pParse->iCacheLevel>=N );
72836   pParse->iCacheLevel -= N;
72837   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
72838     if( p->iReg && p->iLevel>pParse->iCacheLevel ){
72839       cacheEntryClear(pParse, p);
72840       p->iReg = 0;
72841     }
72842   }
72843 }
72844
72845 /*
72846 ** When a cached column is reused, make sure that its register is
72847 ** no longer available as a temp register.  ticket #3879:  that same
72848 ** register might be in the cache in multiple places, so be sure to
72849 ** get them all.
72850 */
72851 static void sqlite3ExprCachePinRegister(Parse *pParse, int iReg){
72852   int i;
72853   struct yColCache *p;
72854   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
72855     if( p->iReg==iReg ){
72856       p->tempReg = 0;
72857     }
72858   }
72859 }
72860
72861 /*
72862 ** Generate code to extract the value of the iCol-th column of a table.
72863 */
72864 SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(
72865   Vdbe *v,        /* The VDBE under construction */
72866   Table *pTab,    /* The table containing the value */
72867   int iTabCur,    /* The cursor for this table */
72868   int iCol,       /* Index of the column to extract */
72869   int regOut      /* Extract the valud into this register */
72870 ){
72871   if( iCol<0 || iCol==pTab->iPKey ){
72872     sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut);
72873   }else{
72874     int op = IsVirtual(pTab) ? OP_VColumn : OP_Column;
72875     sqlite3VdbeAddOp3(v, op, iTabCur, iCol, regOut);
72876   }
72877   if( iCol>=0 ){
72878     sqlite3ColumnDefault(v, pTab, iCol, regOut);
72879   }
72880 }
72881
72882 /*
72883 ** Generate code that will extract the iColumn-th column from
72884 ** table pTab and store the column value in a register.  An effort
72885 ** is made to store the column value in register iReg, but this is
72886 ** not guaranteed.  The location of the column value is returned.
72887 **
72888 ** There must be an open cursor to pTab in iTable when this routine
72889 ** is called.  If iColumn<0 then code is generated that extracts the rowid.
72890 */
72891 SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(
72892   Parse *pParse,   /* Parsing and code generating context */
72893   Table *pTab,     /* Description of the table we are reading from */
72894   int iColumn,     /* Index of the table column */
72895   int iTable,      /* The cursor pointing to the table */
72896   int iReg         /* Store results here */
72897 ){
72898   Vdbe *v = pParse->pVdbe;
72899   int i;
72900   struct yColCache *p;
72901
72902   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
72903     if( p->iReg>0 && p->iTable==iTable && p->iColumn==iColumn ){
72904       p->lru = pParse->iCacheCnt++;
72905       sqlite3ExprCachePinRegister(pParse, p->iReg);
72906       return p->iReg;
72907     }
72908   }  
72909   assert( v!=0 );
72910   sqlite3ExprCodeGetColumnOfTable(v, pTab, iTable, iColumn, iReg);
72911   sqlite3ExprCacheStore(pParse, iTable, iColumn, iReg);
72912   return iReg;
72913 }
72914
72915 /*
72916 ** Clear all column cache entries.
72917 */
72918 SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse *pParse){
72919   int i;
72920   struct yColCache *p;
72921
72922   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
72923     if( p->iReg ){
72924       cacheEntryClear(pParse, p);
72925       p->iReg = 0;
72926     }
72927   }
72928 }
72929
72930 /*
72931 ** Record the fact that an affinity change has occurred on iCount
72932 ** registers starting with iStart.
72933 */
72934 SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse *pParse, int iStart, int iCount){
72935   sqlite3ExprCacheRemove(pParse, iStart, iCount);
72936 }
72937
72938 /*
72939 ** Generate code to move content from registers iFrom...iFrom+nReg-1
72940 ** over to iTo..iTo+nReg-1. Keep the column cache up-to-date.
72941 */
72942 SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int nReg){
72943   int i;
72944   struct yColCache *p;
72945   if( NEVER(iFrom==iTo) ) return;
72946   sqlite3VdbeAddOp3(pParse->pVdbe, OP_Move, iFrom, iTo, nReg);
72947   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
72948     int x = p->iReg;
72949     if( x>=iFrom && x<iFrom+nReg ){
72950       p->iReg += iTo-iFrom;
72951     }
72952   }
72953 }
72954
72955 /*
72956 ** Generate code to copy content from registers iFrom...iFrom+nReg-1
72957 ** over to iTo..iTo+nReg-1.
72958 */
72959 SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse *pParse, int iFrom, int iTo, int nReg){
72960   int i;
72961   if( NEVER(iFrom==iTo) ) return;
72962   for(i=0; i<nReg; i++){
72963     sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, iFrom+i, iTo+i);
72964   }
72965 }
72966
72967 #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
72968 /*
72969 ** Return true if any register in the range iFrom..iTo (inclusive)
72970 ** is used as part of the column cache.
72971 **
72972 ** This routine is used within assert() and testcase() macros only
72973 ** and does not appear in a normal build.
72974 */
72975 static int usedAsColumnCache(Parse *pParse, int iFrom, int iTo){
72976   int i;
72977   struct yColCache *p;
72978   for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
72979     int r = p->iReg;
72980     if( r>=iFrom && r<=iTo ) return 1;    /*NO_TEST*/
72981   }
72982   return 0;
72983 }
72984 #endif /* SQLITE_DEBUG || SQLITE_COVERAGE_TEST */
72985
72986 /*
72987 ** Generate code into the current Vdbe to evaluate the given
72988 ** expression.  Attempt to store the results in register "target".
72989 ** Return the register where results are stored.
72990 **
72991 ** With this routine, there is no guarantee that results will
72992 ** be stored in target.  The result might be stored in some other
72993 ** register if it is convenient to do so.  The calling function
72994 ** must check the return code and move the results to the desired
72995 ** register.
72996 */
72997 SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){
72998   Vdbe *v = pParse->pVdbe;  /* The VM under construction */
72999   int op;                   /* The opcode being coded */
73000   int inReg = target;       /* Results stored in register inReg */
73001   int regFree1 = 0;         /* If non-zero free this temporary register */
73002   int regFree2 = 0;         /* If non-zero free this temporary register */
73003   int r1, r2, r3, r4;       /* Various register numbers */
73004   sqlite3 *db = pParse->db; /* The database connection */
73005
73006   assert( target>0 && target<=pParse->nMem );
73007   if( v==0 ){
73008     assert( pParse->db->mallocFailed );
73009     return 0;
73010   }
73011
73012   if( pExpr==0 ){
73013     op = TK_NULL;
73014   }else{
73015     op = pExpr->op;
73016   }
73017   switch( op ){
73018     case TK_AGG_COLUMN: {
73019       AggInfo *pAggInfo = pExpr->pAggInfo;
73020       struct AggInfo_col *pCol = &pAggInfo->aCol[pExpr->iAgg];
73021       if( !pAggInfo->directMode ){
73022         assert( pCol->iMem>0 );
73023         inReg = pCol->iMem;
73024         break;
73025       }else if( pAggInfo->useSortingIdx ){
73026         sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdx,
73027                               pCol->iSorterColumn, target);
73028         break;
73029       }
73030       /* Otherwise, fall thru into the TK_COLUMN case */
73031     }
73032     case TK_COLUMN: {
73033       if( pExpr->iTable<0 ){
73034         /* This only happens when coding check constraints */
73035         assert( pParse->ckBase>0 );
73036         inReg = pExpr->iColumn + pParse->ckBase;
73037       }else{
73038         inReg = sqlite3ExprCodeGetColumn(pParse, pExpr->pTab,
73039                                  pExpr->iColumn, pExpr->iTable, target);
73040       }
73041       break;
73042     }
73043     case TK_INTEGER: {
73044       codeInteger(pParse, pExpr, 0, target);
73045       break;
73046     }
73047 #ifndef SQLITE_OMIT_FLOATING_POINT
73048     case TK_FLOAT: {
73049       assert( !ExprHasProperty(pExpr, EP_IntValue) );
73050       codeReal(v, pExpr->u.zToken, 0, target);
73051       break;
73052     }
73053 #endif
73054     case TK_STRING: {
73055       assert( !ExprHasProperty(pExpr, EP_IntValue) );
73056       sqlite3VdbeAddOp4(v, OP_String8, 0, target, 0, pExpr->u.zToken, 0);
73057       break;
73058     }
73059     case TK_NULL: {
73060       sqlite3VdbeAddOp2(v, OP_Null, 0, target);
73061       break;
73062     }
73063 #ifndef SQLITE_OMIT_BLOB_LITERAL
73064     case TK_BLOB: {
73065       int n;
73066       const char *z;
73067       char *zBlob;
73068       assert( !ExprHasProperty(pExpr, EP_IntValue) );
73069       assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' );
73070       assert( pExpr->u.zToken[1]=='\'' );
73071       z = &pExpr->u.zToken[2];
73072       n = sqlite3Strlen30(z) - 1;
73073       assert( z[n]=='\'' );
73074       zBlob = sqlite3HexToBlob(sqlite3VdbeDb(v), z, n);
73075       sqlite3VdbeAddOp4(v, OP_Blob, n/2, target, 0, zBlob, P4_DYNAMIC);
73076       break;
73077     }
73078 #endif
73079     case TK_VARIABLE: {
73080       assert( !ExprHasProperty(pExpr, EP_IntValue) );
73081       assert( pExpr->u.zToken!=0 );
73082       assert( pExpr->u.zToken[0]!=0 );
73083       sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iColumn, target);
73084       if( pExpr->u.zToken[1]!=0 ){
73085         sqlite3VdbeChangeP4(v, -1, pExpr->u.zToken, P4_TRANSIENT);
73086       }
73087       break;
73088     }
73089     case TK_REGISTER: {
73090       inReg = pExpr->iTable;
73091       break;
73092     }
73093     case TK_AS: {
73094       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
73095       break;
73096     }
73097 #ifndef SQLITE_OMIT_CAST
73098     case TK_CAST: {
73099       /* Expressions of the form:   CAST(pLeft AS token) */
73100       int aff, to_op;
73101       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
73102       assert( !ExprHasProperty(pExpr, EP_IntValue) );
73103       aff = sqlite3AffinityType(pExpr->u.zToken);
73104       to_op = aff - SQLITE_AFF_TEXT + OP_ToText;
73105       assert( to_op==OP_ToText    || aff!=SQLITE_AFF_TEXT    );
73106       assert( to_op==OP_ToBlob    || aff!=SQLITE_AFF_NONE    );
73107       assert( to_op==OP_ToNumeric || aff!=SQLITE_AFF_NUMERIC );
73108       assert( to_op==OP_ToInt     || aff!=SQLITE_AFF_INTEGER );
73109       assert( to_op==OP_ToReal    || aff!=SQLITE_AFF_REAL    );
73110       testcase( to_op==OP_ToText );
73111       testcase( to_op==OP_ToBlob );
73112       testcase( to_op==OP_ToNumeric );
73113       testcase( to_op==OP_ToInt );
73114       testcase( to_op==OP_ToReal );
73115       if( inReg!=target ){
73116         sqlite3VdbeAddOp2(v, OP_SCopy, inReg, target);
73117         inReg = target;
73118       }
73119       sqlite3VdbeAddOp1(v, to_op, inReg);
73120       testcase( usedAsColumnCache(pParse, inReg, inReg) );
73121       sqlite3ExprCacheAffinityChange(pParse, inReg, 1);
73122       break;
73123     }
73124 #endif /* SQLITE_OMIT_CAST */
73125     case TK_LT:
73126     case TK_LE:
73127     case TK_GT:
73128     case TK_GE:
73129     case TK_NE:
73130     case TK_EQ: {
73131       assert( TK_LT==OP_Lt );
73132       assert( TK_LE==OP_Le );
73133       assert( TK_GT==OP_Gt );
73134       assert( TK_GE==OP_Ge );
73135       assert( TK_EQ==OP_Eq );
73136       assert( TK_NE==OP_Ne );
73137       testcase( op==TK_LT );
73138       testcase( op==TK_LE );
73139       testcase( op==TK_GT );
73140       testcase( op==TK_GE );
73141       testcase( op==TK_EQ );
73142       testcase( op==TK_NE );
73143       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
73144       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
73145       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
73146                   r1, r2, inReg, SQLITE_STOREP2);
73147       testcase( regFree1==0 );
73148       testcase( regFree2==0 );
73149       break;
73150     }
73151     case TK_IS:
73152     case TK_ISNOT: {
73153       testcase( op==TK_IS );
73154       testcase( op==TK_ISNOT );
73155       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
73156       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
73157       op = (op==TK_IS) ? TK_EQ : TK_NE;
73158       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
73159                   r1, r2, inReg, SQLITE_STOREP2 | SQLITE_NULLEQ);
73160       testcase( regFree1==0 );
73161       testcase( regFree2==0 );
73162       break;
73163     }
73164     case TK_AND:
73165     case TK_OR:
73166     case TK_PLUS:
73167     case TK_STAR:
73168     case TK_MINUS:
73169     case TK_REM:
73170     case TK_BITAND:
73171     case TK_BITOR:
73172     case TK_SLASH:
73173     case TK_LSHIFT:
73174     case TK_RSHIFT: 
73175     case TK_CONCAT: {
73176       assert( TK_AND==OP_And );
73177       assert( TK_OR==OP_Or );
73178       assert( TK_PLUS==OP_Add );
73179       assert( TK_MINUS==OP_Subtract );
73180       assert( TK_REM==OP_Remainder );
73181       assert( TK_BITAND==OP_BitAnd );
73182       assert( TK_BITOR==OP_BitOr );
73183       assert( TK_SLASH==OP_Divide );
73184       assert( TK_LSHIFT==OP_ShiftLeft );
73185       assert( TK_RSHIFT==OP_ShiftRight );
73186       assert( TK_CONCAT==OP_Concat );
73187       testcase( op==TK_AND );
73188       testcase( op==TK_OR );
73189       testcase( op==TK_PLUS );
73190       testcase( op==TK_MINUS );
73191       testcase( op==TK_REM );
73192       testcase( op==TK_BITAND );
73193       testcase( op==TK_BITOR );
73194       testcase( op==TK_SLASH );
73195       testcase( op==TK_LSHIFT );
73196       testcase( op==TK_RSHIFT );
73197       testcase( op==TK_CONCAT );
73198       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
73199       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
73200       sqlite3VdbeAddOp3(v, op, r2, r1, target);
73201       testcase( regFree1==0 );
73202       testcase( regFree2==0 );
73203       break;
73204     }
73205     case TK_UMINUS: {
73206       Expr *pLeft = pExpr->pLeft;
73207       assert( pLeft );
73208       if( pLeft->op==TK_INTEGER ){
73209         codeInteger(pParse, pLeft, 1, target);
73210 #ifndef SQLITE_OMIT_FLOATING_POINT
73211       }else if( pLeft->op==TK_FLOAT ){
73212         assert( !ExprHasProperty(pExpr, EP_IntValue) );
73213         codeReal(v, pLeft->u.zToken, 1, target);
73214 #endif
73215       }else{
73216         regFree1 = r1 = sqlite3GetTempReg(pParse);
73217         sqlite3VdbeAddOp2(v, OP_Integer, 0, r1);
73218         r2 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree2);
73219         sqlite3VdbeAddOp3(v, OP_Subtract, r2, r1, target);
73220         testcase( regFree2==0 );
73221       }
73222       inReg = target;
73223       break;
73224     }
73225     case TK_BITNOT:
73226     case TK_NOT: {
73227       assert( TK_BITNOT==OP_BitNot );
73228       assert( TK_NOT==OP_Not );
73229       testcase( op==TK_BITNOT );
73230       testcase( op==TK_NOT );
73231       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
73232       testcase( regFree1==0 );
73233       inReg = target;
73234       sqlite3VdbeAddOp2(v, op, r1, inReg);
73235       break;
73236     }
73237     case TK_ISNULL:
73238     case TK_NOTNULL: {
73239       int addr;
73240       assert( TK_ISNULL==OP_IsNull );
73241       assert( TK_NOTNULL==OP_NotNull );
73242       testcase( op==TK_ISNULL );
73243       testcase( op==TK_NOTNULL );
73244       sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
73245       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
73246       testcase( regFree1==0 );
73247       addr = sqlite3VdbeAddOp1(v, op, r1);
73248       sqlite3VdbeAddOp2(v, OP_AddImm, target, -1);
73249       sqlite3VdbeJumpHere(v, addr);
73250       break;
73251     }
73252     case TK_AGG_FUNCTION: {
73253       AggInfo *pInfo = pExpr->pAggInfo;
73254       if( pInfo==0 ){
73255         assert( !ExprHasProperty(pExpr, EP_IntValue) );
73256         sqlite3ErrorMsg(pParse, "misuse of aggregate: %s()", pExpr->u.zToken);
73257       }else{
73258         inReg = pInfo->aFunc[pExpr->iAgg].iMem;
73259       }
73260       break;
73261     }
73262     case TK_CONST_FUNC:
73263     case TK_FUNCTION: {
73264       ExprList *pFarg;       /* List of function arguments */
73265       int nFarg;             /* Number of function arguments */
73266       FuncDef *pDef;         /* The function definition object */
73267       int nId;               /* Length of the function name in bytes */
73268       const char *zId;       /* The function name */
73269       int constMask = 0;     /* Mask of function arguments that are constant */
73270       int i;                 /* Loop counter */
73271       u8 enc = ENC(db);      /* The text encoding used by this database */
73272       CollSeq *pColl = 0;    /* A collating sequence */
73273
73274       assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
73275       testcase( op==TK_CONST_FUNC );
73276       testcase( op==TK_FUNCTION );
73277       if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ){
73278         pFarg = 0;
73279       }else{
73280         pFarg = pExpr->x.pList;
73281       }
73282       nFarg = pFarg ? pFarg->nExpr : 0;
73283       assert( !ExprHasProperty(pExpr, EP_IntValue) );
73284       zId = pExpr->u.zToken;
73285       nId = sqlite3Strlen30(zId);
73286       pDef = sqlite3FindFunction(db, zId, nId, nFarg, enc, 0);
73287       if( pDef==0 ){
73288         sqlite3ErrorMsg(pParse, "unknown function: %.*s()", nId, zId);
73289         break;
73290       }
73291
73292       /* Attempt a direct implementation of the built-in COALESCE() and
73293       ** IFNULL() functions.  This avoids unnecessary evalation of
73294       ** arguments past the first non-NULL argument.
73295       */
73296       if( pDef->flags & SQLITE_FUNC_COALESCE ){
73297         int endCoalesce = sqlite3VdbeMakeLabel(v);
73298         assert( nFarg>=2 );
73299         sqlite3ExprCode(pParse, pFarg->a[0].pExpr, target);
73300         for(i=1; i<nFarg; i++){
73301           sqlite3VdbeAddOp2(v, OP_NotNull, target, endCoalesce);
73302           sqlite3ExprCacheRemove(pParse, target, 1);
73303           sqlite3ExprCachePush(pParse);
73304           sqlite3ExprCode(pParse, pFarg->a[i].pExpr, target);
73305           sqlite3ExprCachePop(pParse, 1);
73306         }
73307         sqlite3VdbeResolveLabel(v, endCoalesce);
73308         break;
73309       }
73310
73311
73312       if( pFarg ){
73313         r1 = sqlite3GetTempRange(pParse, nFarg);
73314         sqlite3ExprCachePush(pParse);     /* Ticket 2ea2425d34be */
73315         sqlite3ExprCodeExprList(pParse, pFarg, r1, 1);
73316         sqlite3ExprCachePop(pParse, 1);   /* Ticket 2ea2425d34be */
73317       }else{
73318         r1 = 0;
73319       }
73320 #ifndef SQLITE_OMIT_VIRTUALTABLE
73321       /* Possibly overload the function if the first argument is
73322       ** a virtual table column.
73323       **
73324       ** For infix functions (LIKE, GLOB, REGEXP, and MATCH) use the
73325       ** second argument, not the first, as the argument to test to
73326       ** see if it is a column in a virtual table.  This is done because
73327       ** the left operand of infix functions (the operand we want to
73328       ** control overloading) ends up as the second argument to the
73329       ** function.  The expression "A glob B" is equivalent to 
73330       ** "glob(B,A).  We want to use the A in "A glob B" to test
73331       ** for function overloading.  But we use the B term in "glob(B,A)".
73332       */
73333       if( nFarg>=2 && (pExpr->flags & EP_InfixFunc) ){
73334         pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[1].pExpr);
73335       }else if( nFarg>0 ){
73336         pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[0].pExpr);
73337       }
73338 #endif
73339       for(i=0; i<nFarg; i++){
73340         if( i<32 && sqlite3ExprIsConstant(pFarg->a[i].pExpr) ){
73341           constMask |= (1<<i);
73342         }
73343         if( (pDef->flags & SQLITE_FUNC_NEEDCOLL)!=0 && !pColl ){
73344           pColl = sqlite3ExprCollSeq(pParse, pFarg->a[i].pExpr);
73345         }
73346       }
73347       if( pDef->flags & SQLITE_FUNC_NEEDCOLL ){
73348         if( !pColl ) pColl = db->pDfltColl; 
73349         sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
73350       }
73351       sqlite3VdbeAddOp4(v, OP_Function, constMask, r1, target,
73352                         (char*)pDef, P4_FUNCDEF);
73353       sqlite3VdbeChangeP5(v, (u8)nFarg);
73354       if( nFarg ){
73355         sqlite3ReleaseTempRange(pParse, r1, nFarg);
73356       }
73357       break;
73358     }
73359 #ifndef SQLITE_OMIT_SUBQUERY
73360     case TK_EXISTS:
73361     case TK_SELECT: {
73362       testcase( op==TK_EXISTS );
73363       testcase( op==TK_SELECT );
73364       inReg = sqlite3CodeSubselect(pParse, pExpr, 0, 0);
73365       break;
73366     }
73367     case TK_IN: {
73368       int destIfFalse = sqlite3VdbeMakeLabel(v);
73369       int destIfNull = sqlite3VdbeMakeLabel(v);
73370       sqlite3VdbeAddOp2(v, OP_Null, 0, target);
73371       sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull);
73372       sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
73373       sqlite3VdbeResolveLabel(v, destIfFalse);
73374       sqlite3VdbeAddOp2(v, OP_AddImm, target, 0);
73375       sqlite3VdbeResolveLabel(v, destIfNull);
73376       break;
73377     }
73378 #endif /* SQLITE_OMIT_SUBQUERY */
73379
73380
73381     /*
73382     **    x BETWEEN y AND z
73383     **
73384     ** This is equivalent to
73385     **
73386     **    x>=y AND x<=z
73387     **
73388     ** X is stored in pExpr->pLeft.
73389     ** Y is stored in pExpr->pList->a[0].pExpr.
73390     ** Z is stored in pExpr->pList->a[1].pExpr.
73391     */
73392     case TK_BETWEEN: {
73393       Expr *pLeft = pExpr->pLeft;
73394       struct ExprList_item *pLItem = pExpr->x.pList->a;
73395       Expr *pRight = pLItem->pExpr;
73396
73397       r1 = sqlite3ExprCodeTemp(pParse, pLeft, &regFree1);
73398       r2 = sqlite3ExprCodeTemp(pParse, pRight, &regFree2);
73399       testcase( regFree1==0 );
73400       testcase( regFree2==0 );
73401       r3 = sqlite3GetTempReg(pParse);
73402       r4 = sqlite3GetTempReg(pParse);
73403       codeCompare(pParse, pLeft, pRight, OP_Ge,
73404                   r1, r2, r3, SQLITE_STOREP2);
73405       pLItem++;
73406       pRight = pLItem->pExpr;
73407       sqlite3ReleaseTempReg(pParse, regFree2);
73408       r2 = sqlite3ExprCodeTemp(pParse, pRight, &regFree2);
73409       testcase( regFree2==0 );
73410       codeCompare(pParse, pLeft, pRight, OP_Le, r1, r2, r4, SQLITE_STOREP2);
73411       sqlite3VdbeAddOp3(v, OP_And, r3, r4, target);
73412       sqlite3ReleaseTempReg(pParse, r3);
73413       sqlite3ReleaseTempReg(pParse, r4);
73414       break;
73415     }
73416     case TK_UPLUS: {
73417       inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
73418       break;
73419     }
73420
73421     case TK_TRIGGER: {
73422       /* If the opcode is TK_TRIGGER, then the expression is a reference
73423       ** to a column in the new.* or old.* pseudo-tables available to
73424       ** trigger programs. In this case Expr.iTable is set to 1 for the
73425       ** new.* pseudo-table, or 0 for the old.* pseudo-table. Expr.iColumn
73426       ** is set to the column of the pseudo-table to read, or to -1 to
73427       ** read the rowid field.
73428       **
73429       ** The expression is implemented using an OP_Param opcode. The p1
73430       ** parameter is set to 0 for an old.rowid reference, or to (i+1)
73431       ** to reference another column of the old.* pseudo-table, where 
73432       ** i is the index of the column. For a new.rowid reference, p1 is
73433       ** set to (n+1), where n is the number of columns in each pseudo-table.
73434       ** For a reference to any other column in the new.* pseudo-table, p1
73435       ** is set to (n+2+i), where n and i are as defined previously. For
73436       ** example, if the table on which triggers are being fired is
73437       ** declared as:
73438       **
73439       **   CREATE TABLE t1(a, b);
73440       **
73441       ** Then p1 is interpreted as follows:
73442       **
73443       **   p1==0   ->    old.rowid     p1==3   ->    new.rowid
73444       **   p1==1   ->    old.a         p1==4   ->    new.a
73445       **   p1==2   ->    old.b         p1==5   ->    new.b       
73446       */
73447       Table *pTab = pExpr->pTab;
73448       int p1 = pExpr->iTable * (pTab->nCol+1) + 1 + pExpr->iColumn;
73449
73450       assert( pExpr->iTable==0 || pExpr->iTable==1 );
73451       assert( pExpr->iColumn>=-1 && pExpr->iColumn<pTab->nCol );
73452       assert( pTab->iPKey<0 || pExpr->iColumn!=pTab->iPKey );
73453       assert( p1>=0 && p1<(pTab->nCol*2+2) );
73454
73455       sqlite3VdbeAddOp2(v, OP_Param, p1, target);
73456       VdbeComment((v, "%s.%s -> $%d",
73457         (pExpr->iTable ? "new" : "old"),
73458         (pExpr->iColumn<0 ? "rowid" : pExpr->pTab->aCol[pExpr->iColumn].zName),
73459         target
73460       ));
73461
73462 #ifndef SQLITE_OMIT_FLOATING_POINT
73463       /* If the column has REAL affinity, it may currently be stored as an
73464       ** integer. Use OP_RealAffinity to make sure it is really real.  */
73465       if( pExpr->iColumn>=0 
73466        && pTab->aCol[pExpr->iColumn].affinity==SQLITE_AFF_REAL
73467       ){
73468         sqlite3VdbeAddOp1(v, OP_RealAffinity, target);
73469       }
73470 #endif
73471       break;
73472     }
73473
73474
73475     /*
73476     ** Form A:
73477     **   CASE x WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END
73478     **
73479     ** Form B:
73480     **   CASE WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END
73481     **
73482     ** Form A is can be transformed into the equivalent form B as follows:
73483     **   CASE WHEN x=e1 THEN r1 WHEN x=e2 THEN r2 ...
73484     **        WHEN x=eN THEN rN ELSE y END
73485     **
73486     ** X (if it exists) is in pExpr->pLeft.
73487     ** Y is in pExpr->pRight.  The Y is also optional.  If there is no
73488     ** ELSE clause and no other term matches, then the result of the
73489     ** exprssion is NULL.
73490     ** Ei is in pExpr->pList->a[i*2] and Ri is pExpr->pList->a[i*2+1].
73491     **
73492     ** The result of the expression is the Ri for the first matching Ei,
73493     ** or if there is no matching Ei, the ELSE term Y, or if there is
73494     ** no ELSE term, NULL.
73495     */
73496     default: assert( op==TK_CASE ); {
73497       int endLabel;                     /* GOTO label for end of CASE stmt */
73498       int nextCase;                     /* GOTO label for next WHEN clause */
73499       int nExpr;                        /* 2x number of WHEN terms */
73500       int i;                            /* Loop counter */
73501       ExprList *pEList;                 /* List of WHEN terms */
73502       struct ExprList_item *aListelem;  /* Array of WHEN terms */
73503       Expr opCompare;                   /* The X==Ei expression */
73504       Expr cacheX;                      /* Cached expression X */
73505       Expr *pX;                         /* The X expression */
73506       Expr *pTest = 0;                  /* X==Ei (form A) or just Ei (form B) */
73507       VVA_ONLY( int iCacheLevel = pParse->iCacheLevel; )
73508
73509       assert( !ExprHasProperty(pExpr, EP_xIsSelect) && pExpr->x.pList );
73510       assert((pExpr->x.pList->nExpr % 2) == 0);
73511       assert(pExpr->x.pList->nExpr > 0);
73512       pEList = pExpr->x.pList;
73513       aListelem = pEList->a;
73514       nExpr = pEList->nExpr;
73515       endLabel = sqlite3VdbeMakeLabel(v);
73516       if( (pX = pExpr->pLeft)!=0 ){
73517         cacheX = *pX;
73518         testcase( pX->op==TK_COLUMN );
73519         testcase( pX->op==TK_REGISTER );
73520         cacheX.iTable = sqlite3ExprCodeTemp(pParse, pX, &regFree1);
73521         testcase( regFree1==0 );
73522         cacheX.op = TK_REGISTER;
73523         opCompare.op = TK_EQ;
73524         opCompare.pLeft = &cacheX;
73525         pTest = &opCompare;
73526         /* Ticket b351d95f9cd5ef17e9d9dbae18f5ca8611190001:
73527         ** The value in regFree1 might get SCopy-ed into the file result.
73528         ** So make sure that the regFree1 register is not reused for other
73529         ** purposes and possibly overwritten.  */
73530         regFree1 = 0;
73531       }
73532       for(i=0; i<nExpr; i=i+2){
73533         sqlite3ExprCachePush(pParse);
73534         if( pX ){
73535           assert( pTest!=0 );
73536           opCompare.pRight = aListelem[i].pExpr;
73537         }else{
73538           pTest = aListelem[i].pExpr;
73539         }
73540         nextCase = sqlite3VdbeMakeLabel(v);
73541         testcase( pTest->op==TK_COLUMN );
73542         sqlite3ExprIfFalse(pParse, pTest, nextCase, SQLITE_JUMPIFNULL);
73543         testcase( aListelem[i+1].pExpr->op==TK_COLUMN );
73544         testcase( aListelem[i+1].pExpr->op==TK_REGISTER );
73545         sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target);
73546         sqlite3VdbeAddOp2(v, OP_Goto, 0, endLabel);
73547         sqlite3ExprCachePop(pParse, 1);
73548         sqlite3VdbeResolveLabel(v, nextCase);
73549       }
73550       if( pExpr->pRight ){
73551         sqlite3ExprCachePush(pParse);
73552         sqlite3ExprCode(pParse, pExpr->pRight, target);
73553         sqlite3ExprCachePop(pParse, 1);
73554       }else{
73555         sqlite3VdbeAddOp2(v, OP_Null, 0, target);
73556       }
73557       assert( db->mallocFailed || pParse->nErr>0 
73558            || pParse->iCacheLevel==iCacheLevel );
73559       sqlite3VdbeResolveLabel(v, endLabel);
73560       break;
73561     }
73562 #ifndef SQLITE_OMIT_TRIGGER
73563     case TK_RAISE: {
73564       assert( pExpr->affinity==OE_Rollback 
73565            || pExpr->affinity==OE_Abort
73566            || pExpr->affinity==OE_Fail
73567            || pExpr->affinity==OE_Ignore
73568       );
73569       if( !pParse->pTriggerTab ){
73570         sqlite3ErrorMsg(pParse,
73571                        "RAISE() may only be used within a trigger-program");
73572         return 0;
73573       }
73574       if( pExpr->affinity==OE_Abort ){
73575         sqlite3MayAbort(pParse);
73576       }
73577       assert( !ExprHasProperty(pExpr, EP_IntValue) );
73578       if( pExpr->affinity==OE_Ignore ){
73579         sqlite3VdbeAddOp4(
73580             v, OP_Halt, SQLITE_OK, OE_Ignore, 0, pExpr->u.zToken,0);
73581       }else{
73582         sqlite3HaltConstraint(pParse, pExpr->affinity, pExpr->u.zToken, 0);
73583       }
73584
73585       break;
73586     }
73587 #endif
73588   }
73589   sqlite3ReleaseTempReg(pParse, regFree1);
73590   sqlite3ReleaseTempReg(pParse, regFree2);
73591   return inReg;
73592 }
73593
73594 /*
73595 ** Generate code to evaluate an expression and store the results
73596 ** into a register.  Return the register number where the results
73597 ** are stored.
73598 **
73599 ** If the register is a temporary register that can be deallocated,
73600 ** then write its number into *pReg.  If the result register is not
73601 ** a temporary, then set *pReg to zero.
73602 */
73603 SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){
73604   int r1 = sqlite3GetTempReg(pParse);
73605   int r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
73606   if( r2==r1 ){
73607     *pReg = r1;
73608   }else{
73609     sqlite3ReleaseTempReg(pParse, r1);
73610     *pReg = 0;
73611   }
73612   return r2;
73613 }
73614
73615 /*
73616 ** Generate code that will evaluate expression pExpr and store the
73617 ** results in register target.  The results are guaranteed to appear
73618 ** in register target.
73619 */
73620 SQLITE_PRIVATE int sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){
73621   int inReg;
73622
73623   assert( target>0 && target<=pParse->nMem );
73624   if( pExpr && pExpr->op==TK_REGISTER ){
73625     sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, pExpr->iTable, target);
73626   }else{
73627     inReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
73628     assert( pParse->pVdbe || pParse->db->mallocFailed );
73629     if( inReg!=target && pParse->pVdbe ){
73630       sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, inReg, target);
73631     }
73632   }
73633   return target;
73634 }
73635
73636 /*
73637 ** Generate code that evalutes the given expression and puts the result
73638 ** in register target.
73639 **
73640 ** Also make a copy of the expression results into another "cache" register
73641 ** and modify the expression so that the next time it is evaluated,
73642 ** the result is a copy of the cache register.
73643 **
73644 ** This routine is used for expressions that are used multiple 
73645 ** times.  They are evaluated once and the results of the expression
73646 ** are reused.
73647 */
73648 SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int target){
73649   Vdbe *v = pParse->pVdbe;
73650   int inReg;
73651   inReg = sqlite3ExprCode(pParse, pExpr, target);
73652   assert( target>0 );
73653   /* This routine is called for terms to INSERT or UPDATE.  And the only
73654   ** other place where expressions can be converted into TK_REGISTER is
73655   ** in WHERE clause processing.  So as currently implemented, there is
73656   ** no way for a TK_REGISTER to exist here.  But it seems prudent to
73657   ** keep the ALWAYS() in case the conditions above change with future
73658   ** modifications or enhancements. */
73659   if( ALWAYS(pExpr->op!=TK_REGISTER) ){  
73660     int iMem;
73661     iMem = ++pParse->nMem;
73662     sqlite3VdbeAddOp2(v, OP_Copy, inReg, iMem);
73663     pExpr->iTable = iMem;
73664     pExpr->op2 = pExpr->op;
73665     pExpr->op = TK_REGISTER;
73666   }
73667   return inReg;
73668 }
73669
73670 /*
73671 ** Return TRUE if pExpr is an constant expression that is appropriate
73672 ** for factoring out of a loop.  Appropriate expressions are:
73673 **
73674 **    *  Any expression that evaluates to two or more opcodes.
73675 **
73676 **    *  Any OP_Integer, OP_Real, OP_String, OP_Blob, OP_Null, 
73677 **       or OP_Variable that does not need to be placed in a 
73678 **       specific register.
73679 **
73680 ** There is no point in factoring out single-instruction constant
73681 ** expressions that need to be placed in a particular register.  
73682 ** We could factor them out, but then we would end up adding an
73683 ** OP_SCopy instruction to move the value into the correct register
73684 ** later.  We might as well just use the original instruction and
73685 ** avoid the OP_SCopy.
73686 */
73687 static int isAppropriateForFactoring(Expr *p){
73688   if( !sqlite3ExprIsConstantNotJoin(p) ){
73689     return 0;  /* Only constant expressions are appropriate for factoring */
73690   }
73691   if( (p->flags & EP_FixedDest)==0 ){
73692     return 1;  /* Any constant without a fixed destination is appropriate */
73693   }
73694   while( p->op==TK_UPLUS ) p = p->pLeft;
73695   switch( p->op ){
73696 #ifndef SQLITE_OMIT_BLOB_LITERAL
73697     case TK_BLOB:
73698 #endif
73699     case TK_VARIABLE:
73700     case TK_INTEGER:
73701     case TK_FLOAT:
73702     case TK_NULL:
73703     case TK_STRING: {
73704       testcase( p->op==TK_BLOB );
73705       testcase( p->op==TK_VARIABLE );
73706       testcase( p->op==TK_INTEGER );
73707       testcase( p->op==TK_FLOAT );
73708       testcase( p->op==TK_NULL );
73709       testcase( p->op==TK_STRING );
73710       /* Single-instruction constants with a fixed destination are
73711       ** better done in-line.  If we factor them, they will just end
73712       ** up generating an OP_SCopy to move the value to the destination
73713       ** register. */
73714       return 0;
73715     }
73716     case TK_UMINUS: {
73717       if( p->pLeft->op==TK_FLOAT || p->pLeft->op==TK_INTEGER ){
73718         return 0;
73719       }
73720       break;
73721     }
73722     default: {
73723       break;
73724     }
73725   }
73726   return 1;
73727 }
73728
73729 /*
73730 ** If pExpr is a constant expression that is appropriate for
73731 ** factoring out of a loop, then evaluate the expression
73732 ** into a register and convert the expression into a TK_REGISTER
73733 ** expression.
73734 */
73735 static int evalConstExpr(Walker *pWalker, Expr *pExpr){
73736   Parse *pParse = pWalker->pParse;
73737   switch( pExpr->op ){
73738     case TK_IN:
73739     case TK_REGISTER: {
73740       return WRC_Prune;
73741     }
73742     case TK_FUNCTION:
73743     case TK_AGG_FUNCTION:
73744     case TK_CONST_FUNC: {
73745       /* The arguments to a function have a fixed destination.
73746       ** Mark them this way to avoid generated unneeded OP_SCopy
73747       ** instructions. 
73748       */
73749       ExprList *pList = pExpr->x.pList;
73750       assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
73751       if( pList ){
73752         int i = pList->nExpr;
73753         struct ExprList_item *pItem = pList->a;
73754         for(; i>0; i--, pItem++){
73755           if( ALWAYS(pItem->pExpr) ) pItem->pExpr->flags |= EP_FixedDest;
73756         }
73757       }
73758       break;
73759     }
73760   }
73761   if( isAppropriateForFactoring(pExpr) ){
73762     int r1 = ++pParse->nMem;
73763     int r2;
73764     r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
73765     if( NEVER(r1!=r2) ) sqlite3ReleaseTempReg(pParse, r1);
73766     pExpr->op2 = pExpr->op;
73767     pExpr->op = TK_REGISTER;
73768     pExpr->iTable = r2;
73769     return WRC_Prune;
73770   }
73771   return WRC_Continue;
73772 }
73773
73774 /*
73775 ** Preevaluate constant subexpressions within pExpr and store the
73776 ** results in registers.  Modify pExpr so that the constant subexpresions
73777 ** are TK_REGISTER opcodes that refer to the precomputed values.
73778 **
73779 ** This routine is a no-op if the jump to the cookie-check code has
73780 ** already occur.  Since the cookie-check jump is generated prior to
73781 ** any other serious processing, this check ensures that there is no
73782 ** way to accidently bypass the constant initializations.
73783 **
73784 ** This routine is also a no-op if the SQLITE_FactorOutConst optimization
73785 ** is disabled via the sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS)
73786 ** interface.  This allows test logic to verify that the same answer is
73787 ** obtained for queries regardless of whether or not constants are
73788 ** precomputed into registers or if they are inserted in-line.
73789 */
73790 SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse *pParse, Expr *pExpr){
73791   Walker w;
73792   if( pParse->cookieGoto ) return;
73793   if( (pParse->db->flags & SQLITE_FactorOutConst)!=0 ) return;
73794   w.xExprCallback = evalConstExpr;
73795   w.xSelectCallback = 0;
73796   w.pParse = pParse;
73797   sqlite3WalkExpr(&w, pExpr);
73798 }
73799
73800
73801 /*
73802 ** Generate code that pushes the value of every element of the given
73803 ** expression list into a sequence of registers beginning at target.
73804 **
73805 ** Return the number of elements evaluated.
73806 */
73807 SQLITE_PRIVATE int sqlite3ExprCodeExprList(
73808   Parse *pParse,     /* Parsing context */
73809   ExprList *pList,   /* The expression list to be coded */
73810   int target,        /* Where to write results */
73811   int doHardCopy     /* Make a hard copy of every element */
73812 ){
73813   struct ExprList_item *pItem;
73814   int i, n;
73815   assert( pList!=0 );
73816   assert( target>0 );
73817   assert( pParse->pVdbe!=0 );  /* Never gets this far otherwise */
73818   n = pList->nExpr;
73819   for(pItem=pList->a, i=0; i<n; i++, pItem++){
73820     Expr *pExpr = pItem->pExpr;
73821     int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
73822     if( inReg!=target+i ){
73823       sqlite3VdbeAddOp2(pParse->pVdbe, doHardCopy ? OP_Copy : OP_SCopy,
73824                         inReg, target+i);
73825     }
73826   }
73827   return n;
73828 }
73829
73830 /*
73831 ** Generate code for a BETWEEN operator.
73832 **
73833 **    x BETWEEN y AND z
73834 **
73835 ** The above is equivalent to 
73836 **
73837 **    x>=y AND x<=z
73838 **
73839 ** Code it as such, taking care to do the common subexpression
73840 ** elementation of x.
73841 */
73842 static void exprCodeBetween(
73843   Parse *pParse,    /* Parsing and code generating context */
73844   Expr *pExpr,      /* The BETWEEN expression */
73845   int dest,         /* Jump here if the jump is taken */
73846   int jumpIfTrue,   /* Take the jump if the BETWEEN is true */
73847   int jumpIfNull    /* Take the jump if the BETWEEN is NULL */
73848 ){
73849   Expr exprAnd;     /* The AND operator in  x>=y AND x<=z  */
73850   Expr compLeft;    /* The  x>=y  term */
73851   Expr compRight;   /* The  x<=z  term */
73852   Expr exprX;       /* The  x  subexpression */
73853   int regFree1 = 0; /* Temporary use register */
73854
73855   assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
73856   exprX = *pExpr->pLeft;
73857   exprAnd.op = TK_AND;
73858   exprAnd.pLeft = &compLeft;
73859   exprAnd.pRight = &compRight;
73860   compLeft.op = TK_GE;
73861   compLeft.pLeft = &exprX;
73862   compLeft.pRight = pExpr->x.pList->a[0].pExpr;
73863   compRight.op = TK_LE;
73864   compRight.pLeft = &exprX;
73865   compRight.pRight = pExpr->x.pList->a[1].pExpr;
73866   exprX.iTable = sqlite3ExprCodeTemp(pParse, &exprX, &regFree1);
73867   exprX.op = TK_REGISTER;
73868   if( jumpIfTrue ){
73869     sqlite3ExprIfTrue(pParse, &exprAnd, dest, jumpIfNull);
73870   }else{
73871     sqlite3ExprIfFalse(pParse, &exprAnd, dest, jumpIfNull);
73872   }
73873   sqlite3ReleaseTempReg(pParse, regFree1);
73874
73875   /* Ensure adequate test coverage */
73876   testcase( jumpIfTrue==0 && jumpIfNull==0 && regFree1==0 );
73877   testcase( jumpIfTrue==0 && jumpIfNull==0 && regFree1!=0 );
73878   testcase( jumpIfTrue==0 && jumpIfNull!=0 && regFree1==0 );
73879   testcase( jumpIfTrue==0 && jumpIfNull!=0 && regFree1!=0 );
73880   testcase( jumpIfTrue!=0 && jumpIfNull==0 && regFree1==0 );
73881   testcase( jumpIfTrue!=0 && jumpIfNull==0 && regFree1!=0 );
73882   testcase( jumpIfTrue!=0 && jumpIfNull!=0 && regFree1==0 );
73883   testcase( jumpIfTrue!=0 && jumpIfNull!=0 && regFree1!=0 );
73884 }
73885
73886 /*
73887 ** Generate code for a boolean expression such that a jump is made
73888 ** to the label "dest" if the expression is true but execution
73889 ** continues straight thru if the expression is false.
73890 **
73891 ** If the expression evaluates to NULL (neither true nor false), then
73892 ** take the jump if the jumpIfNull flag is SQLITE_JUMPIFNULL.
73893 **
73894 ** This code depends on the fact that certain token values (ex: TK_EQ)
73895 ** are the same as opcode values (ex: OP_Eq) that implement the corresponding
73896 ** operation.  Special comments in vdbe.c and the mkopcodeh.awk script in
73897 ** the make process cause these values to align.  Assert()s in the code
73898 ** below verify that the numbers are aligned correctly.
73899 */
73900 SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
73901   Vdbe *v = pParse->pVdbe;
73902   int op = 0;
73903   int regFree1 = 0;
73904   int regFree2 = 0;
73905   int r1, r2;
73906
73907   assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 );
73908   if( NEVER(v==0) )     return;  /* Existance of VDBE checked by caller */
73909   if( NEVER(pExpr==0) ) return;  /* No way this can happen */
73910   op = pExpr->op;
73911   switch( op ){
73912     case TK_AND: {
73913       int d2 = sqlite3VdbeMakeLabel(v);
73914       testcase( jumpIfNull==0 );
73915       sqlite3ExprCachePush(pParse);
73916       sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL);
73917       sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
73918       sqlite3VdbeResolveLabel(v, d2);
73919       sqlite3ExprCachePop(pParse, 1);
73920       break;
73921     }
73922     case TK_OR: {
73923       testcase( jumpIfNull==0 );
73924       sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
73925       sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
73926       break;
73927     }
73928     case TK_NOT: {
73929       testcase( jumpIfNull==0 );
73930       sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
73931       break;
73932     }
73933     case TK_LT:
73934     case TK_LE:
73935     case TK_GT:
73936     case TK_GE:
73937     case TK_NE:
73938     case TK_EQ: {
73939       assert( TK_LT==OP_Lt );
73940       assert( TK_LE==OP_Le );
73941       assert( TK_GT==OP_Gt );
73942       assert( TK_GE==OP_Ge );
73943       assert( TK_EQ==OP_Eq );
73944       assert( TK_NE==OP_Ne );
73945       testcase( op==TK_LT );
73946       testcase( op==TK_LE );
73947       testcase( op==TK_GT );
73948       testcase( op==TK_GE );
73949       testcase( op==TK_EQ );
73950       testcase( op==TK_NE );
73951       testcase( jumpIfNull==0 );
73952       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
73953       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
73954       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
73955                   r1, r2, dest, jumpIfNull);
73956       testcase( regFree1==0 );
73957       testcase( regFree2==0 );
73958       break;
73959     }
73960     case TK_IS:
73961     case TK_ISNOT: {
73962       testcase( op==TK_IS );
73963       testcase( op==TK_ISNOT );
73964       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
73965       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
73966       op = (op==TK_IS) ? TK_EQ : TK_NE;
73967       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
73968                   r1, r2, dest, SQLITE_NULLEQ);
73969       testcase( regFree1==0 );
73970       testcase( regFree2==0 );
73971       break;
73972     }
73973     case TK_ISNULL:
73974     case TK_NOTNULL: {
73975       assert( TK_ISNULL==OP_IsNull );
73976       assert( TK_NOTNULL==OP_NotNull );
73977       testcase( op==TK_ISNULL );
73978       testcase( op==TK_NOTNULL );
73979       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
73980       sqlite3VdbeAddOp2(v, op, r1, dest);
73981       testcase( regFree1==0 );
73982       break;
73983     }
73984     case TK_BETWEEN: {
73985       testcase( jumpIfNull==0 );
73986       exprCodeBetween(pParse, pExpr, dest, 1, jumpIfNull);
73987       break;
73988     }
73989 #ifndef SQLITE_OMIT_SUBQUERY
73990     case TK_IN: {
73991       int destIfFalse = sqlite3VdbeMakeLabel(v);
73992       int destIfNull = jumpIfNull ? dest : destIfFalse;
73993       sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull);
73994       sqlite3VdbeAddOp2(v, OP_Goto, 0, dest);
73995       sqlite3VdbeResolveLabel(v, destIfFalse);
73996       break;
73997     }
73998 #endif
73999     default: {
74000       r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
74001       sqlite3VdbeAddOp3(v, OP_If, r1, dest, jumpIfNull!=0);
74002       testcase( regFree1==0 );
74003       testcase( jumpIfNull==0 );
74004       break;
74005     }
74006   }
74007   sqlite3ReleaseTempReg(pParse, regFree1);
74008   sqlite3ReleaseTempReg(pParse, regFree2);  
74009 }
74010
74011 /*
74012 ** Generate code for a boolean expression such that a jump is made
74013 ** to the label "dest" if the expression is false but execution
74014 ** continues straight thru if the expression is true.
74015 **
74016 ** If the expression evaluates to NULL (neither true nor false) then
74017 ** jump if jumpIfNull is SQLITE_JUMPIFNULL or fall through if jumpIfNull
74018 ** is 0.
74019 */
74020 SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
74021   Vdbe *v = pParse->pVdbe;
74022   int op = 0;
74023   int regFree1 = 0;
74024   int regFree2 = 0;
74025   int r1, r2;
74026
74027   assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 );
74028   if( NEVER(v==0) ) return; /* Existance of VDBE checked by caller */
74029   if( pExpr==0 )    return;
74030
74031   /* The value of pExpr->op and op are related as follows:
74032   **
74033   **       pExpr->op            op
74034   **       ---------          ----------
74035   **       TK_ISNULL          OP_NotNull
74036   **       TK_NOTNULL         OP_IsNull
74037   **       TK_NE              OP_Eq
74038   **       TK_EQ              OP_Ne
74039   **       TK_GT              OP_Le
74040   **       TK_LE              OP_Gt
74041   **       TK_GE              OP_Lt
74042   **       TK_LT              OP_Ge
74043   **
74044   ** For other values of pExpr->op, op is undefined and unused.
74045   ** The value of TK_ and OP_ constants are arranged such that we
74046   ** can compute the mapping above using the following expression.
74047   ** Assert()s verify that the computation is correct.
74048   */
74049   op = ((pExpr->op+(TK_ISNULL&1))^1)-(TK_ISNULL&1);
74050
74051   /* Verify correct alignment of TK_ and OP_ constants
74052   */
74053   assert( pExpr->op!=TK_ISNULL || op==OP_NotNull );
74054   assert( pExpr->op!=TK_NOTNULL || op==OP_IsNull );
74055   assert( pExpr->op!=TK_NE || op==OP_Eq );
74056   assert( pExpr->op!=TK_EQ || op==OP_Ne );
74057   assert( pExpr->op!=TK_LT || op==OP_Ge );
74058   assert( pExpr->op!=TK_LE || op==OP_Gt );
74059   assert( pExpr->op!=TK_GT || op==OP_Le );
74060   assert( pExpr->op!=TK_GE || op==OP_Lt );
74061
74062   switch( pExpr->op ){
74063     case TK_AND: {
74064       testcase( jumpIfNull==0 );
74065       sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
74066       sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
74067       break;
74068     }
74069     case TK_OR: {
74070       int d2 = sqlite3VdbeMakeLabel(v);
74071       testcase( jumpIfNull==0 );
74072       sqlite3ExprCachePush(pParse);
74073       sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL);
74074       sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
74075       sqlite3VdbeResolveLabel(v, d2);
74076       sqlite3ExprCachePop(pParse, 1);
74077       break;
74078     }
74079     case TK_NOT: {
74080       testcase( jumpIfNull==0 );
74081       sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
74082       break;
74083     }
74084     case TK_LT:
74085     case TK_LE:
74086     case TK_GT:
74087     case TK_GE:
74088     case TK_NE:
74089     case TK_EQ: {
74090       testcase( op==TK_LT );
74091       testcase( op==TK_LE );
74092       testcase( op==TK_GT );
74093       testcase( op==TK_GE );
74094       testcase( op==TK_EQ );
74095       testcase( op==TK_NE );
74096       testcase( jumpIfNull==0 );
74097       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
74098       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
74099       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
74100                   r1, r2, dest, jumpIfNull);
74101       testcase( regFree1==0 );
74102       testcase( regFree2==0 );
74103       break;
74104     }
74105     case TK_IS:
74106     case TK_ISNOT: {
74107       testcase( pExpr->op==TK_IS );
74108       testcase( pExpr->op==TK_ISNOT );
74109       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
74110       r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
74111       op = (pExpr->op==TK_IS) ? TK_NE : TK_EQ;
74112       codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
74113                   r1, r2, dest, SQLITE_NULLEQ);
74114       testcase( regFree1==0 );
74115       testcase( regFree2==0 );
74116       break;
74117     }
74118     case TK_ISNULL:
74119     case TK_NOTNULL: {
74120       testcase( op==TK_ISNULL );
74121       testcase( op==TK_NOTNULL );
74122       r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
74123       sqlite3VdbeAddOp2(v, op, r1, dest);
74124       testcase( regFree1==0 );
74125       break;
74126     }
74127     case TK_BETWEEN: {
74128       testcase( jumpIfNull==0 );
74129       exprCodeBetween(pParse, pExpr, dest, 0, jumpIfNull);
74130       break;
74131     }
74132 #ifndef SQLITE_OMIT_SUBQUERY
74133     case TK_IN: {
74134       if( jumpIfNull ){
74135         sqlite3ExprCodeIN(pParse, pExpr, dest, dest);
74136       }else{
74137         int destIfNull = sqlite3VdbeMakeLabel(v);
74138         sqlite3ExprCodeIN(pParse, pExpr, dest, destIfNull);
74139         sqlite3VdbeResolveLabel(v, destIfNull);
74140       }
74141       break;
74142     }
74143 #endif
74144     default: {
74145       r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
74146       sqlite3VdbeAddOp3(v, OP_IfNot, r1, dest, jumpIfNull!=0);
74147       testcase( regFree1==0 );
74148       testcase( jumpIfNull==0 );
74149       break;
74150     }
74151   }
74152   sqlite3ReleaseTempReg(pParse, regFree1);
74153   sqlite3ReleaseTempReg(pParse, regFree2);
74154 }
74155
74156 /*
74157 ** Do a deep comparison of two expression trees.  Return 0 if the two
74158 ** expressions are completely identical.  Return 1 if they differ only
74159 ** by a COLLATE operator at the top level.  Return 2 if there are differences
74160 ** other than the top-level COLLATE operator.
74161 **
74162 ** Sometimes this routine will return 2 even if the two expressions
74163 ** really are equivalent.  If we cannot prove that the expressions are
74164 ** identical, we return 2 just to be safe.  So if this routine
74165 ** returns 2, then you do not really know for certain if the two
74166 ** expressions are the same.  But if you get a 0 or 1 return, then you
74167 ** can be sure the expressions are the same.  In the places where
74168 ** this routine is used, it does not hurt to get an extra 2 - that
74169 ** just might result in some slightly slower code.  But returning
74170 ** an incorrect 0 or 1 could lead to a malfunction.
74171 */
74172 SQLITE_PRIVATE int sqlite3ExprCompare(Expr *pA, Expr *pB){
74173   if( pA==0||pB==0 ){
74174     return pB==pA ? 0 : 2;
74175   }
74176   assert( !ExprHasAnyProperty(pA, EP_TokenOnly|EP_Reduced) );
74177   assert( !ExprHasAnyProperty(pB, EP_TokenOnly|EP_Reduced) );
74178   if( ExprHasProperty(pA, EP_xIsSelect) || ExprHasProperty(pB, EP_xIsSelect) ){
74179     return 2;
74180   }
74181   if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 2;
74182   if( pA->op!=pB->op ) return 2;
74183   if( sqlite3ExprCompare(pA->pLeft, pB->pLeft) ) return 2;
74184   if( sqlite3ExprCompare(pA->pRight, pB->pRight) ) return 2;
74185   if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList) ) return 2;
74186   if( pA->iTable!=pB->iTable || pA->iColumn!=pB->iColumn ) return 2;
74187   if( ExprHasProperty(pA, EP_IntValue) ){
74188     if( !ExprHasProperty(pB, EP_IntValue) || pA->u.iValue!=pB->u.iValue ){
74189       return 2;
74190     }
74191   }else if( pA->op!=TK_COLUMN && pA->u.zToken ){
74192     if( ExprHasProperty(pB, EP_IntValue) || NEVER(pB->u.zToken==0) ) return 2;
74193     if( sqlite3StrICmp(pA->u.zToken,pB->u.zToken)!=0 ){
74194       return 2;
74195     }
74196   }
74197   if( (pA->flags & EP_ExpCollate)!=(pB->flags & EP_ExpCollate) ) return 1;
74198   if( (pA->flags & EP_ExpCollate)!=0 && pA->pColl!=pB->pColl ) return 2;
74199   return 0;
74200 }
74201
74202 /*
74203 ** Compare two ExprList objects.  Return 0 if they are identical and 
74204 ** non-zero if they differ in any way.
74205 **
74206 ** This routine might return non-zero for equivalent ExprLists.  The
74207 ** only consequence will be disabled optimizations.  But this routine
74208 ** must never return 0 if the two ExprList objects are different, or
74209 ** a malfunction will result.
74210 **
74211 ** Two NULL pointers are considered to be the same.  But a NULL pointer
74212 ** always differs from a non-NULL pointer.
74213 */
74214 SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList *pA, ExprList *pB){
74215   int i;
74216   if( pA==0 && pB==0 ) return 0;
74217   if( pA==0 || pB==0 ) return 1;
74218   if( pA->nExpr!=pB->nExpr ) return 1;
74219   for(i=0; i<pA->nExpr; i++){
74220     Expr *pExprA = pA->a[i].pExpr;
74221     Expr *pExprB = pB->a[i].pExpr;
74222     if( pA->a[i].sortOrder!=pB->a[i].sortOrder ) return 1;
74223     if( sqlite3ExprCompare(pExprA, pExprB) ) return 1;
74224   }
74225   return 0;
74226 }
74227
74228 /*
74229 ** Add a new element to the pAggInfo->aCol[] array.  Return the index of
74230 ** the new element.  Return a negative number if malloc fails.
74231 */
74232 static int addAggInfoColumn(sqlite3 *db, AggInfo *pInfo){
74233   int i;
74234   pInfo->aCol = sqlite3ArrayAllocate(
74235        db,
74236        pInfo->aCol,
74237        sizeof(pInfo->aCol[0]),
74238        3,
74239        &pInfo->nColumn,
74240        &pInfo->nColumnAlloc,
74241        &i
74242   );
74243   return i;
74244 }    
74245
74246 /*
74247 ** Add a new element to the pAggInfo->aFunc[] array.  Return the index of
74248 ** the new element.  Return a negative number if malloc fails.
74249 */
74250 static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){
74251   int i;
74252   pInfo->aFunc = sqlite3ArrayAllocate(
74253        db, 
74254        pInfo->aFunc,
74255        sizeof(pInfo->aFunc[0]),
74256        3,
74257        &pInfo->nFunc,
74258        &pInfo->nFuncAlloc,
74259        &i
74260   );
74261   return i;
74262 }    
74263
74264 /*
74265 ** This is the xExprCallback for a tree walker.  It is used to
74266 ** implement sqlite3ExprAnalyzeAggregates().  See sqlite3ExprAnalyzeAggregates
74267 ** for additional information.
74268 */
74269 static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
74270   int i;
74271   NameContext *pNC = pWalker->u.pNC;
74272   Parse *pParse = pNC->pParse;
74273   SrcList *pSrcList = pNC->pSrcList;
74274   AggInfo *pAggInfo = pNC->pAggInfo;
74275
74276   switch( pExpr->op ){
74277     case TK_AGG_COLUMN:
74278     case TK_COLUMN: {
74279       testcase( pExpr->op==TK_AGG_COLUMN );
74280       testcase( pExpr->op==TK_COLUMN );
74281       /* Check to see if the column is in one of the tables in the FROM
74282       ** clause of the aggregate query */
74283       if( ALWAYS(pSrcList!=0) ){
74284         struct SrcList_item *pItem = pSrcList->a;
74285         for(i=0; i<pSrcList->nSrc; i++, pItem++){
74286           struct AggInfo_col *pCol;
74287           assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
74288           if( pExpr->iTable==pItem->iCursor ){
74289             /* If we reach this point, it means that pExpr refers to a table
74290             ** that is in the FROM clause of the aggregate query.  
74291             **
74292             ** Make an entry for the column in pAggInfo->aCol[] if there
74293             ** is not an entry there already.
74294             */
74295             int k;
74296             pCol = pAggInfo->aCol;
74297             for(k=0; k<pAggInfo->nColumn; k++, pCol++){
74298               if( pCol->iTable==pExpr->iTable &&
74299                   pCol->iColumn==pExpr->iColumn ){
74300                 break;
74301               }
74302             }
74303             if( (k>=pAggInfo->nColumn)
74304              && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0 
74305             ){
74306               pCol = &pAggInfo->aCol[k];
74307               pCol->pTab = pExpr->pTab;
74308               pCol->iTable = pExpr->iTable;
74309               pCol->iColumn = pExpr->iColumn;
74310               pCol->iMem = ++pParse->nMem;
74311               pCol->iSorterColumn = -1;
74312               pCol->pExpr = pExpr;
74313               if( pAggInfo->pGroupBy ){
74314                 int j, n;
74315                 ExprList *pGB = pAggInfo->pGroupBy;
74316                 struct ExprList_item *pTerm = pGB->a;
74317                 n = pGB->nExpr;
74318                 for(j=0; j<n; j++, pTerm++){
74319                   Expr *pE = pTerm->pExpr;
74320                   if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable &&
74321                       pE->iColumn==pExpr->iColumn ){
74322                     pCol->iSorterColumn = j;
74323                     break;
74324                   }
74325                 }
74326               }
74327               if( pCol->iSorterColumn<0 ){
74328                 pCol->iSorterColumn = pAggInfo->nSortingColumn++;
74329               }
74330             }
74331             /* There is now an entry for pExpr in pAggInfo->aCol[] (either
74332             ** because it was there before or because we just created it).
74333             ** Convert the pExpr to be a TK_AGG_COLUMN referring to that
74334             ** pAggInfo->aCol[] entry.
74335             */
74336             ExprSetIrreducible(pExpr);
74337             pExpr->pAggInfo = pAggInfo;
74338             pExpr->op = TK_AGG_COLUMN;
74339             pExpr->iAgg = (i16)k;
74340             break;
74341           } /* endif pExpr->iTable==pItem->iCursor */
74342         } /* end loop over pSrcList */
74343       }
74344       return WRC_Prune;
74345     }
74346     case TK_AGG_FUNCTION: {
74347       /* The pNC->nDepth==0 test causes aggregate functions in subqueries
74348       ** to be ignored */
74349       if( pNC->nDepth==0 ){
74350         /* Check to see if pExpr is a duplicate of another aggregate 
74351         ** function that is already in the pAggInfo structure
74352         */
74353         struct AggInfo_func *pItem = pAggInfo->aFunc;
74354         for(i=0; i<pAggInfo->nFunc; i++, pItem++){
74355           if( sqlite3ExprCompare(pItem->pExpr, pExpr)==0 ){
74356             break;
74357           }
74358         }
74359         if( i>=pAggInfo->nFunc ){
74360           /* pExpr is original.  Make a new entry in pAggInfo->aFunc[]
74361           */
74362           u8 enc = ENC(pParse->db);
74363           i = addAggInfoFunc(pParse->db, pAggInfo);
74364           if( i>=0 ){
74365             assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
74366             pItem = &pAggInfo->aFunc[i];
74367             pItem->pExpr = pExpr;
74368             pItem->iMem = ++pParse->nMem;
74369             assert( !ExprHasProperty(pExpr, EP_IntValue) );
74370             pItem->pFunc = sqlite3FindFunction(pParse->db,
74371                    pExpr->u.zToken, sqlite3Strlen30(pExpr->u.zToken),
74372                    pExpr->x.pList ? pExpr->x.pList->nExpr : 0, enc, 0);
74373             if( pExpr->flags & EP_Distinct ){
74374               pItem->iDistinct = pParse->nTab++;
74375             }else{
74376               pItem->iDistinct = -1;
74377             }
74378           }
74379         }
74380         /* Make pExpr point to the appropriate pAggInfo->aFunc[] entry
74381         */
74382         assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
74383         ExprSetIrreducible(pExpr);
74384         pExpr->iAgg = (i16)i;
74385         pExpr->pAggInfo = pAggInfo;
74386         return WRC_Prune;
74387       }
74388     }
74389   }
74390   return WRC_Continue;
74391 }
74392 static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){
74393   NameContext *pNC = pWalker->u.pNC;
74394   if( pNC->nDepth==0 ){
74395     pNC->nDepth++;
74396     sqlite3WalkSelect(pWalker, pSelect);
74397     pNC->nDepth--;
74398     return WRC_Prune;
74399   }else{
74400     return WRC_Continue;
74401   }
74402 }
74403
74404 /*
74405 ** Analyze the given expression looking for aggregate functions and
74406 ** for variables that need to be added to the pParse->aAgg[] array.
74407 ** Make additional entries to the pParse->aAgg[] array as necessary.
74408 **
74409 ** This routine should only be called after the expression has been
74410 ** analyzed by sqlite3ResolveExprNames().
74411 */
74412 SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){
74413   Walker w;
74414   w.xExprCallback = analyzeAggregate;
74415   w.xSelectCallback = analyzeAggregatesInSelect;
74416   w.u.pNC = pNC;
74417   assert( pNC->pSrcList!=0 );
74418   sqlite3WalkExpr(&w, pExpr);
74419 }
74420
74421 /*
74422 ** Call sqlite3ExprAnalyzeAggregates() for every expression in an
74423 ** expression list.  Return the number of errors.
74424 **
74425 ** If an error is found, the analysis is cut short.
74426 */
74427 SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext *pNC, ExprList *pList){
74428   struct ExprList_item *pItem;
74429   int i;
74430   if( pList ){
74431     for(pItem=pList->a, i=0; i<pList->nExpr; i++, pItem++){
74432       sqlite3ExprAnalyzeAggregates(pNC, pItem->pExpr);
74433     }
74434   }
74435 }
74436
74437 /*
74438 ** Allocate a single new register for use to hold some intermediate result.
74439 */
74440 SQLITE_PRIVATE int sqlite3GetTempReg(Parse *pParse){
74441   if( pParse->nTempReg==0 ){
74442     return ++pParse->nMem;
74443   }
74444   return pParse->aTempReg[--pParse->nTempReg];
74445 }
74446
74447 /*
74448 ** Deallocate a register, making available for reuse for some other
74449 ** purpose.
74450 **
74451 ** If a register is currently being used by the column cache, then
74452 ** the dallocation is deferred until the column cache line that uses
74453 ** the register becomes stale.
74454 */
74455 SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse *pParse, int iReg){
74456   if( iReg && pParse->nTempReg<ArraySize(pParse->aTempReg) ){
74457     int i;
74458     struct yColCache *p;
74459     for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
74460       if( p->iReg==iReg ){
74461         p->tempReg = 1;
74462         return;
74463       }
74464     }
74465     pParse->aTempReg[pParse->nTempReg++] = iReg;
74466   }
74467 }
74468
74469 /*
74470 ** Allocate or deallocate a block of nReg consecutive registers
74471 */
74472 SQLITE_PRIVATE int sqlite3GetTempRange(Parse *pParse, int nReg){
74473   int i, n;
74474   i = pParse->iRangeReg;
74475   n = pParse->nRangeReg;
74476   if( nReg<=n ){
74477     assert( !usedAsColumnCache(pParse, i, i+n-1) );
74478     pParse->iRangeReg += nReg;
74479     pParse->nRangeReg -= nReg;
74480   }else{
74481     i = pParse->nMem+1;
74482     pParse->nMem += nReg;
74483   }
74484   return i;
74485 }
74486 SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse *pParse, int iReg, int nReg){
74487   sqlite3ExprCacheRemove(pParse, iReg, nReg);
74488   if( nReg>pParse->nRangeReg ){
74489     pParse->nRangeReg = nReg;
74490     pParse->iRangeReg = iReg;
74491   }
74492 }
74493
74494 /************** End of expr.c ************************************************/
74495 /************** Begin file alter.c *******************************************/
74496 /*
74497 ** 2005 February 15
74498 **
74499 ** The author disclaims copyright to this source code.  In place of
74500 ** a legal notice, here is a blessing:
74501 **
74502 **    May you do good and not evil.
74503 **    May you find forgiveness for yourself and forgive others.
74504 **    May you share freely, never taking more than you give.
74505 **
74506 *************************************************************************
74507 ** This file contains C code routines that used to generate VDBE code
74508 ** that implements the ALTER TABLE command.
74509 */
74510
74511 /*
74512 ** The code in this file only exists if we are not omitting the
74513 ** ALTER TABLE logic from the build.
74514 */
74515 #ifndef SQLITE_OMIT_ALTERTABLE
74516
74517
74518 /*
74519 ** This function is used by SQL generated to implement the 
74520 ** ALTER TABLE command. The first argument is the text of a CREATE TABLE or
74521 ** CREATE INDEX command. The second is a table name. The table name in 
74522 ** the CREATE TABLE or CREATE INDEX statement is replaced with the third
74523 ** argument and the result returned. Examples:
74524 **
74525 ** sqlite_rename_table('CREATE TABLE abc(a, b, c)', 'def')
74526 **     -> 'CREATE TABLE def(a, b, c)'
74527 **
74528 ** sqlite_rename_table('CREATE INDEX i ON abc(a)', 'def')
74529 **     -> 'CREATE INDEX i ON def(a, b, c)'
74530 */
74531 static void renameTableFunc(
74532   sqlite3_context *context,
74533   int NotUsed,
74534   sqlite3_value **argv
74535 ){
74536   unsigned char const *zSql = sqlite3_value_text(argv[0]);
74537   unsigned char const *zTableName = sqlite3_value_text(argv[1]);
74538
74539   int token;
74540   Token tname;
74541   unsigned char const *zCsr = zSql;
74542   int len = 0;
74543   char *zRet;
74544
74545   sqlite3 *db = sqlite3_context_db_handle(context);
74546
74547   UNUSED_PARAMETER(NotUsed);
74548
74549   /* The principle used to locate the table name in the CREATE TABLE 
74550   ** statement is that the table name is the first non-space token that
74551   ** is immediately followed by a TK_LP or TK_USING token.
74552   */
74553   if( zSql ){
74554     do {
74555       if( !*zCsr ){
74556         /* Ran out of input before finding an opening bracket. Return NULL. */
74557         return;
74558       }
74559
74560       /* Store the token that zCsr points to in tname. */
74561       tname.z = (char*)zCsr;
74562       tname.n = len;
74563
74564       /* Advance zCsr to the next token. Store that token type in 'token',
74565       ** and its length in 'len' (to be used next iteration of this loop).
74566       */
74567       do {
74568         zCsr += len;
74569         len = sqlite3GetToken(zCsr, &token);
74570       } while( token==TK_SPACE );
74571       assert( len>0 );
74572     } while( token!=TK_LP && token!=TK_USING );
74573
74574     zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql, 
74575        zTableName, tname.z+tname.n);
74576     sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC);
74577   }
74578 }
74579
74580 /*
74581 ** This C function implements an SQL user function that is used by SQL code
74582 ** generated by the ALTER TABLE ... RENAME command to modify the definition
74583 ** of any foreign key constraints that use the table being renamed as the 
74584 ** parent table. It is passed three arguments:
74585 **
74586 **   1) The complete text of the CREATE TABLE statement being modified,
74587 **   2) The old name of the table being renamed, and
74588 **   3) The new name of the table being renamed.
74589 **
74590 ** It returns the new CREATE TABLE statement. For example:
74591 **
74592 **   sqlite_rename_parent('CREATE TABLE t1(a REFERENCES t2)', 't2', 't3')
74593 **       -> 'CREATE TABLE t1(a REFERENCES t3)'
74594 */
74595 #ifndef SQLITE_OMIT_FOREIGN_KEY
74596 static void renameParentFunc(
74597   sqlite3_context *context,
74598   int NotUsed,
74599   sqlite3_value **argv
74600 ){
74601   sqlite3 *db = sqlite3_context_db_handle(context);
74602   char *zOutput = 0;
74603   char *zResult;
74604   unsigned char const *zInput = sqlite3_value_text(argv[0]);
74605   unsigned char const *zOld = sqlite3_value_text(argv[1]);
74606   unsigned char const *zNew = sqlite3_value_text(argv[2]);
74607
74608   unsigned const char *z;         /* Pointer to token */
74609   int n;                          /* Length of token z */
74610   int token;                      /* Type of token */
74611
74612   UNUSED_PARAMETER(NotUsed);
74613   for(z=zInput; *z; z=z+n){
74614     n = sqlite3GetToken(z, &token);
74615     if( token==TK_REFERENCES ){
74616       char *zParent;
74617       do {
74618         z += n;
74619         n = sqlite3GetToken(z, &token);
74620       }while( token==TK_SPACE );
74621
74622       zParent = sqlite3DbStrNDup(db, (const char *)z, n);
74623       if( zParent==0 ) break;
74624       sqlite3Dequote(zParent);
74625       if( 0==sqlite3StrICmp((const char *)zOld, zParent) ){
74626         char *zOut = sqlite3MPrintf(db, "%s%.*s\"%w\"", 
74627             (zOutput?zOutput:""), z-zInput, zInput, (const char *)zNew
74628         );
74629         sqlite3DbFree(db, zOutput);
74630         zOutput = zOut;
74631         zInput = &z[n];
74632       }
74633       sqlite3DbFree(db, zParent);
74634     }
74635   }
74636
74637   zResult = sqlite3MPrintf(db, "%s%s", (zOutput?zOutput:""), zInput), 
74638   sqlite3_result_text(context, zResult, -1, SQLITE_DYNAMIC);
74639   sqlite3DbFree(db, zOutput);
74640 }
74641 #endif
74642
74643 #ifndef SQLITE_OMIT_TRIGGER
74644 /* This function is used by SQL generated to implement the
74645 ** ALTER TABLE command. The first argument is the text of a CREATE TRIGGER 
74646 ** statement. The second is a table name. The table name in the CREATE 
74647 ** TRIGGER statement is replaced with the third argument and the result 
74648 ** returned. This is analagous to renameTableFunc() above, except for CREATE
74649 ** TRIGGER, not CREATE INDEX and CREATE TABLE.
74650 */
74651 static void renameTriggerFunc(
74652   sqlite3_context *context,
74653   int NotUsed,
74654   sqlite3_value **argv
74655 ){
74656   unsigned char const *zSql = sqlite3_value_text(argv[0]);
74657   unsigned char const *zTableName = sqlite3_value_text(argv[1]);
74658
74659   int token;
74660   Token tname;
74661   int dist = 3;
74662   unsigned char const *zCsr = zSql;
74663   int len = 0;
74664   char *zRet;
74665   sqlite3 *db = sqlite3_context_db_handle(context);
74666
74667   UNUSED_PARAMETER(NotUsed);
74668
74669   /* The principle used to locate the table name in the CREATE TRIGGER 
74670   ** statement is that the table name is the first token that is immediatedly
74671   ** preceded by either TK_ON or TK_DOT and immediatedly followed by one
74672   ** of TK_WHEN, TK_BEGIN or TK_FOR.
74673   */
74674   if( zSql ){
74675     do {
74676
74677       if( !*zCsr ){
74678         /* Ran out of input before finding the table name. Return NULL. */
74679         return;
74680       }
74681
74682       /* Store the token that zCsr points to in tname. */
74683       tname.z = (char*)zCsr;
74684       tname.n = len;
74685
74686       /* Advance zCsr to the next token. Store that token type in 'token',
74687       ** and its length in 'len' (to be used next iteration of this loop).
74688       */
74689       do {
74690         zCsr += len;
74691         len = sqlite3GetToken(zCsr, &token);
74692       }while( token==TK_SPACE );
74693       assert( len>0 );
74694
74695       /* Variable 'dist' stores the number of tokens read since the most
74696       ** recent TK_DOT or TK_ON. This means that when a WHEN, FOR or BEGIN 
74697       ** token is read and 'dist' equals 2, the condition stated above
74698       ** to be met.
74699       **
74700       ** Note that ON cannot be a database, table or column name, so
74701       ** there is no need to worry about syntax like 
74702       ** "CREATE TRIGGER ... ON ON.ON BEGIN ..." etc.
74703       */
74704       dist++;
74705       if( token==TK_DOT || token==TK_ON ){
74706         dist = 0;
74707       }
74708     } while( dist!=2 || (token!=TK_WHEN && token!=TK_FOR && token!=TK_BEGIN) );
74709
74710     /* Variable tname now contains the token that is the old table-name
74711     ** in the CREATE TRIGGER statement.
74712     */
74713     zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql, 
74714        zTableName, tname.z+tname.n);
74715     sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC);
74716   }
74717 }
74718 #endif   /* !SQLITE_OMIT_TRIGGER */
74719
74720 /*
74721 ** Register built-in functions used to help implement ALTER TABLE
74722 */
74723 SQLITE_PRIVATE void sqlite3AlterFunctions(void){
74724   static SQLITE_WSD FuncDef aAlterTableFuncs[] = {
74725     FUNCTION(sqlite_rename_table,   2, 0, 0, renameTableFunc),
74726 #ifndef SQLITE_OMIT_TRIGGER
74727     FUNCTION(sqlite_rename_trigger, 2, 0, 0, renameTriggerFunc),
74728 #endif
74729 #ifndef SQLITE_OMIT_FOREIGN_KEY
74730     FUNCTION(sqlite_rename_parent,  3, 0, 0, renameParentFunc),
74731 #endif
74732   };
74733   int i;
74734   FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
74735   FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aAlterTableFuncs);
74736
74737   for(i=0; i<ArraySize(aAlterTableFuncs); i++){
74738     sqlite3FuncDefInsert(pHash, &aFunc[i]);
74739   }
74740 }
74741
74742 /*
74743 ** This function is used to create the text of expressions of the form:
74744 **
74745 **   name=<constant1> OR name=<constant2> OR ...
74746 **
74747 ** If argument zWhere is NULL, then a pointer string containing the text 
74748 ** "name=<constant>" is returned, where <constant> is the quoted version
74749 ** of the string passed as argument zConstant. The returned buffer is
74750 ** allocated using sqlite3DbMalloc(). It is the responsibility of the
74751 ** caller to ensure that it is eventually freed.
74752 **
74753 ** If argument zWhere is not NULL, then the string returned is 
74754 ** "<where> OR name=<constant>", where <where> is the contents of zWhere.
74755 ** In this case zWhere is passed to sqlite3DbFree() before returning.
74756 ** 
74757 */
74758 static char *whereOrName(sqlite3 *db, char *zWhere, char *zConstant){
74759   char *zNew;
74760   if( !zWhere ){
74761     zNew = sqlite3MPrintf(db, "name=%Q", zConstant);
74762   }else{
74763     zNew = sqlite3MPrintf(db, "%s OR name=%Q", zWhere, zConstant);
74764     sqlite3DbFree(db, zWhere);
74765   }
74766   return zNew;
74767 }
74768
74769 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
74770 /*
74771 ** Generate the text of a WHERE expression which can be used to select all
74772 ** tables that have foreign key constraints that refer to table pTab (i.e.
74773 ** constraints for which pTab is the parent table) from the sqlite_master
74774 ** table.
74775 */
74776 static char *whereForeignKeys(Parse *pParse, Table *pTab){
74777   FKey *p;
74778   char *zWhere = 0;
74779   for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
74780     zWhere = whereOrName(pParse->db, zWhere, p->pFrom->zName);
74781   }
74782   return zWhere;
74783 }
74784 #endif
74785
74786 /*
74787 ** Generate the text of a WHERE expression which can be used to select all
74788 ** temporary triggers on table pTab from the sqlite_temp_master table. If
74789 ** table pTab has no temporary triggers, or is itself stored in the 
74790 ** temporary database, NULL is returned.
74791 */
74792 static char *whereTempTriggers(Parse *pParse, Table *pTab){
74793   Trigger *pTrig;
74794   char *zWhere = 0;
74795   const Schema *pTempSchema = pParse->db->aDb[1].pSchema; /* Temp db schema */
74796
74797   /* If the table is not located in the temp-db (in which case NULL is 
74798   ** returned, loop through the tables list of triggers. For each trigger
74799   ** that is not part of the temp-db schema, add a clause to the WHERE 
74800   ** expression being built up in zWhere.
74801   */
74802   if( pTab->pSchema!=pTempSchema ){
74803     sqlite3 *db = pParse->db;
74804     for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){
74805       if( pTrig->pSchema==pTempSchema ){
74806         zWhere = whereOrName(db, zWhere, pTrig->zName);
74807       }
74808     }
74809   }
74810   if( zWhere ){
74811     char *zNew = sqlite3MPrintf(pParse->db, "type='trigger' AND (%s)", zWhere);
74812     sqlite3DbFree(pParse->db, zWhere);
74813     zWhere = zNew;
74814   }
74815   return zWhere;
74816 }
74817
74818 /*
74819 ** Generate code to drop and reload the internal representation of table
74820 ** pTab from the database, including triggers and temporary triggers.
74821 ** Argument zName is the name of the table in the database schema at
74822 ** the time the generated code is executed. This can be different from
74823 ** pTab->zName if this function is being called to code part of an 
74824 ** "ALTER TABLE RENAME TO" statement.
74825 */
74826 static void reloadTableSchema(Parse *pParse, Table *pTab, const char *zName){
74827   Vdbe *v;
74828   char *zWhere;
74829   int iDb;                   /* Index of database containing pTab */
74830 #ifndef SQLITE_OMIT_TRIGGER
74831   Trigger *pTrig;
74832 #endif
74833
74834   v = sqlite3GetVdbe(pParse);
74835   if( NEVER(v==0) ) return;
74836   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
74837   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
74838   assert( iDb>=0 );
74839
74840 #ifndef SQLITE_OMIT_TRIGGER
74841   /* Drop any table triggers from the internal schema. */
74842   for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){
74843     int iTrigDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema);
74844     assert( iTrigDb==iDb || iTrigDb==1 );
74845     sqlite3VdbeAddOp4(v, OP_DropTrigger, iTrigDb, 0, 0, pTrig->zName, 0);
74846   }
74847 #endif
74848
74849   /* Drop the table and index from the internal schema.  */
74850   sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0);
74851
74852   /* Reload the table, index and permanent trigger schemas. */
74853   zWhere = sqlite3MPrintf(pParse->db, "tbl_name=%Q", zName);
74854   if( !zWhere ) return;
74855   sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 0, 0, zWhere, P4_DYNAMIC);
74856
74857 #ifndef SQLITE_OMIT_TRIGGER
74858   /* Now, if the table is not stored in the temp database, reload any temp 
74859   ** triggers. Don't use IN(...) in case SQLITE_OMIT_SUBQUERY is defined. 
74860   */
74861   if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){
74862     sqlite3VdbeAddOp4(v, OP_ParseSchema, 1, 0, 0, zWhere, P4_DYNAMIC);
74863   }
74864 #endif
74865 }
74866
74867 /*
74868 ** Parameter zName is the name of a table that is about to be altered
74869 ** (either with ALTER TABLE ... RENAME TO or ALTER TABLE ... ADD COLUMN).
74870 ** If the table is a system table, this function leaves an error message
74871 ** in pParse->zErr (system tables may not be altered) and returns non-zero.
74872 **
74873 ** Or, if zName is not a system table, zero is returned.
74874 */
74875 static int isSystemTable(Parse *pParse, const char *zName){
74876   if( sqlite3Strlen30(zName)>6 && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){
74877     sqlite3ErrorMsg(pParse, "table %s may not be altered", zName);
74878     return 1;
74879   }
74880   return 0;
74881 }
74882
74883 /*
74884 ** Generate code to implement the "ALTER TABLE xxx RENAME TO yyy" 
74885 ** command. 
74886 */
74887 SQLITE_PRIVATE void sqlite3AlterRenameTable(
74888   Parse *pParse,            /* Parser context. */
74889   SrcList *pSrc,            /* The table to rename. */
74890   Token *pName              /* The new table name. */
74891 ){
74892   int iDb;                  /* Database that contains the table */
74893   char *zDb;                /* Name of database iDb */
74894   Table *pTab;              /* Table being renamed */
74895   char *zName = 0;          /* NULL-terminated version of pName */ 
74896   sqlite3 *db = pParse->db; /* Database connection */
74897   int nTabName;             /* Number of UTF-8 characters in zTabName */
74898   const char *zTabName;     /* Original name of the table */
74899   Vdbe *v;
74900 #ifndef SQLITE_OMIT_TRIGGER
74901   char *zWhere = 0;         /* Where clause to locate temp triggers */
74902 #endif
74903   VTable *pVTab = 0;        /* Non-zero if this is a v-tab with an xRename() */
74904   int savedDbFlags;         /* Saved value of db->flags */
74905
74906   savedDbFlags = db->flags;  
74907   if( NEVER(db->mallocFailed) ) goto exit_rename_table;
74908   assert( pSrc->nSrc==1 );
74909   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
74910
74911   pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase);
74912   if( !pTab ) goto exit_rename_table;
74913   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
74914   zDb = db->aDb[iDb].zName;
74915   db->flags |= SQLITE_PreferBuiltin;
74916
74917   /* Get a NULL terminated version of the new table name. */
74918   zName = sqlite3NameFromToken(db, pName);
74919   if( !zName ) goto exit_rename_table;
74920
74921   /* Check that a table or index named 'zName' does not already exist
74922   ** in database iDb. If so, this is an error.
74923   */
74924   if( sqlite3FindTable(db, zName, zDb) || sqlite3FindIndex(db, zName, zDb) ){
74925     sqlite3ErrorMsg(pParse, 
74926         "there is already another table or index with this name: %s", zName);
74927     goto exit_rename_table;
74928   }
74929
74930   /* Make sure it is not a system table being altered, or a reserved name
74931   ** that the table is being renamed to.
74932   */
74933   if( SQLITE_OK!=isSystemTable(pParse, pTab->zName) ){
74934     goto exit_rename_table;
74935   }
74936   if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ goto
74937     exit_rename_table;
74938   }
74939
74940 #ifndef SQLITE_OMIT_VIEW
74941   if( pTab->pSelect ){
74942     sqlite3ErrorMsg(pParse, "view %s may not be altered", pTab->zName);
74943     goto exit_rename_table;
74944   }
74945 #endif
74946
74947 #ifndef SQLITE_OMIT_AUTHORIZATION
74948   /* Invoke the authorization callback. */
74949   if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){
74950     goto exit_rename_table;
74951   }
74952 #endif
74953
74954 #ifndef SQLITE_OMIT_VIRTUALTABLE
74955   if( sqlite3ViewGetColumnNames(pParse, pTab) ){
74956     goto exit_rename_table;
74957   }
74958   if( IsVirtual(pTab) ){
74959     pVTab = sqlite3GetVTable(db, pTab);
74960     if( pVTab->pVtab->pModule->xRename==0 ){
74961       pVTab = 0;
74962     }
74963   }
74964 #endif
74965
74966   /* Begin a transaction and code the VerifyCookie for database iDb. 
74967   ** Then modify the schema cookie (since the ALTER TABLE modifies the
74968   ** schema). Open a statement transaction if the table is a virtual
74969   ** table.
74970   */
74971   v = sqlite3GetVdbe(pParse);
74972   if( v==0 ){
74973     goto exit_rename_table;
74974   }
74975   sqlite3BeginWriteOperation(pParse, pVTab!=0, iDb);
74976   sqlite3ChangeCookie(pParse, iDb);
74977
74978   /* If this is a virtual table, invoke the xRename() function if
74979   ** one is defined. The xRename() callback will modify the names
74980   ** of any resources used by the v-table implementation (including other
74981   ** SQLite tables) that are identified by the name of the virtual table.
74982   */
74983 #ifndef SQLITE_OMIT_VIRTUALTABLE
74984   if( pVTab ){
74985     int i = ++pParse->nMem;
74986     sqlite3VdbeAddOp4(v, OP_String8, 0, i, 0, zName, 0);
74987     sqlite3VdbeAddOp4(v, OP_VRename, i, 0, 0,(const char*)pVTab, P4_VTAB);
74988     sqlite3MayAbort(pParse);
74989   }
74990 #endif
74991
74992   /* figure out how many UTF-8 characters are in zName */
74993   zTabName = pTab->zName;
74994   nTabName = sqlite3Utf8CharLen(zTabName, -1);
74995
74996 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
74997   if( db->flags&SQLITE_ForeignKeys ){
74998     /* If foreign-key support is enabled, rewrite the CREATE TABLE 
74999     ** statements corresponding to all child tables of foreign key constraints
75000     ** for which the renamed table is the parent table.  */
75001     if( (zWhere=whereForeignKeys(pParse, pTab))!=0 ){
75002       sqlite3NestedParse(pParse, 
75003           "UPDATE \"%w\".%s SET "
75004               "sql = sqlite_rename_parent(sql, %Q, %Q) "
75005               "WHERE %s;", zDb, SCHEMA_TABLE(iDb), zTabName, zName, zWhere);
75006       sqlite3DbFree(db, zWhere);
75007     }
75008   }
75009 #endif
75010
75011   /* Modify the sqlite_master table to use the new table name. */
75012   sqlite3NestedParse(pParse,
75013       "UPDATE %Q.%s SET "
75014 #ifdef SQLITE_OMIT_TRIGGER
75015           "sql = sqlite_rename_table(sql, %Q), "
75016 #else
75017           "sql = CASE "
75018             "WHEN type = 'trigger' THEN sqlite_rename_trigger(sql, %Q)"
75019             "ELSE sqlite_rename_table(sql, %Q) END, "
75020 #endif
75021           "tbl_name = %Q, "
75022           "name = CASE "
75023             "WHEN type='table' THEN %Q "
75024             "WHEN name LIKE 'sqlite_autoindex%%' AND type='index' THEN "
75025              "'sqlite_autoindex_' || %Q || substr(name,%d+18) "
75026             "ELSE name END "
75027       "WHERE tbl_name=%Q AND "
75028           "(type='table' OR type='index' OR type='trigger');", 
75029       zDb, SCHEMA_TABLE(iDb), zName, zName, zName, 
75030 #ifndef SQLITE_OMIT_TRIGGER
75031       zName,
75032 #endif
75033       zName, nTabName, zTabName
75034   );
75035
75036 #ifndef SQLITE_OMIT_AUTOINCREMENT
75037   /* If the sqlite_sequence table exists in this database, then update 
75038   ** it with the new table name.
75039   */
75040   if( sqlite3FindTable(db, "sqlite_sequence", zDb) ){
75041     sqlite3NestedParse(pParse,
75042         "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q",
75043         zDb, zName, pTab->zName);
75044   }
75045 #endif
75046
75047 #ifndef SQLITE_OMIT_TRIGGER
75048   /* If there are TEMP triggers on this table, modify the sqlite_temp_master
75049   ** table. Don't do this if the table being ALTERed is itself located in
75050   ** the temp database.
75051   */
75052   if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){
75053     sqlite3NestedParse(pParse, 
75054         "UPDATE sqlite_temp_master SET "
75055             "sql = sqlite_rename_trigger(sql, %Q), "
75056             "tbl_name = %Q "
75057             "WHERE %s;", zName, zName, zWhere);
75058     sqlite3DbFree(db, zWhere);
75059   }
75060 #endif
75061
75062 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
75063   if( db->flags&SQLITE_ForeignKeys ){
75064     FKey *p;
75065     for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
75066       Table *pFrom = p->pFrom;
75067       if( pFrom!=pTab ){
75068         reloadTableSchema(pParse, p->pFrom, pFrom->zName);
75069       }
75070     }
75071   }
75072 #endif
75073
75074   /* Drop and reload the internal table schema. */
75075   reloadTableSchema(pParse, pTab, zName);
75076
75077 exit_rename_table:
75078   sqlite3SrcListDelete(db, pSrc);
75079   sqlite3DbFree(db, zName);
75080   db->flags = savedDbFlags;
75081 }
75082
75083
75084 /*
75085 ** Generate code to make sure the file format number is at least minFormat.
75086 ** The generated code will increase the file format number if necessary.
75087 */
75088 SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse *pParse, int iDb, int minFormat){
75089   Vdbe *v;
75090   v = sqlite3GetVdbe(pParse);
75091   /* The VDBE should have been allocated before this routine is called.
75092   ** If that allocation failed, we would have quit before reaching this
75093   ** point */
75094   if( ALWAYS(v) ){
75095     int r1 = sqlite3GetTempReg(pParse);
75096     int r2 = sqlite3GetTempReg(pParse);
75097     int j1;
75098     sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT);
75099     sqlite3VdbeUsesBtree(v, iDb);
75100     sqlite3VdbeAddOp2(v, OP_Integer, minFormat, r2);
75101     j1 = sqlite3VdbeAddOp3(v, OP_Ge, r2, 0, r1);
75102     sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, r2);
75103     sqlite3VdbeJumpHere(v, j1);
75104     sqlite3ReleaseTempReg(pParse, r1);
75105     sqlite3ReleaseTempReg(pParse, r2);
75106   }
75107 }
75108
75109 /*
75110 ** This function is called after an "ALTER TABLE ... ADD" statement
75111 ** has been parsed. Argument pColDef contains the text of the new
75112 ** column definition.
75113 **
75114 ** The Table structure pParse->pNewTable was extended to include
75115 ** the new column during parsing.
75116 */
75117 SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
75118   Table *pNew;              /* Copy of pParse->pNewTable */
75119   Table *pTab;              /* Table being altered */
75120   int iDb;                  /* Database number */
75121   const char *zDb;          /* Database name */
75122   const char *zTab;         /* Table name */
75123   char *zCol;               /* Null-terminated column definition */
75124   Column *pCol;             /* The new column */
75125   Expr *pDflt;              /* Default value for the new column */
75126   sqlite3 *db;              /* The database connection; */
75127
75128   db = pParse->db;
75129   if( pParse->nErr || db->mallocFailed ) return;
75130   pNew = pParse->pNewTable;
75131   assert( pNew );
75132
75133   assert( sqlite3BtreeHoldsAllMutexes(db) );
75134   iDb = sqlite3SchemaToIndex(db, pNew->pSchema);
75135   zDb = db->aDb[iDb].zName;
75136   zTab = &pNew->zName[16];  /* Skip the "sqlite_altertab_" prefix on the name */
75137   pCol = &pNew->aCol[pNew->nCol-1];
75138   pDflt = pCol->pDflt;
75139   pTab = sqlite3FindTable(db, zTab, zDb);
75140   assert( pTab );
75141
75142 #ifndef SQLITE_OMIT_AUTHORIZATION
75143   /* Invoke the authorization callback. */
75144   if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){
75145     return;
75146   }
75147 #endif
75148
75149   /* If the default value for the new column was specified with a 
75150   ** literal NULL, then set pDflt to 0. This simplifies checking
75151   ** for an SQL NULL default below.
75152   */
75153   if( pDflt && pDflt->op==TK_NULL ){
75154     pDflt = 0;
75155   }
75156
75157   /* Check that the new column is not specified as PRIMARY KEY or UNIQUE.
75158   ** If there is a NOT NULL constraint, then the default value for the
75159   ** column must not be NULL.
75160   */
75161   if( pCol->isPrimKey ){
75162     sqlite3ErrorMsg(pParse, "Cannot add a PRIMARY KEY column");
75163     return;
75164   }
75165   if( pNew->pIndex ){
75166     sqlite3ErrorMsg(pParse, "Cannot add a UNIQUE column");
75167     return;
75168   }
75169   if( (db->flags&SQLITE_ForeignKeys) && pNew->pFKey && pDflt ){
75170     sqlite3ErrorMsg(pParse, 
75171         "Cannot add a REFERENCES column with non-NULL default value");
75172     return;
75173   }
75174   if( pCol->notNull && !pDflt ){
75175     sqlite3ErrorMsg(pParse, 
75176         "Cannot add a NOT NULL column with default value NULL");
75177     return;
75178   }
75179
75180   /* Ensure the default expression is something that sqlite3ValueFromExpr()
75181   ** can handle (i.e. not CURRENT_TIME etc.)
75182   */
75183   if( pDflt ){
75184     sqlite3_value *pVal;
75185     if( sqlite3ValueFromExpr(db, pDflt, SQLITE_UTF8, SQLITE_AFF_NONE, &pVal) ){
75186       db->mallocFailed = 1;
75187       return;
75188     }
75189     if( !pVal ){
75190       sqlite3ErrorMsg(pParse, "Cannot add a column with non-constant default");
75191       return;
75192     }
75193     sqlite3ValueFree(pVal);
75194   }
75195
75196   /* Modify the CREATE TABLE statement. */
75197   zCol = sqlite3DbStrNDup(db, (char*)pColDef->z, pColDef->n);
75198   if( zCol ){
75199     char *zEnd = &zCol[pColDef->n-1];
75200     int savedDbFlags = db->flags;
75201     while( zEnd>zCol && (*zEnd==';' || sqlite3Isspace(*zEnd)) ){
75202       *zEnd-- = '\0';
75203     }
75204     db->flags |= SQLITE_PreferBuiltin;
75205     sqlite3NestedParse(pParse, 
75206         "UPDATE \"%w\".%s SET "
75207           "sql = substr(sql,1,%d) || ', ' || %Q || substr(sql,%d) "
75208         "WHERE type = 'table' AND name = %Q", 
75209       zDb, SCHEMA_TABLE(iDb), pNew->addColOffset, zCol, pNew->addColOffset+1,
75210       zTab
75211     );
75212     sqlite3DbFree(db, zCol);
75213     db->flags = savedDbFlags;
75214   }
75215
75216   /* If the default value of the new column is NULL, then set the file
75217   ** format to 2. If the default value of the new column is not NULL,
75218   ** the file format becomes 3.
75219   */
75220   sqlite3MinimumFileFormat(pParse, iDb, pDflt ? 3 : 2);
75221
75222   /* Reload the schema of the modified table. */
75223   reloadTableSchema(pParse, pTab, pTab->zName);
75224 }
75225
75226 /*
75227 ** This function is called by the parser after the table-name in
75228 ** an "ALTER TABLE <table-name> ADD" statement is parsed. Argument 
75229 ** pSrc is the full-name of the table being altered.
75230 **
75231 ** This routine makes a (partial) copy of the Table structure
75232 ** for the table being altered and sets Parse.pNewTable to point
75233 ** to it. Routines called by the parser as the column definition
75234 ** is parsed (i.e. sqlite3AddColumn()) add the new Column data to 
75235 ** the copy. The copy of the Table structure is deleted by tokenize.c 
75236 ** after parsing is finished.
75237 **
75238 ** Routine sqlite3AlterFinishAddColumn() will be called to complete
75239 ** coding the "ALTER TABLE ... ADD" statement.
75240 */
75241 SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){
75242   Table *pNew;
75243   Table *pTab;
75244   Vdbe *v;
75245   int iDb;
75246   int i;
75247   int nAlloc;
75248   sqlite3 *db = pParse->db;
75249
75250   /* Look up the table being altered. */
75251   assert( pParse->pNewTable==0 );
75252   assert( sqlite3BtreeHoldsAllMutexes(db) );
75253   if( db->mallocFailed ) goto exit_begin_add_column;
75254   pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase);
75255   if( !pTab ) goto exit_begin_add_column;
75256
75257 #ifndef SQLITE_OMIT_VIRTUALTABLE
75258   if( IsVirtual(pTab) ){
75259     sqlite3ErrorMsg(pParse, "virtual tables may not be altered");
75260     goto exit_begin_add_column;
75261   }
75262 #endif
75263
75264   /* Make sure this is not an attempt to ALTER a view. */
75265   if( pTab->pSelect ){
75266     sqlite3ErrorMsg(pParse, "Cannot add a column to a view");
75267     goto exit_begin_add_column;
75268   }
75269   if( SQLITE_OK!=isSystemTable(pParse, pTab->zName) ){
75270     goto exit_begin_add_column;
75271   }
75272
75273   assert( pTab->addColOffset>0 );
75274   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
75275
75276   /* Put a copy of the Table struct in Parse.pNewTable for the
75277   ** sqlite3AddColumn() function and friends to modify.  But modify
75278   ** the name by adding an "sqlite_altertab_" prefix.  By adding this
75279   ** prefix, we insure that the name will not collide with an existing
75280   ** table because user table are not allowed to have the "sqlite_"
75281   ** prefix on their name.
75282   */
75283   pNew = (Table*)sqlite3DbMallocZero(db, sizeof(Table));
75284   if( !pNew ) goto exit_begin_add_column;
75285   pParse->pNewTable = pNew;
75286   pNew->nRef = 1;
75287   pNew->nCol = pTab->nCol;
75288   assert( pNew->nCol>0 );
75289   nAlloc = (((pNew->nCol-1)/8)*8)+8;
75290   assert( nAlloc>=pNew->nCol && nAlloc%8==0 && nAlloc-pNew->nCol<8 );
75291   pNew->aCol = (Column*)sqlite3DbMallocZero(db, sizeof(Column)*nAlloc);
75292   pNew->zName = sqlite3MPrintf(db, "sqlite_altertab_%s", pTab->zName);
75293   if( !pNew->aCol || !pNew->zName ){
75294     db->mallocFailed = 1;
75295     goto exit_begin_add_column;
75296   }
75297   memcpy(pNew->aCol, pTab->aCol, sizeof(Column)*pNew->nCol);
75298   for(i=0; i<pNew->nCol; i++){
75299     Column *pCol = &pNew->aCol[i];
75300     pCol->zName = sqlite3DbStrDup(db, pCol->zName);
75301     pCol->zColl = 0;
75302     pCol->zType = 0;
75303     pCol->pDflt = 0;
75304     pCol->zDflt = 0;
75305   }
75306   pNew->pSchema = db->aDb[iDb].pSchema;
75307   pNew->addColOffset = pTab->addColOffset;
75308   pNew->nRef = 1;
75309
75310   /* Begin a transaction and increment the schema cookie.  */
75311   sqlite3BeginWriteOperation(pParse, 0, iDb);
75312   v = sqlite3GetVdbe(pParse);
75313   if( !v ) goto exit_begin_add_column;
75314   sqlite3ChangeCookie(pParse, iDb);
75315
75316 exit_begin_add_column:
75317   sqlite3SrcListDelete(db, pSrc);
75318   return;
75319 }
75320 #endif  /* SQLITE_ALTER_TABLE */
75321
75322 /************** End of alter.c ***********************************************/
75323 /************** Begin file analyze.c *****************************************/
75324 /*
75325 ** 2005 July 8
75326 **
75327 ** The author disclaims copyright to this source code.  In place of
75328 ** a legal notice, here is a blessing:
75329 **
75330 **    May you do good and not evil.
75331 **    May you find forgiveness for yourself and forgive others.
75332 **    May you share freely, never taking more than you give.
75333 **
75334 *************************************************************************
75335 ** This file contains code associated with the ANALYZE command.
75336 */
75337 #ifndef SQLITE_OMIT_ANALYZE
75338
75339 /*
75340 ** This routine generates code that opens the sqlite_stat1 table for
75341 ** writing with cursor iStatCur. If the library was built with the
75342 ** SQLITE_ENABLE_STAT2 macro defined, then the sqlite_stat2 table is
75343 ** opened for writing using cursor (iStatCur+1)
75344 **
75345 ** If the sqlite_stat1 tables does not previously exist, it is created.
75346 ** Similarly, if the sqlite_stat2 table does not exist and the library
75347 ** is compiled with SQLITE_ENABLE_STAT2 defined, it is created. 
75348 **
75349 ** Argument zWhere may be a pointer to a buffer containing a table name,
75350 ** or it may be a NULL pointer. If it is not NULL, then all entries in
75351 ** the sqlite_stat1 and (if applicable) sqlite_stat2 tables associated
75352 ** with the named table are deleted. If zWhere==0, then code is generated
75353 ** to delete all stat table entries.
75354 */
75355 static void openStatTable(
75356   Parse *pParse,          /* Parsing context */
75357   int iDb,                /* The database we are looking in */
75358   int iStatCur,           /* Open the sqlite_stat1 table on this cursor */
75359   const char *zWhere,     /* Delete entries for this table or index */
75360   const char *zWhereType  /* Either "tbl" or "idx" */
75361 ){
75362   static const struct {
75363     const char *zName;
75364     const char *zCols;
75365   } aTable[] = {
75366     { "sqlite_stat1", "tbl,idx,stat" },
75367 #ifdef SQLITE_ENABLE_STAT2
75368     { "sqlite_stat2", "tbl,idx,sampleno,sample" },
75369 #endif
75370   };
75371
75372   int aRoot[] = {0, 0};
75373   u8 aCreateTbl[] = {0, 0};
75374
75375   int i;
75376   sqlite3 *db = pParse->db;
75377   Db *pDb;
75378   Vdbe *v = sqlite3GetVdbe(pParse);
75379   if( v==0 ) return;
75380   assert( sqlite3BtreeHoldsAllMutexes(db) );
75381   assert( sqlite3VdbeDb(v)==db );
75382   pDb = &db->aDb[iDb];
75383
75384   for(i=0; i<ArraySize(aTable); i++){
75385     const char *zTab = aTable[i].zName;
75386     Table *pStat;
75387     if( (pStat = sqlite3FindTable(db, zTab, pDb->zName))==0 ){
75388       /* The sqlite_stat[12] table does not exist. Create it. Note that a 
75389       ** side-effect of the CREATE TABLE statement is to leave the rootpage 
75390       ** of the new table in register pParse->regRoot. This is important 
75391       ** because the OpenWrite opcode below will be needing it. */
75392       sqlite3NestedParse(pParse,
75393           "CREATE TABLE %Q.%s(%s)", pDb->zName, zTab, aTable[i].zCols
75394       );
75395       aRoot[i] = pParse->regRoot;
75396       aCreateTbl[i] = 1;
75397     }else{
75398       /* The table already exists. If zWhere is not NULL, delete all entries 
75399       ** associated with the table zWhere. If zWhere is NULL, delete the
75400       ** entire contents of the table. */
75401       aRoot[i] = pStat->tnum;
75402       sqlite3TableLock(pParse, iDb, aRoot[i], 1, zTab);
75403       if( zWhere ){
75404         sqlite3NestedParse(pParse,
75405            "DELETE FROM %Q.%s WHERE %s=%Q", pDb->zName, zTab, zWhereType, zWhere
75406         );
75407       }else{
75408         /* The sqlite_stat[12] table already exists.  Delete all rows. */
75409         sqlite3VdbeAddOp2(v, OP_Clear, aRoot[i], iDb);
75410       }
75411     }
75412   }
75413
75414   /* Open the sqlite_stat[12] tables for writing. */
75415   for(i=0; i<ArraySize(aTable); i++){
75416     sqlite3VdbeAddOp3(v, OP_OpenWrite, iStatCur+i, aRoot[i], iDb);
75417     sqlite3VdbeChangeP4(v, -1, (char *)3, P4_INT32);
75418     sqlite3VdbeChangeP5(v, aCreateTbl[i]);
75419   }
75420 }
75421
75422 /*
75423 ** Generate code to do an analysis of all indices associated with
75424 ** a single table.
75425 */
75426 static void analyzeOneTable(
75427   Parse *pParse,   /* Parser context */
75428   Table *pTab,     /* Table whose indices are to be analyzed */
75429   Index *pOnlyIdx, /* If not NULL, only analyze this one index */
75430   int iStatCur,    /* Index of VdbeCursor that writes the sqlite_stat1 table */
75431   int iMem         /* Available memory locations begin here */
75432 ){
75433   sqlite3 *db = pParse->db;    /* Database handle */
75434   Index *pIdx;                 /* An index to being analyzed */
75435   int iIdxCur;                 /* Cursor open on index being analyzed */
75436   Vdbe *v;                     /* The virtual machine being built up */
75437   int i;                       /* Loop counter */
75438   int topOfLoop;               /* The top of the loop */
75439   int endOfLoop;               /* The end of the loop */
75440   int jZeroRows = -1;          /* Jump from here if number of rows is zero */
75441   int iDb;                     /* Index of database containing pTab */
75442   int regTabname = iMem++;     /* Register containing table name */
75443   int regIdxname = iMem++;     /* Register containing index name */
75444   int regSampleno = iMem++;    /* Register containing next sample number */
75445   int regCol = iMem++;         /* Content of a column analyzed table */
75446   int regRec = iMem++;         /* Register holding completed record */
75447   int regTemp = iMem++;        /* Temporary use register */
75448   int regRowid = iMem++;       /* Rowid for the inserted record */
75449
75450 #ifdef SQLITE_ENABLE_STAT2
75451   int addr = 0;                /* Instruction address */
75452   int regTemp2 = iMem++;       /* Temporary use register */
75453   int regSamplerecno = iMem++; /* Index of next sample to record */
75454   int regRecno = iMem++;       /* Current sample index */
75455   int regLast = iMem++;        /* Index of last sample to record */
75456   int regFirst = iMem++;       /* Index of first sample to record */
75457 #endif
75458
75459   v = sqlite3GetVdbe(pParse);
75460   if( v==0 || NEVER(pTab==0) ){
75461     return;
75462   }
75463   if( pTab->tnum==0 ){
75464     /* Do not gather statistics on views or virtual tables */
75465     return;
75466   }
75467   if( sqlite3_strnicmp(pTab->zName, "sqlite_", 7)==0 ){
75468     /* Do not gather statistics on system tables */
75469     return;
75470   }
75471   assert( sqlite3BtreeHoldsAllMutexes(db) );
75472   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
75473   assert( iDb>=0 );
75474   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
75475 #ifndef SQLITE_OMIT_AUTHORIZATION
75476   if( sqlite3AuthCheck(pParse, SQLITE_ANALYZE, pTab->zName, 0,
75477       db->aDb[iDb].zName ) ){
75478     return;
75479   }
75480 #endif
75481
75482   /* Establish a read-lock on the table at the shared-cache level. */
75483   sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
75484
75485   iIdxCur = pParse->nTab++;
75486   sqlite3VdbeAddOp4(v, OP_String8, 0, regTabname, 0, pTab->zName, 0);
75487   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
75488     int nCol;
75489     KeyInfo *pKey;
75490
75491     if( pOnlyIdx && pOnlyIdx!=pIdx ) continue;
75492     nCol = pIdx->nColumn;
75493     pKey = sqlite3IndexKeyinfo(pParse, pIdx);
75494     if( iMem+1+(nCol*2)>pParse->nMem ){
75495       pParse->nMem = iMem+1+(nCol*2);
75496     }
75497
75498     /* Open a cursor to the index to be analyzed. */
75499     assert( iDb==sqlite3SchemaToIndex(db, pIdx->pSchema) );
75500     sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIdx->tnum, iDb,
75501         (char *)pKey, P4_KEYINFO_HANDOFF);
75502     VdbeComment((v, "%s", pIdx->zName));
75503
75504     /* Populate the register containing the index name. */
75505     sqlite3VdbeAddOp4(v, OP_String8, 0, regIdxname, 0, pIdx->zName, 0);
75506
75507 #ifdef SQLITE_ENABLE_STAT2
75508
75509     /* If this iteration of the loop is generating code to analyze the
75510     ** first index in the pTab->pIndex list, then register regLast has
75511     ** not been populated. In this case populate it now.  */
75512     if( pTab->pIndex==pIdx ){
75513       sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_INDEX_SAMPLES, regSamplerecno);
75514       sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_INDEX_SAMPLES*2-1, regTemp);
75515       sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_INDEX_SAMPLES*2, regTemp2);
75516
75517       sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regLast);
75518       sqlite3VdbeAddOp2(v, OP_Null, 0, regFirst);
75519       addr = sqlite3VdbeAddOp3(v, OP_Lt, regSamplerecno, 0, regLast);
75520       sqlite3VdbeAddOp3(v, OP_Divide, regTemp2, regLast, regFirst);
75521       sqlite3VdbeAddOp3(v, OP_Multiply, regLast, regTemp, regLast);
75522       sqlite3VdbeAddOp2(v, OP_AddImm, regLast, SQLITE_INDEX_SAMPLES*2-2);
75523       sqlite3VdbeAddOp3(v, OP_Divide,  regTemp2, regLast, regLast);
75524       sqlite3VdbeJumpHere(v, addr);
75525     }
75526
75527     /* Zero the regSampleno and regRecno registers. */
75528     sqlite3VdbeAddOp2(v, OP_Integer, 0, regSampleno);
75529     sqlite3VdbeAddOp2(v, OP_Integer, 0, regRecno);
75530     sqlite3VdbeAddOp2(v, OP_Copy, regFirst, regSamplerecno);
75531 #endif
75532
75533     /* The block of memory cells initialized here is used as follows.
75534     **
75535     **    iMem:                
75536     **        The total number of rows in the table.
75537     **
75538     **    iMem+1 .. iMem+nCol: 
75539     **        Number of distinct entries in index considering the 
75540     **        left-most N columns only, where N is between 1 and nCol, 
75541     **        inclusive.
75542     **
75543     **    iMem+nCol+1 .. Mem+2*nCol:  
75544     **        Previous value of indexed columns, from left to right.
75545     **
75546     ** Cells iMem through iMem+nCol are initialized to 0. The others are 
75547     ** initialized to contain an SQL NULL.
75548     */
75549     for(i=0; i<=nCol; i++){
75550       sqlite3VdbeAddOp2(v, OP_Integer, 0, iMem+i);
75551     }
75552     for(i=0; i<nCol; i++){
75553       sqlite3VdbeAddOp2(v, OP_Null, 0, iMem+nCol+i+1);
75554     }
75555
75556     /* Start the analysis loop. This loop runs through all the entries in
75557     ** the index b-tree.  */
75558     endOfLoop = sqlite3VdbeMakeLabel(v);
75559     sqlite3VdbeAddOp2(v, OP_Rewind, iIdxCur, endOfLoop);
75560     topOfLoop = sqlite3VdbeCurrentAddr(v);
75561     sqlite3VdbeAddOp2(v, OP_AddImm, iMem, 1);
75562
75563     for(i=0; i<nCol; i++){
75564       CollSeq *pColl;
75565       sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, regCol);
75566       if( i==0 ){
75567 #ifdef SQLITE_ENABLE_STAT2
75568         /* Check if the record that cursor iIdxCur points to contains a
75569         ** value that should be stored in the sqlite_stat2 table. If so,
75570         ** store it.  */
75571         int ne = sqlite3VdbeAddOp3(v, OP_Ne, regRecno, 0, regSamplerecno);
75572         assert( regTabname+1==regIdxname 
75573              && regTabname+2==regSampleno
75574              && regTabname+3==regCol
75575         );
75576         sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL);
75577         sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 4, regRec, "aaab", 0);
75578         sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur+1, regRowid);
75579         sqlite3VdbeAddOp3(v, OP_Insert, iStatCur+1, regRec, regRowid);
75580
75581         /* Calculate new values for regSamplerecno and regSampleno.
75582         **
75583         **   sampleno = sampleno + 1
75584         **   samplerecno = samplerecno+(remaining records)/(remaining samples)
75585         */
75586         sqlite3VdbeAddOp2(v, OP_AddImm, regSampleno, 1);
75587         sqlite3VdbeAddOp3(v, OP_Subtract, regRecno, regLast, regTemp);
75588         sqlite3VdbeAddOp2(v, OP_AddImm, regTemp, -1);
75589         sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_INDEX_SAMPLES, regTemp2);
75590         sqlite3VdbeAddOp3(v, OP_Subtract, regSampleno, regTemp2, regTemp2);
75591         sqlite3VdbeAddOp3(v, OP_Divide, regTemp2, regTemp, regTemp);
75592         sqlite3VdbeAddOp3(v, OP_Add, regSamplerecno, regTemp, regSamplerecno);
75593
75594         sqlite3VdbeJumpHere(v, ne);
75595         sqlite3VdbeAddOp2(v, OP_AddImm, regRecno, 1);
75596 #endif
75597
75598         /* Always record the very first row */
75599         sqlite3VdbeAddOp1(v, OP_IfNot, iMem+1);
75600       }
75601       assert( pIdx->azColl!=0 );
75602       assert( pIdx->azColl[i]!=0 );
75603       pColl = sqlite3LocateCollSeq(pParse, pIdx->azColl[i]);
75604       sqlite3VdbeAddOp4(v, OP_Ne, regCol, 0, iMem+nCol+i+1,
75605                        (char*)pColl, P4_COLLSEQ);
75606       sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
75607     }
75608     if( db->mallocFailed ){
75609       /* If a malloc failure has occurred, then the result of the expression 
75610       ** passed as the second argument to the call to sqlite3VdbeJumpHere() 
75611       ** below may be negative. Which causes an assert() to fail (or an
75612       ** out-of-bounds write if SQLITE_DEBUG is not defined).  */
75613       return;
75614     }
75615     sqlite3VdbeAddOp2(v, OP_Goto, 0, endOfLoop);
75616     for(i=0; i<nCol; i++){
75617       int addr2 = sqlite3VdbeCurrentAddr(v) - (nCol*2);
75618       if( i==0 ){
75619         sqlite3VdbeJumpHere(v, addr2-1);  /* Set jump dest for the OP_IfNot */
75620       }
75621       sqlite3VdbeJumpHere(v, addr2);      /* Set jump dest for the OP_Ne */
75622       sqlite3VdbeAddOp2(v, OP_AddImm, iMem+i+1, 1);
75623       sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, iMem+nCol+i+1);
75624     }
75625
75626     /* End of the analysis loop. */
75627     sqlite3VdbeResolveLabel(v, endOfLoop);
75628     sqlite3VdbeAddOp2(v, OP_Next, iIdxCur, topOfLoop);
75629     sqlite3VdbeAddOp1(v, OP_Close, iIdxCur);
75630
75631     /* Store the results in sqlite_stat1.
75632     **
75633     ** The result is a single row of the sqlite_stat1 table.  The first
75634     ** two columns are the names of the table and index.  The third column
75635     ** is a string composed of a list of integer statistics about the
75636     ** index.  The first integer in the list is the total number of entries
75637     ** in the index.  There is one additional integer in the list for each
75638     ** column of the table.  This additional integer is a guess of how many
75639     ** rows of the table the index will select.  If D is the count of distinct
75640     ** values and K is the total number of rows, then the integer is computed
75641     ** as:
75642     **
75643     **        I = (K+D-1)/D
75644     **
75645     ** If K==0 then no entry is made into the sqlite_stat1 table.  
75646     ** If K>0 then it is always the case the D>0 so division by zero
75647     ** is never possible.
75648     */
75649     sqlite3VdbeAddOp2(v, OP_SCopy, iMem, regSampleno);
75650     if( jZeroRows<0 ){
75651       jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, iMem);
75652     }
75653     for(i=0; i<nCol; i++){
75654       sqlite3VdbeAddOp4(v, OP_String8, 0, regTemp, 0, " ", 0);
75655       sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regSampleno, regSampleno);
75656       sqlite3VdbeAddOp3(v, OP_Add, iMem, iMem+i+1, regTemp);
75657       sqlite3VdbeAddOp2(v, OP_AddImm, regTemp, -1);
75658       sqlite3VdbeAddOp3(v, OP_Divide, iMem+i+1, regTemp, regTemp);
75659       sqlite3VdbeAddOp1(v, OP_ToInt, regTemp);
75660       sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regSampleno, regSampleno);
75661     }
75662     sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
75663     sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regRowid);
75664     sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regRowid);
75665     sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
75666   }
75667
75668   /* If the table has no indices, create a single sqlite_stat1 entry
75669   ** containing NULL as the index name and the row count as the content.
75670   */
75671   if( pTab->pIndex==0 ){
75672     sqlite3VdbeAddOp3(v, OP_OpenRead, iIdxCur, pTab->tnum, iDb);
75673     VdbeComment((v, "%s", pTab->zName));
75674     sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regSampleno);
75675     sqlite3VdbeAddOp1(v, OP_Close, iIdxCur);
75676     jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, regSampleno);
75677   }else{
75678     sqlite3VdbeJumpHere(v, jZeroRows);
75679     jZeroRows = sqlite3VdbeAddOp0(v, OP_Goto);
75680   }
75681   sqlite3VdbeAddOp2(v, OP_Null, 0, regIdxname);
75682   sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
75683   sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regRowid);
75684   sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regRowid);
75685   sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
75686   if( pParse->nMem<regRec ) pParse->nMem = regRec;
75687   sqlite3VdbeJumpHere(v, jZeroRows);
75688 }
75689
75690 /*
75691 ** Generate code that will cause the most recent index analysis to
75692 ** be loaded into internal hash tables where is can be used.
75693 */
75694 static void loadAnalysis(Parse *pParse, int iDb){
75695   Vdbe *v = sqlite3GetVdbe(pParse);
75696   if( v ){
75697     sqlite3VdbeAddOp1(v, OP_LoadAnalysis, iDb);
75698   }
75699 }
75700
75701 /*
75702 ** Generate code that will do an analysis of an entire database
75703 */
75704 static void analyzeDatabase(Parse *pParse, int iDb){
75705   sqlite3 *db = pParse->db;
75706   Schema *pSchema = db->aDb[iDb].pSchema;    /* Schema of database iDb */
75707   HashElem *k;
75708   int iStatCur;
75709   int iMem;
75710
75711   sqlite3BeginWriteOperation(pParse, 0, iDb);
75712   iStatCur = pParse->nTab;
75713   pParse->nTab += 2;
75714   openStatTable(pParse, iDb, iStatCur, 0, 0);
75715   iMem = pParse->nMem+1;
75716   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
75717   for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){
75718     Table *pTab = (Table*)sqliteHashData(k);
75719     analyzeOneTable(pParse, pTab, 0, iStatCur, iMem);
75720   }
75721   loadAnalysis(pParse, iDb);
75722 }
75723
75724 /*
75725 ** Generate code that will do an analysis of a single table in
75726 ** a database.  If pOnlyIdx is not NULL then it is a single index
75727 ** in pTab that should be analyzed.
75728 */
75729 static void analyzeTable(Parse *pParse, Table *pTab, Index *pOnlyIdx){
75730   int iDb;
75731   int iStatCur;
75732
75733   assert( pTab!=0 );
75734   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
75735   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
75736   sqlite3BeginWriteOperation(pParse, 0, iDb);
75737   iStatCur = pParse->nTab;
75738   pParse->nTab += 2;
75739   if( pOnlyIdx ){
75740     openStatTable(pParse, iDb, iStatCur, pOnlyIdx->zName, "idx");
75741   }else{
75742     openStatTable(pParse, iDb, iStatCur, pTab->zName, "tbl");
75743   }
75744   analyzeOneTable(pParse, pTab, pOnlyIdx, iStatCur, pParse->nMem+1);
75745   loadAnalysis(pParse, iDb);
75746 }
75747
75748 /*
75749 ** Generate code for the ANALYZE command.  The parser calls this routine
75750 ** when it recognizes an ANALYZE command.
75751 **
75752 **        ANALYZE                            -- 1
75753 **        ANALYZE  <database>                -- 2
75754 **        ANALYZE  ?<database>.?<tablename>  -- 3
75755 **
75756 ** Form 1 causes all indices in all attached databases to be analyzed.
75757 ** Form 2 analyzes all indices the single database named.
75758 ** Form 3 analyzes all indices associated with the named table.
75759 */
75760 SQLITE_PRIVATE void sqlite3Analyze(Parse *pParse, Token *pName1, Token *pName2){
75761   sqlite3 *db = pParse->db;
75762   int iDb;
75763   int i;
75764   char *z, *zDb;
75765   Table *pTab;
75766   Index *pIdx;
75767   Token *pTableName;
75768
75769   /* Read the database schema. If an error occurs, leave an error message
75770   ** and code in pParse and return NULL. */
75771   assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
75772   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
75773     return;
75774   }
75775
75776   assert( pName2!=0 || pName1==0 );
75777   if( pName1==0 ){
75778     /* Form 1:  Analyze everything */
75779     for(i=0; i<db->nDb; i++){
75780       if( i==1 ) continue;  /* Do not analyze the TEMP database */
75781       analyzeDatabase(pParse, i);
75782     }
75783   }else if( pName2->n==0 ){
75784     /* Form 2:  Analyze the database or table named */
75785     iDb = sqlite3FindDb(db, pName1);
75786     if( iDb>=0 ){
75787       analyzeDatabase(pParse, iDb);
75788     }else{
75789       z = sqlite3NameFromToken(db, pName1);
75790       if( z ){
75791         if( (pIdx = sqlite3FindIndex(db, z, 0))!=0 ){
75792           analyzeTable(pParse, pIdx->pTable, pIdx);
75793         }else if( (pTab = sqlite3LocateTable(pParse, 0, z, 0))!=0 ){
75794           analyzeTable(pParse, pTab, 0);
75795         }
75796         sqlite3DbFree(db, z);
75797       }
75798     }
75799   }else{
75800     /* Form 3: Analyze the fully qualified table name */
75801     iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pTableName);
75802     if( iDb>=0 ){
75803       zDb = db->aDb[iDb].zName;
75804       z = sqlite3NameFromToken(db, pTableName);
75805       if( z ){
75806         if( (pIdx = sqlite3FindIndex(db, z, zDb))!=0 ){
75807           analyzeTable(pParse, pIdx->pTable, pIdx);
75808         }else if( (pTab = sqlite3LocateTable(pParse, 0, z, zDb))!=0 ){
75809           analyzeTable(pParse, pTab, 0);
75810         }
75811         sqlite3DbFree(db, z);
75812       }
75813     }   
75814   }
75815 }
75816
75817 /*
75818 ** Used to pass information from the analyzer reader through to the
75819 ** callback routine.
75820 */
75821 typedef struct analysisInfo analysisInfo;
75822 struct analysisInfo {
75823   sqlite3 *db;
75824   const char *zDatabase;
75825 };
75826
75827 /*
75828 ** This callback is invoked once for each index when reading the
75829 ** sqlite_stat1 table.  
75830 **
75831 **     argv[0] = name of the table
75832 **     argv[1] = name of the index (might be NULL)
75833 **     argv[2] = results of analysis - on integer for each column
75834 **
75835 ** Entries for which argv[1]==NULL simply record the number of rows in
75836 ** the table.
75837 */
75838 static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){
75839   analysisInfo *pInfo = (analysisInfo*)pData;
75840   Index *pIndex;
75841   Table *pTable;
75842   int i, c, n;
75843   unsigned int v;
75844   const char *z;
75845
75846   assert( argc==3 );
75847   UNUSED_PARAMETER2(NotUsed, argc);
75848
75849   if( argv==0 || argv[0]==0 || argv[2]==0 ){
75850     return 0;
75851   }
75852   pTable = sqlite3FindTable(pInfo->db, argv[0], pInfo->zDatabase);
75853   if( pTable==0 ){
75854     return 0;
75855   }
75856   if( argv[1] ){
75857     pIndex = sqlite3FindIndex(pInfo->db, argv[1], pInfo->zDatabase);
75858   }else{
75859     pIndex = 0;
75860   }
75861   n = pIndex ? pIndex->nColumn : 0;
75862   z = argv[2];
75863   for(i=0; *z && i<=n; i++){
75864     v = 0;
75865     while( (c=z[0])>='0' && c<='9' ){
75866       v = v*10 + c - '0';
75867       z++;
75868     }
75869     if( i==0 ) pTable->nRowEst = v;
75870     if( pIndex==0 ) break;
75871     pIndex->aiRowEst[i] = v;
75872     if( *z==' ' ) z++;
75873     if( strcmp(z, "unordered")==0 ){
75874       pIndex->bUnordered = 1;
75875       break;
75876     }
75877   }
75878   return 0;
75879 }
75880
75881 /*
75882 ** If the Index.aSample variable is not NULL, delete the aSample[] array
75883 ** and its contents.
75884 */
75885 SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){
75886 #ifdef SQLITE_ENABLE_STAT2
75887   if( pIdx->aSample ){
75888     int j;
75889     for(j=0; j<SQLITE_INDEX_SAMPLES; j++){
75890       IndexSample *p = &pIdx->aSample[j];
75891       if( p->eType==SQLITE_TEXT || p->eType==SQLITE_BLOB ){
75892         sqlite3DbFree(db, p->u.z);
75893       }
75894     }
75895     sqlite3DbFree(db, pIdx->aSample);
75896   }
75897 #else
75898   UNUSED_PARAMETER(db);
75899   UNUSED_PARAMETER(pIdx);
75900 #endif
75901 }
75902
75903 /*
75904 ** Load the content of the sqlite_stat1 and sqlite_stat2 tables. The
75905 ** contents of sqlite_stat1 are used to populate the Index.aiRowEst[]
75906 ** arrays. The contents of sqlite_stat2 are used to populate the
75907 ** Index.aSample[] arrays.
75908 **
75909 ** If the sqlite_stat1 table is not present in the database, SQLITE_ERROR
75910 ** is returned. In this case, even if SQLITE_ENABLE_STAT2 was defined 
75911 ** during compilation and the sqlite_stat2 table is present, no data is 
75912 ** read from it.
75913 **
75914 ** If SQLITE_ENABLE_STAT2 was defined during compilation and the 
75915 ** sqlite_stat2 table is not present in the database, SQLITE_ERROR is
75916 ** returned. However, in this case, data is read from the sqlite_stat1
75917 ** table (if it is present) before returning.
75918 **
75919 ** If an OOM error occurs, this function always sets db->mallocFailed.
75920 ** This means if the caller does not care about other errors, the return
75921 ** code may be ignored.
75922 */
75923 SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){
75924   analysisInfo sInfo;
75925   HashElem *i;
75926   char *zSql;
75927   int rc;
75928
75929   assert( iDb>=0 && iDb<db->nDb );
75930   assert( db->aDb[iDb].pBt!=0 );
75931
75932   /* Clear any prior statistics */
75933   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
75934   for(i=sqliteHashFirst(&db->aDb[iDb].pSchema->idxHash);i;i=sqliteHashNext(i)){
75935     Index *pIdx = sqliteHashData(i);
75936     sqlite3DefaultRowEst(pIdx);
75937     sqlite3DeleteIndexSamples(db, pIdx);
75938     pIdx->aSample = 0;
75939   }
75940
75941   /* Check to make sure the sqlite_stat1 table exists */
75942   sInfo.db = db;
75943   sInfo.zDatabase = db->aDb[iDb].zName;
75944   if( sqlite3FindTable(db, "sqlite_stat1", sInfo.zDatabase)==0 ){
75945     return SQLITE_ERROR;
75946   }
75947
75948   /* Load new statistics out of the sqlite_stat1 table */
75949   zSql = sqlite3MPrintf(db, 
75950       "SELECT tbl, idx, stat FROM %Q.sqlite_stat1", sInfo.zDatabase);
75951   if( zSql==0 ){
75952     rc = SQLITE_NOMEM;
75953   }else{
75954     rc = sqlite3_exec(db, zSql, analysisLoader, &sInfo, 0);
75955     sqlite3DbFree(db, zSql);
75956   }
75957
75958
75959   /* Load the statistics from the sqlite_stat2 table. */
75960 #ifdef SQLITE_ENABLE_STAT2
75961   if( rc==SQLITE_OK && !sqlite3FindTable(db, "sqlite_stat2", sInfo.zDatabase) ){
75962     rc = SQLITE_ERROR;
75963   }
75964   if( rc==SQLITE_OK ){
75965     sqlite3_stmt *pStmt = 0;
75966
75967     zSql = sqlite3MPrintf(db, 
75968         "SELECT idx,sampleno,sample FROM %Q.sqlite_stat2", sInfo.zDatabase);
75969     if( !zSql ){
75970       rc = SQLITE_NOMEM;
75971     }else{
75972       rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
75973       sqlite3DbFree(db, zSql);
75974     }
75975
75976     if( rc==SQLITE_OK ){
75977       while( sqlite3_step(pStmt)==SQLITE_ROW ){
75978         char *zIndex;   /* Index name */
75979         Index *pIdx;    /* Pointer to the index object */
75980
75981         zIndex = (char *)sqlite3_column_text(pStmt, 0);
75982         pIdx = zIndex ? sqlite3FindIndex(db, zIndex, sInfo.zDatabase) : 0;
75983         if( pIdx ){
75984           int iSample = sqlite3_column_int(pStmt, 1);
75985           if( iSample<SQLITE_INDEX_SAMPLES && iSample>=0 ){
75986             int eType = sqlite3_column_type(pStmt, 2);
75987
75988             if( pIdx->aSample==0 ){
75989               static const int sz = sizeof(IndexSample)*SQLITE_INDEX_SAMPLES;
75990               pIdx->aSample = (IndexSample *)sqlite3DbMallocRaw(0, sz);
75991               if( pIdx->aSample==0 ){
75992                 db->mallocFailed = 1;
75993                 break;
75994               }
75995               memset(pIdx->aSample, 0, sz);
75996             }
75997
75998             assert( pIdx->aSample );
75999             {
76000               IndexSample *pSample = &pIdx->aSample[iSample];
76001               pSample->eType = (u8)eType;
76002               if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){
76003                 pSample->u.r = sqlite3_column_double(pStmt, 2);
76004               }else if( eType==SQLITE_TEXT || eType==SQLITE_BLOB ){
76005                 const char *z = (const char *)(
76006                     (eType==SQLITE_BLOB) ?
76007                     sqlite3_column_blob(pStmt, 2):
76008                     sqlite3_column_text(pStmt, 2)
76009                 );
76010                 int n = sqlite3_column_bytes(pStmt, 2);
76011                 if( n>24 ){
76012                   n = 24;
76013                 }
76014                 pSample->nByte = (u8)n;
76015                 if( n < 1){
76016                   pSample->u.z = 0;
76017                 }else{
76018                   pSample->u.z = sqlite3DbStrNDup(0, z, n);
76019                   if( pSample->u.z==0 ){
76020                     db->mallocFailed = 1;
76021                     break;
76022                   }
76023                 }
76024               }
76025             }
76026           }
76027         }
76028       }
76029       rc = sqlite3_finalize(pStmt);
76030     }
76031   }
76032 #endif
76033
76034   if( rc==SQLITE_NOMEM ){
76035     db->mallocFailed = 1;
76036   }
76037   return rc;
76038 }
76039
76040
76041 #endif /* SQLITE_OMIT_ANALYZE */
76042
76043 /************** End of analyze.c *********************************************/
76044 /************** Begin file attach.c ******************************************/
76045 /*
76046 ** 2003 April 6
76047 **
76048 ** The author disclaims copyright to this source code.  In place of
76049 ** a legal notice, here is a blessing:
76050 **
76051 **    May you do good and not evil.
76052 **    May you find forgiveness for yourself and forgive others.
76053 **    May you share freely, never taking more than you give.
76054 **
76055 *************************************************************************
76056 ** This file contains code used to implement the ATTACH and DETACH commands.
76057 */
76058
76059 #ifndef SQLITE_OMIT_ATTACH
76060 /*
76061 ** Resolve an expression that was part of an ATTACH or DETACH statement. This
76062 ** is slightly different from resolving a normal SQL expression, because simple
76063 ** identifiers are treated as strings, not possible column names or aliases.
76064 **
76065 ** i.e. if the parser sees:
76066 **
76067 **     ATTACH DATABASE abc AS def
76068 **
76069 ** it treats the two expressions as literal strings 'abc' and 'def' instead of
76070 ** looking for columns of the same name.
76071 **
76072 ** This only applies to the root node of pExpr, so the statement:
76073 **
76074 **     ATTACH DATABASE abc||def AS 'db2'
76075 **
76076 ** will fail because neither abc or def can be resolved.
76077 */
76078 static int resolveAttachExpr(NameContext *pName, Expr *pExpr)
76079 {
76080   int rc = SQLITE_OK;
76081   if( pExpr ){
76082     if( pExpr->op!=TK_ID ){
76083       rc = sqlite3ResolveExprNames(pName, pExpr);
76084       if( rc==SQLITE_OK && !sqlite3ExprIsConstant(pExpr) ){
76085         sqlite3ErrorMsg(pName->pParse, "invalid name: \"%s\"", pExpr->u.zToken);
76086         return SQLITE_ERROR;
76087       }
76088     }else{
76089       pExpr->op = TK_STRING;
76090     }
76091   }
76092   return rc;
76093 }
76094
76095 /*
76096 ** An SQL user-function registered to do the work of an ATTACH statement. The
76097 ** three arguments to the function come directly from an attach statement:
76098 **
76099 **     ATTACH DATABASE x AS y KEY z
76100 **
76101 **     SELECT sqlite_attach(x, y, z)
76102 **
76103 ** If the optional "KEY z" syntax is omitted, an SQL NULL is passed as the
76104 ** third argument.
76105 */
76106 static void attachFunc(
76107   sqlite3_context *context,
76108   int NotUsed,
76109   sqlite3_value **argv
76110 ){
76111   int i;
76112   int rc = 0;
76113   sqlite3 *db = sqlite3_context_db_handle(context);
76114   const char *zName;
76115   const char *zFile;
76116   Db *aNew;
76117   char *zErrDyn = 0;
76118
76119   UNUSED_PARAMETER(NotUsed);
76120
76121   zFile = (const char *)sqlite3_value_text(argv[0]);
76122   zName = (const char *)sqlite3_value_text(argv[1]);
76123   if( zFile==0 ) zFile = "";
76124   if( zName==0 ) zName = "";
76125
76126   /* Check for the following errors:
76127   **
76128   **     * Too many attached databases,
76129   **     * Transaction currently open
76130   **     * Specified database name already being used.
76131   */
76132   if( db->nDb>=db->aLimit[SQLITE_LIMIT_ATTACHED]+2 ){
76133     zErrDyn = sqlite3MPrintf(db, "too many attached databases - max %d", 
76134       db->aLimit[SQLITE_LIMIT_ATTACHED]
76135     );
76136     goto attach_error;
76137   }
76138   if( !db->autoCommit ){
76139     zErrDyn = sqlite3MPrintf(db, "cannot ATTACH database within transaction");
76140     goto attach_error;
76141   }
76142   for(i=0; i<db->nDb; i++){
76143     char *z = db->aDb[i].zName;
76144     assert( z && zName );
76145     if( sqlite3StrICmp(z, zName)==0 ){
76146       zErrDyn = sqlite3MPrintf(db, "database %s is already in use", zName);
76147       goto attach_error;
76148     }
76149   }
76150
76151   /* Allocate the new entry in the db->aDb[] array and initialise the schema
76152   ** hash tables.
76153   */
76154   if( db->aDb==db->aDbStatic ){
76155     aNew = sqlite3DbMallocRaw(db, sizeof(db->aDb[0])*3 );
76156     if( aNew==0 ) return;
76157     memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2);
76158   }else{
76159     aNew = sqlite3DbRealloc(db, db->aDb, sizeof(db->aDb[0])*(db->nDb+1) );
76160     if( aNew==0 ) return;
76161   }
76162   db->aDb = aNew;
76163   aNew = &db->aDb[db->nDb];
76164   memset(aNew, 0, sizeof(*aNew));
76165
76166   /* Open the database file. If the btree is successfully opened, use
76167   ** it to obtain the database schema. At this point the schema may
76168   ** or may not be initialised.
76169   */
76170   rc = sqlite3BtreeOpen(zFile, db, &aNew->pBt, 0,
76171                         db->openFlags | SQLITE_OPEN_MAIN_DB);
76172   db->nDb++;
76173   if( rc==SQLITE_CONSTRAINT ){
76174     rc = SQLITE_ERROR;
76175     zErrDyn = sqlite3MPrintf(db, "database is already attached");
76176   }else if( rc==SQLITE_OK ){
76177     Pager *pPager;
76178     aNew->pSchema = sqlite3SchemaGet(db, aNew->pBt);
76179     if( !aNew->pSchema ){
76180       rc = SQLITE_NOMEM;
76181     }else if( aNew->pSchema->file_format && aNew->pSchema->enc!=ENC(db) ){
76182       zErrDyn = sqlite3MPrintf(db, 
76183         "attached databases must use the same text encoding as main database");
76184       rc = SQLITE_ERROR;
76185     }
76186     pPager = sqlite3BtreePager(aNew->pBt);
76187     sqlite3PagerLockingMode(pPager, db->dfltLockMode);
76188     sqlite3BtreeSecureDelete(aNew->pBt,
76189                              sqlite3BtreeSecureDelete(db->aDb[0].pBt,-1) );
76190   }
76191   aNew->safety_level = 3;
76192   aNew->zName = sqlite3DbStrDup(db, zName);
76193   if( rc==SQLITE_OK && aNew->zName==0 ){
76194     rc = SQLITE_NOMEM;
76195   }
76196
76197
76198 #ifdef SQLITE_HAS_CODEC
76199   if( rc==SQLITE_OK ){
76200     extern int sqlite3CodecAttach(sqlite3*, int, const void*, int);
76201     extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*);
76202     int nKey;
76203     char *zKey;
76204     int t = sqlite3_value_type(argv[2]);
76205     switch( t ){
76206       case SQLITE_INTEGER:
76207       case SQLITE_FLOAT:
76208         zErrDyn = sqlite3DbStrDup(db, "Invalid key value");
76209         rc = SQLITE_ERROR;
76210         break;
76211         
76212       case SQLITE_TEXT:
76213       case SQLITE_BLOB:
76214         nKey = sqlite3_value_bytes(argv[2]);
76215         zKey = (char *)sqlite3_value_blob(argv[2]);
76216         rc = sqlite3CodecAttach(db, db->nDb-1, zKey, nKey);
76217         break;
76218
76219       case SQLITE_NULL:
76220         /* No key specified.  Use the key from the main database */
76221         sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey);
76222         if( nKey>0 || sqlite3BtreeGetReserve(db->aDb[0].pBt)>0 ){
76223           rc = sqlite3CodecAttach(db, db->nDb-1, zKey, nKey);
76224         }
76225         break;
76226     }
76227   }
76228 #endif
76229
76230   /* If the file was opened successfully, read the schema for the new database.
76231   ** If this fails, or if opening the file failed, then close the file and 
76232   ** remove the entry from the db->aDb[] array. i.e. put everything back the way
76233   ** we found it.
76234   */
76235   if( rc==SQLITE_OK ){
76236     sqlite3BtreeEnterAll(db);
76237     rc = sqlite3Init(db, &zErrDyn);
76238     sqlite3BtreeLeaveAll(db);
76239   }
76240   if( rc ){
76241     int iDb = db->nDb - 1;
76242     assert( iDb>=2 );
76243     if( db->aDb[iDb].pBt ){
76244       sqlite3BtreeClose(db->aDb[iDb].pBt);
76245       db->aDb[iDb].pBt = 0;
76246       db->aDb[iDb].pSchema = 0;
76247     }
76248     sqlite3ResetInternalSchema(db, -1);
76249     db->nDb = iDb;
76250     if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
76251       db->mallocFailed = 1;
76252       sqlite3DbFree(db, zErrDyn);
76253       zErrDyn = sqlite3MPrintf(db, "out of memory");
76254     }else if( zErrDyn==0 ){
76255       zErrDyn = sqlite3MPrintf(db, "unable to open database: %s", zFile);
76256     }
76257     goto attach_error;
76258   }
76259   
76260   return;
76261
76262 attach_error:
76263   /* Return an error if we get here */
76264   if( zErrDyn ){
76265     sqlite3_result_error(context, zErrDyn, -1);
76266     sqlite3DbFree(db, zErrDyn);
76267   }
76268   if( rc ) sqlite3_result_error_code(context, rc);
76269 }
76270
76271 /*
76272 ** An SQL user-function registered to do the work of an DETACH statement. The
76273 ** three arguments to the function come directly from a detach statement:
76274 **
76275 **     DETACH DATABASE x
76276 **
76277 **     SELECT sqlite_detach(x)
76278 */
76279 static void detachFunc(
76280   sqlite3_context *context,
76281   int NotUsed,
76282   sqlite3_value **argv
76283 ){
76284   const char *zName = (const char *)sqlite3_value_text(argv[0]);
76285   sqlite3 *db = sqlite3_context_db_handle(context);
76286   int i;
76287   Db *pDb = 0;
76288   char zErr[128];
76289
76290   UNUSED_PARAMETER(NotUsed);
76291
76292   if( zName==0 ) zName = "";
76293   for(i=0; i<db->nDb; i++){
76294     pDb = &db->aDb[i];
76295     if( pDb->pBt==0 ) continue;
76296     if( sqlite3StrICmp(pDb->zName, zName)==0 ) break;
76297   }
76298
76299   if( i>=db->nDb ){
76300     sqlite3_snprintf(sizeof(zErr),zErr, "no such database: %s", zName);
76301     goto detach_error;
76302   }
76303   if( i<2 ){
76304     sqlite3_snprintf(sizeof(zErr),zErr, "cannot detach database %s", zName);
76305     goto detach_error;
76306   }
76307   if( !db->autoCommit ){
76308     sqlite3_snprintf(sizeof(zErr), zErr,
76309                      "cannot DETACH database within transaction");
76310     goto detach_error;
76311   }
76312   if( sqlite3BtreeIsInReadTrans(pDb->pBt) || sqlite3BtreeIsInBackup(pDb->pBt) ){
76313     sqlite3_snprintf(sizeof(zErr),zErr, "database %s is locked", zName);
76314     goto detach_error;
76315   }
76316
76317   sqlite3BtreeClose(pDb->pBt);
76318   pDb->pBt = 0;
76319   pDb->pSchema = 0;
76320   sqlite3ResetInternalSchema(db, -1);
76321   return;
76322
76323 detach_error:
76324   sqlite3_result_error(context, zErr, -1);
76325 }
76326
76327 /*
76328 ** This procedure generates VDBE code for a single invocation of either the
76329 ** sqlite_detach() or sqlite_attach() SQL user functions.
76330 */
76331 static void codeAttach(
76332   Parse *pParse,       /* The parser context */
76333   int type,            /* Either SQLITE_ATTACH or SQLITE_DETACH */
76334   FuncDef const *pFunc,/* FuncDef wrapper for detachFunc() or attachFunc() */
76335   Expr *pAuthArg,      /* Expression to pass to authorization callback */
76336   Expr *pFilename,     /* Name of database file */
76337   Expr *pDbname,       /* Name of the database to use internally */
76338   Expr *pKey           /* Database key for encryption extension */
76339 ){
76340   int rc;
76341   NameContext sName;
76342   Vdbe *v;
76343   sqlite3* db = pParse->db;
76344   int regArgs;
76345
76346   memset(&sName, 0, sizeof(NameContext));
76347   sName.pParse = pParse;
76348
76349   if( 
76350       SQLITE_OK!=(rc = resolveAttachExpr(&sName, pFilename)) ||
76351       SQLITE_OK!=(rc = resolveAttachExpr(&sName, pDbname)) ||
76352       SQLITE_OK!=(rc = resolveAttachExpr(&sName, pKey))
76353   ){
76354     pParse->nErr++;
76355     goto attach_end;
76356   }
76357
76358 #ifndef SQLITE_OMIT_AUTHORIZATION
76359   if( pAuthArg ){
76360     char *zAuthArg;
76361     if( pAuthArg->op==TK_STRING ){
76362       zAuthArg = pAuthArg->u.zToken;
76363     }else{
76364       zAuthArg = 0;
76365     }
76366     rc = sqlite3AuthCheck(pParse, type, zAuthArg, 0, 0);
76367     if(rc!=SQLITE_OK ){
76368       goto attach_end;
76369     }
76370   }
76371 #endif /* SQLITE_OMIT_AUTHORIZATION */
76372
76373
76374   v = sqlite3GetVdbe(pParse);
76375   regArgs = sqlite3GetTempRange(pParse, 4);
76376   sqlite3ExprCode(pParse, pFilename, regArgs);
76377   sqlite3ExprCode(pParse, pDbname, regArgs+1);
76378   sqlite3ExprCode(pParse, pKey, regArgs+2);
76379
76380   assert( v || db->mallocFailed );
76381   if( v ){
76382     sqlite3VdbeAddOp3(v, OP_Function, 0, regArgs+3-pFunc->nArg, regArgs+3);
76383     assert( pFunc->nArg==-1 || (pFunc->nArg&0xff)==pFunc->nArg );
76384     sqlite3VdbeChangeP5(v, (u8)(pFunc->nArg));
76385     sqlite3VdbeChangeP4(v, -1, (char *)pFunc, P4_FUNCDEF);
76386
76387     /* Code an OP_Expire. For an ATTACH statement, set P1 to true (expire this
76388     ** statement only). For DETACH, set it to false (expire all existing
76389     ** statements).
76390     */
76391     sqlite3VdbeAddOp1(v, OP_Expire, (type==SQLITE_ATTACH));
76392   }
76393   
76394 attach_end:
76395   sqlite3ExprDelete(db, pFilename);
76396   sqlite3ExprDelete(db, pDbname);
76397   sqlite3ExprDelete(db, pKey);
76398 }
76399
76400 /*
76401 ** Called by the parser to compile a DETACH statement.
76402 **
76403 **     DETACH pDbname
76404 */
76405 SQLITE_PRIVATE void sqlite3Detach(Parse *pParse, Expr *pDbname){
76406   static const FuncDef detach_func = {
76407     1,                /* nArg */
76408     SQLITE_UTF8,      /* iPrefEnc */
76409     0,                /* flags */
76410     0,                /* pUserData */
76411     0,                /* pNext */
76412     detachFunc,       /* xFunc */
76413     0,                /* xStep */
76414     0,                /* xFinalize */
76415     "sqlite_detach",  /* zName */
76416     0,                /* pHash */
76417     0                 /* pDestructor */
76418   };
76419   codeAttach(pParse, SQLITE_DETACH, &detach_func, pDbname, 0, 0, pDbname);
76420 }
76421
76422 /*
76423 ** Called by the parser to compile an ATTACH statement.
76424 **
76425 **     ATTACH p AS pDbname KEY pKey
76426 */
76427 SQLITE_PRIVATE void sqlite3Attach(Parse *pParse, Expr *p, Expr *pDbname, Expr *pKey){
76428   static const FuncDef attach_func = {
76429     3,                /* nArg */
76430     SQLITE_UTF8,      /* iPrefEnc */
76431     0,                /* flags */
76432     0,                /* pUserData */
76433     0,                /* pNext */
76434     attachFunc,       /* xFunc */
76435     0,                /* xStep */
76436     0,                /* xFinalize */
76437     "sqlite_attach",  /* zName */
76438     0,                /* pHash */
76439     0                 /* pDestructor */
76440   };
76441   codeAttach(pParse, SQLITE_ATTACH, &attach_func, p, p, pDbname, pKey);
76442 }
76443 #endif /* SQLITE_OMIT_ATTACH */
76444
76445 /*
76446 ** Initialize a DbFixer structure.  This routine must be called prior
76447 ** to passing the structure to one of the sqliteFixAAAA() routines below.
76448 **
76449 ** The return value indicates whether or not fixation is required.  TRUE
76450 ** means we do need to fix the database references, FALSE means we do not.
76451 */
76452 SQLITE_PRIVATE int sqlite3FixInit(
76453   DbFixer *pFix,      /* The fixer to be initialized */
76454   Parse *pParse,      /* Error messages will be written here */
76455   int iDb,            /* This is the database that must be used */
76456   const char *zType,  /* "view", "trigger", or "index" */
76457   const Token *pName  /* Name of the view, trigger, or index */
76458 ){
76459   sqlite3 *db;
76460
76461   if( NEVER(iDb<0) || iDb==1 ) return 0;
76462   db = pParse->db;
76463   assert( db->nDb>iDb );
76464   pFix->pParse = pParse;
76465   pFix->zDb = db->aDb[iDb].zName;
76466   pFix->zType = zType;
76467   pFix->pName = pName;
76468   return 1;
76469 }
76470
76471 /*
76472 ** The following set of routines walk through the parse tree and assign
76473 ** a specific database to all table references where the database name
76474 ** was left unspecified in the original SQL statement.  The pFix structure
76475 ** must have been initialized by a prior call to sqlite3FixInit().
76476 **
76477 ** These routines are used to make sure that an index, trigger, or
76478 ** view in one database does not refer to objects in a different database.
76479 ** (Exception: indices, triggers, and views in the TEMP database are
76480 ** allowed to refer to anything.)  If a reference is explicitly made
76481 ** to an object in a different database, an error message is added to
76482 ** pParse->zErrMsg and these routines return non-zero.  If everything
76483 ** checks out, these routines return 0.
76484 */
76485 SQLITE_PRIVATE int sqlite3FixSrcList(
76486   DbFixer *pFix,       /* Context of the fixation */
76487   SrcList *pList       /* The Source list to check and modify */
76488 ){
76489   int i;
76490   const char *zDb;
76491   struct SrcList_item *pItem;
76492
76493   if( NEVER(pList==0) ) return 0;
76494   zDb = pFix->zDb;
76495   for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
76496     if( pItem->zDatabase==0 ){
76497       pItem->zDatabase = sqlite3DbStrDup(pFix->pParse->db, zDb);
76498     }else if( sqlite3StrICmp(pItem->zDatabase,zDb)!=0 ){
76499       sqlite3ErrorMsg(pFix->pParse,
76500          "%s %T cannot reference objects in database %s",
76501          pFix->zType, pFix->pName, pItem->zDatabase);
76502       return 1;
76503     }
76504 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER)
76505     if( sqlite3FixSelect(pFix, pItem->pSelect) ) return 1;
76506     if( sqlite3FixExpr(pFix, pItem->pOn) ) return 1;
76507 #endif
76508   }
76509   return 0;
76510 }
76511 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER)
76512 SQLITE_PRIVATE int sqlite3FixSelect(
76513   DbFixer *pFix,       /* Context of the fixation */
76514   Select *pSelect      /* The SELECT statement to be fixed to one database */
76515 ){
76516   while( pSelect ){
76517     if( sqlite3FixExprList(pFix, pSelect->pEList) ){
76518       return 1;
76519     }
76520     if( sqlite3FixSrcList(pFix, pSelect->pSrc) ){
76521       return 1;
76522     }
76523     if( sqlite3FixExpr(pFix, pSelect->pWhere) ){
76524       return 1;
76525     }
76526     if( sqlite3FixExpr(pFix, pSelect->pHaving) ){
76527       return 1;
76528     }
76529     pSelect = pSelect->pPrior;
76530   }
76531   return 0;
76532 }
76533 SQLITE_PRIVATE int sqlite3FixExpr(
76534   DbFixer *pFix,     /* Context of the fixation */
76535   Expr *pExpr        /* The expression to be fixed to one database */
76536 ){
76537   while( pExpr ){
76538     if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ) break;
76539     if( ExprHasProperty(pExpr, EP_xIsSelect) ){
76540       if( sqlite3FixSelect(pFix, pExpr->x.pSelect) ) return 1;
76541     }else{
76542       if( sqlite3FixExprList(pFix, pExpr->x.pList) ) return 1;
76543     }
76544     if( sqlite3FixExpr(pFix, pExpr->pRight) ){
76545       return 1;
76546     }
76547     pExpr = pExpr->pLeft;
76548   }
76549   return 0;
76550 }
76551 SQLITE_PRIVATE int sqlite3FixExprList(
76552   DbFixer *pFix,     /* Context of the fixation */
76553   ExprList *pList    /* The expression to be fixed to one database */
76554 ){
76555   int i;
76556   struct ExprList_item *pItem;
76557   if( pList==0 ) return 0;
76558   for(i=0, pItem=pList->a; i<pList->nExpr; i++, pItem++){
76559     if( sqlite3FixExpr(pFix, pItem->pExpr) ){
76560       return 1;
76561     }
76562   }
76563   return 0;
76564 }
76565 #endif
76566
76567 #ifndef SQLITE_OMIT_TRIGGER
76568 SQLITE_PRIVATE int sqlite3FixTriggerStep(
76569   DbFixer *pFix,     /* Context of the fixation */
76570   TriggerStep *pStep /* The trigger step be fixed to one database */
76571 ){
76572   while( pStep ){
76573     if( sqlite3FixSelect(pFix, pStep->pSelect) ){
76574       return 1;
76575     }
76576     if( sqlite3FixExpr(pFix, pStep->pWhere) ){
76577       return 1;
76578     }
76579     if( sqlite3FixExprList(pFix, pStep->pExprList) ){
76580       return 1;
76581     }
76582     pStep = pStep->pNext;
76583   }
76584   return 0;
76585 }
76586 #endif
76587
76588 /************** End of attach.c **********************************************/
76589 /************** Begin file auth.c ********************************************/
76590 /*
76591 ** 2003 January 11
76592 **
76593 ** The author disclaims copyright to this source code.  In place of
76594 ** a legal notice, here is a blessing:
76595 **
76596 **    May you do good and not evil.
76597 **    May you find forgiveness for yourself and forgive others.
76598 **    May you share freely, never taking more than you give.
76599 **
76600 *************************************************************************
76601 ** This file contains code used to implement the sqlite3_set_authorizer()
76602 ** API.  This facility is an optional feature of the library.  Embedded
76603 ** systems that do not need this facility may omit it by recompiling
76604 ** the library with -DSQLITE_OMIT_AUTHORIZATION=1
76605 */
76606
76607 /*
76608 ** All of the code in this file may be omitted by defining a single
76609 ** macro.
76610 */
76611 #ifndef SQLITE_OMIT_AUTHORIZATION
76612
76613 /*
76614 ** Set or clear the access authorization function.
76615 **
76616 ** The access authorization function is be called during the compilation
76617 ** phase to verify that the user has read and/or write access permission on
76618 ** various fields of the database.  The first argument to the auth function
76619 ** is a copy of the 3rd argument to this routine.  The second argument
76620 ** to the auth function is one of these constants:
76621 **
76622 **       SQLITE_CREATE_INDEX
76623 **       SQLITE_CREATE_TABLE
76624 **       SQLITE_CREATE_TEMP_INDEX
76625 **       SQLITE_CREATE_TEMP_TABLE
76626 **       SQLITE_CREATE_TEMP_TRIGGER
76627 **       SQLITE_CREATE_TEMP_VIEW
76628 **       SQLITE_CREATE_TRIGGER
76629 **       SQLITE_CREATE_VIEW
76630 **       SQLITE_DELETE
76631 **       SQLITE_DROP_INDEX
76632 **       SQLITE_DROP_TABLE
76633 **       SQLITE_DROP_TEMP_INDEX
76634 **       SQLITE_DROP_TEMP_TABLE
76635 **       SQLITE_DROP_TEMP_TRIGGER
76636 **       SQLITE_DROP_TEMP_VIEW
76637 **       SQLITE_DROP_TRIGGER
76638 **       SQLITE_DROP_VIEW
76639 **       SQLITE_INSERT
76640 **       SQLITE_PRAGMA
76641 **       SQLITE_READ
76642 **       SQLITE_SELECT
76643 **       SQLITE_TRANSACTION
76644 **       SQLITE_UPDATE
76645 **
76646 ** The third and fourth arguments to the auth function are the name of
76647 ** the table and the column that are being accessed.  The auth function
76648 ** should return either SQLITE_OK, SQLITE_DENY, or SQLITE_IGNORE.  If
76649 ** SQLITE_OK is returned, it means that access is allowed.  SQLITE_DENY
76650 ** means that the SQL statement will never-run - the sqlite3_exec() call
76651 ** will return with an error.  SQLITE_IGNORE means that the SQL statement
76652 ** should run but attempts to read the specified column will return NULL
76653 ** and attempts to write the column will be ignored.
76654 **
76655 ** Setting the auth function to NULL disables this hook.  The default
76656 ** setting of the auth function is NULL.
76657 */
76658 SQLITE_API int sqlite3_set_authorizer(
76659   sqlite3 *db,
76660   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
76661   void *pArg
76662 ){
76663   sqlite3_mutex_enter(db->mutex);
76664   db->xAuth = xAuth;
76665   db->pAuthArg = pArg;
76666   sqlite3ExpirePreparedStatements(db);
76667   sqlite3_mutex_leave(db->mutex);
76668   return SQLITE_OK;
76669 }
76670
76671 /*
76672 ** Write an error message into pParse->zErrMsg that explains that the
76673 ** user-supplied authorization function returned an illegal value.
76674 */
76675 static void sqliteAuthBadReturnCode(Parse *pParse){
76676   sqlite3ErrorMsg(pParse, "authorizer malfunction");
76677   pParse->rc = SQLITE_ERROR;
76678 }
76679
76680 /*
76681 ** Invoke the authorization callback for permission to read column zCol from
76682 ** table zTab in database zDb. This function assumes that an authorization
76683 ** callback has been registered (i.e. that sqlite3.xAuth is not NULL).
76684 **
76685 ** If SQLITE_IGNORE is returned and pExpr is not NULL, then pExpr is changed
76686 ** to an SQL NULL expression. Otherwise, if pExpr is NULL, then SQLITE_IGNORE
76687 ** is treated as SQLITE_DENY. In this case an error is left in pParse.
76688 */
76689 SQLITE_PRIVATE int sqlite3AuthReadCol(
76690   Parse *pParse,                  /* The parser context */
76691   const char *zTab,               /* Table name */
76692   const char *zCol,               /* Column name */
76693   int iDb                         /* Index of containing database. */
76694 ){
76695   sqlite3 *db = pParse->db;       /* Database handle */
76696   char *zDb = db->aDb[iDb].zName; /* Name of attached database */
76697   int rc;                         /* Auth callback return code */
76698
76699   rc = db->xAuth(db->pAuthArg, SQLITE_READ, zTab,zCol,zDb,pParse->zAuthContext);
76700   if( rc==SQLITE_DENY ){
76701     if( db->nDb>2 || iDb!=0 ){
76702       sqlite3ErrorMsg(pParse, "access to %s.%s.%s is prohibited",zDb,zTab,zCol);
76703     }else{
76704       sqlite3ErrorMsg(pParse, "access to %s.%s is prohibited", zTab, zCol);
76705     }
76706     pParse->rc = SQLITE_AUTH;
76707   }else if( rc!=SQLITE_IGNORE && rc!=SQLITE_OK ){
76708     sqliteAuthBadReturnCode(pParse);
76709   }
76710   return rc;
76711 }
76712
76713 /*
76714 ** The pExpr should be a TK_COLUMN expression.  The table referred to
76715 ** is in pTabList or else it is the NEW or OLD table of a trigger.  
76716 ** Check to see if it is OK to read this particular column.
76717 **
76718 ** If the auth function returns SQLITE_IGNORE, change the TK_COLUMN 
76719 ** instruction into a TK_NULL.  If the auth function returns SQLITE_DENY,
76720 ** then generate an error.
76721 */
76722 SQLITE_PRIVATE void sqlite3AuthRead(
76723   Parse *pParse,        /* The parser context */
76724   Expr *pExpr,          /* The expression to check authorization on */
76725   Schema *pSchema,      /* The schema of the expression */
76726   SrcList *pTabList     /* All table that pExpr might refer to */
76727 ){
76728   sqlite3 *db = pParse->db;
76729   Table *pTab = 0;      /* The table being read */
76730   const char *zCol;     /* Name of the column of the table */
76731   int iSrc;             /* Index in pTabList->a[] of table being read */
76732   int iDb;              /* The index of the database the expression refers to */
76733   int iCol;             /* Index of column in table */
76734
76735   if( db->xAuth==0 ) return;
76736   iDb = sqlite3SchemaToIndex(pParse->db, pSchema);
76737   if( iDb<0 ){
76738     /* An attempt to read a column out of a subquery or other
76739     ** temporary table. */
76740     return;
76741   }
76742
76743   assert( pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER );
76744   if( pExpr->op==TK_TRIGGER ){
76745     pTab = pParse->pTriggerTab;
76746   }else{
76747     assert( pTabList );
76748     for(iSrc=0; ALWAYS(iSrc<pTabList->nSrc); iSrc++){
76749       if( pExpr->iTable==pTabList->a[iSrc].iCursor ){
76750         pTab = pTabList->a[iSrc].pTab;
76751         break;
76752       }
76753     }
76754   }
76755   iCol = pExpr->iColumn;
76756   if( NEVER(pTab==0) ) return;
76757
76758   if( iCol>=0 ){
76759     assert( iCol<pTab->nCol );
76760     zCol = pTab->aCol[iCol].zName;
76761   }else if( pTab->iPKey>=0 ){
76762     assert( pTab->iPKey<pTab->nCol );
76763     zCol = pTab->aCol[pTab->iPKey].zName;
76764   }else{
76765     zCol = "ROWID";
76766   }
76767   assert( iDb>=0 && iDb<db->nDb );
76768   if( SQLITE_IGNORE==sqlite3AuthReadCol(pParse, pTab->zName, zCol, iDb) ){
76769     pExpr->op = TK_NULL;
76770   }
76771 }
76772
76773 /*
76774 ** Do an authorization check using the code and arguments given.  Return
76775 ** either SQLITE_OK (zero) or SQLITE_IGNORE or SQLITE_DENY.  If SQLITE_DENY
76776 ** is returned, then the error count and error message in pParse are
76777 ** modified appropriately.
76778 */
76779 SQLITE_PRIVATE int sqlite3AuthCheck(
76780   Parse *pParse,
76781   int code,
76782   const char *zArg1,
76783   const char *zArg2,
76784   const char *zArg3
76785 ){
76786   sqlite3 *db = pParse->db;
76787   int rc;
76788
76789   /* Don't do any authorization checks if the database is initialising
76790   ** or if the parser is being invoked from within sqlite3_declare_vtab.
76791   */
76792   if( db->init.busy || IN_DECLARE_VTAB ){
76793     return SQLITE_OK;
76794   }
76795
76796   if( db->xAuth==0 ){
76797     return SQLITE_OK;
76798   }
76799   rc = db->xAuth(db->pAuthArg, code, zArg1, zArg2, zArg3, pParse->zAuthContext);
76800   if( rc==SQLITE_DENY ){
76801     sqlite3ErrorMsg(pParse, "not authorized");
76802     pParse->rc = SQLITE_AUTH;
76803   }else if( rc!=SQLITE_OK && rc!=SQLITE_IGNORE ){
76804     rc = SQLITE_DENY;
76805     sqliteAuthBadReturnCode(pParse);
76806   }
76807   return rc;
76808 }
76809
76810 /*
76811 ** Push an authorization context.  After this routine is called, the
76812 ** zArg3 argument to authorization callbacks will be zContext until
76813 ** popped.  Or if pParse==0, this routine is a no-op.
76814 */
76815 SQLITE_PRIVATE void sqlite3AuthContextPush(
76816   Parse *pParse,
76817   AuthContext *pContext, 
76818   const char *zContext
76819 ){
76820   assert( pParse );
76821   pContext->pParse = pParse;
76822   pContext->zAuthContext = pParse->zAuthContext;
76823   pParse->zAuthContext = zContext;
76824 }
76825
76826 /*
76827 ** Pop an authorization context that was previously pushed
76828 ** by sqlite3AuthContextPush
76829 */
76830 SQLITE_PRIVATE void sqlite3AuthContextPop(AuthContext *pContext){
76831   if( pContext->pParse ){
76832     pContext->pParse->zAuthContext = pContext->zAuthContext;
76833     pContext->pParse = 0;
76834   }
76835 }
76836
76837 #endif /* SQLITE_OMIT_AUTHORIZATION */
76838
76839 /************** End of auth.c ************************************************/
76840 /************** Begin file build.c *******************************************/
76841 /*
76842 ** 2001 September 15
76843 **
76844 ** The author disclaims copyright to this source code.  In place of
76845 ** a legal notice, here is a blessing:
76846 **
76847 **    May you do good and not evil.
76848 **    May you find forgiveness for yourself and forgive others.
76849 **    May you share freely, never taking more than you give.
76850 **
76851 *************************************************************************
76852 ** This file contains C code routines that are called by the SQLite parser
76853 ** when syntax rules are reduced.  The routines in this file handle the
76854 ** following kinds of SQL syntax:
76855 **
76856 **     CREATE TABLE
76857 **     DROP TABLE
76858 **     CREATE INDEX
76859 **     DROP INDEX
76860 **     creating ID lists
76861 **     BEGIN TRANSACTION
76862 **     COMMIT
76863 **     ROLLBACK
76864 */
76865
76866 /*
76867 ** This routine is called when a new SQL statement is beginning to
76868 ** be parsed.  Initialize the pParse structure as needed.
76869 */
76870 SQLITE_PRIVATE void sqlite3BeginParse(Parse *pParse, int explainFlag){
76871   pParse->explain = (u8)explainFlag;
76872   pParse->nVar = 0;
76873 }
76874
76875 #ifndef SQLITE_OMIT_SHARED_CACHE
76876 /*
76877 ** The TableLock structure is only used by the sqlite3TableLock() and
76878 ** codeTableLocks() functions.
76879 */
76880 struct TableLock {
76881   int iDb;             /* The database containing the table to be locked */
76882   int iTab;            /* The root page of the table to be locked */
76883   u8 isWriteLock;      /* True for write lock.  False for a read lock */
76884   const char *zName;   /* Name of the table */
76885 };
76886
76887 /*
76888 ** Record the fact that we want to lock a table at run-time.  
76889 **
76890 ** The table to be locked has root page iTab and is found in database iDb.
76891 ** A read or a write lock can be taken depending on isWritelock.
76892 **
76893 ** This routine just records the fact that the lock is desired.  The
76894 ** code to make the lock occur is generated by a later call to
76895 ** codeTableLocks() which occurs during sqlite3FinishCoding().
76896 */
76897 SQLITE_PRIVATE void sqlite3TableLock(
76898   Parse *pParse,     /* Parsing context */
76899   int iDb,           /* Index of the database containing the table to lock */
76900   int iTab,          /* Root page number of the table to be locked */
76901   u8 isWriteLock,    /* True for a write lock */
76902   const char *zName  /* Name of the table to be locked */
76903 ){
76904   Parse *pToplevel = sqlite3ParseToplevel(pParse);
76905   int i;
76906   int nBytes;
76907   TableLock *p;
76908   assert( iDb>=0 );
76909
76910   for(i=0; i<pToplevel->nTableLock; i++){
76911     p = &pToplevel->aTableLock[i];
76912     if( p->iDb==iDb && p->iTab==iTab ){
76913       p->isWriteLock = (p->isWriteLock || isWriteLock);
76914       return;
76915     }
76916   }
76917
76918   nBytes = sizeof(TableLock) * (pToplevel->nTableLock+1);
76919   pToplevel->aTableLock =
76920       sqlite3DbReallocOrFree(pToplevel->db, pToplevel->aTableLock, nBytes);
76921   if( pToplevel->aTableLock ){
76922     p = &pToplevel->aTableLock[pToplevel->nTableLock++];
76923     p->iDb = iDb;
76924     p->iTab = iTab;
76925     p->isWriteLock = isWriteLock;
76926     p->zName = zName;
76927   }else{
76928     pToplevel->nTableLock = 0;
76929     pToplevel->db->mallocFailed = 1;
76930   }
76931 }
76932
76933 /*
76934 ** Code an OP_TableLock instruction for each table locked by the
76935 ** statement (configured by calls to sqlite3TableLock()).
76936 */
76937 static void codeTableLocks(Parse *pParse){
76938   int i;
76939   Vdbe *pVdbe; 
76940
76941   pVdbe = sqlite3GetVdbe(pParse);
76942   assert( pVdbe!=0 ); /* sqlite3GetVdbe cannot fail: VDBE already allocated */
76943
76944   for(i=0; i<pParse->nTableLock; i++){
76945     TableLock *p = &pParse->aTableLock[i];
76946     int p1 = p->iDb;
76947     sqlite3VdbeAddOp4(pVdbe, OP_TableLock, p1, p->iTab, p->isWriteLock,
76948                       p->zName, P4_STATIC);
76949   }
76950 }
76951 #else
76952   #define codeTableLocks(x)
76953 #endif
76954
76955 /*
76956 ** This routine is called after a single SQL statement has been
76957 ** parsed and a VDBE program to execute that statement has been
76958 ** prepared.  This routine puts the finishing touches on the
76959 ** VDBE program and resets the pParse structure for the next
76960 ** parse.
76961 **
76962 ** Note that if an error occurred, it might be the case that
76963 ** no VDBE code was generated.
76964 */
76965 SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
76966   sqlite3 *db;
76967   Vdbe *v;
76968
76969   db = pParse->db;
76970   if( db->mallocFailed ) return;
76971   if( pParse->nested ) return;
76972   if( pParse->nErr ) return;
76973
76974   /* Begin by generating some termination code at the end of the
76975   ** vdbe program
76976   */
76977   v = sqlite3GetVdbe(pParse);
76978   assert( !pParse->isMultiWrite 
76979        || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort));
76980   if( v ){
76981     sqlite3VdbeAddOp0(v, OP_Halt);
76982
76983     /* The cookie mask contains one bit for each database file open.
76984     ** (Bit 0 is for main, bit 1 is for temp, and so forth.)  Bits are
76985     ** set for each database that is used.  Generate code to start a
76986     ** transaction on each used database and to verify the schema cookie
76987     ** on each used database.
76988     */
76989     if( pParse->cookieGoto>0 ){
76990       yDbMask mask;
76991       int iDb;
76992       sqlite3VdbeJumpHere(v, pParse->cookieGoto-1);
76993       for(iDb=0, mask=1; iDb<db->nDb; mask<<=1, iDb++){
76994         if( (mask & pParse->cookieMask)==0 ) continue;
76995         sqlite3VdbeUsesBtree(v, iDb);
76996         sqlite3VdbeAddOp2(v,OP_Transaction, iDb, (mask & pParse->writeMask)!=0);
76997         if( db->init.busy==0 ){
76998           assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
76999           sqlite3VdbeAddOp3(v, OP_VerifyCookie,
77000                             iDb, pParse->cookieValue[iDb],
77001                             db->aDb[iDb].pSchema->iGeneration);
77002         }
77003       }
77004 #ifndef SQLITE_OMIT_VIRTUALTABLE
77005       {
77006         int i;
77007         for(i=0; i<pParse->nVtabLock; i++){
77008           char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]);
77009           sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB);
77010         }
77011         pParse->nVtabLock = 0;
77012       }
77013 #endif
77014
77015       /* Once all the cookies have been verified and transactions opened, 
77016       ** obtain the required table-locks. This is a no-op unless the 
77017       ** shared-cache feature is enabled.
77018       */
77019       codeTableLocks(pParse);
77020
77021       /* Initialize any AUTOINCREMENT data structures required.
77022       */
77023       sqlite3AutoincrementBegin(pParse);
77024
77025       /* Finally, jump back to the beginning of the executable code. */
77026       sqlite3VdbeAddOp2(v, OP_Goto, 0, pParse->cookieGoto);
77027     }
77028   }
77029
77030
77031   /* Get the VDBE program ready for execution
77032   */
77033   if( v && ALWAYS(pParse->nErr==0) && !db->mallocFailed ){
77034 #ifdef SQLITE_DEBUG
77035     FILE *trace = (db->flags & SQLITE_VdbeTrace)!=0 ? stdout : 0;
77036     sqlite3VdbeTrace(v, trace);
77037 #endif
77038     assert( pParse->iCacheLevel==0 );  /* Disables and re-enables match */
77039     /* A minimum of one cursor is required if autoincrement is used
77040     *  See ticket [a696379c1f08866] */
77041     if( pParse->pAinc!=0 && pParse->nTab==0 ) pParse->nTab = 1;
77042     sqlite3VdbeMakeReady(v, pParse->nVar, pParse->nMem,
77043                          pParse->nTab, pParse->nMaxArg, pParse->explain,
77044                          pParse->isMultiWrite && pParse->mayAbort);
77045     pParse->rc = SQLITE_DONE;
77046     pParse->colNamesSet = 0;
77047   }else{
77048     pParse->rc = SQLITE_ERROR;
77049   }
77050   pParse->nTab = 0;
77051   pParse->nMem = 0;
77052   pParse->nSet = 0;
77053   pParse->nVar = 0;
77054   pParse->cookieMask = 0;
77055   pParse->cookieGoto = 0;
77056 }
77057
77058 /*
77059 ** Run the parser and code generator recursively in order to generate
77060 ** code for the SQL statement given onto the end of the pParse context
77061 ** currently under construction.  When the parser is run recursively
77062 ** this way, the final OP_Halt is not appended and other initialization
77063 ** and finalization steps are omitted because those are handling by the
77064 ** outermost parser.
77065 **
77066 ** Not everything is nestable.  This facility is designed to permit
77067 ** INSERT, UPDATE, and DELETE operations against SQLITE_MASTER.  Use
77068 ** care if you decide to try to use this routine for some other purposes.
77069 */
77070 SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){
77071   va_list ap;
77072   char *zSql;
77073   char *zErrMsg = 0;
77074   sqlite3 *db = pParse->db;
77075 # define SAVE_SZ  (sizeof(Parse) - offsetof(Parse,nVar))
77076   char saveBuf[SAVE_SZ];
77077
77078   if( pParse->nErr ) return;
77079   assert( pParse->nested<10 );  /* Nesting should only be of limited depth */
77080   va_start(ap, zFormat);
77081   zSql = sqlite3VMPrintf(db, zFormat, ap);
77082   va_end(ap);
77083   if( zSql==0 ){
77084     return;   /* A malloc must have failed */
77085   }
77086   pParse->nested++;
77087   memcpy(saveBuf, &pParse->nVar, SAVE_SZ);
77088   memset(&pParse->nVar, 0, SAVE_SZ);
77089   sqlite3RunParser(pParse, zSql, &zErrMsg);
77090   sqlite3DbFree(db, zErrMsg);
77091   sqlite3DbFree(db, zSql);
77092   memcpy(&pParse->nVar, saveBuf, SAVE_SZ);
77093   pParse->nested--;
77094 }
77095
77096 /*
77097 ** Locate the in-memory structure that describes a particular database
77098 ** table given the name of that table and (optionally) the name of the
77099 ** database containing the table.  Return NULL if not found.
77100 **
77101 ** If zDatabase is 0, all databases are searched for the table and the
77102 ** first matching table is returned.  (No checking for duplicate table
77103 ** names is done.)  The search order is TEMP first, then MAIN, then any
77104 ** auxiliary databases added using the ATTACH command.
77105 **
77106 ** See also sqlite3LocateTable().
77107 */
77108 SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){
77109   Table *p = 0;
77110   int i;
77111   int nName;
77112   assert( zName!=0 );
77113   nName = sqlite3Strlen30(zName);
77114   /* All mutexes are required for schema access.  Make sure we hold them. */
77115   assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) );
77116   for(i=OMIT_TEMPDB; i<db->nDb; i++){
77117     int j = (i<2) ? i^1 : i;   /* Search TEMP before MAIN */
77118     if( zDatabase!=0 && sqlite3StrICmp(zDatabase, db->aDb[j].zName) ) continue;
77119     assert( sqlite3SchemaMutexHeld(db, j, 0) );
77120     p = sqlite3HashFind(&db->aDb[j].pSchema->tblHash, zName, nName);
77121     if( p ) break;
77122   }
77123   return p;
77124 }
77125
77126 /*
77127 ** Locate the in-memory structure that describes a particular database
77128 ** table given the name of that table and (optionally) the name of the
77129 ** database containing the table.  Return NULL if not found.  Also leave an
77130 ** error message in pParse->zErrMsg.
77131 **
77132 ** The difference between this routine and sqlite3FindTable() is that this
77133 ** routine leaves an error message in pParse->zErrMsg where
77134 ** sqlite3FindTable() does not.
77135 */
77136 SQLITE_PRIVATE Table *sqlite3LocateTable(
77137   Parse *pParse,         /* context in which to report errors */
77138   int isView,            /* True if looking for a VIEW rather than a TABLE */
77139   const char *zName,     /* Name of the table we are looking for */
77140   const char *zDbase     /* Name of the database.  Might be NULL */
77141 ){
77142   Table *p;
77143
77144   /* Read the database schema. If an error occurs, leave an error message
77145   ** and code in pParse and return NULL. */
77146   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
77147     return 0;
77148   }
77149
77150   p = sqlite3FindTable(pParse->db, zName, zDbase);
77151   if( p==0 ){
77152     const char *zMsg = isView ? "no such view" : "no such table";
77153     if( zDbase ){
77154       sqlite3ErrorMsg(pParse, "%s: %s.%s", zMsg, zDbase, zName);
77155     }else{
77156       sqlite3ErrorMsg(pParse, "%s: %s", zMsg, zName);
77157     }
77158     pParse->checkSchema = 1;
77159   }
77160   return p;
77161 }
77162
77163 /*
77164 ** Locate the in-memory structure that describes 
77165 ** a particular index given the name of that index
77166 ** and the name of the database that contains the index.
77167 ** Return NULL if not found.
77168 **
77169 ** If zDatabase is 0, all databases are searched for the
77170 ** table and the first matching index is returned.  (No checking
77171 ** for duplicate index names is done.)  The search order is
77172 ** TEMP first, then MAIN, then any auxiliary databases added
77173 ** using the ATTACH command.
77174 */
77175 SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3 *db, const char *zName, const char *zDb){
77176   Index *p = 0;
77177   int i;
77178   int nName = sqlite3Strlen30(zName);
77179   /* All mutexes are required for schema access.  Make sure we hold them. */
77180   assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) );
77181   for(i=OMIT_TEMPDB; i<db->nDb; i++){
77182     int j = (i<2) ? i^1 : i;  /* Search TEMP before MAIN */
77183     Schema *pSchema = db->aDb[j].pSchema;
77184     assert( pSchema );
77185     if( zDb && sqlite3StrICmp(zDb, db->aDb[j].zName) ) continue;
77186     assert( sqlite3SchemaMutexHeld(db, j, 0) );
77187     p = sqlite3HashFind(&pSchema->idxHash, zName, nName);
77188     if( p ) break;
77189   }
77190   return p;
77191 }
77192
77193 /*
77194 ** Reclaim the memory used by an index
77195 */
77196 static void freeIndex(sqlite3 *db, Index *p){
77197 #ifndef SQLITE_OMIT_ANALYZE
77198   sqlite3DeleteIndexSamples(db, p);
77199 #endif
77200   sqlite3DbFree(db, p->zColAff);
77201   sqlite3DbFree(db, p);
77202 }
77203
77204 /*
77205 ** For the index called zIdxName which is found in the database iDb,
77206 ** unlike that index from its Table then remove the index from
77207 ** the index hash table and free all memory structures associated
77208 ** with the index.
77209 */
77210 SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char *zIdxName){
77211   Index *pIndex;
77212   int len;
77213   Hash *pHash;
77214
77215   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
77216   pHash = &db->aDb[iDb].pSchema->idxHash;
77217   len = sqlite3Strlen30(zIdxName);
77218   pIndex = sqlite3HashInsert(pHash, zIdxName, len, 0);
77219   if( ALWAYS(pIndex) ){
77220     if( pIndex->pTable->pIndex==pIndex ){
77221       pIndex->pTable->pIndex = pIndex->pNext;
77222     }else{
77223       Index *p;
77224       /* Justification of ALWAYS();  The index must be on the list of
77225       ** indices. */
77226       p = pIndex->pTable->pIndex;
77227       while( ALWAYS(p) && p->pNext!=pIndex ){ p = p->pNext; }
77228       if( ALWAYS(p && p->pNext==pIndex) ){
77229         p->pNext = pIndex->pNext;
77230       }
77231     }
77232     freeIndex(db, pIndex);
77233   }
77234   db->flags |= SQLITE_InternChanges;
77235 }
77236
77237 /*
77238 ** Erase all schema information from the in-memory hash tables of
77239 ** a single database.  This routine is called to reclaim memory
77240 ** before the database closes.  It is also called during a rollback
77241 ** if there were schema changes during the transaction or if a
77242 ** schema-cookie mismatch occurs.
77243 **
77244 ** If iDb<0 then reset the internal schema tables for all database
77245 ** files.  If iDb>=0 then reset the internal schema for only the
77246 ** single file indicated.
77247 */
77248 SQLITE_PRIVATE void sqlite3ResetInternalSchema(sqlite3 *db, int iDb){
77249   int i, j;
77250   assert( iDb<db->nDb );
77251
77252   if( iDb>=0 ){
77253     /* Case 1:  Reset the single schema identified by iDb */
77254     Db *pDb = &db->aDb[iDb];
77255     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
77256     assert( pDb->pSchema!=0 );
77257     sqlite3SchemaClear(pDb->pSchema);
77258
77259     /* If any database other than TEMP is reset, then also reset TEMP
77260     ** since TEMP might be holding triggers that reference tables in the
77261     ** other database.
77262     */
77263     if( iDb!=1 ){
77264       pDb = &db->aDb[1];
77265       assert( pDb->pSchema!=0 );
77266       sqlite3SchemaClear(pDb->pSchema);
77267     }
77268     return;
77269   }
77270   /* Case 2 (from here to the end): Reset all schemas for all attached
77271   ** databases. */
77272   assert( iDb<0 );
77273   sqlite3BtreeEnterAll(db);
77274   for(i=0; i<db->nDb; i++){
77275     Db *pDb = &db->aDb[i];
77276     if( pDb->pSchema ){
77277       sqlite3SchemaClear(pDb->pSchema);
77278     }
77279   }
77280   db->flags &= ~SQLITE_InternChanges;
77281   sqlite3VtabUnlockList(db);
77282   sqlite3BtreeLeaveAll(db);
77283
77284   /* If one or more of the auxiliary database files has been closed,
77285   ** then remove them from the auxiliary database list.  We take the
77286   ** opportunity to do this here since we have just deleted all of the
77287   ** schema hash tables and therefore do not have to make any changes
77288   ** to any of those tables.
77289   */
77290   for(i=j=2; i<db->nDb; i++){
77291     struct Db *pDb = &db->aDb[i];
77292     if( pDb->pBt==0 ){
77293       sqlite3DbFree(db, pDb->zName);
77294       pDb->zName = 0;
77295       continue;
77296     }
77297     if( j<i ){
77298       db->aDb[j] = db->aDb[i];
77299     }
77300     j++;
77301   }
77302   memset(&db->aDb[j], 0, (db->nDb-j)*sizeof(db->aDb[j]));
77303   db->nDb = j;
77304   if( db->nDb<=2 && db->aDb!=db->aDbStatic ){
77305     memcpy(db->aDbStatic, db->aDb, 2*sizeof(db->aDb[0]));
77306     sqlite3DbFree(db, db->aDb);
77307     db->aDb = db->aDbStatic;
77308   }
77309 }
77310
77311 /*
77312 ** This routine is called when a commit occurs.
77313 */
77314 SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3 *db){
77315   db->flags &= ~SQLITE_InternChanges;
77316 }
77317
77318 /*
77319 ** Delete memory allocated for the column names of a table or view (the
77320 ** Table.aCol[] array).
77321 */
77322 static void sqliteDeleteColumnNames(sqlite3 *db, Table *pTable){
77323   int i;
77324   Column *pCol;
77325   assert( pTable!=0 );
77326   if( (pCol = pTable->aCol)!=0 ){
77327     for(i=0; i<pTable->nCol; i++, pCol++){
77328       sqlite3DbFree(db, pCol->zName);
77329       sqlite3ExprDelete(db, pCol->pDflt);
77330       sqlite3DbFree(db, pCol->zDflt);
77331       sqlite3DbFree(db, pCol->zType);
77332       sqlite3DbFree(db, pCol->zColl);
77333     }
77334     sqlite3DbFree(db, pTable->aCol);
77335   }
77336 }
77337
77338 /*
77339 ** Remove the memory data structures associated with the given
77340 ** Table.  No changes are made to disk by this routine.
77341 **
77342 ** This routine just deletes the data structure.  It does not unlink
77343 ** the table data structure from the hash table.  But it does destroy
77344 ** memory structures of the indices and foreign keys associated with 
77345 ** the table.
77346 */
77347 SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
77348   Index *pIndex, *pNext;
77349
77350   assert( !pTable || pTable->nRef>0 );
77351
77352   /* Do not delete the table until the reference count reaches zero. */
77353   if( !pTable ) return;
77354   if( ((!db || db->pnBytesFreed==0) && (--pTable->nRef)>0) ) return;
77355
77356   /* Delete all indices associated with this table. */
77357   for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){
77358     pNext = pIndex->pNext;
77359     assert( pIndex->pSchema==pTable->pSchema );
77360     if( !db || db->pnBytesFreed==0 ){
77361       char *zName = pIndex->zName; 
77362       TESTONLY ( Index *pOld = ) sqlite3HashInsert(
77363           &pIndex->pSchema->idxHash, zName, sqlite3Strlen30(zName), 0
77364       );
77365       assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
77366       assert( pOld==pIndex || pOld==0 );
77367     }
77368     freeIndex(db, pIndex);
77369   }
77370
77371   /* Delete any foreign keys attached to this table. */
77372   sqlite3FkDelete(db, pTable);
77373
77374   /* Delete the Table structure itself.
77375   */
77376   sqliteDeleteColumnNames(db, pTable);
77377   sqlite3DbFree(db, pTable->zName);
77378   sqlite3DbFree(db, pTable->zColAff);
77379   sqlite3SelectDelete(db, pTable->pSelect);
77380 #ifndef SQLITE_OMIT_CHECK
77381   sqlite3ExprDelete(db, pTable->pCheck);
77382 #endif
77383 #ifndef SQLITE_OMIT_VIRTUALTABLE
77384   sqlite3VtabClear(db, pTable);
77385 #endif
77386   sqlite3DbFree(db, pTable);
77387 }
77388
77389 /*
77390 ** Unlink the given table from the hash tables and the delete the
77391 ** table structure with all its indices and foreign keys.
77392 */
77393 SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char *zTabName){
77394   Table *p;
77395   Db *pDb;
77396
77397   assert( db!=0 );
77398   assert( iDb>=0 && iDb<db->nDb );
77399   assert( zTabName );
77400   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
77401   testcase( zTabName[0]==0 );  /* Zero-length table names are allowed */
77402   pDb = &db->aDb[iDb];
77403   p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName,
77404                         sqlite3Strlen30(zTabName),0);
77405   sqlite3DeleteTable(db, p);
77406   db->flags |= SQLITE_InternChanges;
77407 }
77408
77409 /*
77410 ** Given a token, return a string that consists of the text of that
77411 ** token.  Space to hold the returned string
77412 ** is obtained from sqliteMalloc() and must be freed by the calling
77413 ** function.
77414 **
77415 ** Any quotation marks (ex:  "name", 'name', [name], or `name`) that
77416 ** surround the body of the token are removed.
77417 **
77418 ** Tokens are often just pointers into the original SQL text and so
77419 ** are not \000 terminated and are not persistent.  The returned string
77420 ** is \000 terminated and is persistent.
77421 */
77422 SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3 *db, Token *pName){
77423   char *zName;
77424   if( pName ){
77425     zName = sqlite3DbStrNDup(db, (char*)pName->z, pName->n);
77426     sqlite3Dequote(zName);
77427   }else{
77428     zName = 0;
77429   }
77430   return zName;
77431 }
77432
77433 /*
77434 ** Open the sqlite_master table stored in database number iDb for
77435 ** writing. The table is opened using cursor 0.
77436 */
77437 SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *p, int iDb){
77438   Vdbe *v = sqlite3GetVdbe(p);
77439   sqlite3TableLock(p, iDb, MASTER_ROOT, 1, SCHEMA_TABLE(iDb));
77440   sqlite3VdbeAddOp3(v, OP_OpenWrite, 0, MASTER_ROOT, iDb);
77441   sqlite3VdbeChangeP4(v, -1, (char *)5, P4_INT32);  /* 5 column table */
77442   if( p->nTab==0 ){
77443     p->nTab = 1;
77444   }
77445 }
77446
77447 /*
77448 ** Parameter zName points to a nul-terminated buffer containing the name
77449 ** of a database ("main", "temp" or the name of an attached db). This
77450 ** function returns the index of the named database in db->aDb[], or
77451 ** -1 if the named db cannot be found.
77452 */
77453 SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *db, const char *zName){
77454   int i = -1;         /* Database number */
77455   if( zName ){
77456     Db *pDb;
77457     int n = sqlite3Strlen30(zName);
77458     for(i=(db->nDb-1), pDb=&db->aDb[i]; i>=0; i--, pDb--){
77459       if( (!OMIT_TEMPDB || i!=1 ) && n==sqlite3Strlen30(pDb->zName) && 
77460           0==sqlite3StrICmp(pDb->zName, zName) ){
77461         break;
77462       }
77463     }
77464   }
77465   return i;
77466 }
77467
77468 /*
77469 ** The token *pName contains the name of a database (either "main" or
77470 ** "temp" or the name of an attached db). This routine returns the
77471 ** index of the named database in db->aDb[], or -1 if the named db 
77472 ** does not exist.
77473 */
77474 SQLITE_PRIVATE int sqlite3FindDb(sqlite3 *db, Token *pName){
77475   int i;                               /* Database number */
77476   char *zName;                         /* Name we are searching for */
77477   zName = sqlite3NameFromToken(db, pName);
77478   i = sqlite3FindDbName(db, zName);
77479   sqlite3DbFree(db, zName);
77480   return i;
77481 }
77482
77483 /* The table or view or trigger name is passed to this routine via tokens
77484 ** pName1 and pName2. If the table name was fully qualified, for example:
77485 **
77486 ** CREATE TABLE xxx.yyy (...);
77487 ** 
77488 ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if
77489 ** the table name is not fully qualified, i.e.:
77490 **
77491 ** CREATE TABLE yyy(...);
77492 **
77493 ** Then pName1 is set to "yyy" and pName2 is "".
77494 **
77495 ** This routine sets the *ppUnqual pointer to point at the token (pName1 or
77496 ** pName2) that stores the unqualified table name.  The index of the
77497 ** database "xxx" is returned.
77498 */
77499 SQLITE_PRIVATE int sqlite3TwoPartName(
77500   Parse *pParse,      /* Parsing and code generating context */
77501   Token *pName1,      /* The "xxx" in the name "xxx.yyy" or "xxx" */
77502   Token *pName2,      /* The "yyy" in the name "xxx.yyy" */
77503   Token **pUnqual     /* Write the unqualified object name here */
77504 ){
77505   int iDb;                    /* Database holding the object */
77506   sqlite3 *db = pParse->db;
77507
77508   if( ALWAYS(pName2!=0) && pName2->n>0 ){
77509     if( db->init.busy ) {
77510       sqlite3ErrorMsg(pParse, "corrupt database");
77511       pParse->nErr++;
77512       return -1;
77513     }
77514     *pUnqual = pName2;
77515     iDb = sqlite3FindDb(db, pName1);
77516     if( iDb<0 ){
77517       sqlite3ErrorMsg(pParse, "unknown database %T", pName1);
77518       pParse->nErr++;
77519       return -1;
77520     }
77521   }else{
77522     assert( db->init.iDb==0 || db->init.busy );
77523     iDb = db->init.iDb;
77524     *pUnqual = pName1;
77525   }
77526   return iDb;
77527 }
77528
77529 /*
77530 ** This routine is used to check if the UTF-8 string zName is a legal
77531 ** unqualified name for a new schema object (table, index, view or
77532 ** trigger). All names are legal except those that begin with the string
77533 ** "sqlite_" (in upper, lower or mixed case). This portion of the namespace
77534 ** is reserved for internal use.
77535 */
77536 SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *pParse, const char *zName){
77537   if( !pParse->db->init.busy && pParse->nested==0 
77538           && (pParse->db->flags & SQLITE_WriteSchema)==0
77539           && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){
77540     sqlite3ErrorMsg(pParse, "object name reserved for internal use: %s", zName);
77541     return SQLITE_ERROR;
77542   }
77543   return SQLITE_OK;
77544 }
77545
77546 /*
77547 ** Begin constructing a new table representation in memory.  This is
77548 ** the first of several action routines that get called in response
77549 ** to a CREATE TABLE statement.  In particular, this routine is called
77550 ** after seeing tokens "CREATE" and "TABLE" and the table name. The isTemp
77551 ** flag is true if the table should be stored in the auxiliary database
77552 ** file instead of in the main database file.  This is normally the case
77553 ** when the "TEMP" or "TEMPORARY" keyword occurs in between
77554 ** CREATE and TABLE.
77555 **
77556 ** The new table record is initialized and put in pParse->pNewTable.
77557 ** As more of the CREATE TABLE statement is parsed, additional action
77558 ** routines will be called to add more information to this record.
77559 ** At the end of the CREATE TABLE statement, the sqlite3EndTable() routine
77560 ** is called to complete the construction of the new table record.
77561 */
77562 SQLITE_PRIVATE void sqlite3StartTable(
77563   Parse *pParse,   /* Parser context */
77564   Token *pName1,   /* First part of the name of the table or view */
77565   Token *pName2,   /* Second part of the name of the table or view */
77566   int isTemp,      /* True if this is a TEMP table */
77567   int isView,      /* True if this is a VIEW */
77568   int isVirtual,   /* True if this is a VIRTUAL table */
77569   int noErr        /* Do nothing if table already exists */
77570 ){
77571   Table *pTable;
77572   char *zName = 0; /* The name of the new table */
77573   sqlite3 *db = pParse->db;
77574   Vdbe *v;
77575   int iDb;         /* Database number to create the table in */
77576   Token *pName;    /* Unqualified name of the table to create */
77577
77578   /* The table or view name to create is passed to this routine via tokens
77579   ** pName1 and pName2. If the table name was fully qualified, for example:
77580   **
77581   ** CREATE TABLE xxx.yyy (...);
77582   ** 
77583   ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if
77584   ** the table name is not fully qualified, i.e.:
77585   **
77586   ** CREATE TABLE yyy(...);
77587   **
77588   ** Then pName1 is set to "yyy" and pName2 is "".
77589   **
77590   ** The call below sets the pName pointer to point at the token (pName1 or
77591   ** pName2) that stores the unqualified table name. The variable iDb is
77592   ** set to the index of the database that the table or view is to be
77593   ** created in.
77594   */
77595   iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
77596   if( iDb<0 ) return;
77597   if( !OMIT_TEMPDB && isTemp && pName2->n>0 && iDb!=1 ){
77598     /* If creating a temp table, the name may not be qualified. Unless 
77599     ** the database name is "temp" anyway.  */
77600     sqlite3ErrorMsg(pParse, "temporary table name must be unqualified");
77601     return;
77602   }
77603   if( !OMIT_TEMPDB && isTemp ) iDb = 1;
77604
77605   pParse->sNameToken = *pName;
77606   zName = sqlite3NameFromToken(db, pName);
77607   if( zName==0 ) return;
77608   if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
77609     goto begin_table_error;
77610   }
77611   if( db->init.iDb==1 ) isTemp = 1;
77612 #ifndef SQLITE_OMIT_AUTHORIZATION
77613   assert( (isTemp & 1)==isTemp );
77614   {
77615     int code;
77616     char *zDb = db->aDb[iDb].zName;
77617     if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(isTemp), 0, zDb) ){
77618       goto begin_table_error;
77619     }
77620     if( isView ){
77621       if( !OMIT_TEMPDB && isTemp ){
77622         code = SQLITE_CREATE_TEMP_VIEW;
77623       }else{
77624         code = SQLITE_CREATE_VIEW;
77625       }
77626     }else{
77627       if( !OMIT_TEMPDB && isTemp ){
77628         code = SQLITE_CREATE_TEMP_TABLE;
77629       }else{
77630         code = SQLITE_CREATE_TABLE;
77631       }
77632     }
77633     if( !isVirtual && sqlite3AuthCheck(pParse, code, zName, 0, zDb) ){
77634       goto begin_table_error;
77635     }
77636   }
77637 #endif
77638
77639   /* Make sure the new table name does not collide with an existing
77640   ** index or table name in the same database.  Issue an error message if
77641   ** it does. The exception is if the statement being parsed was passed
77642   ** to an sqlite3_declare_vtab() call. In that case only the column names
77643   ** and types will be used, so there is no need to test for namespace
77644   ** collisions.
77645   */
77646   if( !IN_DECLARE_VTAB ){
77647     char *zDb = db->aDb[iDb].zName;
77648     if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
77649       goto begin_table_error;
77650     }
77651     pTable = sqlite3FindTable(db, zName, zDb);
77652     if( pTable ){
77653       if( !noErr ){
77654         sqlite3ErrorMsg(pParse, "table %T already exists", pName);
77655       }else{
77656         assert( !db->init.busy );
77657         sqlite3CodeVerifySchema(pParse, iDb);
77658       }
77659       goto begin_table_error;
77660     }
77661     if( sqlite3FindIndex(db, zName, zDb)!=0 ){
77662       sqlite3ErrorMsg(pParse, "there is already an index named %s", zName);
77663       goto begin_table_error;
77664     }
77665   }
77666
77667   pTable = sqlite3DbMallocZero(db, sizeof(Table));
77668   if( pTable==0 ){
77669     db->mallocFailed = 1;
77670     pParse->rc = SQLITE_NOMEM;
77671     pParse->nErr++;
77672     goto begin_table_error;
77673   }
77674   pTable->zName = zName;
77675   pTable->iPKey = -1;
77676   pTable->pSchema = db->aDb[iDb].pSchema;
77677   pTable->nRef = 1;
77678   pTable->nRowEst = 1000000;
77679   assert( pParse->pNewTable==0 );
77680   pParse->pNewTable = pTable;
77681
77682   /* If this is the magic sqlite_sequence table used by autoincrement,
77683   ** then record a pointer to this table in the main database structure
77684   ** so that INSERT can find the table easily.
77685   */
77686 #ifndef SQLITE_OMIT_AUTOINCREMENT
77687   if( !pParse->nested && strcmp(zName, "sqlite_sequence")==0 ){
77688     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
77689     pTable->pSchema->pSeqTab = pTable;
77690   }
77691 #endif
77692
77693   /* Begin generating the code that will insert the table record into
77694   ** the SQLITE_MASTER table.  Note in particular that we must go ahead
77695   ** and allocate the record number for the table entry now.  Before any
77696   ** PRIMARY KEY or UNIQUE keywords are parsed.  Those keywords will cause
77697   ** indices to be created and the table record must come before the 
77698   ** indices.  Hence, the record number for the table must be allocated
77699   ** now.
77700   */
77701   if( !db->init.busy && (v = sqlite3GetVdbe(pParse))!=0 ){
77702     int j1;
77703     int fileFormat;
77704     int reg1, reg2, reg3;
77705     sqlite3BeginWriteOperation(pParse, 0, iDb);
77706
77707 #ifndef SQLITE_OMIT_VIRTUALTABLE
77708     if( isVirtual ){
77709       sqlite3VdbeAddOp0(v, OP_VBegin);
77710     }
77711 #endif
77712
77713     /* If the file format and encoding in the database have not been set, 
77714     ** set them now.
77715     */
77716     reg1 = pParse->regRowid = ++pParse->nMem;
77717     reg2 = pParse->regRoot = ++pParse->nMem;
77718     reg3 = ++pParse->nMem;
77719     sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, reg3, BTREE_FILE_FORMAT);
77720     sqlite3VdbeUsesBtree(v, iDb);
77721     j1 = sqlite3VdbeAddOp1(v, OP_If, reg3);
77722     fileFormat = (db->flags & SQLITE_LegacyFileFmt)!=0 ?
77723                   1 : SQLITE_MAX_FILE_FORMAT;
77724     sqlite3VdbeAddOp2(v, OP_Integer, fileFormat, reg3);
77725     sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, reg3);
77726     sqlite3VdbeAddOp2(v, OP_Integer, ENC(db), reg3);
77727     sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_TEXT_ENCODING, reg3);
77728     sqlite3VdbeJumpHere(v, j1);
77729
77730     /* This just creates a place-holder record in the sqlite_master table.
77731     ** The record created does not contain anything yet.  It will be replaced
77732     ** by the real entry in code generated at sqlite3EndTable().
77733     **
77734     ** The rowid for the new entry is left in register pParse->regRowid.
77735     ** The root page number of the new table is left in reg pParse->regRoot.
77736     ** The rowid and root page number values are needed by the code that
77737     ** sqlite3EndTable will generate.
77738     */
77739 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
77740     if( isView || isVirtual ){
77741       sqlite3VdbeAddOp2(v, OP_Integer, 0, reg2);
77742     }else
77743 #endif
77744     {
77745       sqlite3VdbeAddOp2(v, OP_CreateTable, iDb, reg2);
77746     }
77747     sqlite3OpenMasterTable(pParse, iDb);
77748     sqlite3VdbeAddOp2(v, OP_NewRowid, 0, reg1);
77749     sqlite3VdbeAddOp2(v, OP_Null, 0, reg3);
77750     sqlite3VdbeAddOp3(v, OP_Insert, 0, reg3, reg1);
77751     sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
77752     sqlite3VdbeAddOp0(v, OP_Close);
77753   }
77754
77755   /* Normal (non-error) return. */
77756   return;
77757
77758   /* If an error occurs, we jump here */
77759 begin_table_error:
77760   sqlite3DbFree(db, zName);
77761   return;
77762 }
77763
77764 /*
77765 ** This macro is used to compare two strings in a case-insensitive manner.
77766 ** It is slightly faster than calling sqlite3StrICmp() directly, but
77767 ** produces larger code.
77768 **
77769 ** WARNING: This macro is not compatible with the strcmp() family. It
77770 ** returns true if the two strings are equal, otherwise false.
77771 */
77772 #define STRICMP(x, y) (\
77773 sqlite3UpperToLower[*(unsigned char *)(x)]==   \
77774 sqlite3UpperToLower[*(unsigned char *)(y)]     \
77775 && sqlite3StrICmp((x)+1,(y)+1)==0 )
77776
77777 /*
77778 ** Add a new column to the table currently being constructed.
77779 **
77780 ** The parser calls this routine once for each column declaration
77781 ** in a CREATE TABLE statement.  sqlite3StartTable() gets called
77782 ** first to get things going.  Then this routine is called for each
77783 ** column.
77784 */
77785 SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName){
77786   Table *p;
77787   int i;
77788   char *z;
77789   Column *pCol;
77790   sqlite3 *db = pParse->db;
77791   if( (p = pParse->pNewTable)==0 ) return;
77792 #if SQLITE_MAX_COLUMN
77793   if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){
77794     sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName);
77795     return;
77796   }
77797 #endif
77798   z = sqlite3NameFromToken(db, pName);
77799   if( z==0 ) return;
77800   for(i=0; i<p->nCol; i++){
77801     if( STRICMP(z, p->aCol[i].zName) ){
77802       sqlite3ErrorMsg(pParse, "duplicate column name: %s", z);
77803       sqlite3DbFree(db, z);
77804       return;
77805     }
77806   }
77807   if( (p->nCol & 0x7)==0 ){
77808     Column *aNew;
77809     aNew = sqlite3DbRealloc(db,p->aCol,(p->nCol+8)*sizeof(p->aCol[0]));
77810     if( aNew==0 ){
77811       sqlite3DbFree(db, z);
77812       return;
77813     }
77814     p->aCol = aNew;
77815   }
77816   pCol = &p->aCol[p->nCol];
77817   memset(pCol, 0, sizeof(p->aCol[0]));
77818   pCol->zName = z;
77819  
77820   /* If there is no type specified, columns have the default affinity
77821   ** 'NONE'. If there is a type specified, then sqlite3AddColumnType() will
77822   ** be called next to set pCol->affinity correctly.
77823   */
77824   pCol->affinity = SQLITE_AFF_NONE;
77825   p->nCol++;
77826 }
77827
77828 /*
77829 ** This routine is called by the parser while in the middle of
77830 ** parsing a CREATE TABLE statement.  A "NOT NULL" constraint has
77831 ** been seen on a column.  This routine sets the notNull flag on
77832 ** the column currently under construction.
77833 */
77834 SQLITE_PRIVATE void sqlite3AddNotNull(Parse *pParse, int onError){
77835   Table *p;
77836   p = pParse->pNewTable;
77837   if( p==0 || NEVER(p->nCol<1) ) return;
77838   p->aCol[p->nCol-1].notNull = (u8)onError;
77839 }
77840
77841 /*
77842 ** Scan the column type name zType (length nType) and return the
77843 ** associated affinity type.
77844 **
77845 ** This routine does a case-independent search of zType for the 
77846 ** substrings in the following table. If one of the substrings is
77847 ** found, the corresponding affinity is returned. If zType contains
77848 ** more than one of the substrings, entries toward the top of 
77849 ** the table take priority. For example, if zType is 'BLOBINT', 
77850 ** SQLITE_AFF_INTEGER is returned.
77851 **
77852 ** Substring     | Affinity
77853 ** --------------------------------
77854 ** 'INT'         | SQLITE_AFF_INTEGER
77855 ** 'CHAR'        | SQLITE_AFF_TEXT
77856 ** 'CLOB'        | SQLITE_AFF_TEXT
77857 ** 'TEXT'        | SQLITE_AFF_TEXT
77858 ** 'BLOB'        | SQLITE_AFF_NONE
77859 ** 'REAL'        | SQLITE_AFF_REAL
77860 ** 'FLOA'        | SQLITE_AFF_REAL
77861 ** 'DOUB'        | SQLITE_AFF_REAL
77862 **
77863 ** If none of the substrings in the above table are found,
77864 ** SQLITE_AFF_NUMERIC is returned.
77865 */
77866 SQLITE_PRIVATE char sqlite3AffinityType(const char *zIn){
77867   u32 h = 0;
77868   char aff = SQLITE_AFF_NUMERIC;
77869
77870   if( zIn ) while( zIn[0] ){
77871     h = (h<<8) + sqlite3UpperToLower[(*zIn)&0xff];
77872     zIn++;
77873     if( h==(('c'<<24)+('h'<<16)+('a'<<8)+'r') ){             /* CHAR */
77874       aff = SQLITE_AFF_TEXT; 
77875     }else if( h==(('c'<<24)+('l'<<16)+('o'<<8)+'b') ){       /* CLOB */
77876       aff = SQLITE_AFF_TEXT;
77877     }else if( h==(('t'<<24)+('e'<<16)+('x'<<8)+'t') ){       /* TEXT */
77878       aff = SQLITE_AFF_TEXT;
77879     }else if( h==(('b'<<24)+('l'<<16)+('o'<<8)+'b')          /* BLOB */
77880         && (aff==SQLITE_AFF_NUMERIC || aff==SQLITE_AFF_REAL) ){
77881       aff = SQLITE_AFF_NONE;
77882 #ifndef SQLITE_OMIT_FLOATING_POINT
77883     }else if( h==(('r'<<24)+('e'<<16)+('a'<<8)+'l')          /* REAL */
77884         && aff==SQLITE_AFF_NUMERIC ){
77885       aff = SQLITE_AFF_REAL;
77886     }else if( h==(('f'<<24)+('l'<<16)+('o'<<8)+'a')          /* FLOA */
77887         && aff==SQLITE_AFF_NUMERIC ){
77888       aff = SQLITE_AFF_REAL;
77889     }else if( h==(('d'<<24)+('o'<<16)+('u'<<8)+'b')          /* DOUB */
77890         && aff==SQLITE_AFF_NUMERIC ){
77891       aff = SQLITE_AFF_REAL;
77892 #endif
77893     }else if( (h&0x00FFFFFF)==(('i'<<16)+('n'<<8)+'t') ){    /* INT */
77894       aff = SQLITE_AFF_INTEGER;
77895       break;
77896     }
77897   }
77898
77899   return aff;
77900 }
77901
77902 /*
77903 ** This routine is called by the parser while in the middle of
77904 ** parsing a CREATE TABLE statement.  The pFirst token is the first
77905 ** token in the sequence of tokens that describe the type of the
77906 ** column currently under construction.   pLast is the last token
77907 ** in the sequence.  Use this information to construct a string
77908 ** that contains the typename of the column and store that string
77909 ** in zType.
77910 */ 
77911 SQLITE_PRIVATE void sqlite3AddColumnType(Parse *pParse, Token *pType){
77912   Table *p;
77913   Column *pCol;
77914
77915   p = pParse->pNewTable;
77916   if( p==0 || NEVER(p->nCol<1) ) return;
77917   pCol = &p->aCol[p->nCol-1];
77918   assert( pCol->zType==0 );
77919   pCol->zType = sqlite3NameFromToken(pParse->db, pType);
77920   pCol->affinity = sqlite3AffinityType(pCol->zType);
77921 }
77922
77923 /*
77924 ** The expression is the default value for the most recently added column
77925 ** of the table currently under construction.
77926 **
77927 ** Default value expressions must be constant.  Raise an exception if this
77928 ** is not the case.
77929 **
77930 ** This routine is called by the parser while in the middle of
77931 ** parsing a CREATE TABLE statement.
77932 */
77933 SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse *pParse, ExprSpan *pSpan){
77934   Table *p;
77935   Column *pCol;
77936   sqlite3 *db = pParse->db;
77937   p = pParse->pNewTable;
77938   if( p!=0 ){
77939     pCol = &(p->aCol[p->nCol-1]);
77940     if( !sqlite3ExprIsConstantOrFunction(pSpan->pExpr) ){
77941       sqlite3ErrorMsg(pParse, "default value of column [%s] is not constant",
77942           pCol->zName);
77943     }else{
77944       /* A copy of pExpr is used instead of the original, as pExpr contains
77945       ** tokens that point to volatile memory. The 'span' of the expression
77946       ** is required by pragma table_info.
77947       */
77948       sqlite3ExprDelete(db, pCol->pDflt);
77949       pCol->pDflt = sqlite3ExprDup(db, pSpan->pExpr, EXPRDUP_REDUCE);
77950       sqlite3DbFree(db, pCol->zDflt);
77951       pCol->zDflt = sqlite3DbStrNDup(db, (char*)pSpan->zStart,
77952                                      (int)(pSpan->zEnd - pSpan->zStart));
77953     }
77954   }
77955   sqlite3ExprDelete(db, pSpan->pExpr);
77956 }
77957
77958 /*
77959 ** Designate the PRIMARY KEY for the table.  pList is a list of names 
77960 ** of columns that form the primary key.  If pList is NULL, then the
77961 ** most recently added column of the table is the primary key.
77962 **
77963 ** A table can have at most one primary key.  If the table already has
77964 ** a primary key (and this is the second primary key) then create an
77965 ** error.
77966 **
77967 ** If the PRIMARY KEY is on a single column whose datatype is INTEGER,
77968 ** then we will try to use that column as the rowid.  Set the Table.iPKey
77969 ** field of the table under construction to be the index of the
77970 ** INTEGER PRIMARY KEY column.  Table.iPKey is set to -1 if there is
77971 ** no INTEGER PRIMARY KEY.
77972 **
77973 ** If the key is not an INTEGER PRIMARY KEY, then create a unique
77974 ** index for the key.  No index is created for INTEGER PRIMARY KEYs.
77975 */
77976 SQLITE_PRIVATE void sqlite3AddPrimaryKey(
77977   Parse *pParse,    /* Parsing context */
77978   ExprList *pList,  /* List of field names to be indexed */
77979   int onError,      /* What to do with a uniqueness conflict */
77980   int autoInc,      /* True if the AUTOINCREMENT keyword is present */
77981   int sortOrder     /* SQLITE_SO_ASC or SQLITE_SO_DESC */
77982 ){
77983   Table *pTab = pParse->pNewTable;
77984   char *zType = 0;
77985   int iCol = -1, i;
77986   if( pTab==0 || IN_DECLARE_VTAB ) goto primary_key_exit;
77987   if( pTab->tabFlags & TF_HasPrimaryKey ){
77988     sqlite3ErrorMsg(pParse, 
77989       "table \"%s\" has more than one primary key", pTab->zName);
77990     goto primary_key_exit;
77991   }
77992   pTab->tabFlags |= TF_HasPrimaryKey;
77993   if( pList==0 ){
77994     iCol = pTab->nCol - 1;
77995     pTab->aCol[iCol].isPrimKey = 1;
77996   }else{
77997     for(i=0; i<pList->nExpr; i++){
77998       for(iCol=0; iCol<pTab->nCol; iCol++){
77999         if( sqlite3StrICmp(pList->a[i].zName, pTab->aCol[iCol].zName)==0 ){
78000           break;
78001         }
78002       }
78003       if( iCol<pTab->nCol ){
78004         pTab->aCol[iCol].isPrimKey = 1;
78005       }
78006     }
78007     if( pList->nExpr>1 ) iCol = -1;
78008   }
78009   if( iCol>=0 && iCol<pTab->nCol ){
78010     zType = pTab->aCol[iCol].zType;
78011   }
78012   if( zType && sqlite3StrICmp(zType, "INTEGER")==0
78013         && sortOrder==SQLITE_SO_ASC ){
78014     pTab->iPKey = iCol;
78015     pTab->keyConf = (u8)onError;
78016     assert( autoInc==0 || autoInc==1 );
78017     pTab->tabFlags |= autoInc*TF_Autoincrement;
78018   }else if( autoInc ){
78019 #ifndef SQLITE_OMIT_AUTOINCREMENT
78020     sqlite3ErrorMsg(pParse, "AUTOINCREMENT is only allowed on an "
78021        "INTEGER PRIMARY KEY");
78022 #endif
78023   }else{
78024     Index *p;
78025     p = sqlite3CreateIndex(pParse, 0, 0, 0, pList, onError, 0, 0, sortOrder, 0);
78026     if( p ){
78027       p->autoIndex = 2;
78028     }
78029     pList = 0;
78030   }
78031
78032 primary_key_exit:
78033   sqlite3ExprListDelete(pParse->db, pList);
78034   return;
78035 }
78036
78037 /*
78038 ** Add a new CHECK constraint to the table currently under construction.
78039 */
78040 SQLITE_PRIVATE void sqlite3AddCheckConstraint(
78041   Parse *pParse,    /* Parsing context */
78042   Expr *pCheckExpr  /* The check expression */
78043 ){
78044   sqlite3 *db = pParse->db;
78045 #ifndef SQLITE_OMIT_CHECK
78046   Table *pTab = pParse->pNewTable;
78047   if( pTab && !IN_DECLARE_VTAB ){
78048     pTab->pCheck = sqlite3ExprAnd(db, pTab->pCheck, pCheckExpr);
78049   }else
78050 #endif
78051   {
78052     sqlite3ExprDelete(db, pCheckExpr);
78053   }
78054 }
78055
78056 /*
78057 ** Set the collation function of the most recently parsed table column
78058 ** to the CollSeq given.
78059 */
78060 SQLITE_PRIVATE void sqlite3AddCollateType(Parse *pParse, Token *pToken){
78061   Table *p;
78062   int i;
78063   char *zColl;              /* Dequoted name of collation sequence */
78064   sqlite3 *db;
78065
78066   if( (p = pParse->pNewTable)==0 ) return;
78067   i = p->nCol-1;
78068   db = pParse->db;
78069   zColl = sqlite3NameFromToken(db, pToken);
78070   if( !zColl ) return;
78071
78072   if( sqlite3LocateCollSeq(pParse, zColl) ){
78073     Index *pIdx;
78074     p->aCol[i].zColl = zColl;
78075   
78076     /* If the column is declared as "<name> PRIMARY KEY COLLATE <type>",
78077     ** then an index may have been created on this column before the
78078     ** collation type was added. Correct this if it is the case.
78079     */
78080     for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){
78081       assert( pIdx->nColumn==1 );
78082       if( pIdx->aiColumn[0]==i ){
78083         pIdx->azColl[0] = p->aCol[i].zColl;
78084       }
78085     }
78086   }else{
78087     sqlite3DbFree(db, zColl);
78088   }
78089 }
78090
78091 /*
78092 ** This function returns the collation sequence for database native text
78093 ** encoding identified by the string zName, length nName.
78094 **
78095 ** If the requested collation sequence is not available, or not available
78096 ** in the database native encoding, the collation factory is invoked to
78097 ** request it. If the collation factory does not supply such a sequence,
78098 ** and the sequence is available in another text encoding, then that is
78099 ** returned instead.
78100 **
78101 ** If no versions of the requested collations sequence are available, or
78102 ** another error occurs, NULL is returned and an error message written into
78103 ** pParse.
78104 **
78105 ** This routine is a wrapper around sqlite3FindCollSeq().  This routine
78106 ** invokes the collation factory if the named collation cannot be found
78107 ** and generates an error message.
78108 **
78109 ** See also: sqlite3FindCollSeq(), sqlite3GetCollSeq()
78110 */
78111 SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName){
78112   sqlite3 *db = pParse->db;
78113   u8 enc = ENC(db);
78114   u8 initbusy = db->init.busy;
78115   CollSeq *pColl;
78116
78117   pColl = sqlite3FindCollSeq(db, enc, zName, initbusy);
78118   if( !initbusy && (!pColl || !pColl->xCmp) ){
78119     pColl = sqlite3GetCollSeq(db, enc, pColl, zName);
78120     if( !pColl ){
78121       sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName);
78122     }
78123   }
78124
78125   return pColl;
78126 }
78127
78128
78129 /*
78130 ** Generate code that will increment the schema cookie.
78131 **
78132 ** The schema cookie is used to determine when the schema for the
78133 ** database changes.  After each schema change, the cookie value
78134 ** changes.  When a process first reads the schema it records the
78135 ** cookie.  Thereafter, whenever it goes to access the database,
78136 ** it checks the cookie to make sure the schema has not changed
78137 ** since it was last read.
78138 **
78139 ** This plan is not completely bullet-proof.  It is possible for
78140 ** the schema to change multiple times and for the cookie to be
78141 ** set back to prior value.  But schema changes are infrequent
78142 ** and the probability of hitting the same cookie value is only
78143 ** 1 chance in 2^32.  So we're safe enough.
78144 */
78145 SQLITE_PRIVATE void sqlite3ChangeCookie(Parse *pParse, int iDb){
78146   int r1 = sqlite3GetTempReg(pParse);
78147   sqlite3 *db = pParse->db;
78148   Vdbe *v = pParse->pVdbe;
78149   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
78150   sqlite3VdbeAddOp2(v, OP_Integer, db->aDb[iDb].pSchema->schema_cookie+1, r1);
78151   sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_SCHEMA_VERSION, r1);
78152   sqlite3ReleaseTempReg(pParse, r1);
78153 }
78154
78155 /*
78156 ** Measure the number of characters needed to output the given
78157 ** identifier.  The number returned includes any quotes used
78158 ** but does not include the null terminator.
78159 **
78160 ** The estimate is conservative.  It might be larger that what is
78161 ** really needed.
78162 */
78163 static int identLength(const char *z){
78164   int n;
78165   for(n=0; *z; n++, z++){
78166     if( *z=='"' ){ n++; }
78167   }
78168   return n + 2;
78169 }
78170
78171 /*
78172 ** The first parameter is a pointer to an output buffer. The second 
78173 ** parameter is a pointer to an integer that contains the offset at
78174 ** which to write into the output buffer. This function copies the
78175 ** nul-terminated string pointed to by the third parameter, zSignedIdent,
78176 ** to the specified offset in the buffer and updates *pIdx to refer
78177 ** to the first byte after the last byte written before returning.
78178 ** 
78179 ** If the string zSignedIdent consists entirely of alpha-numeric
78180 ** characters, does not begin with a digit and is not an SQL keyword,
78181 ** then it is copied to the output buffer exactly as it is. Otherwise,
78182 ** it is quoted using double-quotes.
78183 */
78184 static void identPut(char *z, int *pIdx, char *zSignedIdent){
78185   unsigned char *zIdent = (unsigned char*)zSignedIdent;
78186   int i, j, needQuote;
78187   i = *pIdx;
78188
78189   for(j=0; zIdent[j]; j++){
78190     if( !sqlite3Isalnum(zIdent[j]) && zIdent[j]!='_' ) break;
78191   }
78192   needQuote = sqlite3Isdigit(zIdent[0]) || sqlite3KeywordCode(zIdent, j)!=TK_ID;
78193   if( !needQuote ){
78194     needQuote = zIdent[j];
78195   }
78196
78197   if( needQuote ) z[i++] = '"';
78198   for(j=0; zIdent[j]; j++){
78199     z[i++] = zIdent[j];
78200     if( zIdent[j]=='"' ) z[i++] = '"';
78201   }
78202   if( needQuote ) z[i++] = '"';
78203   z[i] = 0;
78204   *pIdx = i;
78205 }
78206
78207 /*
78208 ** Generate a CREATE TABLE statement appropriate for the given
78209 ** table.  Memory to hold the text of the statement is obtained
78210 ** from sqliteMalloc() and must be freed by the calling function.
78211 */
78212 static char *createTableStmt(sqlite3 *db, Table *p){
78213   int i, k, n;
78214   char *zStmt;
78215   char *zSep, *zSep2, *zEnd;
78216   Column *pCol;
78217   n = 0;
78218   for(pCol = p->aCol, i=0; i<p->nCol; i++, pCol++){
78219     n += identLength(pCol->zName) + 5;
78220   }
78221   n += identLength(p->zName);
78222   if( n<50 ){ 
78223     zSep = "";
78224     zSep2 = ",";
78225     zEnd = ")";
78226   }else{
78227     zSep = "\n  ";
78228     zSep2 = ",\n  ";
78229     zEnd = "\n)";
78230   }
78231   n += 35 + 6*p->nCol;
78232   zStmt = sqlite3DbMallocRaw(0, n);
78233   if( zStmt==0 ){
78234     db->mallocFailed = 1;
78235     return 0;
78236   }
78237   sqlite3_snprintf(n, zStmt, "CREATE TABLE ");
78238   k = sqlite3Strlen30(zStmt);
78239   identPut(zStmt, &k, p->zName);
78240   zStmt[k++] = '(';
78241   for(pCol=p->aCol, i=0; i<p->nCol; i++, pCol++){
78242     static const char * const azType[] = {
78243         /* SQLITE_AFF_TEXT    */ " TEXT",
78244         /* SQLITE_AFF_NONE    */ "",
78245         /* SQLITE_AFF_NUMERIC */ " NUM",
78246         /* SQLITE_AFF_INTEGER */ " INT",
78247         /* SQLITE_AFF_REAL    */ " REAL"
78248     };
78249     int len;
78250     const char *zType;
78251
78252     sqlite3_snprintf(n-k, &zStmt[k], zSep);
78253     k += sqlite3Strlen30(&zStmt[k]);
78254     zSep = zSep2;
78255     identPut(zStmt, &k, pCol->zName);
78256     assert( pCol->affinity-SQLITE_AFF_TEXT >= 0 );
78257     assert( pCol->affinity-SQLITE_AFF_TEXT < ArraySize(azType) );
78258     testcase( pCol->affinity==SQLITE_AFF_TEXT );
78259     testcase( pCol->affinity==SQLITE_AFF_NONE );
78260     testcase( pCol->affinity==SQLITE_AFF_NUMERIC );
78261     testcase( pCol->affinity==SQLITE_AFF_INTEGER );
78262     testcase( pCol->affinity==SQLITE_AFF_REAL );
78263     
78264     zType = azType[pCol->affinity - SQLITE_AFF_TEXT];
78265     len = sqlite3Strlen30(zType);
78266     assert( pCol->affinity==SQLITE_AFF_NONE 
78267             || pCol->affinity==sqlite3AffinityType(zType) );
78268     memcpy(&zStmt[k], zType, len);
78269     k += len;
78270     assert( k<=n );
78271   }
78272   sqlite3_snprintf(n-k, &zStmt[k], "%s", zEnd);
78273   return zStmt;
78274 }
78275
78276 /*
78277 ** This routine is called to report the final ")" that terminates
78278 ** a CREATE TABLE statement.
78279 **
78280 ** The table structure that other action routines have been building
78281 ** is added to the internal hash tables, assuming no errors have
78282 ** occurred.
78283 **
78284 ** An entry for the table is made in the master table on disk, unless
78285 ** this is a temporary table or db->init.busy==1.  When db->init.busy==1
78286 ** it means we are reading the sqlite_master table because we just
78287 ** connected to the database or because the sqlite_master table has
78288 ** recently changed, so the entry for this table already exists in
78289 ** the sqlite_master table.  We do not want to create it again.
78290 **
78291 ** If the pSelect argument is not NULL, it means that this routine
78292 ** was called to create a table generated from a 
78293 ** "CREATE TABLE ... AS SELECT ..." statement.  The column names of
78294 ** the new table will match the result set of the SELECT.
78295 */
78296 SQLITE_PRIVATE void sqlite3EndTable(
78297   Parse *pParse,          /* Parse context */
78298   Token *pCons,           /* The ',' token after the last column defn. */
78299   Token *pEnd,            /* The final ')' token in the CREATE TABLE */
78300   Select *pSelect         /* Select from a "CREATE ... AS SELECT" */
78301 ){
78302   Table *p;
78303   sqlite3 *db = pParse->db;
78304   int iDb;
78305
78306   if( (pEnd==0 && pSelect==0) || db->mallocFailed ){
78307     return;
78308   }
78309   p = pParse->pNewTable;
78310   if( p==0 ) return;
78311
78312   assert( !db->init.busy || !pSelect );
78313
78314   iDb = sqlite3SchemaToIndex(db, p->pSchema);
78315
78316 #ifndef SQLITE_OMIT_CHECK
78317   /* Resolve names in all CHECK constraint expressions.
78318   */
78319   if( p->pCheck ){
78320     SrcList sSrc;                   /* Fake SrcList for pParse->pNewTable */
78321     NameContext sNC;                /* Name context for pParse->pNewTable */
78322
78323     memset(&sNC, 0, sizeof(sNC));
78324     memset(&sSrc, 0, sizeof(sSrc));
78325     sSrc.nSrc = 1;
78326     sSrc.a[0].zName = p->zName;
78327     sSrc.a[0].pTab = p;
78328     sSrc.a[0].iCursor = -1;
78329     sNC.pParse = pParse;
78330     sNC.pSrcList = &sSrc;
78331     sNC.isCheck = 1;
78332     if( sqlite3ResolveExprNames(&sNC, p->pCheck) ){
78333       return;
78334     }
78335   }
78336 #endif /* !defined(SQLITE_OMIT_CHECK) */
78337
78338   /* If the db->init.busy is 1 it means we are reading the SQL off the
78339   ** "sqlite_master" or "sqlite_temp_master" table on the disk.
78340   ** So do not write to the disk again.  Extract the root page number
78341   ** for the table from the db->init.newTnum field.  (The page number
78342   ** should have been put there by the sqliteOpenCb routine.)
78343   */
78344   if( db->init.busy ){
78345     p->tnum = db->init.newTnum;
78346   }
78347
78348   /* If not initializing, then create a record for the new table
78349   ** in the SQLITE_MASTER table of the database.
78350   **
78351   ** If this is a TEMPORARY table, write the entry into the auxiliary
78352   ** file instead of into the main database file.
78353   */
78354   if( !db->init.busy ){
78355     int n;
78356     Vdbe *v;
78357     char *zType;    /* "view" or "table" */
78358     char *zType2;   /* "VIEW" or "TABLE" */
78359     char *zStmt;    /* Text of the CREATE TABLE or CREATE VIEW statement */
78360
78361     v = sqlite3GetVdbe(pParse);
78362     if( NEVER(v==0) ) return;
78363
78364     sqlite3VdbeAddOp1(v, OP_Close, 0);
78365
78366     /* 
78367     ** Initialize zType for the new view or table.
78368     */
78369     if( p->pSelect==0 ){
78370       /* A regular table */
78371       zType = "table";
78372       zType2 = "TABLE";
78373 #ifndef SQLITE_OMIT_VIEW
78374     }else{
78375       /* A view */
78376       zType = "view";
78377       zType2 = "VIEW";
78378 #endif
78379     }
78380
78381     /* If this is a CREATE TABLE xx AS SELECT ..., execute the SELECT
78382     ** statement to populate the new table. The root-page number for the
78383     ** new table is in register pParse->regRoot.
78384     **
78385     ** Once the SELECT has been coded by sqlite3Select(), it is in a
78386     ** suitable state to query for the column names and types to be used
78387     ** by the new table.
78388     **
78389     ** A shared-cache write-lock is not required to write to the new table,
78390     ** as a schema-lock must have already been obtained to create it. Since
78391     ** a schema-lock excludes all other database users, the write-lock would
78392     ** be redundant.
78393     */
78394     if( pSelect ){
78395       SelectDest dest;
78396       Table *pSelTab;
78397
78398       assert(pParse->nTab==1);
78399       sqlite3VdbeAddOp3(v, OP_OpenWrite, 1, pParse->regRoot, iDb);
78400       sqlite3VdbeChangeP5(v, 1);
78401       pParse->nTab = 2;
78402       sqlite3SelectDestInit(&dest, SRT_Table, 1);
78403       sqlite3Select(pParse, pSelect, &dest);
78404       sqlite3VdbeAddOp1(v, OP_Close, 1);
78405       if( pParse->nErr==0 ){
78406         pSelTab = sqlite3ResultSetOfSelect(pParse, pSelect);
78407         if( pSelTab==0 ) return;
78408         assert( p->aCol==0 );
78409         p->nCol = pSelTab->nCol;
78410         p->aCol = pSelTab->aCol;
78411         pSelTab->nCol = 0;
78412         pSelTab->aCol = 0;
78413         sqlite3DeleteTable(db, pSelTab);
78414       }
78415     }
78416
78417     /* Compute the complete text of the CREATE statement */
78418     if( pSelect ){
78419       zStmt = createTableStmt(db, p);
78420     }else{
78421       n = (int)(pEnd->z - pParse->sNameToken.z) + 1;
78422       zStmt = sqlite3MPrintf(db, 
78423           "CREATE %s %.*s", zType2, n, pParse->sNameToken.z
78424       );
78425     }
78426
78427     /* A slot for the record has already been allocated in the 
78428     ** SQLITE_MASTER table.  We just need to update that slot with all
78429     ** the information we've collected.
78430     */
78431     sqlite3NestedParse(pParse,
78432       "UPDATE %Q.%s "
78433          "SET type='%s', name=%Q, tbl_name=%Q, rootpage=#%d, sql=%Q "
78434        "WHERE rowid=#%d",
78435       db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
78436       zType,
78437       p->zName,
78438       p->zName,
78439       pParse->regRoot,
78440       zStmt,
78441       pParse->regRowid
78442     );
78443     sqlite3DbFree(db, zStmt);
78444     sqlite3ChangeCookie(pParse, iDb);
78445
78446 #ifndef SQLITE_OMIT_AUTOINCREMENT
78447     /* Check to see if we need to create an sqlite_sequence table for
78448     ** keeping track of autoincrement keys.
78449     */
78450     if( p->tabFlags & TF_Autoincrement ){
78451       Db *pDb = &db->aDb[iDb];
78452       assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
78453       if( pDb->pSchema->pSeqTab==0 ){
78454         sqlite3NestedParse(pParse,
78455           "CREATE TABLE %Q.sqlite_sequence(name,seq)",
78456           pDb->zName
78457         );
78458       }
78459     }
78460 #endif
78461
78462     /* Reparse everything to update our internal data structures */
78463     sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 0, 0,
78464         sqlite3MPrintf(db, "tbl_name='%q'",p->zName), P4_DYNAMIC);
78465   }
78466
78467
78468   /* Add the table to the in-memory representation of the database.
78469   */
78470   if( db->init.busy ){
78471     Table *pOld;
78472     Schema *pSchema = p->pSchema;
78473     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
78474     pOld = sqlite3HashInsert(&pSchema->tblHash, p->zName,
78475                              sqlite3Strlen30(p->zName),p);
78476     if( pOld ){
78477       assert( p==pOld );  /* Malloc must have failed inside HashInsert() */
78478       db->mallocFailed = 1;
78479       return;
78480     }
78481     pParse->pNewTable = 0;
78482     db->nTable++;
78483     db->flags |= SQLITE_InternChanges;
78484
78485 #ifndef SQLITE_OMIT_ALTERTABLE
78486     if( !p->pSelect ){
78487       const char *zName = (const char *)pParse->sNameToken.z;
78488       int nName;
78489       assert( !pSelect && pCons && pEnd );
78490       if( pCons->z==0 ){
78491         pCons = pEnd;
78492       }
78493       nName = (int)((const char *)pCons->z - zName);
78494       p->addColOffset = 13 + sqlite3Utf8CharLen(zName, nName);
78495     }
78496 #endif
78497   }
78498 }
78499
78500 #ifndef SQLITE_OMIT_VIEW
78501 /*
78502 ** The parser calls this routine in order to create a new VIEW
78503 */
78504 SQLITE_PRIVATE void sqlite3CreateView(
78505   Parse *pParse,     /* The parsing context */
78506   Token *pBegin,     /* The CREATE token that begins the statement */
78507   Token *pName1,     /* The token that holds the name of the view */
78508   Token *pName2,     /* The token that holds the name of the view */
78509   Select *pSelect,   /* A SELECT statement that will become the new view */
78510   int isTemp,        /* TRUE for a TEMPORARY view */
78511   int noErr          /* Suppress error messages if VIEW already exists */
78512 ){
78513   Table *p;
78514   int n;
78515   const char *z;
78516   Token sEnd;
78517   DbFixer sFix;
78518   Token *pName;
78519   int iDb;
78520   sqlite3 *db = pParse->db;
78521
78522   if( pParse->nVar>0 ){
78523     sqlite3ErrorMsg(pParse, "parameters are not allowed in views");
78524     sqlite3SelectDelete(db, pSelect);
78525     return;
78526   }
78527   sqlite3StartTable(pParse, pName1, pName2, isTemp, 1, 0, noErr);
78528   p = pParse->pNewTable;
78529   if( p==0 || pParse->nErr ){
78530     sqlite3SelectDelete(db, pSelect);
78531     return;
78532   }
78533   sqlite3TwoPartName(pParse, pName1, pName2, &pName);
78534   iDb = sqlite3SchemaToIndex(db, p->pSchema);
78535   if( sqlite3FixInit(&sFix, pParse, iDb, "view", pName)
78536     && sqlite3FixSelect(&sFix, pSelect)
78537   ){
78538     sqlite3SelectDelete(db, pSelect);
78539     return;
78540   }
78541
78542   /* Make a copy of the entire SELECT statement that defines the view.
78543   ** This will force all the Expr.token.z values to be dynamically
78544   ** allocated rather than point to the input string - which means that
78545   ** they will persist after the current sqlite3_exec() call returns.
78546   */
78547   p->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
78548   sqlite3SelectDelete(db, pSelect);
78549   if( db->mallocFailed ){
78550     return;
78551   }
78552   if( !db->init.busy ){
78553     sqlite3ViewGetColumnNames(pParse, p);
78554   }
78555
78556   /* Locate the end of the CREATE VIEW statement.  Make sEnd point to
78557   ** the end.
78558   */
78559   sEnd = pParse->sLastToken;
78560   if( ALWAYS(sEnd.z[0]!=0) && sEnd.z[0]!=';' ){
78561     sEnd.z += sEnd.n;
78562   }
78563   sEnd.n = 0;
78564   n = (int)(sEnd.z - pBegin->z);
78565   z = pBegin->z;
78566   while( ALWAYS(n>0) && sqlite3Isspace(z[n-1]) ){ n--; }
78567   sEnd.z = &z[n-1];
78568   sEnd.n = 1;
78569
78570   /* Use sqlite3EndTable() to add the view to the SQLITE_MASTER table */
78571   sqlite3EndTable(pParse, 0, &sEnd, 0);
78572   return;
78573 }
78574 #endif /* SQLITE_OMIT_VIEW */
78575
78576 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
78577 /*
78578 ** The Table structure pTable is really a VIEW.  Fill in the names of
78579 ** the columns of the view in the pTable structure.  Return the number
78580 ** of errors.  If an error is seen leave an error message in pParse->zErrMsg.
78581 */
78582 SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
78583   Table *pSelTab;   /* A fake table from which we get the result set */
78584   Select *pSel;     /* Copy of the SELECT that implements the view */
78585   int nErr = 0;     /* Number of errors encountered */
78586   int n;            /* Temporarily holds the number of cursors assigned */
78587   sqlite3 *db = pParse->db;  /* Database connection for malloc errors */
78588   int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
78589
78590   assert( pTable );
78591
78592 #ifndef SQLITE_OMIT_VIRTUALTABLE
78593   if( sqlite3VtabCallConnect(pParse, pTable) ){
78594     return SQLITE_ERROR;
78595   }
78596   if( IsVirtual(pTable) ) return 0;
78597 #endif
78598
78599 #ifndef SQLITE_OMIT_VIEW
78600   /* A positive nCol means the columns names for this view are
78601   ** already known.
78602   */
78603   if( pTable->nCol>0 ) return 0;
78604
78605   /* A negative nCol is a special marker meaning that we are currently
78606   ** trying to compute the column names.  If we enter this routine with
78607   ** a negative nCol, it means two or more views form a loop, like this:
78608   **
78609   **     CREATE VIEW one AS SELECT * FROM two;
78610   **     CREATE VIEW two AS SELECT * FROM one;
78611   **
78612   ** Actually, the error above is now caught prior to reaching this point.
78613   ** But the following test is still important as it does come up
78614   ** in the following:
78615   ** 
78616   **     CREATE TABLE main.ex1(a);
78617   **     CREATE TEMP VIEW ex1 AS SELECT a FROM ex1;
78618   **     SELECT * FROM temp.ex1;
78619   */
78620   if( pTable->nCol<0 ){
78621     sqlite3ErrorMsg(pParse, "view %s is circularly defined", pTable->zName);
78622     return 1;
78623   }
78624   assert( pTable->nCol>=0 );
78625
78626   /* If we get this far, it means we need to compute the table names.
78627   ** Note that the call to sqlite3ResultSetOfSelect() will expand any
78628   ** "*" elements in the results set of the view and will assign cursors
78629   ** to the elements of the FROM clause.  But we do not want these changes
78630   ** to be permanent.  So the computation is done on a copy of the SELECT
78631   ** statement that defines the view.
78632   */
78633   assert( pTable->pSelect );
78634   pSel = sqlite3SelectDup(db, pTable->pSelect, 0);
78635   if( pSel ){
78636     u8 enableLookaside = db->lookaside.bEnabled;
78637     n = pParse->nTab;
78638     sqlite3SrcListAssignCursors(pParse, pSel->pSrc);
78639     pTable->nCol = -1;
78640     db->lookaside.bEnabled = 0;
78641 #ifndef SQLITE_OMIT_AUTHORIZATION
78642     xAuth = db->xAuth;
78643     db->xAuth = 0;
78644     pSelTab = sqlite3ResultSetOfSelect(pParse, pSel);
78645     db->xAuth = xAuth;
78646 #else
78647     pSelTab = sqlite3ResultSetOfSelect(pParse, pSel);
78648 #endif
78649     db->lookaside.bEnabled = enableLookaside;
78650     pParse->nTab = n;
78651     if( pSelTab ){
78652       assert( pTable->aCol==0 );
78653       pTable->nCol = pSelTab->nCol;
78654       pTable->aCol = pSelTab->aCol;
78655       pSelTab->nCol = 0;
78656       pSelTab->aCol = 0;
78657       sqlite3DeleteTable(db, pSelTab);
78658       assert( sqlite3SchemaMutexHeld(db, 0, pTable->pSchema) );
78659       pTable->pSchema->flags |= DB_UnresetViews;
78660     }else{
78661       pTable->nCol = 0;
78662       nErr++;
78663     }
78664     sqlite3SelectDelete(db, pSel);
78665   } else {
78666     nErr++;
78667   }
78668 #endif /* SQLITE_OMIT_VIEW */
78669   return nErr;  
78670 }
78671 #endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */
78672
78673 #ifndef SQLITE_OMIT_VIEW
78674 /*
78675 ** Clear the column names from every VIEW in database idx.
78676 */
78677 static void sqliteViewResetAll(sqlite3 *db, int idx){
78678   HashElem *i;
78679   assert( sqlite3SchemaMutexHeld(db, idx, 0) );
78680   if( !DbHasProperty(db, idx, DB_UnresetViews) ) return;
78681   for(i=sqliteHashFirst(&db->aDb[idx].pSchema->tblHash); i;i=sqliteHashNext(i)){
78682     Table *pTab = sqliteHashData(i);
78683     if( pTab->pSelect ){
78684       sqliteDeleteColumnNames(db, pTab);
78685       pTab->aCol = 0;
78686       pTab->nCol = 0;
78687     }
78688   }
78689   DbClearProperty(db, idx, DB_UnresetViews);
78690 }
78691 #else
78692 # define sqliteViewResetAll(A,B)
78693 #endif /* SQLITE_OMIT_VIEW */
78694
78695 /*
78696 ** This function is called by the VDBE to adjust the internal schema
78697 ** used by SQLite when the btree layer moves a table root page. The
78698 ** root-page of a table or index in database iDb has changed from iFrom
78699 ** to iTo.
78700 **
78701 ** Ticket #1728:  The symbol table might still contain information
78702 ** on tables and/or indices that are the process of being deleted.
78703 ** If you are unlucky, one of those deleted indices or tables might
78704 ** have the same rootpage number as the real table or index that is
78705 ** being moved.  So we cannot stop searching after the first match 
78706 ** because the first match might be for one of the deleted indices
78707 ** or tables and not the table/index that is actually being moved.
78708 ** We must continue looping until all tables and indices with
78709 ** rootpage==iFrom have been converted to have a rootpage of iTo
78710 ** in order to be certain that we got the right one.
78711 */
78712 #ifndef SQLITE_OMIT_AUTOVACUUM
78713 SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3 *db, int iDb, int iFrom, int iTo){
78714   HashElem *pElem;
78715   Hash *pHash;
78716   Db *pDb;
78717
78718   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
78719   pDb = &db->aDb[iDb];
78720   pHash = &pDb->pSchema->tblHash;
78721   for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){
78722     Table *pTab = sqliteHashData(pElem);
78723     if( pTab->tnum==iFrom ){
78724       pTab->tnum = iTo;
78725     }
78726   }
78727   pHash = &pDb->pSchema->idxHash;
78728   for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){
78729     Index *pIdx = sqliteHashData(pElem);
78730     if( pIdx->tnum==iFrom ){
78731       pIdx->tnum = iTo;
78732     }
78733   }
78734 }
78735 #endif
78736
78737 /*
78738 ** Write code to erase the table with root-page iTable from database iDb.
78739 ** Also write code to modify the sqlite_master table and internal schema
78740 ** if a root-page of another table is moved by the btree-layer whilst
78741 ** erasing iTable (this can happen with an auto-vacuum database).
78742 */ 
78743 static void destroyRootPage(Parse *pParse, int iTable, int iDb){
78744   Vdbe *v = sqlite3GetVdbe(pParse);
78745   int r1 = sqlite3GetTempReg(pParse);
78746   sqlite3VdbeAddOp3(v, OP_Destroy, iTable, r1, iDb);
78747   sqlite3MayAbort(pParse);
78748 #ifndef SQLITE_OMIT_AUTOVACUUM
78749   /* OP_Destroy stores an in integer r1. If this integer
78750   ** is non-zero, then it is the root page number of a table moved to
78751   ** location iTable. The following code modifies the sqlite_master table to
78752   ** reflect this.
78753   **
78754   ** The "#NNN" in the SQL is a special constant that means whatever value
78755   ** is in register NNN.  See grammar rules associated with the TK_REGISTER
78756   ** token for additional information.
78757   */
78758   sqlite3NestedParse(pParse, 
78759      "UPDATE %Q.%s SET rootpage=%d WHERE #%d AND rootpage=#%d",
78760      pParse->db->aDb[iDb].zName, SCHEMA_TABLE(iDb), iTable, r1, r1);
78761 #endif
78762   sqlite3ReleaseTempReg(pParse, r1);
78763 }
78764
78765 /*
78766 ** Write VDBE code to erase table pTab and all associated indices on disk.
78767 ** Code to update the sqlite_master tables and internal schema definitions
78768 ** in case a root-page belonging to another table is moved by the btree layer
78769 ** is also added (this can happen with an auto-vacuum database).
78770 */
78771 static void destroyTable(Parse *pParse, Table *pTab){
78772 #ifdef SQLITE_OMIT_AUTOVACUUM
78773   Index *pIdx;
78774   int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
78775   destroyRootPage(pParse, pTab->tnum, iDb);
78776   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
78777     destroyRootPage(pParse, pIdx->tnum, iDb);
78778   }
78779 #else
78780   /* If the database may be auto-vacuum capable (if SQLITE_OMIT_AUTOVACUUM
78781   ** is not defined), then it is important to call OP_Destroy on the
78782   ** table and index root-pages in order, starting with the numerically 
78783   ** largest root-page number. This guarantees that none of the root-pages
78784   ** to be destroyed is relocated by an earlier OP_Destroy. i.e. if the
78785   ** following were coded:
78786   **
78787   ** OP_Destroy 4 0
78788   ** ...
78789   ** OP_Destroy 5 0
78790   **
78791   ** and root page 5 happened to be the largest root-page number in the
78792   ** database, then root page 5 would be moved to page 4 by the 
78793   ** "OP_Destroy 4 0" opcode. The subsequent "OP_Destroy 5 0" would hit
78794   ** a free-list page.
78795   */
78796   int iTab = pTab->tnum;
78797   int iDestroyed = 0;
78798
78799   while( 1 ){
78800     Index *pIdx;
78801     int iLargest = 0;
78802
78803     if( iDestroyed==0 || iTab<iDestroyed ){
78804       iLargest = iTab;
78805     }
78806     for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
78807       int iIdx = pIdx->tnum;
78808       assert( pIdx->pSchema==pTab->pSchema );
78809       if( (iDestroyed==0 || (iIdx<iDestroyed)) && iIdx>iLargest ){
78810         iLargest = iIdx;
78811       }
78812     }
78813     if( iLargest==0 ){
78814       return;
78815     }else{
78816       int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
78817       destroyRootPage(pParse, iLargest, iDb);
78818       iDestroyed = iLargest;
78819     }
78820   }
78821 #endif
78822 }
78823
78824 /*
78825 ** This routine is called to do the work of a DROP TABLE statement.
78826 ** pName is the name of the table to be dropped.
78827 */
78828 SQLITE_PRIVATE void sqlite3DropTable(Parse *pParse, SrcList *pName, int isView, int noErr){
78829   Table *pTab;
78830   Vdbe *v;
78831   sqlite3 *db = pParse->db;
78832   int iDb;
78833
78834   if( db->mallocFailed ){
78835     goto exit_drop_table;
78836   }
78837   assert( pParse->nErr==0 );
78838   assert( pName->nSrc==1 );
78839   if( noErr ) db->suppressErr++;
78840   pTab = sqlite3LocateTable(pParse, isView, 
78841                             pName->a[0].zName, pName->a[0].zDatabase);
78842   if( noErr ) db->suppressErr--;
78843
78844   if( pTab==0 ){
78845     if( noErr ) sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase);
78846     goto exit_drop_table;
78847   }
78848   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
78849   assert( iDb>=0 && iDb<db->nDb );
78850
78851   /* If pTab is a virtual table, call ViewGetColumnNames() to ensure
78852   ** it is initialized.
78853   */
78854   if( IsVirtual(pTab) && sqlite3ViewGetColumnNames(pParse, pTab) ){
78855     goto exit_drop_table;
78856   }
78857 #ifndef SQLITE_OMIT_AUTHORIZATION
78858   {
78859     int code;
78860     const char *zTab = SCHEMA_TABLE(iDb);
78861     const char *zDb = db->aDb[iDb].zName;
78862     const char *zArg2 = 0;
78863     if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb)){
78864       goto exit_drop_table;
78865     }
78866     if( isView ){
78867       if( !OMIT_TEMPDB && iDb==1 ){
78868         code = SQLITE_DROP_TEMP_VIEW;
78869       }else{
78870         code = SQLITE_DROP_VIEW;
78871       }
78872 #ifndef SQLITE_OMIT_VIRTUALTABLE
78873     }else if( IsVirtual(pTab) ){
78874       code = SQLITE_DROP_VTABLE;
78875       zArg2 = sqlite3GetVTable(db, pTab)->pMod->zName;
78876 #endif
78877     }else{
78878       if( !OMIT_TEMPDB && iDb==1 ){
78879         code = SQLITE_DROP_TEMP_TABLE;
78880       }else{
78881         code = SQLITE_DROP_TABLE;
78882       }
78883     }
78884     if( sqlite3AuthCheck(pParse, code, pTab->zName, zArg2, zDb) ){
78885       goto exit_drop_table;
78886     }
78887     if( sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb) ){
78888       goto exit_drop_table;
78889     }
78890   }
78891 #endif
78892   if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){
78893     sqlite3ErrorMsg(pParse, "table %s may not be dropped", pTab->zName);
78894     goto exit_drop_table;
78895   }
78896
78897 #ifndef SQLITE_OMIT_VIEW
78898   /* Ensure DROP TABLE is not used on a view, and DROP VIEW is not used
78899   ** on a table.
78900   */
78901   if( isView && pTab->pSelect==0 ){
78902     sqlite3ErrorMsg(pParse, "use DROP TABLE to delete table %s", pTab->zName);
78903     goto exit_drop_table;
78904   }
78905   if( !isView && pTab->pSelect ){
78906     sqlite3ErrorMsg(pParse, "use DROP VIEW to delete view %s", pTab->zName);
78907     goto exit_drop_table;
78908   }
78909 #endif
78910
78911   /* Generate code to remove the table from the master table
78912   ** on disk.
78913   */
78914   v = sqlite3GetVdbe(pParse);
78915   if( v ){
78916     Trigger *pTrigger;
78917     Db *pDb = &db->aDb[iDb];
78918     sqlite3BeginWriteOperation(pParse, 1, iDb);
78919
78920 #ifndef SQLITE_OMIT_VIRTUALTABLE
78921     if( IsVirtual(pTab) ){
78922       sqlite3VdbeAddOp0(v, OP_VBegin);
78923     }
78924 #endif
78925     sqlite3FkDropTable(pParse, pName, pTab);
78926
78927     /* Drop all triggers associated with the table being dropped. Code
78928     ** is generated to remove entries from sqlite_master and/or
78929     ** sqlite_temp_master if required.
78930     */
78931     pTrigger = sqlite3TriggerList(pParse, pTab);
78932     while( pTrigger ){
78933       assert( pTrigger->pSchema==pTab->pSchema || 
78934           pTrigger->pSchema==db->aDb[1].pSchema );
78935       sqlite3DropTriggerPtr(pParse, pTrigger);
78936       pTrigger = pTrigger->pNext;
78937     }
78938
78939 #ifndef SQLITE_OMIT_AUTOINCREMENT
78940     /* Remove any entries of the sqlite_sequence table associated with
78941     ** the table being dropped. This is done before the table is dropped
78942     ** at the btree level, in case the sqlite_sequence table needs to
78943     ** move as a result of the drop (can happen in auto-vacuum mode).
78944     */
78945     if( pTab->tabFlags & TF_Autoincrement ){
78946       sqlite3NestedParse(pParse,
78947         "DELETE FROM %s.sqlite_sequence WHERE name=%Q",
78948         pDb->zName, pTab->zName
78949       );
78950     }
78951 #endif
78952
78953     /* Drop all SQLITE_MASTER table and index entries that refer to the
78954     ** table. The program name loops through the master table and deletes
78955     ** every row that refers to a table of the same name as the one being
78956     ** dropped. Triggers are handled seperately because a trigger can be
78957     ** created in the temp database that refers to a table in another
78958     ** database.
78959     */
78960     sqlite3NestedParse(pParse, 
78961         "DELETE FROM %Q.%s WHERE tbl_name=%Q and type!='trigger'",
78962         pDb->zName, SCHEMA_TABLE(iDb), pTab->zName);
78963
78964     /* Drop any statistics from the sqlite_stat1 table, if it exists */
78965     if( sqlite3FindTable(db, "sqlite_stat1", db->aDb[iDb].zName) ){
78966       sqlite3NestedParse(pParse,
78967         "DELETE FROM %Q.sqlite_stat1 WHERE tbl=%Q", pDb->zName, pTab->zName
78968       );
78969     }
78970
78971     if( !isView && !IsVirtual(pTab) ){
78972       destroyTable(pParse, pTab);
78973     }
78974
78975     /* Remove the table entry from SQLite's internal schema and modify
78976     ** the schema cookie.
78977     */
78978     if( IsVirtual(pTab) ){
78979       sqlite3VdbeAddOp4(v, OP_VDestroy, iDb, 0, 0, pTab->zName, 0);
78980     }
78981     sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0);
78982     sqlite3ChangeCookie(pParse, iDb);
78983   }
78984   sqliteViewResetAll(db, iDb);
78985
78986 exit_drop_table:
78987   sqlite3SrcListDelete(db, pName);
78988 }
78989
78990 /*
78991 ** This routine is called to create a new foreign key on the table
78992 ** currently under construction.  pFromCol determines which columns
78993 ** in the current table point to the foreign key.  If pFromCol==0 then
78994 ** connect the key to the last column inserted.  pTo is the name of
78995 ** the table referred to.  pToCol is a list of tables in the other
78996 ** pTo table that the foreign key points to.  flags contains all
78997 ** information about the conflict resolution algorithms specified
78998 ** in the ON DELETE, ON UPDATE and ON INSERT clauses.
78999 **
79000 ** An FKey structure is created and added to the table currently
79001 ** under construction in the pParse->pNewTable field.
79002 **
79003 ** The foreign key is set for IMMEDIATE processing.  A subsequent call
79004 ** to sqlite3DeferForeignKey() might change this to DEFERRED.
79005 */
79006 SQLITE_PRIVATE void sqlite3CreateForeignKey(
79007   Parse *pParse,       /* Parsing context */
79008   ExprList *pFromCol,  /* Columns in this table that point to other table */
79009   Token *pTo,          /* Name of the other table */
79010   ExprList *pToCol,    /* Columns in the other table */
79011   int flags            /* Conflict resolution algorithms. */
79012 ){
79013   sqlite3 *db = pParse->db;
79014 #ifndef SQLITE_OMIT_FOREIGN_KEY
79015   FKey *pFKey = 0;
79016   FKey *pNextTo;
79017   Table *p = pParse->pNewTable;
79018   int nByte;
79019   int i;
79020   int nCol;
79021   char *z;
79022
79023   assert( pTo!=0 );
79024   if( p==0 || IN_DECLARE_VTAB ) goto fk_end;
79025   if( pFromCol==0 ){
79026     int iCol = p->nCol-1;
79027     if( NEVER(iCol<0) ) goto fk_end;
79028     if( pToCol && pToCol->nExpr!=1 ){
79029       sqlite3ErrorMsg(pParse, "foreign key on %s"
79030          " should reference only one column of table %T",
79031          p->aCol[iCol].zName, pTo);
79032       goto fk_end;
79033     }
79034     nCol = 1;
79035   }else if( pToCol && pToCol->nExpr!=pFromCol->nExpr ){
79036     sqlite3ErrorMsg(pParse,
79037         "number of columns in foreign key does not match the number of "
79038         "columns in the referenced table");
79039     goto fk_end;
79040   }else{
79041     nCol = pFromCol->nExpr;
79042   }
79043   nByte = sizeof(*pFKey) + (nCol-1)*sizeof(pFKey->aCol[0]) + pTo->n + 1;
79044   if( pToCol ){
79045     for(i=0; i<pToCol->nExpr; i++){
79046       nByte += sqlite3Strlen30(pToCol->a[i].zName) + 1;
79047     }
79048   }
79049   pFKey = sqlite3DbMallocZero(db, nByte );
79050   if( pFKey==0 ){
79051     goto fk_end;
79052   }
79053   pFKey->pFrom = p;
79054   pFKey->pNextFrom = p->pFKey;
79055   z = (char*)&pFKey->aCol[nCol];
79056   pFKey->zTo = z;
79057   memcpy(z, pTo->z, pTo->n);
79058   z[pTo->n] = 0;
79059   sqlite3Dequote(z);
79060   z += pTo->n+1;
79061   pFKey->nCol = nCol;
79062   if( pFromCol==0 ){
79063     pFKey->aCol[0].iFrom = p->nCol-1;
79064   }else{
79065     for(i=0; i<nCol; i++){
79066       int j;
79067       for(j=0; j<p->nCol; j++){
79068         if( sqlite3StrICmp(p->aCol[j].zName, pFromCol->a[i].zName)==0 ){
79069           pFKey->aCol[i].iFrom = j;
79070           break;
79071         }
79072       }
79073       if( j>=p->nCol ){
79074         sqlite3ErrorMsg(pParse, 
79075           "unknown column \"%s\" in foreign key definition", 
79076           pFromCol->a[i].zName);
79077         goto fk_end;
79078       }
79079     }
79080   }
79081   if( pToCol ){
79082     for(i=0; i<nCol; i++){
79083       int n = sqlite3Strlen30(pToCol->a[i].zName);
79084       pFKey->aCol[i].zCol = z;
79085       memcpy(z, pToCol->a[i].zName, n);
79086       z[n] = 0;
79087       z += n+1;
79088     }
79089   }
79090   pFKey->isDeferred = 0;
79091   pFKey->aAction[0] = (u8)(flags & 0xff);            /* ON DELETE action */
79092   pFKey->aAction[1] = (u8)((flags >> 8 ) & 0xff);    /* ON UPDATE action */
79093
79094   assert( sqlite3SchemaMutexHeld(db, 0, p->pSchema) );
79095   pNextTo = (FKey *)sqlite3HashInsert(&p->pSchema->fkeyHash, 
79096       pFKey->zTo, sqlite3Strlen30(pFKey->zTo), (void *)pFKey
79097   );
79098   if( pNextTo==pFKey ){
79099     db->mallocFailed = 1;
79100     goto fk_end;
79101   }
79102   if( pNextTo ){
79103     assert( pNextTo->pPrevTo==0 );
79104     pFKey->pNextTo = pNextTo;
79105     pNextTo->pPrevTo = pFKey;
79106   }
79107
79108   /* Link the foreign key to the table as the last step.
79109   */
79110   p->pFKey = pFKey;
79111   pFKey = 0;
79112
79113 fk_end:
79114   sqlite3DbFree(db, pFKey);
79115 #endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */
79116   sqlite3ExprListDelete(db, pFromCol);
79117   sqlite3ExprListDelete(db, pToCol);
79118 }
79119
79120 /*
79121 ** This routine is called when an INITIALLY IMMEDIATE or INITIALLY DEFERRED
79122 ** clause is seen as part of a foreign key definition.  The isDeferred
79123 ** parameter is 1 for INITIALLY DEFERRED and 0 for INITIALLY IMMEDIATE.
79124 ** The behavior of the most recently created foreign key is adjusted
79125 ** accordingly.
79126 */
79127 SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){
79128 #ifndef SQLITE_OMIT_FOREIGN_KEY
79129   Table *pTab;
79130   FKey *pFKey;
79131   if( (pTab = pParse->pNewTable)==0 || (pFKey = pTab->pFKey)==0 ) return;
79132   assert( isDeferred==0 || isDeferred==1 ); /* EV: R-30323-21917 */
79133   pFKey->isDeferred = (u8)isDeferred;
79134 #endif
79135 }
79136
79137 /*
79138 ** Generate code that will erase and refill index *pIdx.  This is
79139 ** used to initialize a newly created index or to recompute the
79140 ** content of an index in response to a REINDEX command.
79141 **
79142 ** if memRootPage is not negative, it means that the index is newly
79143 ** created.  The register specified by memRootPage contains the
79144 ** root page number of the index.  If memRootPage is negative, then
79145 ** the index already exists and must be cleared before being refilled and
79146 ** the root page number of the index is taken from pIndex->tnum.
79147 */
79148 static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
79149   Table *pTab = pIndex->pTable;  /* The table that is indexed */
79150   int iTab = pParse->nTab++;     /* Btree cursor used for pTab */
79151   int iIdx = pParse->nTab++;     /* Btree cursor used for pIndex */
79152   int addr1;                     /* Address of top of loop */
79153   int tnum;                      /* Root page of index */
79154   Vdbe *v;                       /* Generate code into this virtual machine */
79155   KeyInfo *pKey;                 /* KeyInfo for index */
79156   int regIdxKey;                 /* Registers containing the index key */
79157   int regRecord;                 /* Register holding assemblied index record */
79158   sqlite3 *db = pParse->db;      /* The database connection */
79159   int iDb = sqlite3SchemaToIndex(db, pIndex->pSchema);
79160
79161 #ifndef SQLITE_OMIT_AUTHORIZATION
79162   if( sqlite3AuthCheck(pParse, SQLITE_REINDEX, pIndex->zName, 0,
79163       db->aDb[iDb].zName ) ){
79164     return;
79165   }
79166 #endif
79167
79168   /* Require a write-lock on the table to perform this operation */
79169   sqlite3TableLock(pParse, iDb, pTab->tnum, 1, pTab->zName);
79170
79171   v = sqlite3GetVdbe(pParse);
79172   if( v==0 ) return;
79173   if( memRootPage>=0 ){
79174     tnum = memRootPage;
79175   }else{
79176     tnum = pIndex->tnum;
79177     sqlite3VdbeAddOp2(v, OP_Clear, tnum, iDb);
79178   }
79179   pKey = sqlite3IndexKeyinfo(pParse, pIndex);
79180   sqlite3VdbeAddOp4(v, OP_OpenWrite, iIdx, tnum, iDb, 
79181                     (char *)pKey, P4_KEYINFO_HANDOFF);
79182   if( memRootPage>=0 ){
79183     sqlite3VdbeChangeP5(v, 1);
79184   }
79185   sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);
79186   addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0);
79187   regRecord = sqlite3GetTempReg(pParse);
79188   regIdxKey = sqlite3GenerateIndexKey(pParse, pIndex, iTab, regRecord, 1);
79189   if( pIndex->onError!=OE_None ){
79190     const int regRowid = regIdxKey + pIndex->nColumn;
79191     const int j2 = sqlite3VdbeCurrentAddr(v) + 2;
79192     void * const pRegKey = SQLITE_INT_TO_PTR(regIdxKey);
79193
79194     /* The registers accessed by the OP_IsUnique opcode were allocated
79195     ** using sqlite3GetTempRange() inside of the sqlite3GenerateIndexKey()
79196     ** call above. Just before that function was freed they were released
79197     ** (made available to the compiler for reuse) using 
79198     ** sqlite3ReleaseTempRange(). So in some ways having the OP_IsUnique
79199     ** opcode use the values stored within seems dangerous. However, since
79200     ** we can be sure that no other temp registers have been allocated
79201     ** since sqlite3ReleaseTempRange() was called, it is safe to do so.
79202     */
79203     sqlite3VdbeAddOp4(v, OP_IsUnique, iIdx, j2, regRowid, pRegKey, P4_INT32);
79204     sqlite3HaltConstraint(
79205         pParse, OE_Abort, "indexed columns are not unique", P4_STATIC);
79206   }
79207   sqlite3VdbeAddOp2(v, OP_IdxInsert, iIdx, regRecord);
79208   sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
79209   sqlite3ReleaseTempReg(pParse, regRecord);
79210   sqlite3VdbeAddOp2(v, OP_Next, iTab, addr1+1);
79211   sqlite3VdbeJumpHere(v, addr1);
79212   sqlite3VdbeAddOp1(v, OP_Close, iTab);
79213   sqlite3VdbeAddOp1(v, OP_Close, iIdx);
79214 }
79215
79216 /*
79217 ** Create a new index for an SQL table.  pName1.pName2 is the name of the index 
79218 ** and pTblList is the name of the table that is to be indexed.  Both will 
79219 ** be NULL for a primary key or an index that is created to satisfy a
79220 ** UNIQUE constraint.  If pTable and pIndex are NULL, use pParse->pNewTable
79221 ** as the table to be indexed.  pParse->pNewTable is a table that is
79222 ** currently being constructed by a CREATE TABLE statement.
79223 **
79224 ** pList is a list of columns to be indexed.  pList will be NULL if this
79225 ** is a primary key or unique-constraint on the most recent column added
79226 ** to the table currently under construction.  
79227 **
79228 ** If the index is created successfully, return a pointer to the new Index
79229 ** structure. This is used by sqlite3AddPrimaryKey() to mark the index
79230 ** as the tables primary key (Index.autoIndex==2).
79231 */
79232 SQLITE_PRIVATE Index *sqlite3CreateIndex(
79233   Parse *pParse,     /* All information about this parse */
79234   Token *pName1,     /* First part of index name. May be NULL */
79235   Token *pName2,     /* Second part of index name. May be NULL */
79236   SrcList *pTblName, /* Table to index. Use pParse->pNewTable if 0 */
79237   ExprList *pList,   /* A list of columns to be indexed */
79238   int onError,       /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
79239   Token *pStart,     /* The CREATE token that begins this statement */
79240   Token *pEnd,       /* The ")" that closes the CREATE INDEX statement */
79241   int sortOrder,     /* Sort order of primary key when pList==NULL */
79242   int ifNotExist     /* Omit error if index already exists */
79243 ){
79244   Index *pRet = 0;     /* Pointer to return */
79245   Table *pTab = 0;     /* Table to be indexed */
79246   Index *pIndex = 0;   /* The index to be created */
79247   char *zName = 0;     /* Name of the index */
79248   int nName;           /* Number of characters in zName */
79249   int i, j;
79250   Token nullId;        /* Fake token for an empty ID list */
79251   DbFixer sFix;        /* For assigning database names to pTable */
79252   int sortOrderMask;   /* 1 to honor DESC in index.  0 to ignore. */
79253   sqlite3 *db = pParse->db;
79254   Db *pDb;             /* The specific table containing the indexed database */
79255   int iDb;             /* Index of the database that is being written */
79256   Token *pName = 0;    /* Unqualified name of the index to create */
79257   struct ExprList_item *pListItem; /* For looping over pList */
79258   int nCol;
79259   int nExtra = 0;
79260   char *zExtra;
79261
79262   assert( pStart==0 || pEnd!=0 ); /* pEnd must be non-NULL if pStart is */
79263   assert( pParse->nErr==0 );      /* Never called with prior errors */
79264   if( db->mallocFailed || IN_DECLARE_VTAB ){
79265     goto exit_create_index;
79266   }
79267   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
79268     goto exit_create_index;
79269   }
79270
79271   /*
79272   ** Find the table that is to be indexed.  Return early if not found.
79273   */
79274   if( pTblName!=0 ){
79275
79276     /* Use the two-part index name to determine the database 
79277     ** to search for the table. 'Fix' the table name to this db
79278     ** before looking up the table.
79279     */
79280     assert( pName1 && pName2 );
79281     iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
79282     if( iDb<0 ) goto exit_create_index;
79283
79284 #ifndef SQLITE_OMIT_TEMPDB
79285     /* If the index name was unqualified, check if the the table
79286     ** is a temp table. If so, set the database to 1. Do not do this
79287     ** if initialising a database schema.
79288     */
79289     if( !db->init.busy ){
79290       pTab = sqlite3SrcListLookup(pParse, pTblName);
79291       if( pName2->n==0 && pTab && pTab->pSchema==db->aDb[1].pSchema ){
79292         iDb = 1;
79293       }
79294     }
79295 #endif
79296
79297     if( sqlite3FixInit(&sFix, pParse, iDb, "index", pName) &&
79298         sqlite3FixSrcList(&sFix, pTblName)
79299     ){
79300       /* Because the parser constructs pTblName from a single identifier,
79301       ** sqlite3FixSrcList can never fail. */
79302       assert(0);
79303     }
79304     pTab = sqlite3LocateTable(pParse, 0, pTblName->a[0].zName, 
79305         pTblName->a[0].zDatabase);
79306     if( !pTab || db->mallocFailed ) goto exit_create_index;
79307     assert( db->aDb[iDb].pSchema==pTab->pSchema );
79308   }else{
79309     assert( pName==0 );
79310     pTab = pParse->pNewTable;
79311     if( !pTab ) goto exit_create_index;
79312     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
79313   }
79314   pDb = &db->aDb[iDb];
79315
79316   assert( pTab!=0 );
79317   assert( pParse->nErr==0 );
79318   if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 
79319        && sqlite3StrNICmp(&pTab->zName[7],"altertab_",9)!=0 ){
79320     sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName);
79321     goto exit_create_index;
79322   }
79323 #ifndef SQLITE_OMIT_VIEW
79324   if( pTab->pSelect ){
79325     sqlite3ErrorMsg(pParse, "views may not be indexed");
79326     goto exit_create_index;
79327   }
79328 #endif
79329 #ifndef SQLITE_OMIT_VIRTUALTABLE
79330   if( IsVirtual(pTab) ){
79331     sqlite3ErrorMsg(pParse, "virtual tables may not be indexed");
79332     goto exit_create_index;
79333   }
79334 #endif
79335
79336   /*
79337   ** Find the name of the index.  Make sure there is not already another
79338   ** index or table with the same name.  
79339   **
79340   ** Exception:  If we are reading the names of permanent indices from the
79341   ** sqlite_master table (because some other process changed the schema) and
79342   ** one of the index names collides with the name of a temporary table or
79343   ** index, then we will continue to process this index.
79344   **
79345   ** If pName==0 it means that we are
79346   ** dealing with a primary key or UNIQUE constraint.  We have to invent our
79347   ** own name.
79348   */
79349   if( pName ){
79350     zName = sqlite3NameFromToken(db, pName);
79351     if( zName==0 ) goto exit_create_index;
79352     if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
79353       goto exit_create_index;
79354     }
79355     if( !db->init.busy ){
79356       if( sqlite3FindTable(db, zName, 0)!=0 ){
79357         sqlite3ErrorMsg(pParse, "there is already a table named %s", zName);
79358         goto exit_create_index;
79359       }
79360     }
79361     if( sqlite3FindIndex(db, zName, pDb->zName)!=0 ){
79362       if( !ifNotExist ){
79363         sqlite3ErrorMsg(pParse, "index %s already exists", zName);
79364       }else{
79365         assert( !db->init.busy );
79366         sqlite3CodeVerifySchema(pParse, iDb);
79367       }
79368       goto exit_create_index;
79369     }
79370   }else{
79371     int n;
79372     Index *pLoop;
79373     for(pLoop=pTab->pIndex, n=1; pLoop; pLoop=pLoop->pNext, n++){}
79374     zName = sqlite3MPrintf(db, "sqlite_autoindex_%s_%d", pTab->zName, n);
79375     if( zName==0 ){
79376       goto exit_create_index;
79377     }
79378   }
79379
79380   /* Check for authorization to create an index.
79381   */
79382 #ifndef SQLITE_OMIT_AUTHORIZATION
79383   {
79384     const char *zDb = pDb->zName;
79385     if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iDb), 0, zDb) ){
79386       goto exit_create_index;
79387     }
79388     i = SQLITE_CREATE_INDEX;
79389     if( !OMIT_TEMPDB && iDb==1 ) i = SQLITE_CREATE_TEMP_INDEX;
79390     if( sqlite3AuthCheck(pParse, i, zName, pTab->zName, zDb) ){
79391       goto exit_create_index;
79392     }
79393   }
79394 #endif
79395
79396   /* If pList==0, it means this routine was called to make a primary
79397   ** key out of the last column added to the table under construction.
79398   ** So create a fake list to simulate this.
79399   */
79400   if( pList==0 ){
79401     nullId.z = pTab->aCol[pTab->nCol-1].zName;
79402     nullId.n = sqlite3Strlen30((char*)nullId.z);
79403     pList = sqlite3ExprListAppend(pParse, 0, 0);
79404     if( pList==0 ) goto exit_create_index;
79405     sqlite3ExprListSetName(pParse, pList, &nullId, 0);
79406     pList->a[0].sortOrder = (u8)sortOrder;
79407   }
79408
79409   /* Figure out how many bytes of space are required to store explicitly
79410   ** specified collation sequence names.
79411   */
79412   for(i=0; i<pList->nExpr; i++){
79413     Expr *pExpr = pList->a[i].pExpr;
79414     if( pExpr ){
79415       CollSeq *pColl = pExpr->pColl;
79416       /* Either pColl!=0 or there was an OOM failure.  But if an OOM
79417       ** failure we have quit before reaching this point. */
79418       if( ALWAYS(pColl) ){
79419         nExtra += (1 + sqlite3Strlen30(pColl->zName));
79420       }
79421     }
79422   }
79423
79424   /* 
79425   ** Allocate the index structure. 
79426   */
79427   nName = sqlite3Strlen30(zName);
79428   nCol = pList->nExpr;
79429   pIndex = sqlite3DbMallocZero(db, 
79430       sizeof(Index) +              /* Index structure  */
79431       sizeof(int)*nCol +           /* Index.aiColumn   */
79432       sizeof(int)*(nCol+1) +       /* Index.aiRowEst   */
79433       sizeof(char *)*nCol +        /* Index.azColl     */
79434       sizeof(u8)*nCol +            /* Index.aSortOrder */
79435       nName + 1 +                  /* Index.zName      */
79436       nExtra                       /* Collation sequence names */
79437   );
79438   if( db->mallocFailed ){
79439     goto exit_create_index;
79440   }
79441   pIndex->azColl = (char**)(&pIndex[1]);
79442   pIndex->aiColumn = (int *)(&pIndex->azColl[nCol]);
79443   pIndex->aiRowEst = (unsigned *)(&pIndex->aiColumn[nCol]);
79444   pIndex->aSortOrder = (u8 *)(&pIndex->aiRowEst[nCol+1]);
79445   pIndex->zName = (char *)(&pIndex->aSortOrder[nCol]);
79446   zExtra = (char *)(&pIndex->zName[nName+1]);
79447   memcpy(pIndex->zName, zName, nName+1);
79448   pIndex->pTable = pTab;
79449   pIndex->nColumn = pList->nExpr;
79450   pIndex->onError = (u8)onError;
79451   pIndex->autoIndex = (u8)(pName==0);
79452   pIndex->pSchema = db->aDb[iDb].pSchema;
79453   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
79454
79455   /* Check to see if we should honor DESC requests on index columns
79456   */
79457   if( pDb->pSchema->file_format>=4 ){
79458     sortOrderMask = -1;   /* Honor DESC */
79459   }else{
79460     sortOrderMask = 0;    /* Ignore DESC */
79461   }
79462
79463   /* Scan the names of the columns of the table to be indexed and
79464   ** load the column indices into the Index structure.  Report an error
79465   ** if any column is not found.
79466   **
79467   ** TODO:  Add a test to make sure that the same column is not named
79468   ** more than once within the same index.  Only the first instance of
79469   ** the column will ever be used by the optimizer.  Note that using the
79470   ** same column more than once cannot be an error because that would 
79471   ** break backwards compatibility - it needs to be a warning.
79472   */
79473   for(i=0, pListItem=pList->a; i<pList->nExpr; i++, pListItem++){
79474     const char *zColName = pListItem->zName;
79475     Column *pTabCol;
79476     int requestedSortOrder;
79477     char *zColl;                   /* Collation sequence name */
79478
79479     for(j=0, pTabCol=pTab->aCol; j<pTab->nCol; j++, pTabCol++){
79480       if( sqlite3StrICmp(zColName, pTabCol->zName)==0 ) break;
79481     }
79482     if( j>=pTab->nCol ){
79483       sqlite3ErrorMsg(pParse, "table %s has no column named %s",
79484         pTab->zName, zColName);
79485       pParse->checkSchema = 1;
79486       goto exit_create_index;
79487     }
79488     pIndex->aiColumn[i] = j;
79489     /* Justification of the ALWAYS(pListItem->pExpr->pColl):  Because of
79490     ** the way the "idxlist" non-terminal is constructed by the parser,
79491     ** if pListItem->pExpr is not null then either pListItem->pExpr->pColl
79492     ** must exist or else there must have been an OOM error.  But if there
79493     ** was an OOM error, we would never reach this point. */
79494     if( pListItem->pExpr && ALWAYS(pListItem->pExpr->pColl) ){
79495       int nColl;
79496       zColl = pListItem->pExpr->pColl->zName;
79497       nColl = sqlite3Strlen30(zColl) + 1;
79498       assert( nExtra>=nColl );
79499       memcpy(zExtra, zColl, nColl);
79500       zColl = zExtra;
79501       zExtra += nColl;
79502       nExtra -= nColl;
79503     }else{
79504       zColl = pTab->aCol[j].zColl;
79505       if( !zColl ){
79506         zColl = db->pDfltColl->zName;
79507       }
79508     }
79509     if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl) ){
79510       goto exit_create_index;
79511     }
79512     pIndex->azColl[i] = zColl;
79513     requestedSortOrder = pListItem->sortOrder & sortOrderMask;
79514     pIndex->aSortOrder[i] = (u8)requestedSortOrder;
79515   }
79516   sqlite3DefaultRowEst(pIndex);
79517
79518   if( pTab==pParse->pNewTable ){
79519     /* This routine has been called to create an automatic index as a
79520     ** result of a PRIMARY KEY or UNIQUE clause on a column definition, or
79521     ** a PRIMARY KEY or UNIQUE clause following the column definitions.
79522     ** i.e. one of:
79523     **
79524     ** CREATE TABLE t(x PRIMARY KEY, y);
79525     ** CREATE TABLE t(x, y, UNIQUE(x, y));
79526     **
79527     ** Either way, check to see if the table already has such an index. If
79528     ** so, don't bother creating this one. This only applies to
79529     ** automatically created indices. Users can do as they wish with
79530     ** explicit indices.
79531     **
79532     ** Two UNIQUE or PRIMARY KEY constraints are considered equivalent
79533     ** (and thus suppressing the second one) even if they have different
79534     ** sort orders.
79535     **
79536     ** If there are different collating sequences or if the columns of
79537     ** the constraint occur in different orders, then the constraints are
79538     ** considered distinct and both result in separate indices.
79539     */
79540     Index *pIdx;
79541     for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
79542       int k;
79543       assert( pIdx->onError!=OE_None );
79544       assert( pIdx->autoIndex );
79545       assert( pIndex->onError!=OE_None );
79546
79547       if( pIdx->nColumn!=pIndex->nColumn ) continue;
79548       for(k=0; k<pIdx->nColumn; k++){
79549         const char *z1;
79550         const char *z2;
79551         if( pIdx->aiColumn[k]!=pIndex->aiColumn[k] ) break;
79552         z1 = pIdx->azColl[k];
79553         z2 = pIndex->azColl[k];
79554         if( z1!=z2 && sqlite3StrICmp(z1, z2) ) break;
79555       }
79556       if( k==pIdx->nColumn ){
79557         if( pIdx->onError!=pIndex->onError ){
79558           /* This constraint creates the same index as a previous
79559           ** constraint specified somewhere in the CREATE TABLE statement.
79560           ** However the ON CONFLICT clauses are different. If both this 
79561           ** constraint and the previous equivalent constraint have explicit
79562           ** ON CONFLICT clauses this is an error. Otherwise, use the
79563           ** explicitly specified behaviour for the index.
79564           */
79565           if( !(pIdx->onError==OE_Default || pIndex->onError==OE_Default) ){
79566             sqlite3ErrorMsg(pParse, 
79567                 "conflicting ON CONFLICT clauses specified", 0);
79568           }
79569           if( pIdx->onError==OE_Default ){
79570             pIdx->onError = pIndex->onError;
79571           }
79572         }
79573         goto exit_create_index;
79574       }
79575     }
79576   }
79577
79578   /* Link the new Index structure to its table and to the other
79579   ** in-memory database structures. 
79580   */
79581   if( db->init.busy ){
79582     Index *p;
79583     assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
79584     p = sqlite3HashInsert(&pIndex->pSchema->idxHash, 
79585                           pIndex->zName, sqlite3Strlen30(pIndex->zName),
79586                           pIndex);
79587     if( p ){
79588       assert( p==pIndex );  /* Malloc must have failed */
79589       db->mallocFailed = 1;
79590       goto exit_create_index;
79591     }
79592     db->flags |= SQLITE_InternChanges;
79593     if( pTblName!=0 ){
79594       pIndex->tnum = db->init.newTnum;
79595     }
79596   }
79597
79598   /* If the db->init.busy is 0 then create the index on disk.  This
79599   ** involves writing the index into the master table and filling in the
79600   ** index with the current table contents.
79601   **
79602   ** The db->init.busy is 0 when the user first enters a CREATE INDEX 
79603   ** command.  db->init.busy is 1 when a database is opened and 
79604   ** CREATE INDEX statements are read out of the master table.  In
79605   ** the latter case the index already exists on disk, which is why
79606   ** we don't want to recreate it.
79607   **
79608   ** If pTblName==0 it means this index is generated as a primary key
79609   ** or UNIQUE constraint of a CREATE TABLE statement.  Since the table
79610   ** has just been created, it contains no data and the index initialization
79611   ** step can be skipped.
79612   */
79613   else{ /* if( db->init.busy==0 ) */
79614     Vdbe *v;
79615     char *zStmt;
79616     int iMem = ++pParse->nMem;
79617
79618     v = sqlite3GetVdbe(pParse);
79619     if( v==0 ) goto exit_create_index;
79620
79621
79622     /* Create the rootpage for the index
79623     */
79624     sqlite3BeginWriteOperation(pParse, 1, iDb);
79625     sqlite3VdbeAddOp2(v, OP_CreateIndex, iDb, iMem);
79626
79627     /* Gather the complete text of the CREATE INDEX statement into
79628     ** the zStmt variable
79629     */
79630     if( pStart ){
79631       assert( pEnd!=0 );
79632       /* A named index with an explicit CREATE INDEX statement */
79633       zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s",
79634         onError==OE_None ? "" : " UNIQUE",
79635         pEnd->z - pName->z + 1,
79636         pName->z);
79637     }else{
79638       /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */
79639       /* zStmt = sqlite3MPrintf(""); */
79640       zStmt = 0;
79641     }
79642
79643     /* Add an entry in sqlite_master for this index
79644     */
79645     sqlite3NestedParse(pParse, 
79646         "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#%d,%Q);",
79647         db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
79648         pIndex->zName,
79649         pTab->zName,
79650         iMem,
79651         zStmt
79652     );
79653     sqlite3DbFree(db, zStmt);
79654
79655     /* Fill the index with data and reparse the schema. Code an OP_Expire
79656     ** to invalidate all pre-compiled statements.
79657     */
79658     if( pTblName ){
79659       sqlite3RefillIndex(pParse, pIndex, iMem);
79660       sqlite3ChangeCookie(pParse, iDb);
79661       sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 0, 0,
79662          sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName), 
79663          P4_DYNAMIC);
79664       sqlite3VdbeAddOp1(v, OP_Expire, 0);
79665     }
79666   }
79667
79668   /* When adding an index to the list of indices for a table, make
79669   ** sure all indices labeled OE_Replace come after all those labeled
79670   ** OE_Ignore.  This is necessary for the correct constraint check
79671   ** processing (in sqlite3GenerateConstraintChecks()) as part of
79672   ** UPDATE and INSERT statements.  
79673   */
79674   if( db->init.busy || pTblName==0 ){
79675     if( onError!=OE_Replace || pTab->pIndex==0
79676          || pTab->pIndex->onError==OE_Replace){
79677       pIndex->pNext = pTab->pIndex;
79678       pTab->pIndex = pIndex;
79679     }else{
79680       Index *pOther = pTab->pIndex;
79681       while( pOther->pNext && pOther->pNext->onError!=OE_Replace ){
79682         pOther = pOther->pNext;
79683       }
79684       pIndex->pNext = pOther->pNext;
79685       pOther->pNext = pIndex;
79686     }
79687     pRet = pIndex;
79688     pIndex = 0;
79689   }
79690
79691   /* Clean up before exiting */
79692 exit_create_index:
79693   if( pIndex ){
79694     sqlite3DbFree(db, pIndex->zColAff);
79695     sqlite3DbFree(db, pIndex);
79696   }
79697   sqlite3ExprListDelete(db, pList);
79698   sqlite3SrcListDelete(db, pTblName);
79699   sqlite3DbFree(db, zName);
79700   return pRet;
79701 }
79702
79703 /*
79704 ** Fill the Index.aiRowEst[] array with default information - information
79705 ** to be used when we have not run the ANALYZE command.
79706 **
79707 ** aiRowEst[0] is suppose to contain the number of elements in the index.
79708 ** Since we do not know, guess 1 million.  aiRowEst[1] is an estimate of the
79709 ** number of rows in the table that match any particular value of the
79710 ** first column of the index.  aiRowEst[2] is an estimate of the number
79711 ** of rows that match any particular combiniation of the first 2 columns
79712 ** of the index.  And so forth.  It must always be the case that
79713 *
79714 **           aiRowEst[N]<=aiRowEst[N-1]
79715 **           aiRowEst[N]>=1
79716 **
79717 ** Apart from that, we have little to go on besides intuition as to
79718 ** how aiRowEst[] should be initialized.  The numbers generated here
79719 ** are based on typical values found in actual indices.
79720 */
79721 SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){
79722   unsigned *a = pIdx->aiRowEst;
79723   int i;
79724   unsigned n;
79725   assert( a!=0 );
79726   a[0] = pIdx->pTable->nRowEst;
79727   if( a[0]<10 ) a[0] = 10;
79728   n = 10;
79729   for(i=1; i<=pIdx->nColumn; i++){
79730     a[i] = n;
79731     if( n>5 ) n--;
79732   }
79733   if( pIdx->onError!=OE_None ){
79734     a[pIdx->nColumn] = 1;
79735   }
79736 }
79737
79738 /*
79739 ** This routine will drop an existing named index.  This routine
79740 ** implements the DROP INDEX statement.
79741 */
79742 SQLITE_PRIVATE void sqlite3DropIndex(Parse *pParse, SrcList *pName, int ifExists){
79743   Index *pIndex;
79744   Vdbe *v;
79745   sqlite3 *db = pParse->db;
79746   int iDb;
79747
79748   assert( pParse->nErr==0 );   /* Never called with prior errors */
79749   if( db->mallocFailed ){
79750     goto exit_drop_index;
79751   }
79752   assert( pName->nSrc==1 );
79753   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
79754     goto exit_drop_index;
79755   }
79756   pIndex = sqlite3FindIndex(db, pName->a[0].zName, pName->a[0].zDatabase);
79757   if( pIndex==0 ){
79758     if( !ifExists ){
79759       sqlite3ErrorMsg(pParse, "no such index: %S", pName, 0);
79760     }else{
79761       sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase);
79762     }
79763     pParse->checkSchema = 1;
79764     goto exit_drop_index;
79765   }
79766   if( pIndex->autoIndex ){
79767     sqlite3ErrorMsg(pParse, "index associated with UNIQUE "
79768       "or PRIMARY KEY constraint cannot be dropped", 0);
79769     goto exit_drop_index;
79770   }
79771   iDb = sqlite3SchemaToIndex(db, pIndex->pSchema);
79772 #ifndef SQLITE_OMIT_AUTHORIZATION
79773   {
79774     int code = SQLITE_DROP_INDEX;
79775     Table *pTab = pIndex->pTable;
79776     const char *zDb = db->aDb[iDb].zName;
79777     const char *zTab = SCHEMA_TABLE(iDb);
79778     if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
79779       goto exit_drop_index;
79780     }
79781     if( !OMIT_TEMPDB && iDb ) code = SQLITE_DROP_TEMP_INDEX;
79782     if( sqlite3AuthCheck(pParse, code, pIndex->zName, pTab->zName, zDb) ){
79783       goto exit_drop_index;
79784     }
79785   }
79786 #endif
79787
79788   /* Generate code to remove the index and from the master table */
79789   v = sqlite3GetVdbe(pParse);
79790   if( v ){
79791     sqlite3BeginWriteOperation(pParse, 1, iDb);
79792     sqlite3NestedParse(pParse,
79793        "DELETE FROM %Q.%s WHERE name=%Q AND type='index'",
79794        db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
79795        pIndex->zName
79796     );
79797     if( sqlite3FindTable(db, "sqlite_stat1", db->aDb[iDb].zName) ){
79798       sqlite3NestedParse(pParse,
79799         "DELETE FROM %Q.sqlite_stat1 WHERE idx=%Q",
79800         db->aDb[iDb].zName, pIndex->zName
79801       );
79802     }
79803     sqlite3ChangeCookie(pParse, iDb);
79804     destroyRootPage(pParse, pIndex->tnum, iDb);
79805     sqlite3VdbeAddOp4(v, OP_DropIndex, iDb, 0, 0, pIndex->zName, 0);
79806   }
79807
79808 exit_drop_index:
79809   sqlite3SrcListDelete(db, pName);
79810 }
79811
79812 /*
79813 ** pArray is a pointer to an array of objects.  Each object in the
79814 ** array is szEntry bytes in size.  This routine allocates a new
79815 ** object on the end of the array.
79816 **
79817 ** *pnEntry is the number of entries already in use.  *pnAlloc is
79818 ** the previously allocated size of the array.  initSize is the
79819 ** suggested initial array size allocation.
79820 **
79821 ** The index of the new entry is returned in *pIdx.
79822 **
79823 ** This routine returns a pointer to the array of objects.  This
79824 ** might be the same as the pArray parameter or it might be a different
79825 ** pointer if the array was resized.
79826 */
79827 SQLITE_PRIVATE void *sqlite3ArrayAllocate(
79828   sqlite3 *db,      /* Connection to notify of malloc failures */
79829   void *pArray,     /* Array of objects.  Might be reallocated */
79830   int szEntry,      /* Size of each object in the array */
79831   int initSize,     /* Suggested initial allocation, in elements */
79832   int *pnEntry,     /* Number of objects currently in use */
79833   int *pnAlloc,     /* Current size of the allocation, in elements */
79834   int *pIdx         /* Write the index of a new slot here */
79835 ){
79836   char *z;
79837   if( *pnEntry >= *pnAlloc ){
79838     void *pNew;
79839     int newSize;
79840     newSize = (*pnAlloc)*2 + initSize;
79841     pNew = sqlite3DbRealloc(db, pArray, newSize*szEntry);
79842     if( pNew==0 ){
79843       *pIdx = -1;
79844       return pArray;
79845     }
79846     *pnAlloc = sqlite3DbMallocSize(db, pNew)/szEntry;
79847     pArray = pNew;
79848   }
79849   z = (char*)pArray;
79850   memset(&z[*pnEntry * szEntry], 0, szEntry);
79851   *pIdx = *pnEntry;
79852   ++*pnEntry;
79853   return pArray;
79854 }
79855
79856 /*
79857 ** Append a new element to the given IdList.  Create a new IdList if
79858 ** need be.
79859 **
79860 ** A new IdList is returned, or NULL if malloc() fails.
79861 */
79862 SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3 *db, IdList *pList, Token *pToken){
79863   int i;
79864   if( pList==0 ){
79865     pList = sqlite3DbMallocZero(db, sizeof(IdList) );
79866     if( pList==0 ) return 0;
79867     pList->nAlloc = 0;
79868   }
79869   pList->a = sqlite3ArrayAllocate(
79870       db,
79871       pList->a,
79872       sizeof(pList->a[0]),
79873       5,
79874       &pList->nId,
79875       &pList->nAlloc,
79876       &i
79877   );
79878   if( i<0 ){
79879     sqlite3IdListDelete(db, pList);
79880     return 0;
79881   }
79882   pList->a[i].zName = sqlite3NameFromToken(db, pToken);
79883   return pList;
79884 }
79885
79886 /*
79887 ** Delete an IdList.
79888 */
79889 SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){
79890   int i;
79891   if( pList==0 ) return;
79892   for(i=0; i<pList->nId; i++){
79893     sqlite3DbFree(db, pList->a[i].zName);
79894   }
79895   sqlite3DbFree(db, pList->a);
79896   sqlite3DbFree(db, pList);
79897 }
79898
79899 /*
79900 ** Return the index in pList of the identifier named zId.  Return -1
79901 ** if not found.
79902 */
79903 SQLITE_PRIVATE int sqlite3IdListIndex(IdList *pList, const char *zName){
79904   int i;
79905   if( pList==0 ) return -1;
79906   for(i=0; i<pList->nId; i++){
79907     if( sqlite3StrICmp(pList->a[i].zName, zName)==0 ) return i;
79908   }
79909   return -1;
79910 }
79911
79912 /*
79913 ** Expand the space allocated for the given SrcList object by
79914 ** creating nExtra new slots beginning at iStart.  iStart is zero based.
79915 ** New slots are zeroed.
79916 **
79917 ** For example, suppose a SrcList initially contains two entries: A,B.
79918 ** To append 3 new entries onto the end, do this:
79919 **
79920 **    sqlite3SrcListEnlarge(db, pSrclist, 3, 2);
79921 **
79922 ** After the call above it would contain:  A, B, nil, nil, nil.
79923 ** If the iStart argument had been 1 instead of 2, then the result
79924 ** would have been:  A, nil, nil, nil, B.  To prepend the new slots,
79925 ** the iStart value would be 0.  The result then would
79926 ** be: nil, nil, nil, A, B.
79927 **
79928 ** If a memory allocation fails the SrcList is unchanged.  The
79929 ** db->mallocFailed flag will be set to true.
79930 */
79931 SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(
79932   sqlite3 *db,       /* Database connection to notify of OOM errors */
79933   SrcList *pSrc,     /* The SrcList to be enlarged */
79934   int nExtra,        /* Number of new slots to add to pSrc->a[] */
79935   int iStart         /* Index in pSrc->a[] of first new slot */
79936 ){
79937   int i;
79938
79939   /* Sanity checking on calling parameters */
79940   assert( iStart>=0 );
79941   assert( nExtra>=1 );
79942   assert( pSrc!=0 );
79943   assert( iStart<=pSrc->nSrc );
79944
79945   /* Allocate additional space if needed */
79946   if( pSrc->nSrc+nExtra>pSrc->nAlloc ){
79947     SrcList *pNew;
79948     int nAlloc = pSrc->nSrc+nExtra;
79949     int nGot;
79950     pNew = sqlite3DbRealloc(db, pSrc,
79951                sizeof(*pSrc) + (nAlloc-1)*sizeof(pSrc->a[0]) );
79952     if( pNew==0 ){
79953       assert( db->mallocFailed );
79954       return pSrc;
79955     }
79956     pSrc = pNew;
79957     nGot = (sqlite3DbMallocSize(db, pNew) - sizeof(*pSrc))/sizeof(pSrc->a[0])+1;
79958     pSrc->nAlloc = (u16)nGot;
79959   }
79960
79961   /* Move existing slots that come after the newly inserted slots
79962   ** out of the way */
79963   for(i=pSrc->nSrc-1; i>=iStart; i--){
79964     pSrc->a[i+nExtra] = pSrc->a[i];
79965   }
79966   pSrc->nSrc += (i16)nExtra;
79967
79968   /* Zero the newly allocated slots */
79969   memset(&pSrc->a[iStart], 0, sizeof(pSrc->a[0])*nExtra);
79970   for(i=iStart; i<iStart+nExtra; i++){
79971     pSrc->a[i].iCursor = -1;
79972   }
79973
79974   /* Return a pointer to the enlarged SrcList */
79975   return pSrc;
79976 }
79977
79978
79979 /*
79980 ** Append a new table name to the given SrcList.  Create a new SrcList if
79981 ** need be.  A new entry is created in the SrcList even if pTable is NULL.
79982 **
79983 ** A SrcList is returned, or NULL if there is an OOM error.  The returned
79984 ** SrcList might be the same as the SrcList that was input or it might be
79985 ** a new one.  If an OOM error does occurs, then the prior value of pList
79986 ** that is input to this routine is automatically freed.
79987 **
79988 ** If pDatabase is not null, it means that the table has an optional
79989 ** database name prefix.  Like this:  "database.table".  The pDatabase
79990 ** points to the table name and the pTable points to the database name.
79991 ** The SrcList.a[].zName field is filled with the table name which might
79992 ** come from pTable (if pDatabase is NULL) or from pDatabase.  
79993 ** SrcList.a[].zDatabase is filled with the database name from pTable,
79994 ** or with NULL if no database is specified.
79995 **
79996 ** In other words, if call like this:
79997 **
79998 **         sqlite3SrcListAppend(D,A,B,0);
79999 **
80000 ** Then B is a table name and the database name is unspecified.  If called
80001 ** like this:
80002 **
80003 **         sqlite3SrcListAppend(D,A,B,C);
80004 **
80005 ** Then C is the table name and B is the database name.  If C is defined
80006 ** then so is B.  In other words, we never have a case where:
80007 **
80008 **         sqlite3SrcListAppend(D,A,0,C);
80009 **
80010 ** Both pTable and pDatabase are assumed to be quoted.  They are dequoted
80011 ** before being added to the SrcList.
80012 */
80013 SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(
80014   sqlite3 *db,        /* Connection to notify of malloc failures */
80015   SrcList *pList,     /* Append to this SrcList. NULL creates a new SrcList */
80016   Token *pTable,      /* Table to append */
80017   Token *pDatabase    /* Database of the table */
80018 ){
80019   struct SrcList_item *pItem;
80020   assert( pDatabase==0 || pTable!=0 );  /* Cannot have C without B */
80021   if( pList==0 ){
80022     pList = sqlite3DbMallocZero(db, sizeof(SrcList) );
80023     if( pList==0 ) return 0;
80024     pList->nAlloc = 1;
80025   }
80026   pList = sqlite3SrcListEnlarge(db, pList, 1, pList->nSrc);
80027   if( db->mallocFailed ){
80028     sqlite3SrcListDelete(db, pList);
80029     return 0;
80030   }
80031   pItem = &pList->a[pList->nSrc-1];
80032   if( pDatabase && pDatabase->z==0 ){
80033     pDatabase = 0;
80034   }
80035   if( pDatabase ){
80036     Token *pTemp = pDatabase;
80037     pDatabase = pTable;
80038     pTable = pTemp;
80039   }
80040   pItem->zName = sqlite3NameFromToken(db, pTable);
80041   pItem->zDatabase = sqlite3NameFromToken(db, pDatabase);
80042   return pList;
80043 }
80044
80045 /*
80046 ** Assign VdbeCursor index numbers to all tables in a SrcList
80047 */
80048 SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *pList){
80049   int i;
80050   struct SrcList_item *pItem;
80051   assert(pList || pParse->db->mallocFailed );
80052   if( pList ){
80053     for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
80054       if( pItem->iCursor>=0 ) break;
80055       pItem->iCursor = pParse->nTab++;
80056       if( pItem->pSelect ){
80057         sqlite3SrcListAssignCursors(pParse, pItem->pSelect->pSrc);
80058       }
80059     }
80060   }
80061 }
80062
80063 /*
80064 ** Delete an entire SrcList including all its substructure.
80065 */
80066 SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
80067   int i;
80068   struct SrcList_item *pItem;
80069   if( pList==0 ) return;
80070   for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){
80071     sqlite3DbFree(db, pItem->zDatabase);
80072     sqlite3DbFree(db, pItem->zName);
80073     sqlite3DbFree(db, pItem->zAlias);
80074     sqlite3DbFree(db, pItem->zIndex);
80075     sqlite3DeleteTable(db, pItem->pTab);
80076     sqlite3SelectDelete(db, pItem->pSelect);
80077     sqlite3ExprDelete(db, pItem->pOn);
80078     sqlite3IdListDelete(db, pItem->pUsing);
80079   }
80080   sqlite3DbFree(db, pList);
80081 }
80082
80083 /*
80084 ** This routine is called by the parser to add a new term to the
80085 ** end of a growing FROM clause.  The "p" parameter is the part of
80086 ** the FROM clause that has already been constructed.  "p" is NULL
80087 ** if this is the first term of the FROM clause.  pTable and pDatabase
80088 ** are the name of the table and database named in the FROM clause term.
80089 ** pDatabase is NULL if the database name qualifier is missing - the
80090 ** usual case.  If the term has a alias, then pAlias points to the
80091 ** alias token.  If the term is a subquery, then pSubquery is the
80092 ** SELECT statement that the subquery encodes.  The pTable and
80093 ** pDatabase parameters are NULL for subqueries.  The pOn and pUsing
80094 ** parameters are the content of the ON and USING clauses.
80095 **
80096 ** Return a new SrcList which encodes is the FROM with the new
80097 ** term added.
80098 */
80099 SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(
80100   Parse *pParse,          /* Parsing context */
80101   SrcList *p,             /* The left part of the FROM clause already seen */
80102   Token *pTable,          /* Name of the table to add to the FROM clause */
80103   Token *pDatabase,       /* Name of the database containing pTable */
80104   Token *pAlias,          /* The right-hand side of the AS subexpression */
80105   Select *pSubquery,      /* A subquery used in place of a table name */
80106   Expr *pOn,              /* The ON clause of a join */
80107   IdList *pUsing          /* The USING clause of a join */
80108 ){
80109   struct SrcList_item *pItem;
80110   sqlite3 *db = pParse->db;
80111   if( !p && (pOn || pUsing) ){
80112     sqlite3ErrorMsg(pParse, "a JOIN clause is required before %s", 
80113       (pOn ? "ON" : "USING")
80114     );
80115     goto append_from_error;
80116   }
80117   p = sqlite3SrcListAppend(db, p, pTable, pDatabase);
80118   if( p==0 || NEVER(p->nSrc==0) ){
80119     goto append_from_error;
80120   }
80121   pItem = &p->a[p->nSrc-1];
80122   assert( pAlias!=0 );
80123   if( pAlias->n ){
80124     pItem->zAlias = sqlite3NameFromToken(db, pAlias);
80125   }
80126   pItem->pSelect = pSubquery;
80127   pItem->pOn = pOn;
80128   pItem->pUsing = pUsing;
80129   return p;
80130
80131  append_from_error:
80132   assert( p==0 );
80133   sqlite3ExprDelete(db, pOn);
80134   sqlite3IdListDelete(db, pUsing);
80135   sqlite3SelectDelete(db, pSubquery);
80136   return 0;
80137 }
80138
80139 /*
80140 ** Add an INDEXED BY or NOT INDEXED clause to the most recently added 
80141 ** element of the source-list passed as the second argument.
80142 */
80143 SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){
80144   assert( pIndexedBy!=0 );
80145   if( p && ALWAYS(p->nSrc>0) ){
80146     struct SrcList_item *pItem = &p->a[p->nSrc-1];
80147     assert( pItem->notIndexed==0 && pItem->zIndex==0 );
80148     if( pIndexedBy->n==1 && !pIndexedBy->z ){
80149       /* A "NOT INDEXED" clause was supplied. See parse.y 
80150       ** construct "indexed_opt" for details. */
80151       pItem->notIndexed = 1;
80152     }else{
80153       pItem->zIndex = sqlite3NameFromToken(pParse->db, pIndexedBy);
80154     }
80155   }
80156 }
80157
80158 /*
80159 ** When building up a FROM clause in the parser, the join operator
80160 ** is initially attached to the left operand.  But the code generator
80161 ** expects the join operator to be on the right operand.  This routine
80162 ** Shifts all join operators from left to right for an entire FROM
80163 ** clause.
80164 **
80165 ** Example: Suppose the join is like this:
80166 **
80167 **           A natural cross join B
80168 **
80169 ** The operator is "natural cross join".  The A and B operands are stored
80170 ** in p->a[0] and p->a[1], respectively.  The parser initially stores the
80171 ** operator with A.  This routine shifts that operator over to B.
80172 */
80173 SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList *p){
80174   if( p && p->a ){
80175     int i;
80176     for(i=p->nSrc-1; i>0; i--){
80177       p->a[i].jointype = p->a[i-1].jointype;
80178     }
80179     p->a[0].jointype = 0;
80180   }
80181 }
80182
80183 /*
80184 ** Begin a transaction
80185 */
80186 SQLITE_PRIVATE void sqlite3BeginTransaction(Parse *pParse, int type){
80187   sqlite3 *db;
80188   Vdbe *v;
80189   int i;
80190
80191   assert( pParse!=0 );
80192   db = pParse->db;
80193   assert( db!=0 );
80194 /*  if( db->aDb[0].pBt==0 ) return; */
80195   if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "BEGIN", 0, 0) ){
80196     return;
80197   }
80198   v = sqlite3GetVdbe(pParse);
80199   if( !v ) return;
80200   if( type!=TK_DEFERRED ){
80201     for(i=0; i<db->nDb; i++){
80202       sqlite3VdbeAddOp2(v, OP_Transaction, i, (type==TK_EXCLUSIVE)+1);
80203       sqlite3VdbeUsesBtree(v, i);
80204     }
80205   }
80206   sqlite3VdbeAddOp2(v, OP_AutoCommit, 0, 0);
80207 }
80208
80209 /*
80210 ** Commit a transaction
80211 */
80212 SQLITE_PRIVATE void sqlite3CommitTransaction(Parse *pParse){
80213   sqlite3 *db;
80214   Vdbe *v;
80215
80216   assert( pParse!=0 );
80217   db = pParse->db;
80218   assert( db!=0 );
80219 /*  if( db->aDb[0].pBt==0 ) return; */
80220   if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "COMMIT", 0, 0) ){
80221     return;
80222   }
80223   v = sqlite3GetVdbe(pParse);
80224   if( v ){
80225     sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 0);
80226   }
80227 }
80228
80229 /*
80230 ** Rollback a transaction
80231 */
80232 SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse *pParse){
80233   sqlite3 *db;
80234   Vdbe *v;
80235
80236   assert( pParse!=0 );
80237   db = pParse->db;
80238   assert( db!=0 );
80239 /*  if( db->aDb[0].pBt==0 ) return; */
80240   if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "ROLLBACK", 0, 0) ){
80241     return;
80242   }
80243   v = sqlite3GetVdbe(pParse);
80244   if( v ){
80245     sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 1);
80246   }
80247 }
80248
80249 /*
80250 ** This function is called by the parser when it parses a command to create,
80251 ** release or rollback an SQL savepoint. 
80252 */
80253 SQLITE_PRIVATE void sqlite3Savepoint(Parse *pParse, int op, Token *pName){
80254   char *zName = sqlite3NameFromToken(pParse->db, pName);
80255   if( zName ){
80256     Vdbe *v = sqlite3GetVdbe(pParse);
80257 #ifndef SQLITE_OMIT_AUTHORIZATION
80258     static const char * const az[] = { "BEGIN", "RELEASE", "ROLLBACK" };
80259     assert( !SAVEPOINT_BEGIN && SAVEPOINT_RELEASE==1 && SAVEPOINT_ROLLBACK==2 );
80260 #endif
80261     if( !v || sqlite3AuthCheck(pParse, SQLITE_SAVEPOINT, az[op], zName, 0) ){
80262       sqlite3DbFree(pParse->db, zName);
80263       return;
80264     }
80265     sqlite3VdbeAddOp4(v, OP_Savepoint, op, 0, 0, zName, P4_DYNAMIC);
80266   }
80267 }
80268
80269 /*
80270 ** Make sure the TEMP database is open and available for use.  Return
80271 ** the number of errors.  Leave any error messages in the pParse structure.
80272 */
80273 SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *pParse){
80274   sqlite3 *db = pParse->db;
80275   if( db->aDb[1].pBt==0 && !pParse->explain ){
80276     int rc;
80277     Btree *pBt;
80278     static const int flags = 
80279           SQLITE_OPEN_READWRITE |
80280           SQLITE_OPEN_CREATE |
80281           SQLITE_OPEN_EXCLUSIVE |
80282           SQLITE_OPEN_DELETEONCLOSE |
80283           SQLITE_OPEN_TEMP_DB;
80284
80285     rc = sqlite3BtreeOpen(0, db, &pBt, 0, flags);
80286     if( rc!=SQLITE_OK ){
80287       sqlite3ErrorMsg(pParse, "unable to open a temporary database "
80288         "file for storing temporary tables");
80289       pParse->rc = rc;
80290       return 1;
80291     }
80292     db->aDb[1].pBt = pBt;
80293     assert( db->aDb[1].pSchema );
80294     if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize, -1, 0) ){
80295       db->mallocFailed = 1;
80296       return 1;
80297     }
80298   }
80299   return 0;
80300 }
80301
80302 /*
80303 ** Generate VDBE code that will verify the schema cookie and start
80304 ** a read-transaction for all named database files.
80305 **
80306 ** It is important that all schema cookies be verified and all
80307 ** read transactions be started before anything else happens in
80308 ** the VDBE program.  But this routine can be called after much other
80309 ** code has been generated.  So here is what we do:
80310 **
80311 ** The first time this routine is called, we code an OP_Goto that
80312 ** will jump to a subroutine at the end of the program.  Then we
80313 ** record every database that needs its schema verified in the
80314 ** pParse->cookieMask field.  Later, after all other code has been
80315 ** generated, the subroutine that does the cookie verifications and
80316 ** starts the transactions will be coded and the OP_Goto P2 value
80317 ** will be made to point to that subroutine.  The generation of the
80318 ** cookie verification subroutine code happens in sqlite3FinishCoding().
80319 **
80320 ** If iDb<0 then code the OP_Goto only - don't set flag to verify the
80321 ** schema on any databases.  This can be used to position the OP_Goto
80322 ** early in the code, before we know if any database tables will be used.
80323 */
80324 SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse *pParse, int iDb){
80325   Parse *pToplevel = sqlite3ParseToplevel(pParse);
80326
80327   if( pToplevel->cookieGoto==0 ){
80328     Vdbe *v = sqlite3GetVdbe(pToplevel);
80329     if( v==0 ) return;  /* This only happens if there was a prior error */
80330     pToplevel->cookieGoto = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0)+1;
80331   }
80332   if( iDb>=0 ){
80333     sqlite3 *db = pToplevel->db;
80334     yDbMask mask;
80335
80336     assert( iDb<db->nDb );
80337     assert( db->aDb[iDb].pBt!=0 || iDb==1 );
80338     assert( iDb<SQLITE_MAX_ATTACHED+2 );
80339     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
80340     mask = ((yDbMask)1)<<iDb;
80341     if( (pToplevel->cookieMask & mask)==0 ){
80342       pToplevel->cookieMask |= mask;
80343       pToplevel->cookieValue[iDb] = db->aDb[iDb].pSchema->schema_cookie;
80344       if( !OMIT_TEMPDB && iDb==1 ){
80345         sqlite3OpenTempDatabase(pToplevel);
80346       }
80347     }
80348   }
80349 }
80350
80351 /*
80352 ** If argument zDb is NULL, then call sqlite3CodeVerifySchema() for each 
80353 ** attached database. Otherwise, invoke it for the database named zDb only.
80354 */
80355 SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse *pParse, const char *zDb){
80356   sqlite3 *db = pParse->db;
80357   int i;
80358   for(i=0; i<db->nDb; i++){
80359     Db *pDb = &db->aDb[i];
80360     if( pDb->pBt && (!zDb || 0==sqlite3StrICmp(zDb, pDb->zName)) ){
80361       sqlite3CodeVerifySchema(pParse, i);
80362     }
80363   }
80364 }
80365
80366 /*
80367 ** Generate VDBE code that prepares for doing an operation that
80368 ** might change the database.
80369 **
80370 ** This routine starts a new transaction if we are not already within
80371 ** a transaction.  If we are already within a transaction, then a checkpoint
80372 ** is set if the setStatement parameter is true.  A checkpoint should
80373 ** be set for operations that might fail (due to a constraint) part of
80374 ** the way through and which will need to undo some writes without having to
80375 ** rollback the whole transaction.  For operations where all constraints
80376 ** can be checked before any changes are made to the database, it is never
80377 ** necessary to undo a write and the checkpoint should not be set.
80378 */
80379 SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse *pParse, int setStatement, int iDb){
80380   Parse *pToplevel = sqlite3ParseToplevel(pParse);
80381   sqlite3CodeVerifySchema(pParse, iDb);
80382   pToplevel->writeMask |= ((yDbMask)1)<<iDb;
80383   pToplevel->isMultiWrite |= setStatement;
80384 }
80385
80386 /*
80387 ** Indicate that the statement currently under construction might write
80388 ** more than one entry (example: deleting one row then inserting another,
80389 ** inserting multiple rows in a table, or inserting a row and index entries.)
80390 ** If an abort occurs after some of these writes have completed, then it will
80391 ** be necessary to undo the completed writes.
80392 */
80393 SQLITE_PRIVATE void sqlite3MultiWrite(Parse *pParse){
80394   Parse *pToplevel = sqlite3ParseToplevel(pParse);
80395   pToplevel->isMultiWrite = 1;
80396 }
80397
80398 /* 
80399 ** The code generator calls this routine if is discovers that it is
80400 ** possible to abort a statement prior to completion.  In order to 
80401 ** perform this abort without corrupting the database, we need to make
80402 ** sure that the statement is protected by a statement transaction.
80403 **
80404 ** Technically, we only need to set the mayAbort flag if the
80405 ** isMultiWrite flag was previously set.  There is a time dependency
80406 ** such that the abort must occur after the multiwrite.  This makes
80407 ** some statements involving the REPLACE conflict resolution algorithm
80408 ** go a little faster.  But taking advantage of this time dependency
80409 ** makes it more difficult to prove that the code is correct (in 
80410 ** particular, it prevents us from writing an effective
80411 ** implementation of sqlite3AssertMayAbort()) and so we have chosen
80412 ** to take the safe route and skip the optimization.
80413 */
80414 SQLITE_PRIVATE void sqlite3MayAbort(Parse *pParse){
80415   Parse *pToplevel = sqlite3ParseToplevel(pParse);
80416   pToplevel->mayAbort = 1;
80417 }
80418
80419 /*
80420 ** Code an OP_Halt that causes the vdbe to return an SQLITE_CONSTRAINT
80421 ** error. The onError parameter determines which (if any) of the statement
80422 ** and/or current transaction is rolled back.
80423 */
80424 SQLITE_PRIVATE void sqlite3HaltConstraint(Parse *pParse, int onError, char *p4, int p4type){
80425   Vdbe *v = sqlite3GetVdbe(pParse);
80426   if( onError==OE_Abort ){
80427     sqlite3MayAbort(pParse);
80428   }
80429   sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_CONSTRAINT, onError, 0, p4, p4type);
80430 }
80431
80432 /*
80433 ** Check to see if pIndex uses the collating sequence pColl.  Return
80434 ** true if it does and false if it does not.
80435 */
80436 #ifndef SQLITE_OMIT_REINDEX
80437 static int collationMatch(const char *zColl, Index *pIndex){
80438   int i;
80439   assert( zColl!=0 );
80440   for(i=0; i<pIndex->nColumn; i++){
80441     const char *z = pIndex->azColl[i];
80442     assert( z!=0 );
80443     if( 0==sqlite3StrICmp(z, zColl) ){
80444       return 1;
80445     }
80446   }
80447   return 0;
80448 }
80449 #endif
80450
80451 /*
80452 ** Recompute all indices of pTab that use the collating sequence pColl.
80453 ** If pColl==0 then recompute all indices of pTab.
80454 */
80455 #ifndef SQLITE_OMIT_REINDEX
80456 static void reindexTable(Parse *pParse, Table *pTab, char const *zColl){
80457   Index *pIndex;              /* An index associated with pTab */
80458
80459   for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){
80460     if( zColl==0 || collationMatch(zColl, pIndex) ){
80461       int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
80462       sqlite3BeginWriteOperation(pParse, 0, iDb);
80463       sqlite3RefillIndex(pParse, pIndex, -1);
80464     }
80465   }
80466 }
80467 #endif
80468
80469 /*
80470 ** Recompute all indices of all tables in all databases where the
80471 ** indices use the collating sequence pColl.  If pColl==0 then recompute
80472 ** all indices everywhere.
80473 */
80474 #ifndef SQLITE_OMIT_REINDEX
80475 static void reindexDatabases(Parse *pParse, char const *zColl){
80476   Db *pDb;                    /* A single database */
80477   int iDb;                    /* The database index number */
80478   sqlite3 *db = pParse->db;   /* The database connection */
80479   HashElem *k;                /* For looping over tables in pDb */
80480   Table *pTab;                /* A table in the database */
80481
80482   assert( sqlite3BtreeHoldsAllMutexes(db) );  /* Needed for schema access */
80483   for(iDb=0, pDb=db->aDb; iDb<db->nDb; iDb++, pDb++){
80484     assert( pDb!=0 );
80485     for(k=sqliteHashFirst(&pDb->pSchema->tblHash);  k; k=sqliteHashNext(k)){
80486       pTab = (Table*)sqliteHashData(k);
80487       reindexTable(pParse, pTab, zColl);
80488     }
80489   }
80490 }
80491 #endif
80492
80493 /*
80494 ** Generate code for the REINDEX command.
80495 **
80496 **        REINDEX                            -- 1
80497 **        REINDEX  <collation>               -- 2
80498 **        REINDEX  ?<database>.?<tablename>  -- 3
80499 **        REINDEX  ?<database>.?<indexname>  -- 4
80500 **
80501 ** Form 1 causes all indices in all attached databases to be rebuilt.
80502 ** Form 2 rebuilds all indices in all databases that use the named
80503 ** collating function.  Forms 3 and 4 rebuild the named index or all
80504 ** indices associated with the named table.
80505 */
80506 #ifndef SQLITE_OMIT_REINDEX
80507 SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){
80508   CollSeq *pColl;             /* Collating sequence to be reindexed, or NULL */
80509   char *z;                    /* Name of a table or index */
80510   const char *zDb;            /* Name of the database */
80511   Table *pTab;                /* A table in the database */
80512   Index *pIndex;              /* An index associated with pTab */
80513   int iDb;                    /* The database index number */
80514   sqlite3 *db = pParse->db;   /* The database connection */
80515   Token *pObjName;            /* Name of the table or index to be reindexed */
80516
80517   /* Read the database schema. If an error occurs, leave an error message
80518   ** and code in pParse and return NULL. */
80519   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
80520     return;
80521   }
80522
80523   if( pName1==0 ){
80524     reindexDatabases(pParse, 0);
80525     return;
80526   }else if( NEVER(pName2==0) || pName2->z==0 ){
80527     char *zColl;
80528     assert( pName1->z );
80529     zColl = sqlite3NameFromToken(pParse->db, pName1);
80530     if( !zColl ) return;
80531     pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0);
80532     if( pColl ){
80533       reindexDatabases(pParse, zColl);
80534       sqlite3DbFree(db, zColl);
80535       return;
80536     }
80537     sqlite3DbFree(db, zColl);
80538   }
80539   iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pObjName);
80540   if( iDb<0 ) return;
80541   z = sqlite3NameFromToken(db, pObjName);
80542   if( z==0 ) return;
80543   zDb = db->aDb[iDb].zName;
80544   pTab = sqlite3FindTable(db, z, zDb);
80545   if( pTab ){
80546     reindexTable(pParse, pTab, 0);
80547     sqlite3DbFree(db, z);
80548     return;
80549   }
80550   pIndex = sqlite3FindIndex(db, z, zDb);
80551   sqlite3DbFree(db, z);
80552   if( pIndex ){
80553     sqlite3BeginWriteOperation(pParse, 0, iDb);
80554     sqlite3RefillIndex(pParse, pIndex, -1);
80555     return;
80556   }
80557   sqlite3ErrorMsg(pParse, "unable to identify the object to be reindexed");
80558 }
80559 #endif
80560
80561 /*
80562 ** Return a dynamicly allocated KeyInfo structure that can be used
80563 ** with OP_OpenRead or OP_OpenWrite to access database index pIdx.
80564 **
80565 ** If successful, a pointer to the new structure is returned. In this case
80566 ** the caller is responsible for calling sqlite3DbFree(db, ) on the returned 
80567 ** pointer. If an error occurs (out of memory or missing collation 
80568 ** sequence), NULL is returned and the state of pParse updated to reflect
80569 ** the error.
80570 */
80571 SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *pParse, Index *pIdx){
80572   int i;
80573   int nCol = pIdx->nColumn;
80574   int nBytes = sizeof(KeyInfo) + (nCol-1)*sizeof(CollSeq*) + nCol;
80575   sqlite3 *db = pParse->db;
80576   KeyInfo *pKey = (KeyInfo *)sqlite3DbMallocZero(db, nBytes);
80577
80578   if( pKey ){
80579     pKey->db = pParse->db;
80580     pKey->aSortOrder = (u8 *)&(pKey->aColl[nCol]);
80581     assert( &pKey->aSortOrder[nCol]==&(((u8 *)pKey)[nBytes]) );
80582     for(i=0; i<nCol; i++){
80583       char *zColl = pIdx->azColl[i];
80584       assert( zColl );
80585       pKey->aColl[i] = sqlite3LocateCollSeq(pParse, zColl);
80586       pKey->aSortOrder[i] = pIdx->aSortOrder[i];
80587     }
80588     pKey->nField = (u16)nCol;
80589   }
80590
80591   if( pParse->nErr ){
80592     sqlite3DbFree(db, pKey);
80593     pKey = 0;
80594   }
80595   return pKey;
80596 }
80597
80598 /************** End of build.c ***********************************************/
80599 /************** Begin file callback.c ****************************************/
80600 /*
80601 ** 2005 May 23 
80602 **
80603 ** The author disclaims copyright to this source code.  In place of
80604 ** a legal notice, here is a blessing:
80605 **
80606 **    May you do good and not evil.
80607 **    May you find forgiveness for yourself and forgive others.
80608 **    May you share freely, never taking more than you give.
80609 **
80610 *************************************************************************
80611 **
80612 ** This file contains functions used to access the internal hash tables
80613 ** of user defined functions and collation sequences.
80614 */
80615
80616
80617 /*
80618 ** Invoke the 'collation needed' callback to request a collation sequence
80619 ** in the encoding enc of name zName, length nName.
80620 */
80621 static void callCollNeeded(sqlite3 *db, int enc, const char *zName){
80622   assert( !db->xCollNeeded || !db->xCollNeeded16 );
80623   if( db->xCollNeeded ){
80624     char *zExternal = sqlite3DbStrDup(db, zName);
80625     if( !zExternal ) return;
80626     db->xCollNeeded(db->pCollNeededArg, db, enc, zExternal);
80627     sqlite3DbFree(db, zExternal);
80628   }
80629 #ifndef SQLITE_OMIT_UTF16
80630   if( db->xCollNeeded16 ){
80631     char const *zExternal;
80632     sqlite3_value *pTmp = sqlite3ValueNew(db);
80633     sqlite3ValueSetStr(pTmp, -1, zName, SQLITE_UTF8, SQLITE_STATIC);
80634     zExternal = sqlite3ValueText(pTmp, SQLITE_UTF16NATIVE);
80635     if( zExternal ){
80636       db->xCollNeeded16(db->pCollNeededArg, db, (int)ENC(db), zExternal);
80637     }
80638     sqlite3ValueFree(pTmp);
80639   }
80640 #endif
80641 }
80642
80643 /*
80644 ** This routine is called if the collation factory fails to deliver a
80645 ** collation function in the best encoding but there may be other versions
80646 ** of this collation function (for other text encodings) available. Use one
80647 ** of these instead if they exist. Avoid a UTF-8 <-> UTF-16 conversion if
80648 ** possible.
80649 */
80650 static int synthCollSeq(sqlite3 *db, CollSeq *pColl){
80651   CollSeq *pColl2;
80652   char *z = pColl->zName;
80653   int i;
80654   static const u8 aEnc[] = { SQLITE_UTF16BE, SQLITE_UTF16LE, SQLITE_UTF8 };
80655   for(i=0; i<3; i++){
80656     pColl2 = sqlite3FindCollSeq(db, aEnc[i], z, 0);
80657     if( pColl2->xCmp!=0 ){
80658       memcpy(pColl, pColl2, sizeof(CollSeq));
80659       pColl->xDel = 0;         /* Do not copy the destructor */
80660       return SQLITE_OK;
80661     }
80662   }
80663   return SQLITE_ERROR;
80664 }
80665
80666 /*
80667 ** This function is responsible for invoking the collation factory callback
80668 ** or substituting a collation sequence of a different encoding when the
80669 ** requested collation sequence is not available in the desired encoding.
80670 ** 
80671 ** If it is not NULL, then pColl must point to the database native encoding 
80672 ** collation sequence with name zName, length nName.
80673 **
80674 ** The return value is either the collation sequence to be used in database
80675 ** db for collation type name zName, length nName, or NULL, if no collation
80676 ** sequence can be found.
80677 **
80678 ** See also: sqlite3LocateCollSeq(), sqlite3FindCollSeq()
80679 */
80680 SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(
80681   sqlite3* db,          /* The database connection */
80682   u8 enc,               /* The desired encoding for the collating sequence */
80683   CollSeq *pColl,       /* Collating sequence with native encoding, or NULL */
80684   const char *zName     /* Collating sequence name */
80685 ){
80686   CollSeq *p;
80687
80688   p = pColl;
80689   if( !p ){
80690     p = sqlite3FindCollSeq(db, enc, zName, 0);
80691   }
80692   if( !p || !p->xCmp ){
80693     /* No collation sequence of this type for this encoding is registered.
80694     ** Call the collation factory to see if it can supply us with one.
80695     */
80696     callCollNeeded(db, enc, zName);
80697     p = sqlite3FindCollSeq(db, enc, zName, 0);
80698   }
80699   if( p && !p->xCmp && synthCollSeq(db, p) ){
80700     p = 0;
80701   }
80702   assert( !p || p->xCmp );
80703   return p;
80704 }
80705
80706 /*
80707 ** This routine is called on a collation sequence before it is used to
80708 ** check that it is defined. An undefined collation sequence exists when
80709 ** a database is loaded that contains references to collation sequences
80710 ** that have not been defined by sqlite3_create_collation() etc.
80711 **
80712 ** If required, this routine calls the 'collation needed' callback to
80713 ** request a definition of the collating sequence. If this doesn't work, 
80714 ** an equivalent collating sequence that uses a text encoding different
80715 ** from the main database is substituted, if one is available.
80716 */
80717 SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *pParse, CollSeq *pColl){
80718   if( pColl ){
80719     const char *zName = pColl->zName;
80720     sqlite3 *db = pParse->db;
80721     CollSeq *p = sqlite3GetCollSeq(db, ENC(db), pColl, zName);
80722     if( !p ){
80723       sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName);
80724       pParse->nErr++;
80725       return SQLITE_ERROR;
80726     }
80727     assert( p==pColl );
80728   }
80729   return SQLITE_OK;
80730 }
80731
80732
80733
80734 /*
80735 ** Locate and return an entry from the db.aCollSeq hash table. If the entry
80736 ** specified by zName and nName is not found and parameter 'create' is
80737 ** true, then create a new entry. Otherwise return NULL.
80738 **
80739 ** Each pointer stored in the sqlite3.aCollSeq hash table contains an
80740 ** array of three CollSeq structures. The first is the collation sequence
80741 ** prefferred for UTF-8, the second UTF-16le, and the third UTF-16be.
80742 **
80743 ** Stored immediately after the three collation sequences is a copy of
80744 ** the collation sequence name. A pointer to this string is stored in
80745 ** each collation sequence structure.
80746 */
80747 static CollSeq *findCollSeqEntry(
80748   sqlite3 *db,          /* Database connection */
80749   const char *zName,    /* Name of the collating sequence */
80750   int create            /* Create a new entry if true */
80751 ){
80752   CollSeq *pColl;
80753   int nName = sqlite3Strlen30(zName);
80754   pColl = sqlite3HashFind(&db->aCollSeq, zName, nName);
80755
80756   if( 0==pColl && create ){
80757     pColl = sqlite3DbMallocZero(db, 3*sizeof(*pColl) + nName + 1 );
80758     if( pColl ){
80759       CollSeq *pDel = 0;
80760       pColl[0].zName = (char*)&pColl[3];
80761       pColl[0].enc = SQLITE_UTF8;
80762       pColl[1].zName = (char*)&pColl[3];
80763       pColl[1].enc = SQLITE_UTF16LE;
80764       pColl[2].zName = (char*)&pColl[3];
80765       pColl[2].enc = SQLITE_UTF16BE;
80766       memcpy(pColl[0].zName, zName, nName);
80767       pColl[0].zName[nName] = 0;
80768       pDel = sqlite3HashInsert(&db->aCollSeq, pColl[0].zName, nName, pColl);
80769
80770       /* If a malloc() failure occurred in sqlite3HashInsert(), it will 
80771       ** return the pColl pointer to be deleted (because it wasn't added
80772       ** to the hash table).
80773       */
80774       assert( pDel==0 || pDel==pColl );
80775       if( pDel!=0 ){
80776         db->mallocFailed = 1;
80777         sqlite3DbFree(db, pDel);
80778         pColl = 0;
80779       }
80780     }
80781   }
80782   return pColl;
80783 }
80784
80785 /*
80786 ** Parameter zName points to a UTF-8 encoded string nName bytes long.
80787 ** Return the CollSeq* pointer for the collation sequence named zName
80788 ** for the encoding 'enc' from the database 'db'.
80789 **
80790 ** If the entry specified is not found and 'create' is true, then create a
80791 ** new entry.  Otherwise return NULL.
80792 **
80793 ** A separate function sqlite3LocateCollSeq() is a wrapper around
80794 ** this routine.  sqlite3LocateCollSeq() invokes the collation factory
80795 ** if necessary and generates an error message if the collating sequence
80796 ** cannot be found.
80797 **
80798 ** See also: sqlite3LocateCollSeq(), sqlite3GetCollSeq()
80799 */
80800 SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(
80801   sqlite3 *db,
80802   u8 enc,
80803   const char *zName,
80804   int create
80805 ){
80806   CollSeq *pColl;
80807   if( zName ){
80808     pColl = findCollSeqEntry(db, zName, create);
80809   }else{
80810     pColl = db->pDfltColl;
80811   }
80812   assert( SQLITE_UTF8==1 && SQLITE_UTF16LE==2 && SQLITE_UTF16BE==3 );
80813   assert( enc>=SQLITE_UTF8 && enc<=SQLITE_UTF16BE );
80814   if( pColl ) pColl += enc-1;
80815   return pColl;
80816 }
80817
80818 /* During the search for the best function definition, this procedure
80819 ** is called to test how well the function passed as the first argument
80820 ** matches the request for a function with nArg arguments in a system
80821 ** that uses encoding enc. The value returned indicates how well the
80822 ** request is matched. A higher value indicates a better match.
80823 **
80824 ** The returned value is always between 0 and 6, as follows:
80825 **
80826 ** 0: Not a match, or if nArg<0 and the function is has no implementation.
80827 ** 1: A variable arguments function that prefers UTF-8 when a UTF-16
80828 **    encoding is requested, or vice versa.
80829 ** 2: A variable arguments function that uses UTF-16BE when UTF-16LE is
80830 **    requested, or vice versa.
80831 ** 3: A variable arguments function using the same text encoding.
80832 ** 4: A function with the exact number of arguments requested that
80833 **    prefers UTF-8 when a UTF-16 encoding is requested, or vice versa.
80834 ** 5: A function with the exact number of arguments requested that
80835 **    prefers UTF-16LE when UTF-16BE is requested, or vice versa.
80836 ** 6: An exact match.
80837 **
80838 */
80839 static int matchQuality(FuncDef *p, int nArg, u8 enc){
80840   int match = 0;
80841   if( p->nArg==-1 || p->nArg==nArg 
80842    || (nArg==-1 && (p->xFunc!=0 || p->xStep!=0))
80843   ){
80844     match = 1;
80845     if( p->nArg==nArg || nArg==-1 ){
80846       match = 4;
80847     }
80848     if( enc==p->iPrefEnc ){
80849       match += 2;
80850     }
80851     else if( (enc==SQLITE_UTF16LE && p->iPrefEnc==SQLITE_UTF16BE) ||
80852              (enc==SQLITE_UTF16BE && p->iPrefEnc==SQLITE_UTF16LE) ){
80853       match += 1;
80854     }
80855   }
80856   return match;
80857 }
80858
80859 /*
80860 ** Search a FuncDefHash for a function with the given name.  Return
80861 ** a pointer to the matching FuncDef if found, or 0 if there is no match.
80862 */
80863 static FuncDef *functionSearch(
80864   FuncDefHash *pHash,  /* Hash table to search */
80865   int h,               /* Hash of the name */
80866   const char *zFunc,   /* Name of function */
80867   int nFunc            /* Number of bytes in zFunc */
80868 ){
80869   FuncDef *p;
80870   for(p=pHash->a[h]; p; p=p->pHash){
80871     if( sqlite3StrNICmp(p->zName, zFunc, nFunc)==0 && p->zName[nFunc]==0 ){
80872       return p;
80873     }
80874   }
80875   return 0;
80876 }
80877
80878 /*
80879 ** Insert a new FuncDef into a FuncDefHash hash table.
80880 */
80881 SQLITE_PRIVATE void sqlite3FuncDefInsert(
80882   FuncDefHash *pHash,  /* The hash table into which to insert */
80883   FuncDef *pDef        /* The function definition to insert */
80884 ){
80885   FuncDef *pOther;
80886   int nName = sqlite3Strlen30(pDef->zName);
80887   u8 c1 = (u8)pDef->zName[0];
80888   int h = (sqlite3UpperToLower[c1] + nName) % ArraySize(pHash->a);
80889   pOther = functionSearch(pHash, h, pDef->zName, nName);
80890   if( pOther ){
80891     assert( pOther!=pDef && pOther->pNext!=pDef );
80892     pDef->pNext = pOther->pNext;
80893     pOther->pNext = pDef;
80894   }else{
80895     pDef->pNext = 0;
80896     pDef->pHash = pHash->a[h];
80897     pHash->a[h] = pDef;
80898   }
80899 }
80900   
80901   
80902
80903 /*
80904 ** Locate a user function given a name, a number of arguments and a flag
80905 ** indicating whether the function prefers UTF-16 over UTF-8.  Return a
80906 ** pointer to the FuncDef structure that defines that function, or return
80907 ** NULL if the function does not exist.
80908 **
80909 ** If the createFlag argument is true, then a new (blank) FuncDef
80910 ** structure is created and liked into the "db" structure if a
80911 ** no matching function previously existed.  When createFlag is true
80912 ** and the nArg parameter is -1, then only a function that accepts
80913 ** any number of arguments will be returned.
80914 **
80915 ** If createFlag is false and nArg is -1, then the first valid
80916 ** function found is returned.  A function is valid if either xFunc
80917 ** or xStep is non-zero.
80918 **
80919 ** If createFlag is false, then a function with the required name and
80920 ** number of arguments may be returned even if the eTextRep flag does not
80921 ** match that requested.
80922 */
80923 SQLITE_PRIVATE FuncDef *sqlite3FindFunction(
80924   sqlite3 *db,       /* An open database */
80925   const char *zName, /* Name of the function.  Not null-terminated */
80926   int nName,         /* Number of characters in the name */
80927   int nArg,          /* Number of arguments.  -1 means any number */
80928   u8 enc,            /* Preferred text encoding */
80929   int createFlag     /* Create new entry if true and does not otherwise exist */
80930 ){
80931   FuncDef *p;         /* Iterator variable */
80932   FuncDef *pBest = 0; /* Best match found so far */
80933   int bestScore = 0;  /* Score of best match */
80934   int h;              /* Hash value */
80935
80936
80937   assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE );
80938   h = (sqlite3UpperToLower[(u8)zName[0]] + nName) % ArraySize(db->aFunc.a);
80939
80940   /* First search for a match amongst the application-defined functions.
80941   */
80942   p = functionSearch(&db->aFunc, h, zName, nName);
80943   while( p ){
80944     int score = matchQuality(p, nArg, enc);
80945     if( score>bestScore ){
80946       pBest = p;
80947       bestScore = score;
80948     }
80949     p = p->pNext;
80950   }
80951
80952   /* If no match is found, search the built-in functions.
80953   **
80954   ** If the SQLITE_PreferBuiltin flag is set, then search the built-in
80955   ** functions even if a prior app-defined function was found.  And give
80956   ** priority to built-in functions.
80957   **
80958   ** Except, if createFlag is true, that means that we are trying to
80959   ** install a new function.  Whatever FuncDef structure is returned it will
80960   ** have fields overwritten with new information appropriate for the
80961   ** new function.  But the FuncDefs for built-in functions are read-only.
80962   ** So we must not search for built-ins when creating a new function.
80963   */ 
80964   if( !createFlag && (pBest==0 || (db->flags & SQLITE_PreferBuiltin)!=0) ){
80965     FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
80966     bestScore = 0;
80967     p = functionSearch(pHash, h, zName, nName);
80968     while( p ){
80969       int score = matchQuality(p, nArg, enc);
80970       if( score>bestScore ){
80971         pBest = p;
80972         bestScore = score;
80973       }
80974       p = p->pNext;
80975     }
80976   }
80977
80978   /* If the createFlag parameter is true and the search did not reveal an
80979   ** exact match for the name, number of arguments and encoding, then add a
80980   ** new entry to the hash table and return it.
80981   */
80982   if( createFlag && (bestScore<6 || pBest->nArg!=nArg) && 
80983       (pBest = sqlite3DbMallocZero(db, sizeof(*pBest)+nName+1))!=0 ){
80984     pBest->zName = (char *)&pBest[1];
80985     pBest->nArg = (u16)nArg;
80986     pBest->iPrefEnc = enc;
80987     memcpy(pBest->zName, zName, nName);
80988     pBest->zName[nName] = 0;
80989     sqlite3FuncDefInsert(&db->aFunc, pBest);
80990   }
80991
80992   if( pBest && (pBest->xStep || pBest->xFunc || createFlag) ){
80993     return pBest;
80994   }
80995   return 0;
80996 }
80997
80998 /*
80999 ** Free all resources held by the schema structure. The void* argument points
81000 ** at a Schema struct. This function does not call sqlite3DbFree(db, ) on the 
81001 ** pointer itself, it just cleans up subsidiary resources (i.e. the contents
81002 ** of the schema hash tables).
81003 **
81004 ** The Schema.cache_size variable is not cleared.
81005 */
81006 SQLITE_PRIVATE void sqlite3SchemaClear(void *p){
81007   Hash temp1;
81008   Hash temp2;
81009   HashElem *pElem;
81010   Schema *pSchema = (Schema *)p;
81011
81012   temp1 = pSchema->tblHash;
81013   temp2 = pSchema->trigHash;
81014   sqlite3HashInit(&pSchema->trigHash);
81015   sqlite3HashClear(&pSchema->idxHash);
81016   for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){
81017     sqlite3DeleteTrigger(0, (Trigger*)sqliteHashData(pElem));
81018   }
81019   sqlite3HashClear(&temp2);
81020   sqlite3HashInit(&pSchema->tblHash);
81021   for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){
81022     Table *pTab = sqliteHashData(pElem);
81023     sqlite3DeleteTable(0, pTab);
81024   }
81025   sqlite3HashClear(&temp1);
81026   sqlite3HashClear(&pSchema->fkeyHash);
81027   pSchema->pSeqTab = 0;
81028   if( pSchema->flags & DB_SchemaLoaded ){
81029     pSchema->iGeneration++;
81030     pSchema->flags &= ~DB_SchemaLoaded;
81031   }
81032 }
81033
81034 /*
81035 ** Find and return the schema associated with a BTree.  Create
81036 ** a new one if necessary.
81037 */
81038 SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *db, Btree *pBt){
81039   Schema * p;
81040   if( pBt ){
81041     p = (Schema *)sqlite3BtreeSchema(pBt, sizeof(Schema), sqlite3SchemaClear);
81042   }else{
81043     p = (Schema *)sqlite3DbMallocZero(0, sizeof(Schema));
81044   }
81045   if( !p ){
81046     db->mallocFailed = 1;
81047   }else if ( 0==p->file_format ){
81048     sqlite3HashInit(&p->tblHash);
81049     sqlite3HashInit(&p->idxHash);
81050     sqlite3HashInit(&p->trigHash);
81051     sqlite3HashInit(&p->fkeyHash);
81052     p->enc = SQLITE_UTF8;
81053   }
81054   return p;
81055 }
81056
81057 /************** End of callback.c ********************************************/
81058 /************** Begin file delete.c ******************************************/
81059 /*
81060 ** 2001 September 15
81061 **
81062 ** The author disclaims copyright to this source code.  In place of
81063 ** a legal notice, here is a blessing:
81064 **
81065 **    May you do good and not evil.
81066 **    May you find forgiveness for yourself and forgive others.
81067 **    May you share freely, never taking more than you give.
81068 **
81069 *************************************************************************
81070 ** This file contains C code routines that are called by the parser
81071 ** in order to generate code for DELETE FROM statements.
81072 */
81073
81074 /*
81075 ** While a SrcList can in general represent multiple tables and subqueries
81076 ** (as in the FROM clause of a SELECT statement) in this case it contains
81077 ** the name of a single table, as one might find in an INSERT, DELETE,
81078 ** or UPDATE statement.  Look up that table in the symbol table and
81079 ** return a pointer.  Set an error message and return NULL if the table 
81080 ** name is not found or if any other error occurs.
81081 **
81082 ** The following fields are initialized appropriate in pSrc:
81083 **
81084 **    pSrc->a[0].pTab       Pointer to the Table object
81085 **    pSrc->a[0].pIndex     Pointer to the INDEXED BY index, if there is one
81086 **
81087 */
81088 SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){
81089   struct SrcList_item *pItem = pSrc->a;
81090   Table *pTab;
81091   assert( pItem && pSrc->nSrc==1 );
81092   pTab = sqlite3LocateTable(pParse, 0, pItem->zName, pItem->zDatabase);
81093   sqlite3DeleteTable(pParse->db, pItem->pTab);
81094   pItem->pTab = pTab;
81095   if( pTab ){
81096     pTab->nRef++;
81097   }
81098   if( sqlite3IndexedByLookup(pParse, pItem) ){
81099     pTab = 0;
81100   }
81101   return pTab;
81102 }
81103
81104 /*
81105 ** Check to make sure the given table is writable.  If it is not
81106 ** writable, generate an error message and return 1.  If it is
81107 ** writable return 0;
81108 */
81109 SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){
81110   /* A table is not writable under the following circumstances:
81111   **
81112   **   1) It is a virtual table and no implementation of the xUpdate method
81113   **      has been provided, or
81114   **   2) It is a system table (i.e. sqlite_master), this call is not
81115   **      part of a nested parse and writable_schema pragma has not 
81116   **      been specified.
81117   **
81118   ** In either case leave an error message in pParse and return non-zero.
81119   */
81120   if( ( IsVirtual(pTab) 
81121      && sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0 )
81122    || ( (pTab->tabFlags & TF_Readonly)!=0
81123      && (pParse->db->flags & SQLITE_WriteSchema)==0
81124      && pParse->nested==0 )
81125   ){
81126     sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName);
81127     return 1;
81128   }
81129
81130 #ifndef SQLITE_OMIT_VIEW
81131   if( !viewOk && pTab->pSelect ){
81132     sqlite3ErrorMsg(pParse,"cannot modify %s because it is a view",pTab->zName);
81133     return 1;
81134   }
81135 #endif
81136   return 0;
81137 }
81138
81139
81140 #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
81141 /*
81142 ** Evaluate a view and store its result in an ephemeral table.  The
81143 ** pWhere argument is an optional WHERE clause that restricts the
81144 ** set of rows in the view that are to be added to the ephemeral table.
81145 */
81146 SQLITE_PRIVATE void sqlite3MaterializeView(
81147   Parse *pParse,       /* Parsing context */
81148   Table *pView,        /* View definition */
81149   Expr *pWhere,        /* Optional WHERE clause to be added */
81150   int iCur             /* Cursor number for ephemerial table */
81151 ){
81152   SelectDest dest;
81153   Select *pDup;
81154   sqlite3 *db = pParse->db;
81155
81156   pDup = sqlite3SelectDup(db, pView->pSelect, 0);
81157   if( pWhere ){
81158     SrcList *pFrom;
81159     
81160     pWhere = sqlite3ExprDup(db, pWhere, 0);
81161     pFrom = sqlite3SrcListAppend(db, 0, 0, 0);
81162     if( pFrom ){
81163       assert( pFrom->nSrc==1 );
81164       pFrom->a[0].zAlias = sqlite3DbStrDup(db, pView->zName);
81165       pFrom->a[0].pSelect = pDup;
81166       assert( pFrom->a[0].pOn==0 );
81167       assert( pFrom->a[0].pUsing==0 );
81168     }else{
81169       sqlite3SelectDelete(db, pDup);
81170     }
81171     pDup = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, 0, 0, 0, 0);
81172   }
81173   sqlite3SelectDestInit(&dest, SRT_EphemTab, iCur);
81174   sqlite3Select(pParse, pDup, &dest);
81175   sqlite3SelectDelete(db, pDup);
81176 }
81177 #endif /* !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) */
81178
81179 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
81180 /*
81181 ** Generate an expression tree to implement the WHERE, ORDER BY,
81182 ** and LIMIT/OFFSET portion of DELETE and UPDATE statements.
81183 **
81184 **     DELETE FROM table_wxyz WHERE a<5 ORDER BY a LIMIT 1;
81185 **                            \__________________________/
81186 **                               pLimitWhere (pInClause)
81187 */
81188 SQLITE_PRIVATE Expr *sqlite3LimitWhere(
81189   Parse *pParse,               /* The parser context */
81190   SrcList *pSrc,               /* the FROM clause -- which tables to scan */
81191   Expr *pWhere,                /* The WHERE clause.  May be null */
81192   ExprList *pOrderBy,          /* The ORDER BY clause.  May be null */
81193   Expr *pLimit,                /* The LIMIT clause.  May be null */
81194   Expr *pOffset,               /* The OFFSET clause.  May be null */
81195   char *zStmtType              /* Either DELETE or UPDATE.  For error messages. */
81196 ){
81197   Expr *pWhereRowid = NULL;    /* WHERE rowid .. */
81198   Expr *pInClause = NULL;      /* WHERE rowid IN ( select ) */
81199   Expr *pSelectRowid = NULL;   /* SELECT rowid ... */
81200   ExprList *pEList = NULL;     /* Expression list contaning only pSelectRowid */
81201   SrcList *pSelectSrc = NULL;  /* SELECT rowid FROM x ... (dup of pSrc) */
81202   Select *pSelect = NULL;      /* Complete SELECT tree */
81203
81204   /* Check that there isn't an ORDER BY without a LIMIT clause.
81205   */
81206   if( pOrderBy && (pLimit == 0) ) {
81207     sqlite3ErrorMsg(pParse, "ORDER BY without LIMIT on %s", zStmtType);
81208     pParse->parseError = 1;
81209     goto limit_where_cleanup_2;
81210   }
81211
81212   /* We only need to generate a select expression if there
81213   ** is a limit/offset term to enforce.
81214   */
81215   if( pLimit == 0 ) {
81216     /* if pLimit is null, pOffset will always be null as well. */
81217     assert( pOffset == 0 );
81218     return pWhere;
81219   }
81220
81221   /* Generate a select expression tree to enforce the limit/offset 
81222   ** term for the DELETE or UPDATE statement.  For example:
81223   **   DELETE FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1
81224   ** becomes:
81225   **   DELETE FROM table_a WHERE rowid IN ( 
81226   **     SELECT rowid FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1
81227   **   );
81228   */
81229
81230   pSelectRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0, 0);
81231   if( pSelectRowid == 0 ) goto limit_where_cleanup_2;
81232   pEList = sqlite3ExprListAppend(pParse, 0, pSelectRowid);
81233   if( pEList == 0 ) goto limit_where_cleanup_2;
81234
81235   /* duplicate the FROM clause as it is needed by both the DELETE/UPDATE tree
81236   ** and the SELECT subtree. */
81237   pSelectSrc = sqlite3SrcListDup(pParse->db, pSrc, 0);
81238   if( pSelectSrc == 0 ) {
81239     sqlite3ExprListDelete(pParse->db, pEList);
81240     goto limit_where_cleanup_2;
81241   }
81242
81243   /* generate the SELECT expression tree. */
81244   pSelect = sqlite3SelectNew(pParse,pEList,pSelectSrc,pWhere,0,0,
81245                              pOrderBy,0,pLimit,pOffset);
81246   if( pSelect == 0 ) return 0;
81247
81248   /* now generate the new WHERE rowid IN clause for the DELETE/UDPATE */
81249   pWhereRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0, 0);
81250   if( pWhereRowid == 0 ) goto limit_where_cleanup_1;
81251   pInClause = sqlite3PExpr(pParse, TK_IN, pWhereRowid, 0, 0);
81252   if( pInClause == 0 ) goto limit_where_cleanup_1;
81253
81254   pInClause->x.pSelect = pSelect;
81255   pInClause->flags |= EP_xIsSelect;
81256   sqlite3ExprSetHeight(pParse, pInClause);
81257   return pInClause;
81258
81259   /* something went wrong. clean up anything allocated. */
81260 limit_where_cleanup_1:
81261   sqlite3SelectDelete(pParse->db, pSelect);
81262   return 0;
81263
81264 limit_where_cleanup_2:
81265   sqlite3ExprDelete(pParse->db, pWhere);
81266   sqlite3ExprListDelete(pParse->db, pOrderBy);
81267   sqlite3ExprDelete(pParse->db, pLimit);
81268   sqlite3ExprDelete(pParse->db, pOffset);
81269   return 0;
81270 }
81271 #endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */
81272
81273 /*
81274 ** Generate code for a DELETE FROM statement.
81275 **
81276 **     DELETE FROM table_wxyz WHERE a<5 AND b NOT NULL;
81277 **                 \________/       \________________/
81278 **                  pTabList              pWhere
81279 */
81280 SQLITE_PRIVATE void sqlite3DeleteFrom(
81281   Parse *pParse,         /* The parser context */
81282   SrcList *pTabList,     /* The table from which we should delete things */
81283   Expr *pWhere           /* The WHERE clause.  May be null */
81284 ){
81285   Vdbe *v;               /* The virtual database engine */
81286   Table *pTab;           /* The table from which records will be deleted */
81287   const char *zDb;       /* Name of database holding pTab */
81288   int end, addr = 0;     /* A couple addresses of generated code */
81289   int i;                 /* Loop counter */
81290   WhereInfo *pWInfo;     /* Information about the WHERE clause */
81291   Index *pIdx;           /* For looping over indices of the table */
81292   int iCur;              /* VDBE Cursor number for pTab */
81293   sqlite3 *db;           /* Main database structure */
81294   AuthContext sContext;  /* Authorization context */
81295   NameContext sNC;       /* Name context to resolve expressions in */
81296   int iDb;               /* Database number */
81297   int memCnt = -1;       /* Memory cell used for change counting */
81298   int rcauth;            /* Value returned by authorization callback */
81299
81300 #ifndef SQLITE_OMIT_TRIGGER
81301   int isView;                  /* True if attempting to delete from a view */
81302   Trigger *pTrigger;           /* List of table triggers, if required */
81303 #endif
81304
81305   memset(&sContext, 0, sizeof(sContext));
81306   db = pParse->db;
81307   if( pParse->nErr || db->mallocFailed ){
81308     goto delete_from_cleanup;
81309   }
81310   assert( pTabList->nSrc==1 );
81311
81312   /* Locate the table which we want to delete.  This table has to be
81313   ** put in an SrcList structure because some of the subroutines we
81314   ** will be calling are designed to work with multiple tables and expect
81315   ** an SrcList* parameter instead of just a Table* parameter.
81316   */
81317   pTab = sqlite3SrcListLookup(pParse, pTabList);
81318   if( pTab==0 )  goto delete_from_cleanup;
81319
81320   /* Figure out if we have any triggers and if the table being
81321   ** deleted from is a view
81322   */
81323 #ifndef SQLITE_OMIT_TRIGGER
81324   pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
81325   isView = pTab->pSelect!=0;
81326 #else
81327 # define pTrigger 0
81328 # define isView 0
81329 #endif
81330 #ifdef SQLITE_OMIT_VIEW
81331 # undef isView
81332 # define isView 0
81333 #endif
81334
81335   /* If pTab is really a view, make sure it has been initialized.
81336   */
81337   if( sqlite3ViewGetColumnNames(pParse, pTab) ){
81338     goto delete_from_cleanup;
81339   }
81340
81341   if( sqlite3IsReadOnly(pParse, pTab, (pTrigger?1:0)) ){
81342     goto delete_from_cleanup;
81343   }
81344   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
81345   assert( iDb<db->nDb );
81346   zDb = db->aDb[iDb].zName;
81347   rcauth = sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb);
81348   assert( rcauth==SQLITE_OK || rcauth==SQLITE_DENY || rcauth==SQLITE_IGNORE );
81349   if( rcauth==SQLITE_DENY ){
81350     goto delete_from_cleanup;
81351   }
81352   assert(!isView || pTrigger);
81353
81354   /* Assign  cursor number to the table and all its indices.
81355   */
81356   assert( pTabList->nSrc==1 );
81357   iCur = pTabList->a[0].iCursor = pParse->nTab++;
81358   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
81359     pParse->nTab++;
81360   }
81361
81362   /* Start the view context
81363   */
81364   if( isView ){
81365     sqlite3AuthContextPush(pParse, &sContext, pTab->zName);
81366   }
81367
81368   /* Begin generating code.
81369   */
81370   v = sqlite3GetVdbe(pParse);
81371   if( v==0 ){
81372     goto delete_from_cleanup;
81373   }
81374   if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
81375   sqlite3BeginWriteOperation(pParse, 1, iDb);
81376
81377   /* If we are trying to delete from a view, realize that view into
81378   ** a ephemeral table.
81379   */
81380 #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
81381   if( isView ){
81382     sqlite3MaterializeView(pParse, pTab, pWhere, iCur);
81383   }
81384 #endif
81385
81386   /* Resolve the column names in the WHERE clause.
81387   */
81388   memset(&sNC, 0, sizeof(sNC));
81389   sNC.pParse = pParse;
81390   sNC.pSrcList = pTabList;
81391   if( sqlite3ResolveExprNames(&sNC, pWhere) ){
81392     goto delete_from_cleanup;
81393   }
81394
81395   /* Initialize the counter of the number of rows deleted, if
81396   ** we are counting rows.
81397   */
81398   if( db->flags & SQLITE_CountRows ){
81399     memCnt = ++pParse->nMem;
81400     sqlite3VdbeAddOp2(v, OP_Integer, 0, memCnt);
81401   }
81402
81403 #ifndef SQLITE_OMIT_TRUNCATE_OPTIMIZATION
81404   /* Special case: A DELETE without a WHERE clause deletes everything.
81405   ** It is easier just to erase the whole table. Prior to version 3.6.5,
81406   ** this optimization caused the row change count (the value returned by 
81407   ** API function sqlite3_count_changes) to be set incorrectly.  */
81408   if( rcauth==SQLITE_OK && pWhere==0 && !pTrigger && !IsVirtual(pTab) 
81409    && 0==sqlite3FkRequired(pParse, pTab, 0, 0)
81410   ){
81411     assert( !isView );
81412     sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt,
81413                       pTab->zName, P4_STATIC);
81414     for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
81415       assert( pIdx->pSchema==pTab->pSchema );
81416       sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb);
81417     }
81418   }else
81419 #endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */
81420   /* The usual case: There is a WHERE clause so we have to scan through
81421   ** the table and pick which records to delete.
81422   */
81423   {
81424     int iRowSet = ++pParse->nMem;   /* Register for rowset of rows to delete */
81425     int iRowid = ++pParse->nMem;    /* Used for storing rowid values. */
81426     int regRowid;                   /* Actual register containing rowids */
81427
81428     /* Collect rowids of every row to be deleted.
81429     */
81430     sqlite3VdbeAddOp2(v, OP_Null, 0, iRowSet);
81431     pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere,0,WHERE_DUPLICATES_OK);
81432     if( pWInfo==0 ) goto delete_from_cleanup;
81433     regRowid = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iCur, iRowid);
81434     sqlite3VdbeAddOp2(v, OP_RowSetAdd, iRowSet, regRowid);
81435     if( db->flags & SQLITE_CountRows ){
81436       sqlite3VdbeAddOp2(v, OP_AddImm, memCnt, 1);
81437     }
81438     sqlite3WhereEnd(pWInfo);
81439
81440     /* Delete every item whose key was written to the list during the
81441     ** database scan.  We have to delete items after the scan is complete
81442     ** because deleting an item can change the scan order.  */
81443     end = sqlite3VdbeMakeLabel(v);
81444
81445     /* Unless this is a view, open cursors for the table we are 
81446     ** deleting from and all its indices. If this is a view, then the
81447     ** only effect this statement has is to fire the INSTEAD OF 
81448     ** triggers.  */
81449     if( !isView ){
81450       sqlite3OpenTableAndIndices(pParse, pTab, iCur, OP_OpenWrite);
81451     }
81452
81453     addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, iRowSet, end, iRowid);
81454
81455     /* Delete the row */
81456 #ifndef SQLITE_OMIT_VIRTUALTABLE
81457     if( IsVirtual(pTab) ){
81458       const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);
81459       sqlite3VtabMakeWritable(pParse, pTab);
81460       sqlite3VdbeAddOp4(v, OP_VUpdate, 0, 1, iRowid, pVTab, P4_VTAB);
81461       sqlite3MayAbort(pParse);
81462     }else
81463 #endif
81464     {
81465       int count = (pParse->nested==0);    /* True to count changes */
81466       sqlite3GenerateRowDelete(pParse, pTab, iCur, iRowid, count, pTrigger, OE_Default);
81467     }
81468
81469     /* End of the delete loop */
81470     sqlite3VdbeAddOp2(v, OP_Goto, 0, addr);
81471     sqlite3VdbeResolveLabel(v, end);
81472
81473     /* Close the cursors open on the table and its indexes. */
81474     if( !isView && !IsVirtual(pTab) ){
81475       for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){
81476         sqlite3VdbeAddOp2(v, OP_Close, iCur + i, pIdx->tnum);
81477       }
81478       sqlite3VdbeAddOp1(v, OP_Close, iCur);
81479     }
81480   }
81481
81482   /* Update the sqlite_sequence table by storing the content of the
81483   ** maximum rowid counter values recorded while inserting into
81484   ** autoincrement tables.
81485   */
81486   if( pParse->nested==0 && pParse->pTriggerTab==0 ){
81487     sqlite3AutoincrementEnd(pParse);
81488   }
81489
81490   /* Return the number of rows that were deleted. If this routine is 
81491   ** generating code because of a call to sqlite3NestedParse(), do not
81492   ** invoke the callback function.
81493   */
81494   if( (db->flags&SQLITE_CountRows) && !pParse->nested && !pParse->pTriggerTab ){
81495     sqlite3VdbeAddOp2(v, OP_ResultRow, memCnt, 1);
81496     sqlite3VdbeSetNumCols(v, 1);
81497     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows deleted", SQLITE_STATIC);
81498   }
81499
81500 delete_from_cleanup:
81501   sqlite3AuthContextPop(&sContext);
81502   sqlite3SrcListDelete(db, pTabList);
81503   sqlite3ExprDelete(db, pWhere);
81504   return;
81505 }
81506 /* Make sure "isView" and other macros defined above are undefined. Otherwise
81507 ** thely may interfere with compilation of other functions in this file
81508 ** (or in another file, if this file becomes part of the amalgamation).  */
81509 #ifdef isView
81510  #undef isView
81511 #endif
81512 #ifdef pTrigger
81513  #undef pTrigger
81514 #endif
81515
81516 /*
81517 ** This routine generates VDBE code that causes a single row of a
81518 ** single table to be deleted.
81519 **
81520 ** The VDBE must be in a particular state when this routine is called.
81521 ** These are the requirements:
81522 **
81523 **   1.  A read/write cursor pointing to pTab, the table containing the row
81524 **       to be deleted, must be opened as cursor number $iCur.
81525 **
81526 **   2.  Read/write cursors for all indices of pTab must be open as
81527 **       cursor number base+i for the i-th index.
81528 **
81529 **   3.  The record number of the row to be deleted must be stored in
81530 **       memory cell iRowid.
81531 **
81532 ** This routine generates code to remove both the table record and all 
81533 ** index entries that point to that record.
81534 */
81535 SQLITE_PRIVATE void sqlite3GenerateRowDelete(
81536   Parse *pParse,     /* Parsing context */
81537   Table *pTab,       /* Table containing the row to be deleted */
81538   int iCur,          /* Cursor number for the table */
81539   int iRowid,        /* Memory cell that contains the rowid to delete */
81540   int count,         /* If non-zero, increment the row change counter */
81541   Trigger *pTrigger, /* List of triggers to (potentially) fire */
81542   int onconf         /* Default ON CONFLICT policy for triggers */
81543 ){
81544   Vdbe *v = pParse->pVdbe;        /* Vdbe */
81545   int iOld = 0;                   /* First register in OLD.* array */
81546   int iLabel;                     /* Label resolved to end of generated code */
81547
81548   /* Vdbe is guaranteed to have been allocated by this stage. */
81549   assert( v );
81550
81551   /* Seek cursor iCur to the row to delete. If this row no longer exists 
81552   ** (this can happen if a trigger program has already deleted it), do
81553   ** not attempt to delete it or fire any DELETE triggers.  */
81554   iLabel = sqlite3VdbeMakeLabel(v);
81555   sqlite3VdbeAddOp3(v, OP_NotExists, iCur, iLabel, iRowid);
81556  
81557   /* If there are any triggers to fire, allocate a range of registers to
81558   ** use for the old.* references in the triggers.  */
81559   if( sqlite3FkRequired(pParse, pTab, 0, 0) || pTrigger ){
81560     u32 mask;                     /* Mask of OLD.* columns in use */
81561     int iCol;                     /* Iterator used while populating OLD.* */
81562
81563     /* TODO: Could use temporary registers here. Also could attempt to
81564     ** avoid copying the contents of the rowid register.  */
81565     mask = sqlite3TriggerColmask(
81566         pParse, pTrigger, 0, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onconf
81567     );
81568     mask |= sqlite3FkOldmask(pParse, pTab);
81569     iOld = pParse->nMem+1;
81570     pParse->nMem += (1 + pTab->nCol);
81571
81572     /* Populate the OLD.* pseudo-table register array. These values will be 
81573     ** used by any BEFORE and AFTER triggers that exist.  */
81574     sqlite3VdbeAddOp2(v, OP_Copy, iRowid, iOld);
81575     for(iCol=0; iCol<pTab->nCol; iCol++){
81576       if( mask==0xffffffff || mask&(1<<iCol) ){
81577         sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, iCol, iOld+iCol+1);
81578       }
81579     }
81580
81581     /* Invoke BEFORE DELETE trigger programs. */
81582     sqlite3CodeRowTrigger(pParse, pTrigger, 
81583         TK_DELETE, 0, TRIGGER_BEFORE, pTab, iOld, onconf, iLabel
81584     );
81585
81586     /* Seek the cursor to the row to be deleted again. It may be that
81587     ** the BEFORE triggers coded above have already removed the row
81588     ** being deleted. Do not attempt to delete the row a second time, and 
81589     ** do not fire AFTER triggers.  */
81590     sqlite3VdbeAddOp3(v, OP_NotExists, iCur, iLabel, iRowid);
81591
81592     /* Do FK processing. This call checks that any FK constraints that
81593     ** refer to this table (i.e. constraints attached to other tables) 
81594     ** are not violated by deleting this row.  */
81595     sqlite3FkCheck(pParse, pTab, iOld, 0);
81596   }
81597
81598   /* Delete the index and table entries. Skip this step if pTab is really
81599   ** a view (in which case the only effect of the DELETE statement is to
81600   ** fire the INSTEAD OF triggers).  */ 
81601   if( pTab->pSelect==0 ){
81602     sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, 0);
81603     sqlite3VdbeAddOp2(v, OP_Delete, iCur, (count?OPFLAG_NCHANGE:0));
81604     if( count ){
81605       sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_TRANSIENT);
81606     }
81607   }
81608
81609   /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to
81610   ** handle rows (possibly in other tables) that refer via a foreign key
81611   ** to the row just deleted. */ 
81612   sqlite3FkActions(pParse, pTab, 0, iOld);
81613
81614   /* Invoke AFTER DELETE trigger programs. */
81615   sqlite3CodeRowTrigger(pParse, pTrigger, 
81616       TK_DELETE, 0, TRIGGER_AFTER, pTab, iOld, onconf, iLabel
81617   );
81618
81619   /* Jump here if the row had already been deleted before any BEFORE
81620   ** trigger programs were invoked. Or if a trigger program throws a 
81621   ** RAISE(IGNORE) exception.  */
81622   sqlite3VdbeResolveLabel(v, iLabel);
81623 }
81624
81625 /*
81626 ** This routine generates VDBE code that causes the deletion of all
81627 ** index entries associated with a single row of a single table.
81628 **
81629 ** The VDBE must be in a particular state when this routine is called.
81630 ** These are the requirements:
81631 **
81632 **   1.  A read/write cursor pointing to pTab, the table containing the row
81633 **       to be deleted, must be opened as cursor number "iCur".
81634 **
81635 **   2.  Read/write cursors for all indices of pTab must be open as
81636 **       cursor number iCur+i for the i-th index.
81637 **
81638 **   3.  The "iCur" cursor must be pointing to the row that is to be
81639 **       deleted.
81640 */
81641 SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(
81642   Parse *pParse,     /* Parsing and code generating context */
81643   Table *pTab,       /* Table containing the row to be deleted */
81644   int iCur,          /* Cursor number for the table */
81645   int *aRegIdx       /* Only delete if aRegIdx!=0 && aRegIdx[i]>0 */
81646 ){
81647   int i;
81648   Index *pIdx;
81649   int r1;
81650
81651   for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){
81652     if( aRegIdx!=0 && aRegIdx[i-1]==0 ) continue;
81653     r1 = sqlite3GenerateIndexKey(pParse, pIdx, iCur, 0, 0);
81654     sqlite3VdbeAddOp3(pParse->pVdbe, OP_IdxDelete, iCur+i, r1,pIdx->nColumn+1);
81655   }
81656 }
81657
81658 /*
81659 ** Generate code that will assemble an index key and put it in register
81660 ** regOut.  The key with be for index pIdx which is an index on pTab.
81661 ** iCur is the index of a cursor open on the pTab table and pointing to
81662 ** the entry that needs indexing.
81663 **
81664 ** Return a register number which is the first in a block of
81665 ** registers that holds the elements of the index key.  The
81666 ** block of registers has already been deallocated by the time
81667 ** this routine returns.
81668 */
81669 SQLITE_PRIVATE int sqlite3GenerateIndexKey(
81670   Parse *pParse,     /* Parsing context */
81671   Index *pIdx,       /* The index for which to generate a key */
81672   int iCur,          /* Cursor number for the pIdx->pTable table */
81673   int regOut,        /* Write the new index key to this register */
81674   int doMakeRec      /* Run the OP_MakeRecord instruction if true */
81675 ){
81676   Vdbe *v = pParse->pVdbe;
81677   int j;
81678   Table *pTab = pIdx->pTable;
81679   int regBase;
81680   int nCol;
81681
81682   nCol = pIdx->nColumn;
81683   regBase = sqlite3GetTempRange(pParse, nCol+1);
81684   sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regBase+nCol);
81685   for(j=0; j<nCol; j++){
81686     int idx = pIdx->aiColumn[j];
81687     if( idx==pTab->iPKey ){
81688       sqlite3VdbeAddOp2(v, OP_SCopy, regBase+nCol, regBase+j);
81689     }else{
81690       sqlite3VdbeAddOp3(v, OP_Column, iCur, idx, regBase+j);
81691       sqlite3ColumnDefault(v, pTab, idx, -1);
81692     }
81693   }
81694   if( doMakeRec ){
81695     sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol+1, regOut);
81696     sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v, pIdx), P4_TRANSIENT);
81697   }
81698   sqlite3ReleaseTempRange(pParse, regBase, nCol+1);
81699   return regBase;
81700 }
81701
81702 /************** End of delete.c **********************************************/
81703 /************** Begin file func.c ********************************************/
81704 /*
81705 ** 2002 February 23
81706 **
81707 ** The author disclaims copyright to this source code.  In place of
81708 ** a legal notice, here is a blessing:
81709 **
81710 **    May you do good and not evil.
81711 **    May you find forgiveness for yourself and forgive others.
81712 **    May you share freely, never taking more than you give.
81713 **
81714 *************************************************************************
81715 ** This file contains the C functions that implement various SQL
81716 ** functions of SQLite.  
81717 **
81718 ** There is only one exported symbol in this file - the function
81719 ** sqliteRegisterBuildinFunctions() found at the bottom of the file.
81720 ** All other code has file scope.
81721 */
81722
81723 /*
81724 ** Return the collating function associated with a function.
81725 */
81726 static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
81727   return context->pColl;
81728 }
81729
81730 /*
81731 ** Implementation of the non-aggregate min() and max() functions
81732 */
81733 static void minmaxFunc(
81734   sqlite3_context *context,
81735   int argc,
81736   sqlite3_value **argv
81737 ){
81738   int i;
81739   int mask;    /* 0 for min() or 0xffffffff for max() */
81740   int iBest;
81741   CollSeq *pColl;
81742
81743   assert( argc>1 );
81744   mask = sqlite3_user_data(context)==0 ? 0 : -1;
81745   pColl = sqlite3GetFuncCollSeq(context);
81746   assert( pColl );
81747   assert( mask==-1 || mask==0 );
81748   iBest = 0;
81749   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
81750   for(i=1; i<argc; i++){
81751     if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
81752     if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
81753       testcase( mask==0 );
81754       iBest = i;
81755     }
81756   }
81757   sqlite3_result_value(context, argv[iBest]);
81758 }
81759
81760 /*
81761 ** Return the type of the argument.
81762 */
81763 static void typeofFunc(
81764   sqlite3_context *context,
81765   int NotUsed,
81766   sqlite3_value **argv
81767 ){
81768   const char *z = 0;
81769   UNUSED_PARAMETER(NotUsed);
81770   switch( sqlite3_value_type(argv[0]) ){
81771     case SQLITE_INTEGER: z = "integer"; break;
81772     case SQLITE_TEXT:    z = "text";    break;
81773     case SQLITE_FLOAT:   z = "real";    break;
81774     case SQLITE_BLOB:    z = "blob";    break;
81775     default:             z = "null";    break;
81776   }
81777   sqlite3_result_text(context, z, -1, SQLITE_STATIC);
81778 }
81779
81780
81781 /*
81782 ** Implementation of the length() function
81783 */
81784 static void lengthFunc(
81785   sqlite3_context *context,
81786   int argc,
81787   sqlite3_value **argv
81788 ){
81789   int len;
81790
81791   assert( argc==1 );
81792   UNUSED_PARAMETER(argc);
81793   switch( sqlite3_value_type(argv[0]) ){
81794     case SQLITE_BLOB:
81795     case SQLITE_INTEGER:
81796     case SQLITE_FLOAT: {
81797       sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
81798       break;
81799     }
81800     case SQLITE_TEXT: {
81801       const unsigned char *z = sqlite3_value_text(argv[0]);
81802       if( z==0 ) return;
81803       len = 0;
81804       while( *z ){
81805         len++;
81806         SQLITE_SKIP_UTF8(z);
81807       }
81808       sqlite3_result_int(context, len);
81809       break;
81810     }
81811     default: {
81812       sqlite3_result_null(context);
81813       break;
81814     }
81815   }
81816 }
81817
81818 /*
81819 ** Implementation of the abs() function.
81820 **
81821 ** IMP: R-23979-26855 The abs(X) function returns the absolute value of
81822 ** the numeric argument X. 
81823 */
81824 static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
81825   assert( argc==1 );
81826   UNUSED_PARAMETER(argc);
81827   switch( sqlite3_value_type(argv[0]) ){
81828     case SQLITE_INTEGER: {
81829       i64 iVal = sqlite3_value_int64(argv[0]);
81830       if( iVal<0 ){
81831         if( (iVal<<1)==0 ){
81832           /* IMP: R-35460-15084 If X is the integer -9223372036854775807 then
81833           ** abs(X) throws an integer overflow error since there is no
81834           ** equivalent positive 64-bit two complement value. */
81835           sqlite3_result_error(context, "integer overflow", -1);
81836           return;
81837         }
81838         iVal = -iVal;
81839       } 
81840       sqlite3_result_int64(context, iVal);
81841       break;
81842     }
81843     case SQLITE_NULL: {
81844       /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
81845       sqlite3_result_null(context);
81846       break;
81847     }
81848     default: {
81849       /* Because sqlite3_value_double() returns 0.0 if the argument is not
81850       ** something that can be converted into a number, we have:
81851       ** IMP: R-57326-31541 Abs(X) return 0.0 if X is a string or blob that
81852       ** cannot be converted to a numeric value. 
81853       */
81854       double rVal = sqlite3_value_double(argv[0]);
81855       if( rVal<0 ) rVal = -rVal;
81856       sqlite3_result_double(context, rVal);
81857       break;
81858     }
81859   }
81860 }
81861
81862 /*
81863 ** Implementation of the substr() function.
81864 **
81865 ** substr(x,p1,p2)  returns p2 characters of x[] beginning with p1.
81866 ** p1 is 1-indexed.  So substr(x,1,1) returns the first character
81867 ** of x.  If x is text, then we actually count UTF-8 characters.
81868 ** If x is a blob, then we count bytes.
81869 **
81870 ** If p1 is negative, then we begin abs(p1) from the end of x[].
81871 **
81872 ** If p2 is negative, return the p2 characters preceeding p1.
81873 */
81874 static void substrFunc(
81875   sqlite3_context *context,
81876   int argc,
81877   sqlite3_value **argv
81878 ){
81879   const unsigned char *z;
81880   const unsigned char *z2;
81881   int len;
81882   int p0type;
81883   i64 p1, p2;
81884   int negP2 = 0;
81885
81886   assert( argc==3 || argc==2 );
81887   if( sqlite3_value_type(argv[1])==SQLITE_NULL
81888    || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
81889   ){
81890     return;
81891   }
81892   p0type = sqlite3_value_type(argv[0]);
81893   p1 = sqlite3_value_int(argv[1]);
81894   if( p0type==SQLITE_BLOB ){
81895     len = sqlite3_value_bytes(argv[0]);
81896     z = sqlite3_value_blob(argv[0]);
81897     if( z==0 ) return;
81898     assert( len==sqlite3_value_bytes(argv[0]) );
81899   }else{
81900     z = sqlite3_value_text(argv[0]);
81901     if( z==0 ) return;
81902     len = 0;
81903     if( p1<0 ){
81904       for(z2=z; *z2; len++){
81905         SQLITE_SKIP_UTF8(z2);
81906       }
81907     }
81908   }
81909   if( argc==3 ){
81910     p2 = sqlite3_value_int(argv[2]);
81911     if( p2<0 ){
81912       p2 = -p2;
81913       negP2 = 1;
81914     }
81915   }else{
81916     p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
81917   }
81918   if( p1<0 ){
81919     p1 += len;
81920     if( p1<0 ){
81921       p2 += p1;
81922       if( p2<0 ) p2 = 0;
81923       p1 = 0;
81924     }
81925   }else if( p1>0 ){
81926     p1--;
81927   }else if( p2>0 ){
81928     p2--;
81929   }
81930   if( negP2 ){
81931     p1 -= p2;
81932     if( p1<0 ){
81933       p2 += p1;
81934       p1 = 0;
81935     }
81936   }
81937   assert( p1>=0 && p2>=0 );
81938   if( p0type!=SQLITE_BLOB ){
81939     while( *z && p1 ){
81940       SQLITE_SKIP_UTF8(z);
81941       p1--;
81942     }
81943     for(z2=z; *z2 && p2; p2--){
81944       SQLITE_SKIP_UTF8(z2);
81945     }
81946     sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT);
81947   }else{
81948     if( p1+p2>len ){
81949       p2 = len-p1;
81950       if( p2<0 ) p2 = 0;
81951     }
81952     sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT);
81953   }
81954 }
81955
81956 /*
81957 ** Implementation of the round() function
81958 */
81959 #ifndef SQLITE_OMIT_FLOATING_POINT
81960 static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
81961   int n = 0;
81962   double r;
81963   char *zBuf;
81964   assert( argc==1 || argc==2 );
81965   if( argc==2 ){
81966     if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
81967     n = sqlite3_value_int(argv[1]);
81968     if( n>30 ) n = 30;
81969     if( n<0 ) n = 0;
81970   }
81971   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
81972   r = sqlite3_value_double(argv[0]);
81973   /* If Y==0 and X will fit in a 64-bit int,
81974   ** handle the rounding directly,
81975   ** otherwise use printf.
81976   */
81977   if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
81978     r = (double)((sqlite_int64)(r+0.5));
81979   }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
81980     r = -(double)((sqlite_int64)((-r)+0.5));
81981   }else{
81982     zBuf = sqlite3_mprintf("%.*f",n,r);
81983     if( zBuf==0 ){
81984       sqlite3_result_error_nomem(context);
81985       return;
81986     }
81987     sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
81988     sqlite3_free(zBuf);
81989   }
81990   sqlite3_result_double(context, r);
81991 }
81992 #endif
81993
81994 /*
81995 ** Allocate nByte bytes of space using sqlite3_malloc(). If the
81996 ** allocation fails, call sqlite3_result_error_nomem() to notify
81997 ** the database handle that malloc() has failed and return NULL.
81998 ** If nByte is larger than the maximum string or blob length, then
81999 ** raise an SQLITE_TOOBIG exception and return NULL.
82000 */
82001 static void *contextMalloc(sqlite3_context *context, i64 nByte){
82002   char *z;
82003   sqlite3 *db = sqlite3_context_db_handle(context);
82004   assert( nByte>0 );
82005   testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
82006   testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
82007   if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
82008     sqlite3_result_error_toobig(context);
82009     z = 0;
82010   }else{
82011     z = sqlite3Malloc((int)nByte);
82012     if( !z ){
82013       sqlite3_result_error_nomem(context);
82014     }
82015   }
82016   return z;
82017 }
82018
82019 /*
82020 ** Implementation of the upper() and lower() SQL functions.
82021 */
82022 static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
82023   char *z1;
82024   const char *z2;
82025   int i, n;
82026   UNUSED_PARAMETER(argc);
82027   z2 = (char*)sqlite3_value_text(argv[0]);
82028   n = sqlite3_value_bytes(argv[0]);
82029   /* Verify that the call to _bytes() does not invalidate the _text() pointer */
82030   assert( z2==(char*)sqlite3_value_text(argv[0]) );
82031   if( z2 ){
82032     z1 = contextMalloc(context, ((i64)n)+1);
82033     if( z1 ){
82034       memcpy(z1, z2, n+1);
82035       for(i=0; z1[i]; i++){
82036         z1[i] = (char)sqlite3Toupper(z1[i]);
82037       }
82038       sqlite3_result_text(context, z1, -1, sqlite3_free);
82039     }
82040   }
82041 }
82042 static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
82043   u8 *z1;
82044   const char *z2;
82045   int i, n;
82046   UNUSED_PARAMETER(argc);
82047   z2 = (char*)sqlite3_value_text(argv[0]);
82048   n = sqlite3_value_bytes(argv[0]);
82049   /* Verify that the call to _bytes() does not invalidate the _text() pointer */
82050   assert( z2==(char*)sqlite3_value_text(argv[0]) );
82051   if( z2 ){
82052     z1 = contextMalloc(context, ((i64)n)+1);
82053     if( z1 ){
82054       memcpy(z1, z2, n+1);
82055       for(i=0; z1[i]; i++){
82056         z1[i] = sqlite3Tolower(z1[i]);
82057       }
82058       sqlite3_result_text(context, (char *)z1, -1, sqlite3_free);
82059     }
82060   }
82061 }
82062
82063
82064 #if 0  /* This function is never used. */
82065 /*
82066 ** The COALESCE() and IFNULL() functions used to be implemented as shown
82067 ** here.  But now they are implemented as VDBE code so that unused arguments
82068 ** do not have to be computed.  This legacy implementation is retained as
82069 ** comment.
82070 */
82071 /*
82072 ** Implementation of the IFNULL(), NVL(), and COALESCE() functions.  
82073 ** All three do the same thing.  They return the first non-NULL
82074 ** argument.
82075 */
82076 static void ifnullFunc(
82077   sqlite3_context *context,
82078   int argc,
82079   sqlite3_value **argv
82080 ){
82081   int i;
82082   for(i=0; i<argc; i++){
82083     if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
82084       sqlite3_result_value(context, argv[i]);
82085       break;
82086     }
82087   }
82088 }
82089 #endif /* NOT USED */
82090 #define ifnullFunc versionFunc   /* Substitute function - never called */
82091
82092 /*
82093 ** Implementation of random().  Return a random integer.  
82094 */
82095 static void randomFunc(
82096   sqlite3_context *context,
82097   int NotUsed,
82098   sqlite3_value **NotUsed2
82099 ){
82100   sqlite_int64 r;
82101   UNUSED_PARAMETER2(NotUsed, NotUsed2);
82102   sqlite3_randomness(sizeof(r), &r);
82103   if( r<0 ){
82104     /* We need to prevent a random number of 0x8000000000000000 
82105     ** (or -9223372036854775808) since when you do abs() of that
82106     ** number of you get the same value back again.  To do this
82107     ** in a way that is testable, mask the sign bit off of negative
82108     ** values, resulting in a positive value.  Then take the 
82109     ** 2s complement of that positive value.  The end result can
82110     ** therefore be no less than -9223372036854775807.
82111     */
82112     r = -(r ^ (((sqlite3_int64)1)<<63));
82113   }
82114   sqlite3_result_int64(context, r);
82115 }
82116
82117 /*
82118 ** Implementation of randomblob(N).  Return a random blob
82119 ** that is N bytes long.
82120 */
82121 static void randomBlob(
82122   sqlite3_context *context,
82123   int argc,
82124   sqlite3_value **argv
82125 ){
82126   int n;
82127   unsigned char *p;
82128   assert( argc==1 );
82129   UNUSED_PARAMETER(argc);
82130   n = sqlite3_value_int(argv[0]);
82131   if( n<1 ){
82132     n = 1;
82133   }
82134   p = contextMalloc(context, n);
82135   if( p ){
82136     sqlite3_randomness(n, p);
82137     sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
82138   }
82139 }
82140
82141 /*
82142 ** Implementation of the last_insert_rowid() SQL function.  The return
82143 ** value is the same as the sqlite3_last_insert_rowid() API function.
82144 */
82145 static void last_insert_rowid(
82146   sqlite3_context *context, 
82147   int NotUsed, 
82148   sqlite3_value **NotUsed2
82149 ){
82150   sqlite3 *db = sqlite3_context_db_handle(context);
82151   UNUSED_PARAMETER2(NotUsed, NotUsed2);
82152   /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
82153   ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
82154   ** function. */
82155   sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
82156 }
82157
82158 /*
82159 ** Implementation of the changes() SQL function.
82160 **
82161 ** IMP: R-62073-11209 The changes() SQL function is a wrapper
82162 ** around the sqlite3_changes() C/C++ function and hence follows the same
82163 ** rules for counting changes.
82164 */
82165 static void changes(
82166   sqlite3_context *context,
82167   int NotUsed,
82168   sqlite3_value **NotUsed2
82169 ){
82170   sqlite3 *db = sqlite3_context_db_handle(context);
82171   UNUSED_PARAMETER2(NotUsed, NotUsed2);
82172   sqlite3_result_int(context, sqlite3_changes(db));
82173 }
82174
82175 /*
82176 ** Implementation of the total_changes() SQL function.  The return value is
82177 ** the same as the sqlite3_total_changes() API function.
82178 */
82179 static void total_changes(
82180   sqlite3_context *context,
82181   int NotUsed,
82182   sqlite3_value **NotUsed2
82183 ){
82184   sqlite3 *db = sqlite3_context_db_handle(context);
82185   UNUSED_PARAMETER2(NotUsed, NotUsed2);
82186   /* IMP: R-52756-41993 This function is a wrapper around the
82187   ** sqlite3_total_changes() C/C++ interface. */
82188   sqlite3_result_int(context, sqlite3_total_changes(db));
82189 }
82190
82191 /*
82192 ** A structure defining how to do GLOB-style comparisons.
82193 */
82194 struct compareInfo {
82195   u8 matchAll;
82196   u8 matchOne;
82197   u8 matchSet;
82198   u8 noCase;
82199 };
82200
82201 /*
82202 ** For LIKE and GLOB matching on EBCDIC machines, assume that every
82203 ** character is exactly one byte in size.  Also, all characters are
82204 ** able to participate in upper-case-to-lower-case mappings in EBCDIC
82205 ** whereas only characters less than 0x80 do in ASCII.
82206 */
82207 #if defined(SQLITE_EBCDIC)
82208 # define sqlite3Utf8Read(A,C)    (*(A++))
82209 # define GlogUpperToLower(A)     A = sqlite3UpperToLower[A]
82210 #else
82211 # define GlogUpperToLower(A)     if( A<0x80 ){ A = sqlite3UpperToLower[A]; }
82212 #endif
82213
82214 static const struct compareInfo globInfo = { '*', '?', '[', 0 };
82215 /* The correct SQL-92 behavior is for the LIKE operator to ignore
82216 ** case.  Thus  'a' LIKE 'A' would be true. */
82217 static const struct compareInfo likeInfoNorm = { '%', '_',   0, 1 };
82218 /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
82219 ** is case sensitive causing 'a' LIKE 'A' to be false */
82220 static const struct compareInfo likeInfoAlt = { '%', '_',   0, 0 };
82221
82222 /*
82223 ** Compare two UTF-8 strings for equality where the first string can
82224 ** potentially be a "glob" expression.  Return true (1) if they
82225 ** are the same and false (0) if they are different.
82226 **
82227 ** Globbing rules:
82228 **
82229 **      '*'       Matches any sequence of zero or more characters.
82230 **
82231 **      '?'       Matches exactly one character.
82232 **
82233 **     [...]      Matches one character from the enclosed list of
82234 **                characters.
82235 **
82236 **     [^...]     Matches one character not in the enclosed list.
82237 **
82238 ** With the [...] and [^...] matching, a ']' character can be included
82239 ** in the list by making it the first character after '[' or '^'.  A
82240 ** range of characters can be specified using '-'.  Example:
82241 ** "[a-z]" matches any single lower-case letter.  To match a '-', make
82242 ** it the last character in the list.
82243 **
82244 ** This routine is usually quick, but can be N**2 in the worst case.
82245 **
82246 ** Hints: to match '*' or '?', put them in "[]".  Like this:
82247 **
82248 **         abc[*]xyz        Matches "abc*xyz" only
82249 */
82250 static int patternCompare(
82251   const u8 *zPattern,              /* The glob pattern */
82252   const u8 *zString,               /* The string to compare against the glob */
82253   const struct compareInfo *pInfo, /* Information about how to do the compare */
82254   const int esc                    /* The escape character */
82255 ){
82256   int c, c2;
82257   int invert;
82258   int seen;
82259   u8 matchOne = pInfo->matchOne;
82260   u8 matchAll = pInfo->matchAll;
82261   u8 matchSet = pInfo->matchSet;
82262   u8 noCase = pInfo->noCase; 
82263   int prevEscape = 0;     /* True if the previous character was 'escape' */
82264
82265   while( (c = sqlite3Utf8Read(zPattern,&zPattern))!=0 ){
82266     if( !prevEscape && c==matchAll ){
82267       while( (c=sqlite3Utf8Read(zPattern,&zPattern)) == matchAll
82268                || c == matchOne ){
82269         if( c==matchOne && sqlite3Utf8Read(zString, &zString)==0 ){
82270           return 0;
82271         }
82272       }
82273       if( c==0 ){
82274         return 1;
82275       }else if( c==esc ){
82276         c = sqlite3Utf8Read(zPattern, &zPattern);
82277         if( c==0 ){
82278           return 0;
82279         }
82280       }else if( c==matchSet ){
82281         assert( esc==0 );         /* This is GLOB, not LIKE */
82282         assert( matchSet<0x80 );  /* '[' is a single-byte character */
82283         while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
82284           SQLITE_SKIP_UTF8(zString);
82285         }
82286         return *zString!=0;
82287       }
82288       while( (c2 = sqlite3Utf8Read(zString,&zString))!=0 ){
82289         if( noCase ){
82290           GlogUpperToLower(c2);
82291           GlogUpperToLower(c);
82292           while( c2 != 0 && c2 != c ){
82293             c2 = sqlite3Utf8Read(zString, &zString);
82294             GlogUpperToLower(c2);
82295           }
82296         }else{
82297           while( c2 != 0 && c2 != c ){
82298             c2 = sqlite3Utf8Read(zString, &zString);
82299           }
82300         }
82301         if( c2==0 ) return 0;
82302         if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
82303       }
82304       return 0;
82305     }else if( !prevEscape && c==matchOne ){
82306       if( sqlite3Utf8Read(zString, &zString)==0 ){
82307         return 0;
82308       }
82309     }else if( c==matchSet ){
82310       int prior_c = 0;
82311       assert( esc==0 );    /* This only occurs for GLOB, not LIKE */
82312       seen = 0;
82313       invert = 0;
82314       c = sqlite3Utf8Read(zString, &zString);
82315       if( c==0 ) return 0;
82316       c2 = sqlite3Utf8Read(zPattern, &zPattern);
82317       if( c2=='^' ){
82318         invert = 1;
82319         c2 = sqlite3Utf8Read(zPattern, &zPattern);
82320       }
82321       if( c2==']' ){
82322         if( c==']' ) seen = 1;
82323         c2 = sqlite3Utf8Read(zPattern, &zPattern);
82324       }
82325       while( c2 && c2!=']' ){
82326         if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
82327           c2 = sqlite3Utf8Read(zPattern, &zPattern);
82328           if( c>=prior_c && c<=c2 ) seen = 1;
82329           prior_c = 0;
82330         }else{
82331           if( c==c2 ){
82332             seen = 1;
82333           }
82334           prior_c = c2;
82335         }
82336         c2 = sqlite3Utf8Read(zPattern, &zPattern);
82337       }
82338       if( c2==0 || (seen ^ invert)==0 ){
82339         return 0;
82340       }
82341     }else if( esc==c && !prevEscape ){
82342       prevEscape = 1;
82343     }else{
82344       c2 = sqlite3Utf8Read(zString, &zString);
82345       if( noCase ){
82346         GlogUpperToLower(c);
82347         GlogUpperToLower(c2);
82348       }
82349       if( c!=c2 ){
82350         return 0;
82351       }
82352       prevEscape = 0;
82353     }
82354   }
82355   return *zString==0;
82356 }
82357
82358 /*
82359 ** Count the number of times that the LIKE operator (or GLOB which is
82360 ** just a variation of LIKE) gets called.  This is used for testing
82361 ** only.
82362 */
82363 #ifdef SQLITE_TEST
82364 SQLITE_API int sqlite3_like_count = 0;
82365 #endif
82366
82367
82368 /*
82369 ** Implementation of the like() SQL function.  This function implements
82370 ** the build-in LIKE operator.  The first argument to the function is the
82371 ** pattern and the second argument is the string.  So, the SQL statements:
82372 **
82373 **       A LIKE B
82374 **
82375 ** is implemented as like(B,A).
82376 **
82377 ** This same function (with a different compareInfo structure) computes
82378 ** the GLOB operator.
82379 */
82380 static void likeFunc(
82381   sqlite3_context *context, 
82382   int argc, 
82383   sqlite3_value **argv
82384 ){
82385   const unsigned char *zA, *zB;
82386   int escape = 0;
82387   int nPat;
82388   sqlite3 *db = sqlite3_context_db_handle(context);
82389
82390   zB = sqlite3_value_text(argv[0]);
82391   zA = sqlite3_value_text(argv[1]);
82392
82393   /* Limit the length of the LIKE or GLOB pattern to avoid problems
82394   ** of deep recursion and N*N behavior in patternCompare().
82395   */
82396   nPat = sqlite3_value_bytes(argv[0]);
82397   testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
82398   testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
82399   if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
82400     sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
82401     return;
82402   }
82403   assert( zB==sqlite3_value_text(argv[0]) );  /* Encoding did not change */
82404
82405   if( argc==3 ){
82406     /* The escape character string must consist of a single UTF-8 character.
82407     ** Otherwise, return an error.
82408     */
82409     const unsigned char *zEsc = sqlite3_value_text(argv[2]);
82410     if( zEsc==0 ) return;
82411     if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
82412       sqlite3_result_error(context, 
82413           "ESCAPE expression must be a single character", -1);
82414       return;
82415     }
82416     escape = sqlite3Utf8Read(zEsc, &zEsc);
82417   }
82418   if( zA && zB ){
82419     struct compareInfo *pInfo = sqlite3_user_data(context);
82420 #ifdef SQLITE_TEST
82421     sqlite3_like_count++;
82422 #endif
82423     
82424     sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
82425   }
82426 }
82427
82428 /*
82429 ** Implementation of the NULLIF(x,y) function.  The result is the first
82430 ** argument if the arguments are different.  The result is NULL if the
82431 ** arguments are equal to each other.
82432 */
82433 static void nullifFunc(
82434   sqlite3_context *context,
82435   int NotUsed,
82436   sqlite3_value **argv
82437 ){
82438   CollSeq *pColl = sqlite3GetFuncCollSeq(context);
82439   UNUSED_PARAMETER(NotUsed);
82440   if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
82441     sqlite3_result_value(context, argv[0]);
82442   }
82443 }
82444
82445 /*
82446 ** Implementation of the sqlite_version() function.  The result is the version
82447 ** of the SQLite library that is running.
82448 */
82449 static void versionFunc(
82450   sqlite3_context *context,
82451   int NotUsed,
82452   sqlite3_value **NotUsed2
82453 ){
82454   UNUSED_PARAMETER2(NotUsed, NotUsed2);
82455   /* IMP: R-48699-48617 This function is an SQL wrapper around the
82456   ** sqlite3_libversion() C-interface. */
82457   sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
82458 }
82459
82460 /*
82461 ** Implementation of the sqlite_source_id() function. The result is a string
82462 ** that identifies the particular version of the source code used to build
82463 ** SQLite.
82464 */
82465 static void sourceidFunc(
82466   sqlite3_context *context,
82467   int NotUsed,
82468   sqlite3_value **NotUsed2
82469 ){
82470   UNUSED_PARAMETER2(NotUsed, NotUsed2);
82471   /* IMP: R-24470-31136 This function is an SQL wrapper around the
82472   ** sqlite3_sourceid() C interface. */
82473   sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
82474 }
82475
82476 /*
82477 ** Implementation of the sqlite_compileoption_used() function.
82478 ** The result is an integer that identifies if the compiler option
82479 ** was used to build SQLite.
82480 */
82481 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
82482 static void compileoptionusedFunc(
82483   sqlite3_context *context,
82484   int argc,
82485   sqlite3_value **argv
82486 ){
82487   const char *zOptName;
82488   assert( argc==1 );
82489   UNUSED_PARAMETER(argc);
82490   /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
82491   ** function is a wrapper around the sqlite3_compileoption_used() C/C++
82492   ** function.
82493   */
82494   if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
82495     sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
82496   }
82497 }
82498 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
82499
82500 /*
82501 ** Implementation of the sqlite_compileoption_get() function. 
82502 ** The result is a string that identifies the compiler options 
82503 ** used to build SQLite.
82504 */
82505 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
82506 static void compileoptiongetFunc(
82507   sqlite3_context *context,
82508   int argc,
82509   sqlite3_value **argv
82510 ){
82511   int n;
82512   assert( argc==1 );
82513   UNUSED_PARAMETER(argc);
82514   /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
82515   ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
82516   */
82517   n = sqlite3_value_int(argv[0]);
82518   sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
82519 }
82520 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
82521
82522 /* Array for converting from half-bytes (nybbles) into ASCII hex
82523 ** digits. */
82524 static const char hexdigits[] = {
82525   '0', '1', '2', '3', '4', '5', '6', '7',
82526   '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 
82527 };
82528
82529 /*
82530 ** EXPERIMENTAL - This is not an official function.  The interface may
82531 ** change.  This function may disappear.  Do not write code that depends
82532 ** on this function.
82533 **
82534 ** Implementation of the QUOTE() function.  This function takes a single
82535 ** argument.  If the argument is numeric, the return value is the same as
82536 ** the argument.  If the argument is NULL, the return value is the string
82537 ** "NULL".  Otherwise, the argument is enclosed in single quotes with
82538 ** single-quote escapes.
82539 */
82540 static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
82541   assert( argc==1 );
82542   UNUSED_PARAMETER(argc);
82543   switch( sqlite3_value_type(argv[0]) ){
82544     case SQLITE_INTEGER:
82545     case SQLITE_FLOAT: {
82546       sqlite3_result_value(context, argv[0]);
82547       break;
82548     }
82549     case SQLITE_BLOB: {
82550       char *zText = 0;
82551       char const *zBlob = sqlite3_value_blob(argv[0]);
82552       int nBlob = sqlite3_value_bytes(argv[0]);
82553       assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
82554       zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4); 
82555       if( zText ){
82556         int i;
82557         for(i=0; i<nBlob; i++){
82558           zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
82559           zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
82560         }
82561         zText[(nBlob*2)+2] = '\'';
82562         zText[(nBlob*2)+3] = '\0';
82563         zText[0] = 'X';
82564         zText[1] = '\'';
82565         sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
82566         sqlite3_free(zText);
82567       }
82568       break;
82569     }
82570     case SQLITE_TEXT: {
82571       int i,j;
82572       u64 n;
82573       const unsigned char *zArg = sqlite3_value_text(argv[0]);
82574       char *z;
82575
82576       if( zArg==0 ) return;
82577       for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
82578       z = contextMalloc(context, ((i64)i)+((i64)n)+3);
82579       if( z ){
82580         z[0] = '\'';
82581         for(i=0, j=1; zArg[i]; i++){
82582           z[j++] = zArg[i];
82583           if( zArg[i]=='\'' ){
82584             z[j++] = '\'';
82585           }
82586         }
82587         z[j++] = '\'';
82588         z[j] = 0;
82589         sqlite3_result_text(context, z, j, sqlite3_free);
82590       }
82591       break;
82592     }
82593     default: {
82594       assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
82595       sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
82596       break;
82597     }
82598   }
82599 }
82600
82601 /*
82602 ** The hex() function.  Interpret the argument as a blob.  Return
82603 ** a hexadecimal rendering as text.
82604 */
82605 static void hexFunc(
82606   sqlite3_context *context,
82607   int argc,
82608   sqlite3_value **argv
82609 ){
82610   int i, n;
82611   const unsigned char *pBlob;
82612   char *zHex, *z;
82613   assert( argc==1 );
82614   UNUSED_PARAMETER(argc);
82615   pBlob = sqlite3_value_blob(argv[0]);
82616   n = sqlite3_value_bytes(argv[0]);
82617   assert( pBlob==sqlite3_value_blob(argv[0]) );  /* No encoding change */
82618   z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
82619   if( zHex ){
82620     for(i=0; i<n; i++, pBlob++){
82621       unsigned char c = *pBlob;
82622       *(z++) = hexdigits[(c>>4)&0xf];
82623       *(z++) = hexdigits[c&0xf];
82624     }
82625     *z = 0;
82626     sqlite3_result_text(context, zHex, n*2, sqlite3_free);
82627   }
82628 }
82629
82630 /*
82631 ** The zeroblob(N) function returns a zero-filled blob of size N bytes.
82632 */
82633 static void zeroblobFunc(
82634   sqlite3_context *context,
82635   int argc,
82636   sqlite3_value **argv
82637 ){
82638   i64 n;
82639   sqlite3 *db = sqlite3_context_db_handle(context);
82640   assert( argc==1 );
82641   UNUSED_PARAMETER(argc);
82642   n = sqlite3_value_int64(argv[0]);
82643   testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
82644   testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
82645   if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
82646     sqlite3_result_error_toobig(context);
82647   }else{
82648     sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */
82649   }
82650 }
82651
82652 /*
82653 ** The replace() function.  Three arguments are all strings: call
82654 ** them A, B, and C. The result is also a string which is derived
82655 ** from A by replacing every occurance of B with C.  The match
82656 ** must be exact.  Collating sequences are not used.
82657 */
82658 static void replaceFunc(
82659   sqlite3_context *context,
82660   int argc,
82661   sqlite3_value **argv
82662 ){
82663   const unsigned char *zStr;        /* The input string A */
82664   const unsigned char *zPattern;    /* The pattern string B */
82665   const unsigned char *zRep;        /* The replacement string C */
82666   unsigned char *zOut;              /* The output */
82667   int nStr;                /* Size of zStr */
82668   int nPattern;            /* Size of zPattern */
82669   int nRep;                /* Size of zRep */
82670   i64 nOut;                /* Maximum size of zOut */
82671   int loopLimit;           /* Last zStr[] that might match zPattern[] */
82672   int i, j;                /* Loop counters */
82673
82674   assert( argc==3 );
82675   UNUSED_PARAMETER(argc);
82676   zStr = sqlite3_value_text(argv[0]);
82677   if( zStr==0 ) return;
82678   nStr = sqlite3_value_bytes(argv[0]);
82679   assert( zStr==sqlite3_value_text(argv[0]) );  /* No encoding change */
82680   zPattern = sqlite3_value_text(argv[1]);
82681   if( zPattern==0 ){
82682     assert( sqlite3_value_type(argv[1])==SQLITE_NULL
82683             || sqlite3_context_db_handle(context)->mallocFailed );
82684     return;
82685   }
82686   if( zPattern[0]==0 ){
82687     assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
82688     sqlite3_result_value(context, argv[0]);
82689     return;
82690   }
82691   nPattern = sqlite3_value_bytes(argv[1]);
82692   assert( zPattern==sqlite3_value_text(argv[1]) );  /* No encoding change */
82693   zRep = sqlite3_value_text(argv[2]);
82694   if( zRep==0 ) return;
82695   nRep = sqlite3_value_bytes(argv[2]);
82696   assert( zRep==sqlite3_value_text(argv[2]) );
82697   nOut = nStr + 1;
82698   assert( nOut<SQLITE_MAX_LENGTH );
82699   zOut = contextMalloc(context, (i64)nOut);
82700   if( zOut==0 ){
82701     return;
82702   }
82703   loopLimit = nStr - nPattern;  
82704   for(i=j=0; i<=loopLimit; i++){
82705     if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
82706       zOut[j++] = zStr[i];
82707     }else{
82708       u8 *zOld;
82709       sqlite3 *db = sqlite3_context_db_handle(context);
82710       nOut += nRep - nPattern;
82711       testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
82712       testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
82713       if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
82714         sqlite3_result_error_toobig(context);
82715         sqlite3_free(zOut);
82716         return;
82717       }
82718       zOld = zOut;
82719       zOut = sqlite3_realloc(zOut, (int)nOut);
82720       if( zOut==0 ){
82721         sqlite3_result_error_nomem(context);
82722         sqlite3_free(zOld);
82723         return;
82724       }
82725       memcpy(&zOut[j], zRep, nRep);
82726       j += nRep;
82727       i += nPattern-1;
82728     }
82729   }
82730   assert( j+nStr-i+1==nOut );
82731   memcpy(&zOut[j], &zStr[i], nStr-i);
82732   j += nStr - i;
82733   assert( j<=nOut );
82734   zOut[j] = 0;
82735   sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
82736 }
82737
82738 /*
82739 ** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
82740 ** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
82741 */
82742 static void trimFunc(
82743   sqlite3_context *context,
82744   int argc,
82745   sqlite3_value **argv
82746 ){
82747   const unsigned char *zIn;         /* Input string */
82748   const unsigned char *zCharSet;    /* Set of characters to trim */
82749   int nIn;                          /* Number of bytes in input */
82750   int flags;                        /* 1: trimleft  2: trimright  3: trim */
82751   int i;                            /* Loop counter */
82752   unsigned char *aLen = 0;          /* Length of each character in zCharSet */
82753   unsigned char **azChar = 0;       /* Individual characters in zCharSet */
82754   int nChar;                        /* Number of characters in zCharSet */
82755
82756   if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
82757     return;
82758   }
82759   zIn = sqlite3_value_text(argv[0]);
82760   if( zIn==0 ) return;
82761   nIn = sqlite3_value_bytes(argv[0]);
82762   assert( zIn==sqlite3_value_text(argv[0]) );
82763   if( argc==1 ){
82764     static const unsigned char lenOne[] = { 1 };
82765     static unsigned char * const azOne[] = { (u8*)" " };
82766     nChar = 1;
82767     aLen = (u8*)lenOne;
82768     azChar = (unsigned char **)azOne;
82769     zCharSet = 0;
82770   }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
82771     return;
82772   }else{
82773     const unsigned char *z;
82774     for(z=zCharSet, nChar=0; *z; nChar++){
82775       SQLITE_SKIP_UTF8(z);
82776     }
82777     if( nChar>0 ){
82778       azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
82779       if( azChar==0 ){
82780         return;
82781       }
82782       aLen = (unsigned char*)&azChar[nChar];
82783       for(z=zCharSet, nChar=0; *z; nChar++){
82784         azChar[nChar] = (unsigned char *)z;
82785         SQLITE_SKIP_UTF8(z);
82786         aLen[nChar] = (u8)(z - azChar[nChar]);
82787       }
82788     }
82789   }
82790   if( nChar>0 ){
82791     flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
82792     if( flags & 1 ){
82793       while( nIn>0 ){
82794         int len = 0;
82795         for(i=0; i<nChar; i++){
82796           len = aLen[i];
82797           if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
82798         }
82799         if( i>=nChar ) break;
82800         zIn += len;
82801         nIn -= len;
82802       }
82803     }
82804     if( flags & 2 ){
82805       while( nIn>0 ){
82806         int len = 0;
82807         for(i=0; i<nChar; i++){
82808           len = aLen[i];
82809           if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
82810         }
82811         if( i>=nChar ) break;
82812         nIn -= len;
82813       }
82814     }
82815     if( zCharSet ){
82816       sqlite3_free((void*)azChar);
82817     }
82818   }
82819   sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
82820 }
82821
82822
82823 /* IMP: R-25361-16150 This function is omitted from SQLite by default. It
82824 ** is only available if the SQLITE_SOUNDEX compile-time option is used
82825 ** when SQLite is built.
82826 */
82827 #ifdef SQLITE_SOUNDEX
82828 /*
82829 ** Compute the soundex encoding of a word.
82830 **
82831 ** IMP: R-59782-00072 The soundex(X) function returns a string that is the
82832 ** soundex encoding of the string X. 
82833 */
82834 static void soundexFunc(
82835   sqlite3_context *context,
82836   int argc,
82837   sqlite3_value **argv
82838 ){
82839   char zResult[8];
82840   const u8 *zIn;
82841   int i, j;
82842   static const unsigned char iCode[] = {
82843     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
82844     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
82845     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
82846     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
82847     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
82848     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
82849     0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
82850     1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
82851   };
82852   assert( argc==1 );
82853   zIn = (u8*)sqlite3_value_text(argv[0]);
82854   if( zIn==0 ) zIn = (u8*)"";
82855   for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
82856   if( zIn[i] ){
82857     u8 prevcode = iCode[zIn[i]&0x7f];
82858     zResult[0] = sqlite3Toupper(zIn[i]);
82859     for(j=1; j<4 && zIn[i]; i++){
82860       int code = iCode[zIn[i]&0x7f];
82861       if( code>0 ){
82862         if( code!=prevcode ){
82863           prevcode = code;
82864           zResult[j++] = code + '0';
82865         }
82866       }else{
82867         prevcode = 0;
82868       }
82869     }
82870     while( j<4 ){
82871       zResult[j++] = '0';
82872     }
82873     zResult[j] = 0;
82874     sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
82875   }else{
82876     /* IMP: R-64894-50321 The string "?000" is returned if the argument
82877     ** is NULL or contains no ASCII alphabetic characters. */
82878     sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
82879   }
82880 }
82881 #endif /* SQLITE_SOUNDEX */
82882
82883 #ifndef SQLITE_OMIT_LOAD_EXTENSION
82884 /*
82885 ** A function that loads a shared-library extension then returns NULL.
82886 */
82887 static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
82888   const char *zFile = (const char *)sqlite3_value_text(argv[0]);
82889   const char *zProc;
82890   sqlite3 *db = sqlite3_context_db_handle(context);
82891   char *zErrMsg = 0;
82892
82893   if( argc==2 ){
82894     zProc = (const char *)sqlite3_value_text(argv[1]);
82895   }else{
82896     zProc = 0;
82897   }
82898   if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
82899     sqlite3_result_error(context, zErrMsg, -1);
82900     sqlite3_free(zErrMsg);
82901   }
82902 }
82903 #endif
82904
82905
82906 /*
82907 ** An instance of the following structure holds the context of a
82908 ** sum() or avg() aggregate computation.
82909 */
82910 typedef struct SumCtx SumCtx;
82911 struct SumCtx {
82912   double rSum;      /* Floating point sum */
82913   i64 iSum;         /* Integer sum */   
82914   i64 cnt;          /* Number of elements summed */
82915   u8 overflow;      /* True if integer overflow seen */
82916   u8 approx;        /* True if non-integer value was input to the sum */
82917 };
82918
82919 /*
82920 ** Routines used to compute the sum, average, and total.
82921 **
82922 ** The SUM() function follows the (broken) SQL standard which means
82923 ** that it returns NULL if it sums over no inputs.  TOTAL returns
82924 ** 0.0 in that case.  In addition, TOTAL always returns a float where
82925 ** SUM might return an integer if it never encounters a floating point
82926 ** value.  TOTAL never fails, but SUM might through an exception if
82927 ** it overflows an integer.
82928 */
82929 static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
82930   SumCtx *p;
82931   int type;
82932   assert( argc==1 );
82933   UNUSED_PARAMETER(argc);
82934   p = sqlite3_aggregate_context(context, sizeof(*p));
82935   type = sqlite3_value_numeric_type(argv[0]);
82936   if( p && type!=SQLITE_NULL ){
82937     p->cnt++;
82938     if( type==SQLITE_INTEGER ){
82939       i64 v = sqlite3_value_int64(argv[0]);
82940       p->rSum += v;
82941       if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
82942         p->overflow = 1;
82943       }
82944     }else{
82945       p->rSum += sqlite3_value_double(argv[0]);
82946       p->approx = 1;
82947     }
82948   }
82949 }
82950 static void sumFinalize(sqlite3_context *context){
82951   SumCtx *p;
82952   p = sqlite3_aggregate_context(context, 0);
82953   if( p && p->cnt>0 ){
82954     if( p->overflow ){
82955       sqlite3_result_error(context,"integer overflow",-1);
82956     }else if( p->approx ){
82957       sqlite3_result_double(context, p->rSum);
82958     }else{
82959       sqlite3_result_int64(context, p->iSum);
82960     }
82961   }
82962 }
82963 static void avgFinalize(sqlite3_context *context){
82964   SumCtx *p;
82965   p = sqlite3_aggregate_context(context, 0);
82966   if( p && p->cnt>0 ){
82967     sqlite3_result_double(context, p->rSum/(double)p->cnt);
82968   }
82969 }
82970 static void totalFinalize(sqlite3_context *context){
82971   SumCtx *p;
82972   p = sqlite3_aggregate_context(context, 0);
82973   /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
82974   sqlite3_result_double(context, p ? p->rSum : (double)0);
82975 }
82976
82977 /*
82978 ** The following structure keeps track of state information for the
82979 ** count() aggregate function.
82980 */
82981 typedef struct CountCtx CountCtx;
82982 struct CountCtx {
82983   i64 n;
82984 };
82985
82986 /*
82987 ** Routines to implement the count() aggregate function.
82988 */
82989 static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
82990   CountCtx *p;
82991   p = sqlite3_aggregate_context(context, sizeof(*p));
82992   if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
82993     p->n++;
82994   }
82995
82996 #ifndef SQLITE_OMIT_DEPRECATED
82997   /* The sqlite3_aggregate_count() function is deprecated.  But just to make
82998   ** sure it still operates correctly, verify that its count agrees with our 
82999   ** internal count when using count(*) and when the total count can be
83000   ** expressed as a 32-bit integer. */
83001   assert( argc==1 || p==0 || p->n>0x7fffffff
83002           || p->n==sqlite3_aggregate_count(context) );
83003 #endif
83004 }   
83005 static void countFinalize(sqlite3_context *context){
83006   CountCtx *p;
83007   p = sqlite3_aggregate_context(context, 0);
83008   sqlite3_result_int64(context, p ? p->n : 0);
83009 }
83010
83011 /*
83012 ** Routines to implement min() and max() aggregate functions.
83013 */
83014 static void minmaxStep(
83015   sqlite3_context *context, 
83016   int NotUsed, 
83017   sqlite3_value **argv
83018 ){
83019   Mem *pArg  = (Mem *)argv[0];
83020   Mem *pBest;
83021   UNUSED_PARAMETER(NotUsed);
83022
83023   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
83024   pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
83025   if( !pBest ) return;
83026
83027   if( pBest->flags ){
83028     int max;
83029     int cmp;
83030     CollSeq *pColl = sqlite3GetFuncCollSeq(context);
83031     /* This step function is used for both the min() and max() aggregates,
83032     ** the only difference between the two being that the sense of the
83033     ** comparison is inverted. For the max() aggregate, the
83034     ** sqlite3_user_data() function returns (void *)-1. For min() it
83035     ** returns (void *)db, where db is the sqlite3* database pointer.
83036     ** Therefore the next statement sets variable 'max' to 1 for the max()
83037     ** aggregate, or 0 for min().
83038     */
83039     max = sqlite3_user_data(context)!=0;
83040     cmp = sqlite3MemCompare(pBest, pArg, pColl);
83041     if( (max && cmp<0) || (!max && cmp>0) ){
83042       sqlite3VdbeMemCopy(pBest, pArg);
83043     }
83044   }else{
83045     sqlite3VdbeMemCopy(pBest, pArg);
83046   }
83047 }
83048 static void minMaxFinalize(sqlite3_context *context){
83049   sqlite3_value *pRes;
83050   pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
83051   if( pRes ){
83052     if( ALWAYS(pRes->flags) ){
83053       sqlite3_result_value(context, pRes);
83054     }
83055     sqlite3VdbeMemRelease(pRes);
83056   }
83057 }
83058
83059 /*
83060 ** group_concat(EXPR, ?SEPARATOR?)
83061 */
83062 static void groupConcatStep(
83063   sqlite3_context *context,
83064   int argc,
83065   sqlite3_value **argv
83066 ){
83067   const char *zVal;
83068   StrAccum *pAccum;
83069   const char *zSep;
83070   int nVal, nSep;
83071   assert( argc==1 || argc==2 );
83072   if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
83073   pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
83074
83075   if( pAccum ){
83076     sqlite3 *db = sqlite3_context_db_handle(context);
83077     int firstTerm = pAccum->useMalloc==0;
83078     pAccum->useMalloc = 2;
83079     pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
83080     if( !firstTerm ){
83081       if( argc==2 ){
83082         zSep = (char*)sqlite3_value_text(argv[1]);
83083         nSep = sqlite3_value_bytes(argv[1]);
83084       }else{
83085         zSep = ",";
83086         nSep = 1;
83087       }
83088       sqlite3StrAccumAppend(pAccum, zSep, nSep);
83089     }
83090     zVal = (char*)sqlite3_value_text(argv[0]);
83091     nVal = sqlite3_value_bytes(argv[0]);
83092     sqlite3StrAccumAppend(pAccum, zVal, nVal);
83093   }
83094 }
83095 static void groupConcatFinalize(sqlite3_context *context){
83096   StrAccum *pAccum;
83097   pAccum = sqlite3_aggregate_context(context, 0);
83098   if( pAccum ){
83099     if( pAccum->tooBig ){
83100       sqlite3_result_error_toobig(context);
83101     }else if( pAccum->mallocFailed ){
83102       sqlite3_result_error_nomem(context);
83103     }else{    
83104       sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1, 
83105                           sqlite3_free);
83106     }
83107   }
83108 }
83109
83110 /*
83111 ** This routine does per-connection function registration.  Most
83112 ** of the built-in functions above are part of the global function set.
83113 ** This routine only deals with those that are not global.
83114 */
83115 SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
83116   int rc = sqlite3_overload_function(db, "MATCH", 2);
83117   assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
83118   if( rc==SQLITE_NOMEM ){
83119     db->mallocFailed = 1;
83120   }
83121 }
83122
83123 /*
83124 ** Set the LIKEOPT flag on the 2-argument function with the given name.
83125 */
83126 static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
83127   FuncDef *pDef;
83128   pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
83129                              2, SQLITE_UTF8, 0);
83130   if( ALWAYS(pDef) ){
83131     pDef->flags = flagVal;
83132   }
83133 }
83134
83135 /*
83136 ** Register the built-in LIKE and GLOB functions.  The caseSensitive
83137 ** parameter determines whether or not the LIKE operator is case
83138 ** sensitive.  GLOB is always case sensitive.
83139 */
83140 SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
83141   struct compareInfo *pInfo;
83142   if( caseSensitive ){
83143     pInfo = (struct compareInfo*)&likeInfoAlt;
83144   }else{
83145     pInfo = (struct compareInfo*)&likeInfoNorm;
83146   }
83147   sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
83148   sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
83149   sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8, 
83150       (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
83151   setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
83152   setLikeOptFlag(db, "like", 
83153       caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
83154 }
83155
83156 /*
83157 ** pExpr points to an expression which implements a function.  If
83158 ** it is appropriate to apply the LIKE optimization to that function
83159 ** then set aWc[0] through aWc[2] to the wildcard characters and
83160 ** return TRUE.  If the function is not a LIKE-style function then
83161 ** return FALSE.
83162 */
83163 SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
83164   FuncDef *pDef;
83165   if( pExpr->op!=TK_FUNCTION 
83166    || !pExpr->x.pList 
83167    || pExpr->x.pList->nExpr!=2
83168   ){
83169     return 0;
83170   }
83171   assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
83172   pDef = sqlite3FindFunction(db, pExpr->u.zToken, 
83173                              sqlite3Strlen30(pExpr->u.zToken),
83174                              2, SQLITE_UTF8, 0);
83175   if( NEVER(pDef==0) || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
83176     return 0;
83177   }
83178
83179   /* The memcpy() statement assumes that the wildcard characters are
83180   ** the first three statements in the compareInfo structure.  The
83181   ** asserts() that follow verify that assumption
83182   */
83183   memcpy(aWc, pDef->pUserData, 3);
83184   assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
83185   assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
83186   assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
83187   *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;
83188   return 1;
83189 }
83190
83191 /*
83192 ** All all of the FuncDef structures in the aBuiltinFunc[] array above
83193 ** to the global function hash table.  This occurs at start-time (as
83194 ** a consequence of calling sqlite3_initialize()).
83195 **
83196 ** After this routine runs
83197 */
83198 SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){
83199   /*
83200   ** The following array holds FuncDef structures for all of the functions
83201   ** defined in this file.
83202   **
83203   ** The array cannot be constant since changes are made to the
83204   ** FuncDef.pHash elements at start-time.  The elements of this array
83205   ** are read-only after initialization is complete.
83206   */
83207   static SQLITE_WSD FuncDef aBuiltinFunc[] = {
83208     FUNCTION(ltrim,              1, 1, 0, trimFunc         ),
83209     FUNCTION(ltrim,              2, 1, 0, trimFunc         ),
83210     FUNCTION(rtrim,              1, 2, 0, trimFunc         ),
83211     FUNCTION(rtrim,              2, 2, 0, trimFunc         ),
83212     FUNCTION(trim,               1, 3, 0, trimFunc         ),
83213     FUNCTION(trim,               2, 3, 0, trimFunc         ),
83214     FUNCTION(min,               -1, 0, 1, minmaxFunc       ),
83215     FUNCTION(min,                0, 0, 1, 0                ),
83216     AGGREGATE(min,               1, 0, 1, minmaxStep,      minMaxFinalize ),
83217     FUNCTION(max,               -1, 1, 1, minmaxFunc       ),
83218     FUNCTION(max,                0, 1, 1, 0                ),
83219     AGGREGATE(max,               1, 1, 1, minmaxStep,      minMaxFinalize ),
83220     FUNCTION(typeof,             1, 0, 0, typeofFunc       ),
83221     FUNCTION(length,             1, 0, 0, lengthFunc       ),
83222     FUNCTION(substr,             2, 0, 0, substrFunc       ),
83223     FUNCTION(substr,             3, 0, 0, substrFunc       ),
83224     FUNCTION(abs,                1, 0, 0, absFunc          ),
83225 #ifndef SQLITE_OMIT_FLOATING_POINT
83226     FUNCTION(round,              1, 0, 0, roundFunc        ),
83227     FUNCTION(round,              2, 0, 0, roundFunc        ),
83228 #endif
83229     FUNCTION(upper,              1, 0, 0, upperFunc        ),
83230     FUNCTION(lower,              1, 0, 0, lowerFunc        ),
83231     FUNCTION(coalesce,           1, 0, 0, 0                ),
83232     FUNCTION(coalesce,           0, 0, 0, 0                ),
83233 /*  FUNCTION(coalesce,          -1, 0, 0, ifnullFunc       ), */
83234     {-1,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"coalesce",0,0},
83235     FUNCTION(hex,                1, 0, 0, hexFunc          ),
83236 /*  FUNCTION(ifnull,             2, 0, 0, ifnullFunc       ), */
83237     {2,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"ifnull",0,0},
83238     FUNCTION(random,             0, 0, 0, randomFunc       ),
83239     FUNCTION(randomblob,         1, 0, 0, randomBlob       ),
83240     FUNCTION(nullif,             2, 0, 1, nullifFunc       ),
83241     FUNCTION(sqlite_version,     0, 0, 0, versionFunc      ),
83242     FUNCTION(sqlite_source_id,   0, 0, 0, sourceidFunc     ),
83243 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
83244     FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc  ),
83245     FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc  ),
83246 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
83247     FUNCTION(quote,              1, 0, 0, quoteFunc        ),
83248     FUNCTION(last_insert_rowid,  0, 0, 0, last_insert_rowid),
83249     FUNCTION(changes,            0, 0, 0, changes          ),
83250     FUNCTION(total_changes,      0, 0, 0, total_changes    ),
83251     FUNCTION(replace,            3, 0, 0, replaceFunc      ),
83252     FUNCTION(zeroblob,           1, 0, 0, zeroblobFunc     ),
83253   #ifdef SQLITE_SOUNDEX
83254     FUNCTION(soundex,            1, 0, 0, soundexFunc      ),
83255   #endif
83256   #ifndef SQLITE_OMIT_LOAD_EXTENSION
83257     FUNCTION(load_extension,     1, 0, 0, loadExt          ),
83258     FUNCTION(load_extension,     2, 0, 0, loadExt          ),
83259   #endif
83260     AGGREGATE(sum,               1, 0, 0, sumStep,         sumFinalize    ),
83261     AGGREGATE(total,             1, 0, 0, sumStep,         totalFinalize    ),
83262     AGGREGATE(avg,               1, 0, 0, sumStep,         avgFinalize    ),
83263  /* AGGREGATE(count,             0, 0, 0, countStep,       countFinalize  ), */
83264     {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0},
83265     AGGREGATE(count,             1, 0, 0, countStep,       countFinalize  ),
83266     AGGREGATE(group_concat,      1, 0, 0, groupConcatStep, groupConcatFinalize),
83267     AGGREGATE(group_concat,      2, 0, 0, groupConcatStep, groupConcatFinalize),
83268   
83269     LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
83270   #ifdef SQLITE_CASE_SENSITIVE_LIKE
83271     LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
83272     LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
83273   #else
83274     LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
83275     LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
83276   #endif
83277   };
83278
83279   int i;
83280   FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
83281   FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
83282
83283   for(i=0; i<ArraySize(aBuiltinFunc); i++){
83284     sqlite3FuncDefInsert(pHash, &aFunc[i]);
83285   }
83286   sqlite3RegisterDateTimeFunctions();
83287 #ifndef SQLITE_OMIT_ALTERTABLE
83288   sqlite3AlterFunctions();
83289 #endif
83290 }
83291
83292 /************** End of func.c ************************************************/
83293 /************** Begin file fkey.c ********************************************/
83294 /*
83295 **
83296 ** The author disclaims copyright to this source code.  In place of
83297 ** a legal notice, here is a blessing:
83298 **
83299 **    May you do good and not evil.
83300 **    May you find forgiveness for yourself and forgive others.
83301 **    May you share freely, never taking more than you give.
83302 **
83303 *************************************************************************
83304 ** This file contains code used by the compiler to add foreign key
83305 ** support to compiled SQL statements.
83306 */
83307
83308 #ifndef SQLITE_OMIT_FOREIGN_KEY
83309 #ifndef SQLITE_OMIT_TRIGGER
83310
83311 /*
83312 ** Deferred and Immediate FKs
83313 ** --------------------------
83314 **
83315 ** Foreign keys in SQLite come in two flavours: deferred and immediate.
83316 ** If an immediate foreign key constraint is violated, SQLITE_CONSTRAINT
83317 ** is returned and the current statement transaction rolled back. If a 
83318 ** deferred foreign key constraint is violated, no action is taken 
83319 ** immediately. However if the application attempts to commit the 
83320 ** transaction before fixing the constraint violation, the attempt fails.
83321 **
83322 ** Deferred constraints are implemented using a simple counter associated
83323 ** with the database handle. The counter is set to zero each time a 
83324 ** database transaction is opened. Each time a statement is executed 
83325 ** that causes a foreign key violation, the counter is incremented. Each
83326 ** time a statement is executed that removes an existing violation from
83327 ** the database, the counter is decremented. When the transaction is
83328 ** committed, the commit fails if the current value of the counter is
83329 ** greater than zero. This scheme has two big drawbacks:
83330 **
83331 **   * When a commit fails due to a deferred foreign key constraint, 
83332 **     there is no way to tell which foreign constraint is not satisfied,
83333 **     or which row it is not satisfied for.
83334 **
83335 **   * If the database contains foreign key violations when the 
83336 **     transaction is opened, this may cause the mechanism to malfunction.
83337 **
83338 ** Despite these problems, this approach is adopted as it seems simpler
83339 ** than the alternatives.
83340 **
83341 ** INSERT operations:
83342 **
83343 **   I.1) For each FK for which the table is the child table, search
83344 **        the parent table for a match. If none is found increment the
83345 **        constraint counter.
83346 **
83347 **   I.2) For each FK for which the table is the parent table, 
83348 **        search the child table for rows that correspond to the new
83349 **        row in the parent table. Decrement the counter for each row
83350 **        found (as the constraint is now satisfied).
83351 **
83352 ** DELETE operations:
83353 **
83354 **   D.1) For each FK for which the table is the child table, 
83355 **        search the parent table for a row that corresponds to the 
83356 **        deleted row in the child table. If such a row is not found, 
83357 **        decrement the counter.
83358 **
83359 **   D.2) For each FK for which the table is the parent table, search 
83360 **        the child table for rows that correspond to the deleted row 
83361 **        in the parent table. For each found increment the counter.
83362 **
83363 ** UPDATE operations:
83364 **
83365 **   An UPDATE command requires that all 4 steps above are taken, but only
83366 **   for FK constraints for which the affected columns are actually 
83367 **   modified (values must be compared at runtime).
83368 **
83369 ** Note that I.1 and D.1 are very similar operations, as are I.2 and D.2.
83370 ** This simplifies the implementation a bit.
83371 **
83372 ** For the purposes of immediate FK constraints, the OR REPLACE conflict
83373 ** resolution is considered to delete rows before the new row is inserted.
83374 ** If a delete caused by OR REPLACE violates an FK constraint, an exception
83375 ** is thrown, even if the FK constraint would be satisfied after the new 
83376 ** row is inserted.
83377 **
83378 ** Immediate constraints are usually handled similarly. The only difference 
83379 ** is that the counter used is stored as part of each individual statement
83380 ** object (struct Vdbe). If, after the statement has run, its immediate
83381 ** constraint counter is greater than zero, it returns SQLITE_CONSTRAINT
83382 ** and the statement transaction is rolled back. An exception is an INSERT
83383 ** statement that inserts a single row only (no triggers). In this case,
83384 ** instead of using a counter, an exception is thrown immediately if the
83385 ** INSERT violates a foreign key constraint. This is necessary as such
83386 ** an INSERT does not open a statement transaction.
83387 **
83388 ** TODO: How should dropping a table be handled? How should renaming a 
83389 ** table be handled?
83390 **
83391 **
83392 ** Query API Notes
83393 ** ---------------
83394 **
83395 ** Before coding an UPDATE or DELETE row operation, the code-generator
83396 ** for those two operations needs to know whether or not the operation
83397 ** requires any FK processing and, if so, which columns of the original
83398 ** row are required by the FK processing VDBE code (i.e. if FKs were
83399 ** implemented using triggers, which of the old.* columns would be 
83400 ** accessed). No information is required by the code-generator before
83401 ** coding an INSERT operation. The functions used by the UPDATE/DELETE
83402 ** generation code to query for this information are:
83403 **
83404 **   sqlite3FkRequired() - Test to see if FK processing is required.
83405 **   sqlite3FkOldmask()  - Query for the set of required old.* columns.
83406 **
83407 **
83408 ** Externally accessible module functions
83409 ** --------------------------------------
83410 **
83411 **   sqlite3FkCheck()    - Check for foreign key violations.
83412 **   sqlite3FkActions()  - Code triggers for ON UPDATE/ON DELETE actions.
83413 **   sqlite3FkDelete()   - Delete an FKey structure.
83414 */
83415
83416 /*
83417 ** VDBE Calling Convention
83418 ** -----------------------
83419 **
83420 ** Example:
83421 **
83422 **   For the following INSERT statement:
83423 **
83424 **     CREATE TABLE t1(a, b INTEGER PRIMARY KEY, c);
83425 **     INSERT INTO t1 VALUES(1, 2, 3.1);
83426 **
83427 **   Register (x):        2    (type integer)
83428 **   Register (x+1):      1    (type integer)
83429 **   Register (x+2):      NULL (type NULL)
83430 **   Register (x+3):      3.1  (type real)
83431 */
83432
83433 /*
83434 ** A foreign key constraint requires that the key columns in the parent
83435 ** table are collectively subject to a UNIQUE or PRIMARY KEY constraint.
83436 ** Given that pParent is the parent table for foreign key constraint pFKey, 
83437 ** search the schema a unique index on the parent key columns. 
83438 **
83439 ** If successful, zero is returned. If the parent key is an INTEGER PRIMARY 
83440 ** KEY column, then output variable *ppIdx is set to NULL. Otherwise, *ppIdx 
83441 ** is set to point to the unique index. 
83442 ** 
83443 ** If the parent key consists of a single column (the foreign key constraint
83444 ** is not a composite foreign key), output variable *paiCol is set to NULL.
83445 ** Otherwise, it is set to point to an allocated array of size N, where
83446 ** N is the number of columns in the parent key. The first element of the
83447 ** array is the index of the child table column that is mapped by the FK
83448 ** constraint to the parent table column stored in the left-most column
83449 ** of index *ppIdx. The second element of the array is the index of the
83450 ** child table column that corresponds to the second left-most column of
83451 ** *ppIdx, and so on.
83452 **
83453 ** If the required index cannot be found, either because:
83454 **
83455 **   1) The named parent key columns do not exist, or
83456 **
83457 **   2) The named parent key columns do exist, but are not subject to a
83458 **      UNIQUE or PRIMARY KEY constraint, or
83459 **
83460 **   3) No parent key columns were provided explicitly as part of the
83461 **      foreign key definition, and the parent table does not have a
83462 **      PRIMARY KEY, or
83463 **
83464 **   4) No parent key columns were provided explicitly as part of the
83465 **      foreign key definition, and the PRIMARY KEY of the parent table 
83466 **      consists of a a different number of columns to the child key in 
83467 **      the child table.
83468 **
83469 ** then non-zero is returned, and a "foreign key mismatch" error loaded
83470 ** into pParse. If an OOM error occurs, non-zero is returned and the
83471 ** pParse->db->mallocFailed flag is set.
83472 */
83473 static int locateFkeyIndex(
83474   Parse *pParse,                  /* Parse context to store any error in */
83475   Table *pParent,                 /* Parent table of FK constraint pFKey */
83476   FKey *pFKey,                    /* Foreign key to find index for */
83477   Index **ppIdx,                  /* OUT: Unique index on parent table */
83478   int **paiCol                    /* OUT: Map of index columns in pFKey */
83479 ){
83480   Index *pIdx = 0;                    /* Value to return via *ppIdx */
83481   int *aiCol = 0;                     /* Value to return via *paiCol */
83482   int nCol = pFKey->nCol;             /* Number of columns in parent key */
83483   char *zKey = pFKey->aCol[0].zCol;   /* Name of left-most parent key column */
83484
83485   /* The caller is responsible for zeroing output parameters. */
83486   assert( ppIdx && *ppIdx==0 );
83487   assert( !paiCol || *paiCol==0 );
83488   assert( pParse );
83489
83490   /* If this is a non-composite (single column) foreign key, check if it 
83491   ** maps to the INTEGER PRIMARY KEY of table pParent. If so, leave *ppIdx 
83492   ** and *paiCol set to zero and return early. 
83493   **
83494   ** Otherwise, for a composite foreign key (more than one column), allocate
83495   ** space for the aiCol array (returned via output parameter *paiCol).
83496   ** Non-composite foreign keys do not require the aiCol array.
83497   */
83498   if( nCol==1 ){
83499     /* The FK maps to the IPK if any of the following are true:
83500     **
83501     **   1) There is an INTEGER PRIMARY KEY column and the FK is implicitly 
83502     **      mapped to the primary key of table pParent, or
83503     **   2) The FK is explicitly mapped to a column declared as INTEGER
83504     **      PRIMARY KEY.
83505     */
83506     if( pParent->iPKey>=0 ){
83507       if( !zKey ) return 0;
83508       if( !sqlite3StrICmp(pParent->aCol[pParent->iPKey].zName, zKey) ) return 0;
83509     }
83510   }else if( paiCol ){
83511     assert( nCol>1 );
83512     aiCol = (int *)sqlite3DbMallocRaw(pParse->db, nCol*sizeof(int));
83513     if( !aiCol ) return 1;
83514     *paiCol = aiCol;
83515   }
83516
83517   for(pIdx=pParent->pIndex; pIdx; pIdx=pIdx->pNext){
83518     if( pIdx->nColumn==nCol && pIdx->onError!=OE_None ){ 
83519       /* pIdx is a UNIQUE index (or a PRIMARY KEY) and has the right number
83520       ** of columns. If each indexed column corresponds to a foreign key
83521       ** column of pFKey, then this index is a winner.  */
83522
83523       if( zKey==0 ){
83524         /* If zKey is NULL, then this foreign key is implicitly mapped to 
83525         ** the PRIMARY KEY of table pParent. The PRIMARY KEY index may be 
83526         ** identified by the test (Index.autoIndex==2).  */
83527         if( pIdx->autoIndex==2 ){
83528           if( aiCol ){
83529             int i;
83530             for(i=0; i<nCol; i++) aiCol[i] = pFKey->aCol[i].iFrom;
83531           }
83532           break;
83533         }
83534       }else{
83535         /* If zKey is non-NULL, then this foreign key was declared to
83536         ** map to an explicit list of columns in table pParent. Check if this
83537         ** index matches those columns. Also, check that the index uses
83538         ** the default collation sequences for each column. */
83539         int i, j;
83540         for(i=0; i<nCol; i++){
83541           int iCol = pIdx->aiColumn[i];     /* Index of column in parent tbl */
83542           char *zDfltColl;                  /* Def. collation for column */
83543           char *zIdxCol;                    /* Name of indexed column */
83544
83545           /* If the index uses a collation sequence that is different from
83546           ** the default collation sequence for the column, this index is
83547           ** unusable. Bail out early in this case.  */
83548           zDfltColl = pParent->aCol[iCol].zColl;
83549           if( !zDfltColl ){
83550             zDfltColl = "BINARY";
83551           }
83552           if( sqlite3StrICmp(pIdx->azColl[i], zDfltColl) ) break;
83553
83554           zIdxCol = pParent->aCol[iCol].zName;
83555           for(j=0; j<nCol; j++){
83556             if( sqlite3StrICmp(pFKey->aCol[j].zCol, zIdxCol)==0 ){
83557               if( aiCol ) aiCol[i] = pFKey->aCol[j].iFrom;
83558               break;
83559             }
83560           }
83561           if( j==nCol ) break;
83562         }
83563         if( i==nCol ) break;      /* pIdx is usable */
83564       }
83565     }
83566   }
83567
83568   if( !pIdx ){
83569     if( !pParse->disableTriggers ){
83570       sqlite3ErrorMsg(pParse, "foreign key mismatch");
83571     }
83572     sqlite3DbFree(pParse->db, aiCol);
83573     return 1;
83574   }
83575
83576   *ppIdx = pIdx;
83577   return 0;
83578 }
83579
83580 /*
83581 ** This function is called when a row is inserted into or deleted from the 
83582 ** child table of foreign key constraint pFKey. If an SQL UPDATE is executed 
83583 ** on the child table of pFKey, this function is invoked twice for each row
83584 ** affected - once to "delete" the old row, and then again to "insert" the
83585 ** new row.
83586 **
83587 ** Each time it is called, this function generates VDBE code to locate the
83588 ** row in the parent table that corresponds to the row being inserted into 
83589 ** or deleted from the child table. If the parent row can be found, no 
83590 ** special action is taken. Otherwise, if the parent row can *not* be
83591 ** found in the parent table:
83592 **
83593 **   Operation | FK type   | Action taken
83594 **   --------------------------------------------------------------------------
83595 **   INSERT      immediate   Increment the "immediate constraint counter".
83596 **
83597 **   DELETE      immediate   Decrement the "immediate constraint counter".
83598 **
83599 **   INSERT      deferred    Increment the "deferred constraint counter".
83600 **
83601 **   DELETE      deferred    Decrement the "deferred constraint counter".
83602 **
83603 ** These operations are identified in the comment at the top of this file 
83604 ** (fkey.c) as "I.1" and "D.1".
83605 */
83606 static void fkLookupParent(
83607   Parse *pParse,        /* Parse context */
83608   int iDb,              /* Index of database housing pTab */
83609   Table *pTab,          /* Parent table of FK pFKey */
83610   Index *pIdx,          /* Unique index on parent key columns in pTab */
83611   FKey *pFKey,          /* Foreign key constraint */
83612   int *aiCol,           /* Map from parent key columns to child table columns */
83613   int regData,          /* Address of array containing child table row */
83614   int nIncr,            /* Increment constraint counter by this */
83615   int isIgnore          /* If true, pretend pTab contains all NULL values */
83616 ){
83617   int i;                                    /* Iterator variable */
83618   Vdbe *v = sqlite3GetVdbe(pParse);         /* Vdbe to add code to */
83619   int iCur = pParse->nTab - 1;              /* Cursor number to use */
83620   int iOk = sqlite3VdbeMakeLabel(v);        /* jump here if parent key found */
83621
83622   /* If nIncr is less than zero, then check at runtime if there are any
83623   ** outstanding constraints to resolve. If there are not, there is no need
83624   ** to check if deleting this row resolves any outstanding violations.
83625   **
83626   ** Check if any of the key columns in the child table row are NULL. If 
83627   ** any are, then the constraint is considered satisfied. No need to 
83628   ** search for a matching row in the parent table.  */
83629   if( nIncr<0 ){
83630     sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, iOk);
83631   }
83632   for(i=0; i<pFKey->nCol; i++){
83633     int iReg = aiCol[i] + regData + 1;
83634     sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iOk);
83635   }
83636
83637   if( isIgnore==0 ){
83638     if( pIdx==0 ){
83639       /* If pIdx is NULL, then the parent key is the INTEGER PRIMARY KEY
83640       ** column of the parent table (table pTab).  */
83641       int iMustBeInt;               /* Address of MustBeInt instruction */
83642       int regTemp = sqlite3GetTempReg(pParse);
83643   
83644       /* Invoke MustBeInt to coerce the child key value to an integer (i.e. 
83645       ** apply the affinity of the parent key). If this fails, then there
83646       ** is no matching parent key. Before using MustBeInt, make a copy of
83647       ** the value. Otherwise, the value inserted into the child key column
83648       ** will have INTEGER affinity applied to it, which may not be correct.  */
83649       sqlite3VdbeAddOp2(v, OP_SCopy, aiCol[0]+1+regData, regTemp);
83650       iMustBeInt = sqlite3VdbeAddOp2(v, OP_MustBeInt, regTemp, 0);
83651   
83652       /* If the parent table is the same as the child table, and we are about
83653       ** to increment the constraint-counter (i.e. this is an INSERT operation),
83654       ** then check if the row being inserted matches itself. If so, do not
83655       ** increment the constraint-counter.  */
83656       if( pTab==pFKey->pFrom && nIncr==1 ){
83657         sqlite3VdbeAddOp3(v, OP_Eq, regData, iOk, regTemp);
83658       }
83659   
83660       sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenRead);
83661       sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regTemp);
83662       sqlite3VdbeAddOp2(v, OP_Goto, 0, iOk);
83663       sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2);
83664       sqlite3VdbeJumpHere(v, iMustBeInt);
83665       sqlite3ReleaseTempReg(pParse, regTemp);
83666     }else{
83667       int nCol = pFKey->nCol;
83668       int regTemp = sqlite3GetTempRange(pParse, nCol);
83669       int regRec = sqlite3GetTempReg(pParse);
83670       KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
83671   
83672       sqlite3VdbeAddOp3(v, OP_OpenRead, iCur, pIdx->tnum, iDb);
83673       sqlite3VdbeChangeP4(v, -1, (char*)pKey, P4_KEYINFO_HANDOFF);
83674       for(i=0; i<nCol; i++){
83675         sqlite3VdbeAddOp2(v, OP_Copy, aiCol[i]+1+regData, regTemp+i);
83676       }
83677   
83678       /* If the parent table is the same as the child table, and we are about
83679       ** to increment the constraint-counter (i.e. this is an INSERT operation),
83680       ** then check if the row being inserted matches itself. If so, do not
83681       ** increment the constraint-counter.  */
83682       if( pTab==pFKey->pFrom && nIncr==1 ){
83683         int iJump = sqlite3VdbeCurrentAddr(v) + nCol + 1;
83684         for(i=0; i<nCol; i++){
83685           int iChild = aiCol[i]+1+regData;
83686           int iParent = pIdx->aiColumn[i]+1+regData;
83687           sqlite3VdbeAddOp3(v, OP_Ne, iChild, iJump, iParent);
83688         }
83689         sqlite3VdbeAddOp2(v, OP_Goto, 0, iOk);
83690       }
83691   
83692       sqlite3VdbeAddOp3(v, OP_MakeRecord, regTemp, nCol, regRec);
83693       sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v,pIdx), P4_TRANSIENT);
83694       sqlite3VdbeAddOp4Int(v, OP_Found, iCur, iOk, regRec, 0);
83695   
83696       sqlite3ReleaseTempReg(pParse, regRec);
83697       sqlite3ReleaseTempRange(pParse, regTemp, nCol);
83698     }
83699   }
83700
83701   if( !pFKey->isDeferred && !pParse->pToplevel && !pParse->isMultiWrite ){
83702     /* Special case: If this is an INSERT statement that will insert exactly
83703     ** one row into the table, raise a constraint immediately instead of
83704     ** incrementing a counter. This is necessary as the VM code is being
83705     ** generated for will not open a statement transaction.  */
83706     assert( nIncr==1 );
83707     sqlite3HaltConstraint(
83708         pParse, OE_Abort, "foreign key constraint failed", P4_STATIC
83709     );
83710   }else{
83711     if( nIncr>0 && pFKey->isDeferred==0 ){
83712       sqlite3ParseToplevel(pParse)->mayAbort = 1;
83713     }
83714     sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr);
83715   }
83716
83717   sqlite3VdbeResolveLabel(v, iOk);
83718   sqlite3VdbeAddOp1(v, OP_Close, iCur);
83719 }
83720
83721 /*
83722 ** This function is called to generate code executed when a row is deleted
83723 ** from the parent table of foreign key constraint pFKey and, if pFKey is 
83724 ** deferred, when a row is inserted into the same table. When generating
83725 ** code for an SQL UPDATE operation, this function may be called twice -
83726 ** once to "delete" the old row and once to "insert" the new row.
83727 **
83728 ** The code generated by this function scans through the rows in the child
83729 ** table that correspond to the parent table row being deleted or inserted.
83730 ** For each child row found, one of the following actions is taken:
83731 **
83732 **   Operation | FK type   | Action taken
83733 **   --------------------------------------------------------------------------
83734 **   DELETE      immediate   Increment the "immediate constraint counter".
83735 **                           Or, if the ON (UPDATE|DELETE) action is RESTRICT,
83736 **                           throw a "foreign key constraint failed" exception.
83737 **
83738 **   INSERT      immediate   Decrement the "immediate constraint counter".
83739 **
83740 **   DELETE      deferred    Increment the "deferred constraint counter".
83741 **                           Or, if the ON (UPDATE|DELETE) action is RESTRICT,
83742 **                           throw a "foreign key constraint failed" exception.
83743 **
83744 **   INSERT      deferred    Decrement the "deferred constraint counter".
83745 **
83746 ** These operations are identified in the comment at the top of this file 
83747 ** (fkey.c) as "I.2" and "D.2".
83748 */
83749 static void fkScanChildren(
83750   Parse *pParse,                  /* Parse context */
83751   SrcList *pSrc,                  /* SrcList containing the table to scan */
83752   Table *pTab,
83753   Index *pIdx,                    /* Foreign key index */
83754   FKey *pFKey,                    /* Foreign key relationship */
83755   int *aiCol,                     /* Map from pIdx cols to child table cols */
83756   int regData,                    /* Referenced table data starts here */
83757   int nIncr                       /* Amount to increment deferred counter by */
83758 ){
83759   sqlite3 *db = pParse->db;       /* Database handle */
83760   int i;                          /* Iterator variable */
83761   Expr *pWhere = 0;               /* WHERE clause to scan with */
83762   NameContext sNameContext;       /* Context used to resolve WHERE clause */
83763   WhereInfo *pWInfo;              /* Context used by sqlite3WhereXXX() */
83764   int iFkIfZero = 0;              /* Address of OP_FkIfZero */
83765   Vdbe *v = sqlite3GetVdbe(pParse);
83766
83767   assert( !pIdx || pIdx->pTable==pTab );
83768
83769   if( nIncr<0 ){
83770     iFkIfZero = sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, 0);
83771   }
83772
83773   /* Create an Expr object representing an SQL expression like:
83774   **
83775   **   <parent-key1> = <child-key1> AND <parent-key2> = <child-key2> ...
83776   **
83777   ** The collation sequence used for the comparison should be that of
83778   ** the parent key columns. The affinity of the parent key column should
83779   ** be applied to each child key value before the comparison takes place.
83780   */
83781   for(i=0; i<pFKey->nCol; i++){
83782     Expr *pLeft;                  /* Value from parent table row */
83783     Expr *pRight;                 /* Column ref to child table */
83784     Expr *pEq;                    /* Expression (pLeft = pRight) */
83785     int iCol;                     /* Index of column in child table */ 
83786     const char *zCol;             /* Name of column in child table */
83787
83788     pLeft = sqlite3Expr(db, TK_REGISTER, 0);
83789     if( pLeft ){
83790       /* Set the collation sequence and affinity of the LHS of each TK_EQ
83791       ** expression to the parent key column defaults.  */
83792       if( pIdx ){
83793         Column *pCol;
83794         iCol = pIdx->aiColumn[i];
83795         pCol = &pTab->aCol[iCol];
83796         if( pTab->iPKey==iCol ) iCol = -1;
83797         pLeft->iTable = regData+iCol+1;
83798         pLeft->affinity = pCol->affinity;
83799         pLeft->pColl = sqlite3LocateCollSeq(pParse, pCol->zColl);
83800       }else{
83801         pLeft->iTable = regData;
83802         pLeft->affinity = SQLITE_AFF_INTEGER;
83803       }
83804     }
83805     iCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom;
83806     assert( iCol>=0 );
83807     zCol = pFKey->pFrom->aCol[iCol].zName;
83808     pRight = sqlite3Expr(db, TK_ID, zCol);
83809     pEq = sqlite3PExpr(pParse, TK_EQ, pLeft, pRight, 0);
83810     pWhere = sqlite3ExprAnd(db, pWhere, pEq);
83811   }
83812
83813   /* If the child table is the same as the parent table, and this scan
83814   ** is taking place as part of a DELETE operation (operation D.2), omit the
83815   ** row being deleted from the scan by adding ($rowid != rowid) to the WHERE 
83816   ** clause, where $rowid is the rowid of the row being deleted.  */
83817   if( pTab==pFKey->pFrom && nIncr>0 ){
83818     Expr *pEq;                    /* Expression (pLeft = pRight) */
83819     Expr *pLeft;                  /* Value from parent table row */
83820     Expr *pRight;                 /* Column ref to child table */
83821     pLeft = sqlite3Expr(db, TK_REGISTER, 0);
83822     pRight = sqlite3Expr(db, TK_COLUMN, 0);
83823     if( pLeft && pRight ){
83824       pLeft->iTable = regData;
83825       pLeft->affinity = SQLITE_AFF_INTEGER;
83826       pRight->iTable = pSrc->a[0].iCursor;
83827       pRight->iColumn = -1;
83828     }
83829     pEq = sqlite3PExpr(pParse, TK_NE, pLeft, pRight, 0);
83830     pWhere = sqlite3ExprAnd(db, pWhere, pEq);
83831   }
83832
83833   /* Resolve the references in the WHERE clause. */
83834   memset(&sNameContext, 0, sizeof(NameContext));
83835   sNameContext.pSrcList = pSrc;
83836   sNameContext.pParse = pParse;
83837   sqlite3ResolveExprNames(&sNameContext, pWhere);
83838
83839   /* Create VDBE to loop through the entries in pSrc that match the WHERE
83840   ** clause. If the constraint is not deferred, throw an exception for
83841   ** each row found. Otherwise, for deferred constraints, increment the
83842   ** deferred constraint counter by nIncr for each row selected.  */
83843   pWInfo = sqlite3WhereBegin(pParse, pSrc, pWhere, 0, 0);
83844   if( nIncr>0 && pFKey->isDeferred==0 ){
83845     sqlite3ParseToplevel(pParse)->mayAbort = 1;
83846   }
83847   sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr);
83848   if( pWInfo ){
83849     sqlite3WhereEnd(pWInfo);
83850   }
83851
83852   /* Clean up the WHERE clause constructed above. */
83853   sqlite3ExprDelete(db, pWhere);
83854   if( iFkIfZero ){
83855     sqlite3VdbeJumpHere(v, iFkIfZero);
83856   }
83857 }
83858
83859 /*
83860 ** This function returns a pointer to the head of a linked list of FK
83861 ** constraints for which table pTab is the parent table. For example,
83862 ** given the following schema:
83863 **
83864 **   CREATE TABLE t1(a PRIMARY KEY);
83865 **   CREATE TABLE t2(b REFERENCES t1(a);
83866 **
83867 ** Calling this function with table "t1" as an argument returns a pointer
83868 ** to the FKey structure representing the foreign key constraint on table
83869 ** "t2". Calling this function with "t2" as the argument would return a
83870 ** NULL pointer (as there are no FK constraints for which t2 is the parent
83871 ** table).
83872 */
83873 SQLITE_PRIVATE FKey *sqlite3FkReferences(Table *pTab){
83874   int nName = sqlite3Strlen30(pTab->zName);
83875   return (FKey *)sqlite3HashFind(&pTab->pSchema->fkeyHash, pTab->zName, nName);
83876 }
83877
83878 /*
83879 ** The second argument is a Trigger structure allocated by the 
83880 ** fkActionTrigger() routine. This function deletes the Trigger structure
83881 ** and all of its sub-components.
83882 **
83883 ** The Trigger structure or any of its sub-components may be allocated from
83884 ** the lookaside buffer belonging to database handle dbMem.
83885 */
83886 static void fkTriggerDelete(sqlite3 *dbMem, Trigger *p){
83887   if( p ){
83888     TriggerStep *pStep = p->step_list;
83889     sqlite3ExprDelete(dbMem, pStep->pWhere);
83890     sqlite3ExprListDelete(dbMem, pStep->pExprList);
83891     sqlite3SelectDelete(dbMem, pStep->pSelect);
83892     sqlite3ExprDelete(dbMem, p->pWhen);
83893     sqlite3DbFree(dbMem, p);
83894   }
83895 }
83896
83897 /*
83898 ** This function is called to generate code that runs when table pTab is
83899 ** being dropped from the database. The SrcList passed as the second argument
83900 ** to this function contains a single entry guaranteed to resolve to
83901 ** table pTab.
83902 **
83903 ** Normally, no code is required. However, if either
83904 **
83905 **   (a) The table is the parent table of a FK constraint, or
83906 **   (b) The table is the child table of a deferred FK constraint and it is
83907 **       determined at runtime that there are outstanding deferred FK 
83908 **       constraint violations in the database,
83909 **
83910 ** then the equivalent of "DELETE FROM <tbl>" is executed before dropping
83911 ** the table from the database. Triggers are disabled while running this
83912 ** DELETE, but foreign key actions are not.
83913 */
83914 SQLITE_PRIVATE void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Table *pTab){
83915   sqlite3 *db = pParse->db;
83916   if( (db->flags&SQLITE_ForeignKeys) && !IsVirtual(pTab) && !pTab->pSelect ){
83917     int iSkip = 0;
83918     Vdbe *v = sqlite3GetVdbe(pParse);
83919
83920     assert( v );                  /* VDBE has already been allocated */
83921     if( sqlite3FkReferences(pTab)==0 ){
83922       /* Search for a deferred foreign key constraint for which this table
83923       ** is the child table. If one cannot be found, return without 
83924       ** generating any VDBE code. If one can be found, then jump over
83925       ** the entire DELETE if there are no outstanding deferred constraints
83926       ** when this statement is run.  */
83927       FKey *p;
83928       for(p=pTab->pFKey; p; p=p->pNextFrom){
83929         if( p->isDeferred ) break;
83930       }
83931       if( !p ) return;
83932       iSkip = sqlite3VdbeMakeLabel(v);
83933       sqlite3VdbeAddOp2(v, OP_FkIfZero, 1, iSkip);
83934     }
83935
83936     pParse->disableTriggers = 1;
83937     sqlite3DeleteFrom(pParse, sqlite3SrcListDup(db, pName, 0), 0);
83938     pParse->disableTriggers = 0;
83939
83940     /* If the DELETE has generated immediate foreign key constraint 
83941     ** violations, halt the VDBE and return an error at this point, before
83942     ** any modifications to the schema are made. This is because statement
83943     ** transactions are not able to rollback schema changes.  */
83944     sqlite3VdbeAddOp2(v, OP_FkIfZero, 0, sqlite3VdbeCurrentAddr(v)+2);
83945     sqlite3HaltConstraint(
83946         pParse, OE_Abort, "foreign key constraint failed", P4_STATIC
83947     );
83948
83949     if( iSkip ){
83950       sqlite3VdbeResolveLabel(v, iSkip);
83951     }
83952   }
83953 }
83954
83955 /*
83956 ** This function is called when inserting, deleting or updating a row of
83957 ** table pTab to generate VDBE code to perform foreign key constraint 
83958 ** processing for the operation.
83959 **
83960 ** For a DELETE operation, parameter regOld is passed the index of the
83961 ** first register in an array of (pTab->nCol+1) registers containing the
83962 ** rowid of the row being deleted, followed by each of the column values
83963 ** of the row being deleted, from left to right. Parameter regNew is passed
83964 ** zero in this case.
83965 **
83966 ** For an INSERT operation, regOld is passed zero and regNew is passed the
83967 ** first register of an array of (pTab->nCol+1) registers containing the new
83968 ** row data.
83969 **
83970 ** For an UPDATE operation, this function is called twice. Once before
83971 ** the original record is deleted from the table using the calling convention
83972 ** described for DELETE. Then again after the original record is deleted
83973 ** but before the new record is inserted using the INSERT convention. 
83974 */
83975 SQLITE_PRIVATE void sqlite3FkCheck(
83976   Parse *pParse,                  /* Parse context */
83977   Table *pTab,                    /* Row is being deleted from this table */ 
83978   int regOld,                     /* Previous row data is stored here */
83979   int regNew                      /* New row data is stored here */
83980 ){
83981   sqlite3 *db = pParse->db;       /* Database handle */
83982   FKey *pFKey;                    /* Used to iterate through FKs */
83983   int iDb;                        /* Index of database containing pTab */
83984   const char *zDb;                /* Name of database containing pTab */
83985   int isIgnoreErrors = pParse->disableTriggers;
83986
83987   /* Exactly one of regOld and regNew should be non-zero. */
83988   assert( (regOld==0)!=(regNew==0) );
83989
83990   /* If foreign-keys are disabled, this function is a no-op. */
83991   if( (db->flags&SQLITE_ForeignKeys)==0 ) return;
83992
83993   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
83994   zDb = db->aDb[iDb].zName;
83995
83996   /* Loop through all the foreign key constraints for which pTab is the
83997   ** child table (the table that the foreign key definition is part of).  */
83998   for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){
83999     Table *pTo;                   /* Parent table of foreign key pFKey */
84000     Index *pIdx = 0;              /* Index on key columns in pTo */
84001     int *aiFree = 0;
84002     int *aiCol;
84003     int iCol;
84004     int i;
84005     int isIgnore = 0;
84006
84007     /* Find the parent table of this foreign key. Also find a unique index 
84008     ** on the parent key columns in the parent table. If either of these 
84009     ** schema items cannot be located, set an error in pParse and return 
84010     ** early.  */
84011     if( pParse->disableTriggers ){
84012       pTo = sqlite3FindTable(db, pFKey->zTo, zDb);
84013     }else{
84014       pTo = sqlite3LocateTable(pParse, 0, pFKey->zTo, zDb);
84015     }
84016     if( !pTo || locateFkeyIndex(pParse, pTo, pFKey, &pIdx, &aiFree) ){
84017       if( !isIgnoreErrors || db->mallocFailed ) return;
84018       continue;
84019     }
84020     assert( pFKey->nCol==1 || (aiFree && pIdx) );
84021
84022     if( aiFree ){
84023       aiCol = aiFree;
84024     }else{
84025       iCol = pFKey->aCol[0].iFrom;
84026       aiCol = &iCol;
84027     }
84028     for(i=0; i<pFKey->nCol; i++){
84029       if( aiCol[i]==pTab->iPKey ){
84030         aiCol[i] = -1;
84031       }
84032 #ifndef SQLITE_OMIT_AUTHORIZATION
84033       /* Request permission to read the parent key columns. If the 
84034       ** authorization callback returns SQLITE_IGNORE, behave as if any
84035       ** values read from the parent table are NULL. */
84036       if( db->xAuth ){
84037         int rcauth;
84038         char *zCol = pTo->aCol[pIdx ? pIdx->aiColumn[i] : pTo->iPKey].zName;
84039         rcauth = sqlite3AuthReadCol(pParse, pTo->zName, zCol, iDb);
84040         isIgnore = (rcauth==SQLITE_IGNORE);
84041       }
84042 #endif
84043     }
84044
84045     /* Take a shared-cache advisory read-lock on the parent table. Allocate 
84046     ** a cursor to use to search the unique index on the parent key columns 
84047     ** in the parent table.  */
84048     sqlite3TableLock(pParse, iDb, pTo->tnum, 0, pTo->zName);
84049     pParse->nTab++;
84050
84051     if( regOld!=0 ){
84052       /* A row is being removed from the child table. Search for the parent.
84053       ** If the parent does not exist, removing the child row resolves an 
84054       ** outstanding foreign key constraint violation. */
84055       fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regOld, -1,isIgnore);
84056     }
84057     if( regNew!=0 ){
84058       /* A row is being added to the child table. If a parent row cannot
84059       ** be found, adding the child row has violated the FK constraint. */ 
84060       fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regNew, +1,isIgnore);
84061     }
84062
84063     sqlite3DbFree(db, aiFree);
84064   }
84065
84066   /* Loop through all the foreign key constraints that refer to this table */
84067   for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){
84068     Index *pIdx = 0;              /* Foreign key index for pFKey */
84069     SrcList *pSrc;
84070     int *aiCol = 0;
84071
84072     if( !pFKey->isDeferred && !pParse->pToplevel && !pParse->isMultiWrite ){
84073       assert( regOld==0 && regNew!=0 );
84074       /* Inserting a single row into a parent table cannot cause an immediate
84075       ** foreign key violation. So do nothing in this case.  */
84076       continue;
84077     }
84078
84079     if( locateFkeyIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ){
84080       if( !isIgnoreErrors || db->mallocFailed ) return;
84081       continue;
84082     }
84083     assert( aiCol || pFKey->nCol==1 );
84084
84085     /* Create a SrcList structure containing a single table (the table 
84086     ** the foreign key that refers to this table is attached to). This
84087     ** is required for the sqlite3WhereXXX() interface.  */
84088     pSrc = sqlite3SrcListAppend(db, 0, 0, 0);
84089     if( pSrc ){
84090       struct SrcList_item *pItem = pSrc->a;
84091       pItem->pTab = pFKey->pFrom;
84092       pItem->zName = pFKey->pFrom->zName;
84093       pItem->pTab->nRef++;
84094       pItem->iCursor = pParse->nTab++;
84095   
84096       if( regNew!=0 ){
84097         fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regNew, -1);
84098       }
84099       if( regOld!=0 ){
84100         /* If there is a RESTRICT action configured for the current operation
84101         ** on the parent table of this FK, then throw an exception 
84102         ** immediately if the FK constraint is violated, even if this is a
84103         ** deferred trigger. That's what RESTRICT means. To defer checking
84104         ** the constraint, the FK should specify NO ACTION (represented
84105         ** using OE_None). NO ACTION is the default.  */
84106         fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regOld, 1);
84107       }
84108       pItem->zName = 0;
84109       sqlite3SrcListDelete(db, pSrc);
84110     }
84111     sqlite3DbFree(db, aiCol);
84112   }
84113 }
84114
84115 #define COLUMN_MASK(x) (((x)>31) ? 0xffffffff : ((u32)1<<(x)))
84116
84117 /*
84118 ** This function is called before generating code to update or delete a 
84119 ** row contained in table pTab.
84120 */
84121 SQLITE_PRIVATE u32 sqlite3FkOldmask(
84122   Parse *pParse,                  /* Parse context */
84123   Table *pTab                     /* Table being modified */
84124 ){
84125   u32 mask = 0;
84126   if( pParse->db->flags&SQLITE_ForeignKeys ){
84127     FKey *p;
84128     int i;
84129     for(p=pTab->pFKey; p; p=p->pNextFrom){
84130       for(i=0; i<p->nCol; i++) mask |= COLUMN_MASK(p->aCol[i].iFrom);
84131     }
84132     for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
84133       Index *pIdx = 0;
84134       locateFkeyIndex(pParse, pTab, p, &pIdx, 0);
84135       if( pIdx ){
84136         for(i=0; i<pIdx->nColumn; i++) mask |= COLUMN_MASK(pIdx->aiColumn[i]);
84137       }
84138     }
84139   }
84140   return mask;
84141 }
84142
84143 /*
84144 ** This function is called before generating code to update or delete a 
84145 ** row contained in table pTab. If the operation is a DELETE, then
84146 ** parameter aChange is passed a NULL value. For an UPDATE, aChange points
84147 ** to an array of size N, where N is the number of columns in table pTab.
84148 ** If the i'th column is not modified by the UPDATE, then the corresponding 
84149 ** entry in the aChange[] array is set to -1. If the column is modified,
84150 ** the value is 0 or greater. Parameter chngRowid is set to true if the
84151 ** UPDATE statement modifies the rowid fields of the table.
84152 **
84153 ** If any foreign key processing will be required, this function returns
84154 ** true. If there is no foreign key related processing, this function 
84155 ** returns false.
84156 */
84157 SQLITE_PRIVATE int sqlite3FkRequired(
84158   Parse *pParse,                  /* Parse context */
84159   Table *pTab,                    /* Table being modified */
84160   int *aChange,                   /* Non-NULL for UPDATE operations */
84161   int chngRowid                   /* True for UPDATE that affects rowid */
84162 ){
84163   if( pParse->db->flags&SQLITE_ForeignKeys ){
84164     if( !aChange ){
84165       /* A DELETE operation. Foreign key processing is required if the 
84166       ** table in question is either the child or parent table for any 
84167       ** foreign key constraint.  */
84168       return (sqlite3FkReferences(pTab) || pTab->pFKey);
84169     }else{
84170       /* This is an UPDATE. Foreign key processing is only required if the
84171       ** operation modifies one or more child or parent key columns. */
84172       int i;
84173       FKey *p;
84174
84175       /* Check if any child key columns are being modified. */
84176       for(p=pTab->pFKey; p; p=p->pNextFrom){
84177         for(i=0; i<p->nCol; i++){
84178           int iChildKey = p->aCol[i].iFrom;
84179           if( aChange[iChildKey]>=0 ) return 1;
84180           if( iChildKey==pTab->iPKey && chngRowid ) return 1;
84181         }
84182       }
84183
84184       /* Check if any parent key columns are being modified. */
84185       for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
84186         for(i=0; i<p->nCol; i++){
84187           char *zKey = p->aCol[i].zCol;
84188           int iKey;
84189           for(iKey=0; iKey<pTab->nCol; iKey++){
84190             Column *pCol = &pTab->aCol[iKey];
84191             if( (zKey ? !sqlite3StrICmp(pCol->zName, zKey) : pCol->isPrimKey) ){
84192               if( aChange[iKey]>=0 ) return 1;
84193               if( iKey==pTab->iPKey && chngRowid ) return 1;
84194             }
84195           }
84196         }
84197       }
84198     }
84199   }
84200   return 0;
84201 }
84202
84203 /*
84204 ** This function is called when an UPDATE or DELETE operation is being 
84205 ** compiled on table pTab, which is the parent table of foreign-key pFKey.
84206 ** If the current operation is an UPDATE, then the pChanges parameter is
84207 ** passed a pointer to the list of columns being modified. If it is a
84208 ** DELETE, pChanges is passed a NULL pointer.
84209 **
84210 ** It returns a pointer to a Trigger structure containing a trigger
84211 ** equivalent to the ON UPDATE or ON DELETE action specified by pFKey.
84212 ** If the action is "NO ACTION" or "RESTRICT", then a NULL pointer is
84213 ** returned (these actions require no special handling by the triggers
84214 ** sub-system, code for them is created by fkScanChildren()).
84215 **
84216 ** For example, if pFKey is the foreign key and pTab is table "p" in 
84217 ** the following schema:
84218 **
84219 **   CREATE TABLE p(pk PRIMARY KEY);
84220 **   CREATE TABLE c(ck REFERENCES p ON DELETE CASCADE);
84221 **
84222 ** then the returned trigger structure is equivalent to:
84223 **
84224 **   CREATE TRIGGER ... DELETE ON p BEGIN
84225 **     DELETE FROM c WHERE ck = old.pk;
84226 **   END;
84227 **
84228 ** The returned pointer is cached as part of the foreign key object. It
84229 ** is eventually freed along with the rest of the foreign key object by 
84230 ** sqlite3FkDelete().
84231 */
84232 static Trigger *fkActionTrigger(
84233   Parse *pParse,                  /* Parse context */
84234   Table *pTab,                    /* Table being updated or deleted from */
84235   FKey *pFKey,                    /* Foreign key to get action for */
84236   ExprList *pChanges              /* Change-list for UPDATE, NULL for DELETE */
84237 ){
84238   sqlite3 *db = pParse->db;       /* Database handle */
84239   int action;                     /* One of OE_None, OE_Cascade etc. */
84240   Trigger *pTrigger;              /* Trigger definition to return */
84241   int iAction = (pChanges!=0);    /* 1 for UPDATE, 0 for DELETE */
84242
84243   action = pFKey->aAction[iAction];
84244   pTrigger = pFKey->apTrigger[iAction];
84245
84246   if( action!=OE_None && !pTrigger ){
84247     u8 enableLookaside;           /* Copy of db->lookaside.bEnabled */
84248     char const *zFrom;            /* Name of child table */
84249     int nFrom;                    /* Length in bytes of zFrom */
84250     Index *pIdx = 0;              /* Parent key index for this FK */
84251     int *aiCol = 0;               /* child table cols -> parent key cols */
84252     TriggerStep *pStep = 0;        /* First (only) step of trigger program */
84253     Expr *pWhere = 0;             /* WHERE clause of trigger step */
84254     ExprList *pList = 0;          /* Changes list if ON UPDATE CASCADE */
84255     Select *pSelect = 0;          /* If RESTRICT, "SELECT RAISE(...)" */
84256     int i;                        /* Iterator variable */
84257     Expr *pWhen = 0;              /* WHEN clause for the trigger */
84258
84259     if( locateFkeyIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ) return 0;
84260     assert( aiCol || pFKey->nCol==1 );
84261
84262     for(i=0; i<pFKey->nCol; i++){
84263       Token tOld = { "old", 3 };  /* Literal "old" token */
84264       Token tNew = { "new", 3 };  /* Literal "new" token */
84265       Token tFromCol;             /* Name of column in child table */
84266       Token tToCol;               /* Name of column in parent table */
84267       int iFromCol;               /* Idx of column in child table */
84268       Expr *pEq;                  /* tFromCol = OLD.tToCol */
84269
84270       iFromCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom;
84271       assert( iFromCol>=0 );
84272       tToCol.z = pIdx ? pTab->aCol[pIdx->aiColumn[i]].zName : "oid";
84273       tFromCol.z = pFKey->pFrom->aCol[iFromCol].zName;
84274
84275       tToCol.n = sqlite3Strlen30(tToCol.z);
84276       tFromCol.n = sqlite3Strlen30(tFromCol.z);
84277
84278       /* Create the expression "OLD.zToCol = zFromCol". It is important
84279       ** that the "OLD.zToCol" term is on the LHS of the = operator, so
84280       ** that the affinity and collation sequence associated with the
84281       ** parent table are used for the comparison. */
84282       pEq = sqlite3PExpr(pParse, TK_EQ,
84283           sqlite3PExpr(pParse, TK_DOT, 
84284             sqlite3PExpr(pParse, TK_ID, 0, 0, &tOld),
84285             sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol)
84286           , 0),
84287           sqlite3PExpr(pParse, TK_ID, 0, 0, &tFromCol)
84288       , 0);
84289       pWhere = sqlite3ExprAnd(db, pWhere, pEq);
84290
84291       /* For ON UPDATE, construct the next term of the WHEN clause.
84292       ** The final WHEN clause will be like this:
84293       **
84294       **    WHEN NOT(old.col1 IS new.col1 AND ... AND old.colN IS new.colN)
84295       */
84296       if( pChanges ){
84297         pEq = sqlite3PExpr(pParse, TK_IS,
84298             sqlite3PExpr(pParse, TK_DOT, 
84299               sqlite3PExpr(pParse, TK_ID, 0, 0, &tOld),
84300               sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol),
84301               0),
84302             sqlite3PExpr(pParse, TK_DOT, 
84303               sqlite3PExpr(pParse, TK_ID, 0, 0, &tNew),
84304               sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol),
84305               0),
84306             0);
84307         pWhen = sqlite3ExprAnd(db, pWhen, pEq);
84308       }
84309   
84310       if( action!=OE_Restrict && (action!=OE_Cascade || pChanges) ){
84311         Expr *pNew;
84312         if( action==OE_Cascade ){
84313           pNew = sqlite3PExpr(pParse, TK_DOT, 
84314             sqlite3PExpr(pParse, TK_ID, 0, 0, &tNew),
84315             sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol)
84316           , 0);
84317         }else if( action==OE_SetDflt ){
84318           Expr *pDflt = pFKey->pFrom->aCol[iFromCol].pDflt;
84319           if( pDflt ){
84320             pNew = sqlite3ExprDup(db, pDflt, 0);
84321           }else{
84322             pNew = sqlite3PExpr(pParse, TK_NULL, 0, 0, 0);
84323           }
84324         }else{
84325           pNew = sqlite3PExpr(pParse, TK_NULL, 0, 0, 0);
84326         }
84327         pList = sqlite3ExprListAppend(pParse, pList, pNew);
84328         sqlite3ExprListSetName(pParse, pList, &tFromCol, 0);
84329       }
84330     }
84331     sqlite3DbFree(db, aiCol);
84332
84333     zFrom = pFKey->pFrom->zName;
84334     nFrom = sqlite3Strlen30(zFrom);
84335
84336     if( action==OE_Restrict ){
84337       Token tFrom;
84338       Expr *pRaise; 
84339
84340       tFrom.z = zFrom;
84341       tFrom.n = nFrom;
84342       pRaise = sqlite3Expr(db, TK_RAISE, "foreign key constraint failed");
84343       if( pRaise ){
84344         pRaise->affinity = OE_Abort;
84345       }
84346       pSelect = sqlite3SelectNew(pParse, 
84347           sqlite3ExprListAppend(pParse, 0, pRaise),
84348           sqlite3SrcListAppend(db, 0, &tFrom, 0),
84349           pWhere,
84350           0, 0, 0, 0, 0, 0
84351       );
84352       pWhere = 0;
84353     }
84354
84355     /* Disable lookaside memory allocation */
84356     enableLookaside = db->lookaside.bEnabled;
84357     db->lookaside.bEnabled = 0;
84358
84359     pTrigger = (Trigger *)sqlite3DbMallocZero(db, 
84360         sizeof(Trigger) +         /* struct Trigger */
84361         sizeof(TriggerStep) +     /* Single step in trigger program */
84362         nFrom + 1                 /* Space for pStep->target.z */
84363     );
84364     if( pTrigger ){
84365       pStep = pTrigger->step_list = (TriggerStep *)&pTrigger[1];
84366       pStep->target.z = (char *)&pStep[1];
84367       pStep->target.n = nFrom;
84368       memcpy((char *)pStep->target.z, zFrom, nFrom);
84369   
84370       pStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
84371       pStep->pExprList = sqlite3ExprListDup(db, pList, EXPRDUP_REDUCE);
84372       pStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
84373       if( pWhen ){
84374         pWhen = sqlite3PExpr(pParse, TK_NOT, pWhen, 0, 0);
84375         pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE);
84376       }
84377     }
84378
84379     /* Re-enable the lookaside buffer, if it was disabled earlier. */
84380     db->lookaside.bEnabled = enableLookaside;
84381
84382     sqlite3ExprDelete(db, pWhere);
84383     sqlite3ExprDelete(db, pWhen);
84384     sqlite3ExprListDelete(db, pList);
84385     sqlite3SelectDelete(db, pSelect);
84386     if( db->mallocFailed==1 ){
84387       fkTriggerDelete(db, pTrigger);
84388       return 0;
84389     }
84390
84391     switch( action ){
84392       case OE_Restrict:
84393         pStep->op = TK_SELECT; 
84394         break;
84395       case OE_Cascade: 
84396         if( !pChanges ){ 
84397           pStep->op = TK_DELETE; 
84398           break; 
84399         }
84400       default:
84401         pStep->op = TK_UPDATE;
84402     }
84403     pStep->pTrig = pTrigger;
84404     pTrigger->pSchema = pTab->pSchema;
84405     pTrigger->pTabSchema = pTab->pSchema;
84406     pFKey->apTrigger[iAction] = pTrigger;
84407     pTrigger->op = (pChanges ? TK_UPDATE : TK_DELETE);
84408   }
84409
84410   return pTrigger;
84411 }
84412
84413 /*
84414 ** This function is called when deleting or updating a row to implement
84415 ** any required CASCADE, SET NULL or SET DEFAULT actions.
84416 */
84417 SQLITE_PRIVATE void sqlite3FkActions(
84418   Parse *pParse,                  /* Parse context */
84419   Table *pTab,                    /* Table being updated or deleted from */
84420   ExprList *pChanges,             /* Change-list for UPDATE, NULL for DELETE */
84421   int regOld                      /* Address of array containing old row */
84422 ){
84423   /* If foreign-key support is enabled, iterate through all FKs that 
84424   ** refer to table pTab. If there is an action associated with the FK 
84425   ** for this operation (either update or delete), invoke the associated 
84426   ** trigger sub-program.  */
84427   if( pParse->db->flags&SQLITE_ForeignKeys ){
84428     FKey *pFKey;                  /* Iterator variable */
84429     for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){
84430       Trigger *pAction = fkActionTrigger(pParse, pTab, pFKey, pChanges);
84431       if( pAction ){
84432         sqlite3CodeRowTriggerDirect(pParse, pAction, pTab, regOld, OE_Abort, 0);
84433       }
84434     }
84435   }
84436 }
84437
84438 #endif /* ifndef SQLITE_OMIT_TRIGGER */
84439
84440 /*
84441 ** Free all memory associated with foreign key definitions attached to
84442 ** table pTab. Remove the deleted foreign keys from the Schema.fkeyHash
84443 ** hash table.
84444 */
84445 SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){
84446   FKey *pFKey;                    /* Iterator variable */
84447   FKey *pNext;                    /* Copy of pFKey->pNextFrom */
84448
84449   assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) );
84450   for(pFKey=pTab->pFKey; pFKey; pFKey=pNext){
84451
84452     /* Remove the FK from the fkeyHash hash table. */
84453     if( !db || db->pnBytesFreed==0 ){
84454       if( pFKey->pPrevTo ){
84455         pFKey->pPrevTo->pNextTo = pFKey->pNextTo;
84456       }else{
84457         void *p = (void *)pFKey->pNextTo;
84458         const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo);
84459         sqlite3HashInsert(&pTab->pSchema->fkeyHash, z, sqlite3Strlen30(z), p);
84460       }
84461       if( pFKey->pNextTo ){
84462         pFKey->pNextTo->pPrevTo = pFKey->pPrevTo;
84463       }
84464     }
84465
84466     /* EV: R-30323-21917 Each foreign key constraint in SQLite is
84467     ** classified as either immediate or deferred.
84468     */
84469     assert( pFKey->isDeferred==0 || pFKey->isDeferred==1 );
84470
84471     /* Delete any triggers created to implement actions for this FK. */
84472 #ifndef SQLITE_OMIT_TRIGGER
84473     fkTriggerDelete(db, pFKey->apTrigger[0]);
84474     fkTriggerDelete(db, pFKey->apTrigger[1]);
84475 #endif
84476
84477     pNext = pFKey->pNextFrom;
84478     sqlite3DbFree(db, pFKey);
84479   }
84480 }
84481 #endif /* ifndef SQLITE_OMIT_FOREIGN_KEY */
84482
84483 /************** End of fkey.c ************************************************/
84484 /************** Begin file insert.c ******************************************/
84485 /*
84486 ** 2001 September 15
84487 **
84488 ** The author disclaims copyright to this source code.  In place of
84489 ** a legal notice, here is a blessing:
84490 **
84491 **    May you do good and not evil.
84492 **    May you find forgiveness for yourself and forgive others.
84493 **    May you share freely, never taking more than you give.
84494 **
84495 *************************************************************************
84496 ** This file contains C code routines that are called by the parser
84497 ** to handle INSERT statements in SQLite.
84498 */
84499
84500 /*
84501 ** Generate code that will open a table for reading.
84502 */
84503 SQLITE_PRIVATE void sqlite3OpenTable(
84504   Parse *p,       /* Generate code into this VDBE */
84505   int iCur,       /* The cursor number of the table */
84506   int iDb,        /* The database index in sqlite3.aDb[] */
84507   Table *pTab,    /* The table to be opened */
84508   int opcode      /* OP_OpenRead or OP_OpenWrite */
84509 ){
84510   Vdbe *v;
84511   if( IsVirtual(pTab) ) return;
84512   v = sqlite3GetVdbe(p);
84513   assert( opcode==OP_OpenWrite || opcode==OP_OpenRead );
84514   sqlite3TableLock(p, iDb, pTab->tnum, (opcode==OP_OpenWrite)?1:0, pTab->zName);
84515   sqlite3VdbeAddOp3(v, opcode, iCur, pTab->tnum, iDb);
84516   sqlite3VdbeChangeP4(v, -1, SQLITE_INT_TO_PTR(pTab->nCol), P4_INT32);
84517   VdbeComment((v, "%s", pTab->zName));
84518 }
84519
84520 /*
84521 ** Return a pointer to the column affinity string associated with index
84522 ** pIdx. A column affinity string has one character for each column in 
84523 ** the table, according to the affinity of the column:
84524 **
84525 **  Character      Column affinity
84526 **  ------------------------------
84527 **  'a'            TEXT
84528 **  'b'            NONE
84529 **  'c'            NUMERIC
84530 **  'd'            INTEGER
84531 **  'e'            REAL
84532 **
84533 ** An extra 'b' is appended to the end of the string to cover the
84534 ** rowid that appears as the last column in every index.
84535 **
84536 ** Memory for the buffer containing the column index affinity string
84537 ** is managed along with the rest of the Index structure. It will be
84538 ** released when sqlite3DeleteIndex() is called.
84539 */
84540 SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){
84541   if( !pIdx->zColAff ){
84542     /* The first time a column affinity string for a particular index is
84543     ** required, it is allocated and populated here. It is then stored as
84544     ** a member of the Index structure for subsequent use.
84545     **
84546     ** The column affinity string will eventually be deleted by
84547     ** sqliteDeleteIndex() when the Index structure itself is cleaned
84548     ** up.
84549     */
84550     int n;
84551     Table *pTab = pIdx->pTable;
84552     sqlite3 *db = sqlite3VdbeDb(v);
84553     pIdx->zColAff = (char *)sqlite3DbMallocRaw(0, pIdx->nColumn+2);
84554     if( !pIdx->zColAff ){
84555       db->mallocFailed = 1;
84556       return 0;
84557     }
84558     for(n=0; n<pIdx->nColumn; n++){
84559       pIdx->zColAff[n] = pTab->aCol[pIdx->aiColumn[n]].affinity;
84560     }
84561     pIdx->zColAff[n++] = SQLITE_AFF_NONE;
84562     pIdx->zColAff[n] = 0;
84563   }
84564  
84565   return pIdx->zColAff;
84566 }
84567
84568 /*
84569 ** Set P4 of the most recently inserted opcode to a column affinity
84570 ** string for table pTab. A column affinity string has one character
84571 ** for each column indexed by the index, according to the affinity of the
84572 ** column:
84573 **
84574 **  Character      Column affinity
84575 **  ------------------------------
84576 **  'a'            TEXT
84577 **  'b'            NONE
84578 **  'c'            NUMERIC
84579 **  'd'            INTEGER
84580 **  'e'            REAL
84581 */
84582 SQLITE_PRIVATE void sqlite3TableAffinityStr(Vdbe *v, Table *pTab){
84583   /* The first time a column affinity string for a particular table
84584   ** is required, it is allocated and populated here. It is then 
84585   ** stored as a member of the Table structure for subsequent use.
84586   **
84587   ** The column affinity string will eventually be deleted by
84588   ** sqlite3DeleteTable() when the Table structure itself is cleaned up.
84589   */
84590   if( !pTab->zColAff ){
84591     char *zColAff;
84592     int i;
84593     sqlite3 *db = sqlite3VdbeDb(v);
84594
84595     zColAff = (char *)sqlite3DbMallocRaw(0, pTab->nCol+1);
84596     if( !zColAff ){
84597       db->mallocFailed = 1;
84598       return;
84599     }
84600
84601     for(i=0; i<pTab->nCol; i++){
84602       zColAff[i] = pTab->aCol[i].affinity;
84603     }
84604     zColAff[pTab->nCol] = '\0';
84605
84606     pTab->zColAff = zColAff;
84607   }
84608
84609   sqlite3VdbeChangeP4(v, -1, pTab->zColAff, P4_TRANSIENT);
84610 }
84611
84612 /*
84613 ** Return non-zero if the table pTab in database iDb or any of its indices
84614 ** have been opened at any point in the VDBE program beginning at location
84615 ** iStartAddr throught the end of the program.  This is used to see if 
84616 ** a statement of the form  "INSERT INTO <iDb, pTab> SELECT ..." can 
84617 ** run without using temporary table for the results of the SELECT. 
84618 */
84619 static int readsTable(Parse *p, int iStartAddr, int iDb, Table *pTab){
84620   Vdbe *v = sqlite3GetVdbe(p);
84621   int i;
84622   int iEnd = sqlite3VdbeCurrentAddr(v);
84623 #ifndef SQLITE_OMIT_VIRTUALTABLE
84624   VTable *pVTab = IsVirtual(pTab) ? sqlite3GetVTable(p->db, pTab) : 0;
84625 #endif
84626
84627   for(i=iStartAddr; i<iEnd; i++){
84628     VdbeOp *pOp = sqlite3VdbeGetOp(v, i);
84629     assert( pOp!=0 );
84630     if( pOp->opcode==OP_OpenRead && pOp->p3==iDb ){
84631       Index *pIndex;
84632       int tnum = pOp->p2;
84633       if( tnum==pTab->tnum ){
84634         return 1;
84635       }
84636       for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){
84637         if( tnum==pIndex->tnum ){
84638           return 1;
84639         }
84640       }
84641     }
84642 #ifndef SQLITE_OMIT_VIRTUALTABLE
84643     if( pOp->opcode==OP_VOpen && pOp->p4.pVtab==pVTab ){
84644       assert( pOp->p4.pVtab!=0 );
84645       assert( pOp->p4type==P4_VTAB );
84646       return 1;
84647     }
84648 #endif
84649   }
84650   return 0;
84651 }
84652
84653 #ifndef SQLITE_OMIT_AUTOINCREMENT
84654 /*
84655 ** Locate or create an AutoincInfo structure associated with table pTab
84656 ** which is in database iDb.  Return the register number for the register
84657 ** that holds the maximum rowid.
84658 **
84659 ** There is at most one AutoincInfo structure per table even if the
84660 ** same table is autoincremented multiple times due to inserts within
84661 ** triggers.  A new AutoincInfo structure is created if this is the
84662 ** first use of table pTab.  On 2nd and subsequent uses, the original
84663 ** AutoincInfo structure is used.
84664 **
84665 ** Three memory locations are allocated:
84666 **
84667 **   (1)  Register to hold the name of the pTab table.
84668 **   (2)  Register to hold the maximum ROWID of pTab.
84669 **   (3)  Register to hold the rowid in sqlite_sequence of pTab
84670 **
84671 ** The 2nd register is the one that is returned.  That is all the
84672 ** insert routine needs to know about.
84673 */
84674 static int autoIncBegin(
84675   Parse *pParse,      /* Parsing context */
84676   int iDb,            /* Index of the database holding pTab */
84677   Table *pTab         /* The table we are writing to */
84678 ){
84679   int memId = 0;      /* Register holding maximum rowid */
84680   if( pTab->tabFlags & TF_Autoincrement ){
84681     Parse *pToplevel = sqlite3ParseToplevel(pParse);
84682     AutoincInfo *pInfo;
84683
84684     pInfo = pToplevel->pAinc;
84685     while( pInfo && pInfo->pTab!=pTab ){ pInfo = pInfo->pNext; }
84686     if( pInfo==0 ){
84687       pInfo = sqlite3DbMallocRaw(pParse->db, sizeof(*pInfo));
84688       if( pInfo==0 ) return 0;
84689       pInfo->pNext = pToplevel->pAinc;
84690       pToplevel->pAinc = pInfo;
84691       pInfo->pTab = pTab;
84692       pInfo->iDb = iDb;
84693       pToplevel->nMem++;                  /* Register to hold name of table */
84694       pInfo->regCtr = ++pToplevel->nMem;  /* Max rowid register */
84695       pToplevel->nMem++;                  /* Rowid in sqlite_sequence */
84696     }
84697     memId = pInfo->regCtr;
84698   }
84699   return memId;
84700 }
84701
84702 /*
84703 ** This routine generates code that will initialize all of the
84704 ** register used by the autoincrement tracker.  
84705 */
84706 SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse){
84707   AutoincInfo *p;            /* Information about an AUTOINCREMENT */
84708   sqlite3 *db = pParse->db;  /* The database connection */
84709   Db *pDb;                   /* Database only autoinc table */
84710   int memId;                 /* Register holding max rowid */
84711   int addr;                  /* A VDBE address */
84712   Vdbe *v = pParse->pVdbe;   /* VDBE under construction */
84713
84714   /* This routine is never called during trigger-generation.  It is
84715   ** only called from the top-level */
84716   assert( pParse->pTriggerTab==0 );
84717   assert( pParse==sqlite3ParseToplevel(pParse) );
84718
84719   assert( v );   /* We failed long ago if this is not so */
84720   for(p = pParse->pAinc; p; p = p->pNext){
84721     pDb = &db->aDb[p->iDb];
84722     memId = p->regCtr;
84723     assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) );
84724     sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenRead);
84725     addr = sqlite3VdbeCurrentAddr(v);
84726     sqlite3VdbeAddOp4(v, OP_String8, 0, memId-1, 0, p->pTab->zName, 0);
84727     sqlite3VdbeAddOp2(v, OP_Rewind, 0, addr+9);
84728     sqlite3VdbeAddOp3(v, OP_Column, 0, 0, memId);
84729     sqlite3VdbeAddOp3(v, OP_Ne, memId-1, addr+7, memId);
84730     sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL);
84731     sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1);
84732     sqlite3VdbeAddOp3(v, OP_Column, 0, 1, memId);
84733     sqlite3VdbeAddOp2(v, OP_Goto, 0, addr+9);
84734     sqlite3VdbeAddOp2(v, OP_Next, 0, addr+2);
84735     sqlite3VdbeAddOp2(v, OP_Integer, 0, memId);
84736     sqlite3VdbeAddOp0(v, OP_Close);
84737   }
84738 }
84739
84740 /*
84741 ** Update the maximum rowid for an autoincrement calculation.
84742 **
84743 ** This routine should be called when the top of the stack holds a
84744 ** new rowid that is about to be inserted.  If that new rowid is
84745 ** larger than the maximum rowid in the memId memory cell, then the
84746 ** memory cell is updated.  The stack is unchanged.
84747 */
84748 static void autoIncStep(Parse *pParse, int memId, int regRowid){
84749   if( memId>0 ){
84750     sqlite3VdbeAddOp2(pParse->pVdbe, OP_MemMax, memId, regRowid);
84751   }
84752 }
84753
84754 /*
84755 ** This routine generates the code needed to write autoincrement
84756 ** maximum rowid values back into the sqlite_sequence register.
84757 ** Every statement that might do an INSERT into an autoincrement
84758 ** table (either directly or through triggers) needs to call this
84759 ** routine just before the "exit" code.
84760 */
84761 SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse){
84762   AutoincInfo *p;
84763   Vdbe *v = pParse->pVdbe;
84764   sqlite3 *db = pParse->db;
84765
84766   assert( v );
84767   for(p = pParse->pAinc; p; p = p->pNext){
84768     Db *pDb = &db->aDb[p->iDb];
84769     int j1, j2, j3, j4, j5;
84770     int iRec;
84771     int memId = p->regCtr;
84772
84773     iRec = sqlite3GetTempReg(pParse);
84774     assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) );
84775     sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenWrite);
84776     j1 = sqlite3VdbeAddOp1(v, OP_NotNull, memId+1);
84777     j2 = sqlite3VdbeAddOp0(v, OP_Rewind);
84778     j3 = sqlite3VdbeAddOp3(v, OP_Column, 0, 0, iRec);
84779     j4 = sqlite3VdbeAddOp3(v, OP_Eq, memId-1, 0, iRec);
84780     sqlite3VdbeAddOp2(v, OP_Next, 0, j3);
84781     sqlite3VdbeJumpHere(v, j2);
84782     sqlite3VdbeAddOp2(v, OP_NewRowid, 0, memId+1);
84783     j5 = sqlite3VdbeAddOp0(v, OP_Goto);
84784     sqlite3VdbeJumpHere(v, j4);
84785     sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1);
84786     sqlite3VdbeJumpHere(v, j1);
84787     sqlite3VdbeJumpHere(v, j5);
84788     sqlite3VdbeAddOp3(v, OP_MakeRecord, memId-1, 2, iRec);
84789     sqlite3VdbeAddOp3(v, OP_Insert, 0, iRec, memId+1);
84790     sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
84791     sqlite3VdbeAddOp0(v, OP_Close);
84792     sqlite3ReleaseTempReg(pParse, iRec);
84793   }
84794 }
84795 #else
84796 /*
84797 ** If SQLITE_OMIT_AUTOINCREMENT is defined, then the three routines
84798 ** above are all no-ops
84799 */
84800 # define autoIncBegin(A,B,C) (0)
84801 # define autoIncStep(A,B,C)
84802 #endif /* SQLITE_OMIT_AUTOINCREMENT */
84803
84804
84805 /* Forward declaration */
84806 static int xferOptimization(
84807   Parse *pParse,        /* Parser context */
84808   Table *pDest,         /* The table we are inserting into */
84809   Select *pSelect,      /* A SELECT statement to use as the data source */
84810   int onError,          /* How to handle constraint errors */
84811   int iDbDest           /* The database of pDest */
84812 );
84813
84814 /*
84815 ** This routine is call to handle SQL of the following forms:
84816 **
84817 **    insert into TABLE (IDLIST) values(EXPRLIST)
84818 **    insert into TABLE (IDLIST) select
84819 **
84820 ** The IDLIST following the table name is always optional.  If omitted,
84821 ** then a list of all columns for the table is substituted.  The IDLIST
84822 ** appears in the pColumn parameter.  pColumn is NULL if IDLIST is omitted.
84823 **
84824 ** The pList parameter holds EXPRLIST in the first form of the INSERT
84825 ** statement above, and pSelect is NULL.  For the second form, pList is
84826 ** NULL and pSelect is a pointer to the select statement used to generate
84827 ** data for the insert.
84828 **
84829 ** The code generated follows one of four templates.  For a simple
84830 ** select with data coming from a VALUES clause, the code executes
84831 ** once straight down through.  Pseudo-code follows (we call this
84832 ** the "1st template"):
84833 **
84834 **         open write cursor to <table> and its indices
84835 **         puts VALUES clause expressions onto the stack
84836 **         write the resulting record into <table>
84837 **         cleanup
84838 **
84839 ** The three remaining templates assume the statement is of the form
84840 **
84841 **   INSERT INTO <table> SELECT ...
84842 **
84843 ** If the SELECT clause is of the restricted form "SELECT * FROM <table2>" -
84844 ** in other words if the SELECT pulls all columns from a single table
84845 ** and there is no WHERE or LIMIT or GROUP BY or ORDER BY clauses, and
84846 ** if <table2> and <table1> are distinct tables but have identical
84847 ** schemas, including all the same indices, then a special optimization
84848 ** is invoked that copies raw records from <table2> over to <table1>.
84849 ** See the xferOptimization() function for the implementation of this
84850 ** template.  This is the 2nd template.
84851 **
84852 **         open a write cursor to <table>
84853 **         open read cursor on <table2>
84854 **         transfer all records in <table2> over to <table>
84855 **         close cursors
84856 **         foreach index on <table>
84857 **           open a write cursor on the <table> index
84858 **           open a read cursor on the corresponding <table2> index
84859 **           transfer all records from the read to the write cursors
84860 **           close cursors
84861 **         end foreach
84862 **
84863 ** The 3rd template is for when the second template does not apply
84864 ** and the SELECT clause does not read from <table> at any time.
84865 ** The generated code follows this template:
84866 **
84867 **         EOF <- 0
84868 **         X <- A
84869 **         goto B
84870 **      A: setup for the SELECT
84871 **         loop over the rows in the SELECT
84872 **           load values into registers R..R+n
84873 **           yield X
84874 **         end loop
84875 **         cleanup after the SELECT
84876 **         EOF <- 1
84877 **         yield X
84878 **         goto A
84879 **      B: open write cursor to <table> and its indices
84880 **      C: yield X
84881 **         if EOF goto D
84882 **         insert the select result into <table> from R..R+n
84883 **         goto C
84884 **      D: cleanup
84885 **
84886 ** The 4th template is used if the insert statement takes its
84887 ** values from a SELECT but the data is being inserted into a table
84888 ** that is also read as part of the SELECT.  In the third form,
84889 ** we have to use a intermediate table to store the results of
84890 ** the select.  The template is like this:
84891 **
84892 **         EOF <- 0
84893 **         X <- A
84894 **         goto B
84895 **      A: setup for the SELECT
84896 **         loop over the tables in the SELECT
84897 **           load value into register R..R+n
84898 **           yield X
84899 **         end loop
84900 **         cleanup after the SELECT
84901 **         EOF <- 1
84902 **         yield X
84903 **         halt-error
84904 **      B: open temp table
84905 **      L: yield X
84906 **         if EOF goto M
84907 **         insert row from R..R+n into temp table
84908 **         goto L
84909 **      M: open write cursor to <table> and its indices
84910 **         rewind temp table
84911 **      C: loop over rows of intermediate table
84912 **           transfer values form intermediate table into <table>
84913 **         end loop
84914 **      D: cleanup
84915 */
84916 SQLITE_PRIVATE void sqlite3Insert(
84917   Parse *pParse,        /* Parser context */
84918   SrcList *pTabList,    /* Name of table into which we are inserting */
84919   ExprList *pList,      /* List of values to be inserted */
84920   Select *pSelect,      /* A SELECT statement to use as the data source */
84921   IdList *pColumn,      /* Column names corresponding to IDLIST. */
84922   int onError           /* How to handle constraint errors */
84923 ){
84924   sqlite3 *db;          /* The main database structure */
84925   Table *pTab;          /* The table to insert into.  aka TABLE */
84926   char *zTab;           /* Name of the table into which we are inserting */
84927   const char *zDb;      /* Name of the database holding this table */
84928   int i, j, idx;        /* Loop counters */
84929   Vdbe *v;              /* Generate code into this virtual machine */
84930   Index *pIdx;          /* For looping over indices of the table */
84931   int nColumn;          /* Number of columns in the data */
84932   int nHidden = 0;      /* Number of hidden columns if TABLE is virtual */
84933   int baseCur = 0;      /* VDBE Cursor number for pTab */
84934   int keyColumn = -1;   /* Column that is the INTEGER PRIMARY KEY */
84935   int endOfLoop;        /* Label for the end of the insertion loop */
84936   int useTempTable = 0; /* Store SELECT results in intermediate table */
84937   int srcTab = 0;       /* Data comes from this temporary cursor if >=0 */
84938   int addrInsTop = 0;   /* Jump to label "D" */
84939   int addrCont = 0;     /* Top of insert loop. Label "C" in templates 3 and 4 */
84940   int addrSelect = 0;   /* Address of coroutine that implements the SELECT */
84941   SelectDest dest;      /* Destination for SELECT on rhs of INSERT */
84942   int iDb;              /* Index of database holding TABLE */
84943   Db *pDb;              /* The database containing table being inserted into */
84944   int appendFlag = 0;   /* True if the insert is likely to be an append */
84945
84946   /* Register allocations */
84947   int regFromSelect = 0;/* Base register for data coming from SELECT */
84948   int regAutoinc = 0;   /* Register holding the AUTOINCREMENT counter */
84949   int regRowCount = 0;  /* Memory cell used for the row counter */
84950   int regIns;           /* Block of regs holding rowid+data being inserted */
84951   int regRowid;         /* registers holding insert rowid */
84952   int regData;          /* register holding first column to insert */
84953   int regEof = 0;       /* Register recording end of SELECT data */
84954   int *aRegIdx = 0;     /* One register allocated to each index */
84955
84956 #ifndef SQLITE_OMIT_TRIGGER
84957   int isView;                 /* True if attempting to insert into a view */
84958   Trigger *pTrigger;          /* List of triggers on pTab, if required */
84959   int tmask;                  /* Mask of trigger times */
84960 #endif
84961
84962   db = pParse->db;
84963   memset(&dest, 0, sizeof(dest));
84964   if( pParse->nErr || db->mallocFailed ){
84965     goto insert_cleanup;
84966   }
84967
84968   /* Locate the table into which we will be inserting new information.
84969   */
84970   assert( pTabList->nSrc==1 );
84971   zTab = pTabList->a[0].zName;
84972   if( NEVER(zTab==0) ) goto insert_cleanup;
84973   pTab = sqlite3SrcListLookup(pParse, pTabList);
84974   if( pTab==0 ){
84975     goto insert_cleanup;
84976   }
84977   iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
84978   assert( iDb<db->nDb );
84979   pDb = &db->aDb[iDb];
84980   zDb = pDb->zName;
84981   if( sqlite3AuthCheck(pParse, SQLITE_INSERT, pTab->zName, 0, zDb) ){
84982     goto insert_cleanup;
84983   }
84984
84985   /* Figure out if we have any triggers and if the table being
84986   ** inserted into is a view
84987   */
84988 #ifndef SQLITE_OMIT_TRIGGER
84989   pTrigger = sqlite3TriggersExist(pParse, pTab, TK_INSERT, 0, &tmask);
84990   isView = pTab->pSelect!=0;
84991 #else
84992 # define pTrigger 0
84993 # define tmask 0
84994 # define isView 0
84995 #endif
84996 #ifdef SQLITE_OMIT_VIEW
84997 # undef isView
84998 # define isView 0
84999 #endif
85000   assert( (pTrigger && tmask) || (pTrigger==0 && tmask==0) );
85001
85002   /* If pTab is really a view, make sure it has been initialized.
85003   ** ViewGetColumnNames() is a no-op if pTab is not a view (or virtual 
85004   ** module table).
85005   */
85006   if( sqlite3ViewGetColumnNames(pParse, pTab) ){
85007     goto insert_cleanup;
85008   }
85009
85010   /* Ensure that:
85011   *  (a) the table is not read-only, 
85012   *  (b) that if it is a view then ON INSERT triggers exist
85013   */
85014   if( sqlite3IsReadOnly(pParse, pTab, tmask) ){
85015     goto insert_cleanup;
85016   }
85017
85018   /* Allocate a VDBE
85019   */
85020   v = sqlite3GetVdbe(pParse);
85021   if( v==0 ) goto insert_cleanup;
85022   if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
85023   sqlite3BeginWriteOperation(pParse, pSelect || pTrigger, iDb);
85024
85025 #ifndef SQLITE_OMIT_XFER_OPT
85026   /* If the statement is of the form
85027   **
85028   **       INSERT INTO <table1> SELECT * FROM <table2>;
85029   **
85030   ** Then special optimizations can be applied that make the transfer
85031   ** very fast and which reduce fragmentation of indices.
85032   **
85033   ** This is the 2nd template.
85034   */
85035   if( pColumn==0 && xferOptimization(pParse, pTab, pSelect, onError, iDb) ){
85036     assert( !pTrigger );
85037     assert( pList==0 );
85038     goto insert_end;
85039   }
85040 #endif /* SQLITE_OMIT_XFER_OPT */
85041
85042   /* If this is an AUTOINCREMENT table, look up the sequence number in the
85043   ** sqlite_sequence table and store it in memory cell regAutoinc.
85044   */
85045   regAutoinc = autoIncBegin(pParse, iDb, pTab);
85046
85047   /* Figure out how many columns of data are supplied.  If the data
85048   ** is coming from a SELECT statement, then generate a co-routine that
85049   ** produces a single row of the SELECT on each invocation.  The
85050   ** co-routine is the common header to the 3rd and 4th templates.
85051   */
85052   if( pSelect ){
85053     /* Data is coming from a SELECT.  Generate code to implement that SELECT
85054     ** as a co-routine.  The code is common to both the 3rd and 4th
85055     ** templates:
85056     **
85057     **         EOF <- 0
85058     **         X <- A
85059     **         goto B
85060     **      A: setup for the SELECT
85061     **         loop over the tables in the SELECT
85062     **           load value into register R..R+n
85063     **           yield X
85064     **         end loop
85065     **         cleanup after the SELECT
85066     **         EOF <- 1
85067     **         yield X
85068     **         halt-error
85069     **
85070     ** On each invocation of the co-routine, it puts a single row of the
85071     ** SELECT result into registers dest.iMem...dest.iMem+dest.nMem-1.
85072     ** (These output registers are allocated by sqlite3Select().)  When
85073     ** the SELECT completes, it sets the EOF flag stored in regEof.
85074     */
85075     int rc, j1;
85076
85077     regEof = ++pParse->nMem;
85078     sqlite3VdbeAddOp2(v, OP_Integer, 0, regEof);      /* EOF <- 0 */
85079     VdbeComment((v, "SELECT eof flag"));
85080     sqlite3SelectDestInit(&dest, SRT_Coroutine, ++pParse->nMem);
85081     addrSelect = sqlite3VdbeCurrentAddr(v)+2;
85082     sqlite3VdbeAddOp2(v, OP_Integer, addrSelect-1, dest.iParm);
85083     j1 = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0);
85084     VdbeComment((v, "Jump over SELECT coroutine"));
85085
85086     /* Resolve the expressions in the SELECT statement and execute it. */
85087     rc = sqlite3Select(pParse, pSelect, &dest);
85088     assert( pParse->nErr==0 || rc );
85089     if( rc || NEVER(pParse->nErr) || db->mallocFailed ){
85090       goto insert_cleanup;
85091     }
85092     sqlite3VdbeAddOp2(v, OP_Integer, 1, regEof);         /* EOF <- 1 */
85093     sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm);   /* yield X */
85094     sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_INTERNAL, OE_Abort);
85095     VdbeComment((v, "End of SELECT coroutine"));
85096     sqlite3VdbeJumpHere(v, j1);                          /* label B: */
85097
85098     regFromSelect = dest.iMem;
85099     assert( pSelect->pEList );
85100     nColumn = pSelect->pEList->nExpr;
85101     assert( dest.nMem==nColumn );
85102
85103     /* Set useTempTable to TRUE if the result of the SELECT statement
85104     ** should be written into a temporary table (template 4).  Set to
85105     ** FALSE if each* row of the SELECT can be written directly into
85106     ** the destination table (template 3).
85107     **
85108     ** A temp table must be used if the table being updated is also one
85109     ** of the tables being read by the SELECT statement.  Also use a 
85110     ** temp table in the case of row triggers.
85111     */
85112     if( pTrigger || readsTable(pParse, addrSelect, iDb, pTab) ){
85113       useTempTable = 1;
85114     }
85115
85116     if( useTempTable ){
85117       /* Invoke the coroutine to extract information from the SELECT
85118       ** and add it to a transient table srcTab.  The code generated
85119       ** here is from the 4th template:
85120       **
85121       **      B: open temp table
85122       **      L: yield X
85123       **         if EOF goto M
85124       **         insert row from R..R+n into temp table
85125       **         goto L
85126       **      M: ...
85127       */
85128       int regRec;          /* Register to hold packed record */
85129       int regTempRowid;    /* Register to hold temp table ROWID */
85130       int addrTop;         /* Label "L" */
85131       int addrIf;          /* Address of jump to M */
85132
85133       srcTab = pParse->nTab++;
85134       regRec = sqlite3GetTempReg(pParse);
85135       regTempRowid = sqlite3GetTempReg(pParse);
85136       sqlite3VdbeAddOp2(v, OP_OpenEphemeral, srcTab, nColumn);
85137       addrTop = sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm);
85138       addrIf = sqlite3VdbeAddOp1(v, OP_If, regEof);
85139       sqlite3VdbeAddOp3(v, OP_MakeRecord, regFromSelect, nColumn, regRec);
85140       sqlite3VdbeAddOp2(v, OP_NewRowid, srcTab, regTempRowid);
85141       sqlite3VdbeAddOp3(v, OP_Insert, srcTab, regRec, regTempRowid);
85142       sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop);
85143       sqlite3VdbeJumpHere(v, addrIf);
85144       sqlite3ReleaseTempReg(pParse, regRec);
85145       sqlite3ReleaseTempReg(pParse, regTempRowid);
85146     }
85147   }else{
85148     /* This is the case if the data for the INSERT is coming from a VALUES
85149     ** clause
85150     */
85151     NameContext sNC;
85152     memset(&sNC, 0, sizeof(sNC));
85153     sNC.pParse = pParse;
85154     srcTab = -1;
85155     assert( useTempTable==0 );
85156     nColumn = pList ? pList->nExpr : 0;
85157     for(i=0; i<nColumn; i++){
85158       if( sqlite3ResolveExprNames(&sNC, pList->a[i].pExpr) ){
85159         goto insert_cleanup;
85160       }
85161     }
85162   }
85163
85164   /* Make sure the number of columns in the source data matches the number
85165   ** of columns to be inserted into the table.
85166   */
85167   if( IsVirtual(pTab) ){
85168     for(i=0; i<pTab->nCol; i++){
85169       nHidden += (IsHiddenColumn(&pTab->aCol[i]) ? 1 : 0);
85170     }
85171   }
85172   if( pColumn==0 && nColumn && nColumn!=(pTab->nCol-nHidden) ){
85173     sqlite3ErrorMsg(pParse, 
85174        "table %S has %d columns but %d values were supplied",
85175        pTabList, 0, pTab->nCol-nHidden, nColumn);
85176     goto insert_cleanup;
85177   }
85178   if( pColumn!=0 && nColumn!=pColumn->nId ){
85179     sqlite3ErrorMsg(pParse, "%d values for %d columns", nColumn, pColumn->nId);
85180     goto insert_cleanup;
85181   }
85182
85183   /* If the INSERT statement included an IDLIST term, then make sure
85184   ** all elements of the IDLIST really are columns of the table and 
85185   ** remember the column indices.
85186   **
85187   ** If the table has an INTEGER PRIMARY KEY column and that column
85188   ** is named in the IDLIST, then record in the keyColumn variable
85189   ** the index into IDLIST of the primary key column.  keyColumn is
85190   ** the index of the primary key as it appears in IDLIST, not as
85191   ** is appears in the original table.  (The index of the primary
85192   ** key in the original table is pTab->iPKey.)
85193   */
85194   if( pColumn ){
85195     for(i=0; i<pColumn->nId; i++){
85196       pColumn->a[i].idx = -1;
85197     }
85198     for(i=0; i<pColumn->nId; i++){
85199       for(j=0; j<pTab->nCol; j++){
85200         if( sqlite3StrICmp(pColumn->a[i].zName, pTab->aCol[j].zName)==0 ){
85201           pColumn->a[i].idx = j;
85202           if( j==pTab->iPKey ){
85203             keyColumn = i;
85204           }
85205           break;
85206         }
85207       }
85208       if( j>=pTab->nCol ){
85209         if( sqlite3IsRowid(pColumn->a[i].zName) ){
85210           keyColumn = i;
85211         }else{
85212           sqlite3ErrorMsg(pParse, "table %S has no column named %s",
85213               pTabList, 0, pColumn->a[i].zName);
85214           pParse->checkSchema = 1;
85215           goto insert_cleanup;
85216         }
85217       }
85218     }
85219   }
85220
85221   /* If there is no IDLIST term but the table has an integer primary
85222   ** key, the set the keyColumn variable to the primary key column index
85223   ** in the original table definition.
85224   */
85225   if( pColumn==0 && nColumn>0 ){
85226     keyColumn = pTab->iPKey;
85227   }
85228     
85229   /* Initialize the count of rows to be inserted
85230   */
85231   if( db->flags & SQLITE_CountRows ){
85232     regRowCount = ++pParse->nMem;
85233     sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount);
85234   }
85235
85236   /* If this is not a view, open the table and and all indices */
85237   if( !isView ){
85238     int nIdx;
85239
85240     baseCur = pParse->nTab;
85241     nIdx = sqlite3OpenTableAndIndices(pParse, pTab, baseCur, OP_OpenWrite);
85242     aRegIdx = sqlite3DbMallocRaw(db, sizeof(int)*(nIdx+1));
85243     if( aRegIdx==0 ){
85244       goto insert_cleanup;
85245     }
85246     for(i=0; i<nIdx; i++){
85247       aRegIdx[i] = ++pParse->nMem;
85248     }
85249   }
85250
85251   /* This is the top of the main insertion loop */
85252   if( useTempTable ){
85253     /* This block codes the top of loop only.  The complete loop is the
85254     ** following pseudocode (template 4):
85255     **
85256     **         rewind temp table
85257     **      C: loop over rows of intermediate table
85258     **           transfer values form intermediate table into <table>
85259     **         end loop
85260     **      D: ...
85261     */
85262     addrInsTop = sqlite3VdbeAddOp1(v, OP_Rewind, srcTab);
85263     addrCont = sqlite3VdbeCurrentAddr(v);
85264   }else if( pSelect ){
85265     /* This block codes the top of loop only.  The complete loop is the
85266     ** following pseudocode (template 3):
85267     **
85268     **      C: yield X
85269     **         if EOF goto D
85270     **         insert the select result into <table> from R..R+n
85271     **         goto C
85272     **      D: ...
85273     */
85274     addrCont = sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm);
85275     addrInsTop = sqlite3VdbeAddOp1(v, OP_If, regEof);
85276   }
85277
85278   /* Allocate registers for holding the rowid of the new row,
85279   ** the content of the new row, and the assemblied row record.
85280   */
85281   regRowid = regIns = pParse->nMem+1;
85282   pParse->nMem += pTab->nCol + 1;
85283   if( IsVirtual(pTab) ){
85284     regRowid++;
85285     pParse->nMem++;
85286   }
85287   regData = regRowid+1;
85288
85289   /* Run the BEFORE and INSTEAD OF triggers, if there are any
85290   */
85291   endOfLoop = sqlite3VdbeMakeLabel(v);
85292   if( tmask & TRIGGER_BEFORE ){
85293     int regCols = sqlite3GetTempRange(pParse, pTab->nCol+1);
85294
85295     /* build the NEW.* reference row.  Note that if there is an INTEGER
85296     ** PRIMARY KEY into which a NULL is being inserted, that NULL will be
85297     ** translated into a unique ID for the row.  But on a BEFORE trigger,
85298     ** we do not know what the unique ID will be (because the insert has
85299     ** not happened yet) so we substitute a rowid of -1
85300     */
85301     if( keyColumn<0 ){
85302       sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols);
85303     }else{
85304       int j1;
85305       if( useTempTable ){
85306         sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regCols);
85307       }else{
85308         assert( pSelect==0 );  /* Otherwise useTempTable is true */
85309         sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regCols);
85310       }
85311       j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regCols);
85312       sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols);
85313       sqlite3VdbeJumpHere(v, j1);
85314       sqlite3VdbeAddOp1(v, OP_MustBeInt, regCols);
85315     }
85316
85317     /* Cannot have triggers on a virtual table. If it were possible,
85318     ** this block would have to account for hidden column.
85319     */
85320     assert( !IsVirtual(pTab) );
85321
85322     /* Create the new column data
85323     */
85324     for(i=0; i<pTab->nCol; i++){
85325       if( pColumn==0 ){
85326         j = i;
85327       }else{
85328         for(j=0; j<pColumn->nId; j++){
85329           if( pColumn->a[j].idx==i ) break;
85330         }
85331       }
85332       if( (!useTempTable && !pList) || (pColumn && j>=pColumn->nId) ){
85333         sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regCols+i+1);
85334       }else if( useTempTable ){
85335         sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, regCols+i+1); 
85336       }else{
85337         assert( pSelect==0 ); /* Otherwise useTempTable is true */
85338         sqlite3ExprCodeAndCache(pParse, pList->a[j].pExpr, regCols+i+1);
85339       }
85340     }
85341
85342     /* If this is an INSERT on a view with an INSTEAD OF INSERT trigger,
85343     ** do not attempt any conversions before assembling the record.
85344     ** If this is a real table, attempt conversions as required by the
85345     ** table column affinities.
85346     */
85347     if( !isView ){
85348       sqlite3VdbeAddOp2(v, OP_Affinity, regCols+1, pTab->nCol);
85349       sqlite3TableAffinityStr(v, pTab);
85350     }
85351
85352     /* Fire BEFORE or INSTEAD OF triggers */
85353     sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_BEFORE, 
85354         pTab, regCols-pTab->nCol-1, onError, endOfLoop);
85355
85356     sqlite3ReleaseTempRange(pParse, regCols, pTab->nCol+1);
85357   }
85358
85359   /* Push the record number for the new entry onto the stack.  The
85360   ** record number is a randomly generate integer created by NewRowid
85361   ** except when the table has an INTEGER PRIMARY KEY column, in which
85362   ** case the record number is the same as that column. 
85363   */
85364   if( !isView ){
85365     if( IsVirtual(pTab) ){
85366       /* The row that the VUpdate opcode will delete: none */
85367       sqlite3VdbeAddOp2(v, OP_Null, 0, regIns);
85368     }
85369     if( keyColumn>=0 ){
85370       if( useTempTable ){
85371         sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regRowid);
85372       }else if( pSelect ){
85373         sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+keyColumn, regRowid);
85374       }else{
85375         VdbeOp *pOp;
85376         sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regRowid);
85377         pOp = sqlite3VdbeGetOp(v, -1);
85378         if( ALWAYS(pOp) && pOp->opcode==OP_Null && !IsVirtual(pTab) ){
85379           appendFlag = 1;
85380           pOp->opcode = OP_NewRowid;
85381           pOp->p1 = baseCur;
85382           pOp->p2 = regRowid;
85383           pOp->p3 = regAutoinc;
85384         }
85385       }
85386       /* If the PRIMARY KEY expression is NULL, then use OP_NewRowid
85387       ** to generate a unique primary key value.
85388       */
85389       if( !appendFlag ){
85390         int j1;
85391         if( !IsVirtual(pTab) ){
85392           j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regRowid);
85393           sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc);
85394           sqlite3VdbeJumpHere(v, j1);
85395         }else{
85396           j1 = sqlite3VdbeCurrentAddr(v);
85397           sqlite3VdbeAddOp2(v, OP_IsNull, regRowid, j1+2);
85398         }
85399         sqlite3VdbeAddOp1(v, OP_MustBeInt, regRowid);
85400       }
85401     }else if( IsVirtual(pTab) ){
85402       sqlite3VdbeAddOp2(v, OP_Null, 0, regRowid);
85403     }else{
85404       sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc);
85405       appendFlag = 1;
85406     }
85407     autoIncStep(pParse, regAutoinc, regRowid);
85408
85409     /* Push onto the stack, data for all columns of the new entry, beginning
85410     ** with the first column.
85411     */
85412     nHidden = 0;
85413     for(i=0; i<pTab->nCol; i++){
85414       int iRegStore = regRowid+1+i;
85415       if( i==pTab->iPKey ){
85416         /* The value of the INTEGER PRIMARY KEY column is always a NULL.
85417         ** Whenever this column is read, the record number will be substituted
85418         ** in its place.  So will fill this column with a NULL to avoid
85419         ** taking up data space with information that will never be used. */
85420         sqlite3VdbeAddOp2(v, OP_Null, 0, iRegStore);
85421         continue;
85422       }
85423       if( pColumn==0 ){
85424         if( IsHiddenColumn(&pTab->aCol[i]) ){
85425           assert( IsVirtual(pTab) );
85426           j = -1;
85427           nHidden++;
85428         }else{
85429           j = i - nHidden;
85430         }
85431       }else{
85432         for(j=0; j<pColumn->nId; j++){
85433           if( pColumn->a[j].idx==i ) break;
85434         }
85435       }
85436       if( j<0 || nColumn==0 || (pColumn && j>=pColumn->nId) ){
85437         sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, iRegStore);
85438       }else if( useTempTable ){
85439         sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, iRegStore); 
85440       }else if( pSelect ){
85441         sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+j, iRegStore);
85442       }else{
85443         sqlite3ExprCode(pParse, pList->a[j].pExpr, iRegStore);
85444       }
85445     }
85446
85447     /* Generate code to check constraints and generate index keys and
85448     ** do the insertion.
85449     */
85450 #ifndef SQLITE_OMIT_VIRTUALTABLE
85451     if( IsVirtual(pTab) ){
85452       const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);
85453       sqlite3VtabMakeWritable(pParse, pTab);
85454       sqlite3VdbeAddOp4(v, OP_VUpdate, 1, pTab->nCol+2, regIns, pVTab, P4_VTAB);
85455       sqlite3MayAbort(pParse);
85456     }else
85457 #endif
85458     {
85459       int isReplace;    /* Set to true if constraints may cause a replace */
85460       sqlite3GenerateConstraintChecks(pParse, pTab, baseCur, regIns, aRegIdx,
85461           keyColumn>=0, 0, onError, endOfLoop, &isReplace
85462       );
85463       sqlite3FkCheck(pParse, pTab, 0, regIns);
85464       sqlite3CompleteInsertion(
85465           pParse, pTab, baseCur, regIns, aRegIdx, 0, appendFlag, isReplace==0
85466       );
85467     }
85468   }
85469
85470   /* Update the count of rows that are inserted
85471   */
85472   if( (db->flags & SQLITE_CountRows)!=0 ){
85473     sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1);
85474   }
85475
85476   if( pTrigger ){
85477     /* Code AFTER triggers */
85478     sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_AFTER, 
85479         pTab, regData-2-pTab->nCol, onError, endOfLoop);
85480   }
85481
85482   /* The bottom of the main insertion loop, if the data source
85483   ** is a SELECT statement.
85484   */
85485   sqlite3VdbeResolveLabel(v, endOfLoop);
85486   if( useTempTable ){
85487     sqlite3VdbeAddOp2(v, OP_Next, srcTab, addrCont);
85488     sqlite3VdbeJumpHere(v, addrInsTop);
85489     sqlite3VdbeAddOp1(v, OP_Close, srcTab);
85490   }else if( pSelect ){
85491     sqlite3VdbeAddOp2(v, OP_Goto, 0, addrCont);
85492     sqlite3VdbeJumpHere(v, addrInsTop);
85493   }
85494
85495   if( !IsVirtual(pTab) && !isView ){
85496     /* Close all tables opened */
85497     sqlite3VdbeAddOp1(v, OP_Close, baseCur);
85498     for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){
85499       sqlite3VdbeAddOp1(v, OP_Close, idx+baseCur);
85500     }
85501   }
85502
85503 insert_end:
85504   /* Update the sqlite_sequence table by storing the content of the
85505   ** maximum rowid counter values recorded while inserting into
85506   ** autoincrement tables.
85507   */
85508   if( pParse->nested==0 && pParse->pTriggerTab==0 ){
85509     sqlite3AutoincrementEnd(pParse);
85510   }
85511
85512   /*
85513   ** Return the number of rows inserted. If this routine is 
85514   ** generating code because of a call to sqlite3NestedParse(), do not
85515   ** invoke the callback function.
85516   */
85517   if( (db->flags&SQLITE_CountRows) && !pParse->nested && !pParse->pTriggerTab ){
85518     sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);
85519     sqlite3VdbeSetNumCols(v, 1);
85520     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows inserted", SQLITE_STATIC);
85521   }
85522
85523 insert_cleanup:
85524   sqlite3SrcListDelete(db, pTabList);
85525   sqlite3ExprListDelete(db, pList);
85526   sqlite3SelectDelete(db, pSelect);
85527   sqlite3IdListDelete(db, pColumn);
85528   sqlite3DbFree(db, aRegIdx);
85529 }
85530
85531 /* Make sure "isView" and other macros defined above are undefined. Otherwise
85532 ** thely may interfere with compilation of other functions in this file
85533 ** (or in another file, if this file becomes part of the amalgamation).  */
85534 #ifdef isView
85535  #undef isView
85536 #endif
85537 #ifdef pTrigger
85538  #undef pTrigger
85539 #endif
85540 #ifdef tmask
85541  #undef tmask
85542 #endif
85543
85544
85545 /*
85546 ** Generate code to do constraint checks prior to an INSERT or an UPDATE.
85547 **
85548 ** The input is a range of consecutive registers as follows:
85549 **
85550 **    1.  The rowid of the row after the update.
85551 **
85552 **    2.  The data in the first column of the entry after the update.
85553 **
85554 **    i.  Data from middle columns...
85555 **
85556 **    N.  The data in the last column of the entry after the update.
85557 **
85558 ** The regRowid parameter is the index of the register containing (1).
85559 **
85560 ** If isUpdate is true and rowidChng is non-zero, then rowidChng contains
85561 ** the address of a register containing the rowid before the update takes
85562 ** place. isUpdate is true for UPDATEs and false for INSERTs. If isUpdate
85563 ** is false, indicating an INSERT statement, then a non-zero rowidChng 
85564 ** indicates that the rowid was explicitly specified as part of the
85565 ** INSERT statement. If rowidChng is false, it means that  the rowid is
85566 ** computed automatically in an insert or that the rowid value is not 
85567 ** modified by an update.
85568 **
85569 ** The code generated by this routine store new index entries into
85570 ** registers identified by aRegIdx[].  No index entry is created for
85571 ** indices where aRegIdx[i]==0.  The order of indices in aRegIdx[] is
85572 ** the same as the order of indices on the linked list of indices
85573 ** attached to the table.
85574 **
85575 ** This routine also generates code to check constraints.  NOT NULL,
85576 ** CHECK, and UNIQUE constraints are all checked.  If a constraint fails,
85577 ** then the appropriate action is performed.  There are five possible
85578 ** actions: ROLLBACK, ABORT, FAIL, REPLACE, and IGNORE.
85579 **
85580 **  Constraint type  Action       What Happens
85581 **  ---------------  ----------   ----------------------------------------
85582 **  any              ROLLBACK     The current transaction is rolled back and
85583 **                                sqlite3_exec() returns immediately with a
85584 **                                return code of SQLITE_CONSTRAINT.
85585 **
85586 **  any              ABORT        Back out changes from the current command
85587 **                                only (do not do a complete rollback) then
85588 **                                cause sqlite3_exec() to return immediately
85589 **                                with SQLITE_CONSTRAINT.
85590 **
85591 **  any              FAIL         Sqlite_exec() returns immediately with a
85592 **                                return code of SQLITE_CONSTRAINT.  The
85593 **                                transaction is not rolled back and any
85594 **                                prior changes are retained.
85595 **
85596 **  any              IGNORE       The record number and data is popped from
85597 **                                the stack and there is an immediate jump
85598 **                                to label ignoreDest.
85599 **
85600 **  NOT NULL         REPLACE      The NULL value is replace by the default
85601 **                                value for that column.  If the default value
85602 **                                is NULL, the action is the same as ABORT.
85603 **
85604 **  UNIQUE           REPLACE      The other row that conflicts with the row
85605 **                                being inserted is removed.
85606 **
85607 **  CHECK            REPLACE      Illegal.  The results in an exception.
85608 **
85609 ** Which action to take is determined by the overrideError parameter.
85610 ** Or if overrideError==OE_Default, then the pParse->onError parameter
85611 ** is used.  Or if pParse->onError==OE_Default then the onError value
85612 ** for the constraint is used.
85613 **
85614 ** The calling routine must open a read/write cursor for pTab with
85615 ** cursor number "baseCur".  All indices of pTab must also have open
85616 ** read/write cursors with cursor number baseCur+i for the i-th cursor.
85617 ** Except, if there is no possibility of a REPLACE action then
85618 ** cursors do not need to be open for indices where aRegIdx[i]==0.
85619 */
85620 SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
85621   Parse *pParse,      /* The parser context */
85622   Table *pTab,        /* the table into which we are inserting */
85623   int baseCur,        /* Index of a read/write cursor pointing at pTab */
85624   int regRowid,       /* Index of the range of input registers */
85625   int *aRegIdx,       /* Register used by each index.  0 for unused indices */
85626   int rowidChng,      /* True if the rowid might collide with existing entry */
85627   int isUpdate,       /* True for UPDATE, False for INSERT */
85628   int overrideError,  /* Override onError to this if not OE_Default */
85629   int ignoreDest,     /* Jump to this label on an OE_Ignore resolution */
85630   int *pbMayReplace   /* OUT: Set to true if constraint may cause a replace */
85631 ){
85632   int i;              /* loop counter */
85633   Vdbe *v;            /* VDBE under constrution */
85634   int nCol;           /* Number of columns */
85635   int onError;        /* Conflict resolution strategy */
85636   int j1;             /* Addresss of jump instruction */
85637   int j2 = 0, j3;     /* Addresses of jump instructions */
85638   int regData;        /* Register containing first data column */
85639   int iCur;           /* Table cursor number */
85640   Index *pIdx;         /* Pointer to one of the indices */
85641   int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */
85642   int regOldRowid = (rowidChng && isUpdate) ? rowidChng : regRowid;
85643
85644   v = sqlite3GetVdbe(pParse);
85645   assert( v!=0 );
85646   assert( pTab->pSelect==0 );  /* This table is not a VIEW */
85647   nCol = pTab->nCol;
85648   regData = regRowid + 1;
85649
85650   /* Test all NOT NULL constraints.
85651   */
85652   for(i=0; i<nCol; i++){
85653     if( i==pTab->iPKey ){
85654       continue;
85655     }
85656     onError = pTab->aCol[i].notNull;
85657     if( onError==OE_None ) continue;
85658     if( overrideError!=OE_Default ){
85659       onError = overrideError;
85660     }else if( onError==OE_Default ){
85661       onError = OE_Abort;
85662     }
85663     if( onError==OE_Replace && pTab->aCol[i].pDflt==0 ){
85664       onError = OE_Abort;
85665     }
85666     assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail
85667         || onError==OE_Ignore || onError==OE_Replace );
85668     switch( onError ){
85669       case OE_Abort:
85670         sqlite3MayAbort(pParse);
85671       case OE_Rollback:
85672       case OE_Fail: {
85673         char *zMsg;
85674         sqlite3VdbeAddOp3(v, OP_HaltIfNull,
85675                                   SQLITE_CONSTRAINT, onError, regData+i);
85676         zMsg = sqlite3MPrintf(pParse->db, "%s.%s may not be NULL",
85677                               pTab->zName, pTab->aCol[i].zName);
85678         sqlite3VdbeChangeP4(v, -1, zMsg, P4_DYNAMIC);
85679         break;
85680       }
85681       case OE_Ignore: {
85682         sqlite3VdbeAddOp2(v, OP_IsNull, regData+i, ignoreDest);
85683         break;
85684       }
85685       default: {
85686         assert( onError==OE_Replace );
85687         j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regData+i);
85688         sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regData+i);
85689         sqlite3VdbeJumpHere(v, j1);
85690         break;
85691       }
85692     }
85693   }
85694
85695   /* Test all CHECK constraints
85696   */
85697 #ifndef SQLITE_OMIT_CHECK
85698   if( pTab->pCheck && (pParse->db->flags & SQLITE_IgnoreChecks)==0 ){
85699     int allOk = sqlite3VdbeMakeLabel(v);
85700     pParse->ckBase = regData;
85701     sqlite3ExprIfTrue(pParse, pTab->pCheck, allOk, SQLITE_JUMPIFNULL);
85702     onError = overrideError!=OE_Default ? overrideError : OE_Abort;
85703     if( onError==OE_Ignore ){
85704       sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest);
85705     }else{
85706       if( onError==OE_Replace ) onError = OE_Abort; /* IMP: R-15569-63625 */
85707       sqlite3HaltConstraint(pParse, onError, 0, 0);
85708     }
85709     sqlite3VdbeResolveLabel(v, allOk);
85710   }
85711 #endif /* !defined(SQLITE_OMIT_CHECK) */
85712
85713   /* If we have an INTEGER PRIMARY KEY, make sure the primary key
85714   ** of the new record does not previously exist.  Except, if this
85715   ** is an UPDATE and the primary key is not changing, that is OK.
85716   */
85717   if( rowidChng ){
85718     onError = pTab->keyConf;
85719     if( overrideError!=OE_Default ){
85720       onError = overrideError;
85721     }else if( onError==OE_Default ){
85722       onError = OE_Abort;
85723     }
85724     
85725     if( isUpdate ){
85726       j2 = sqlite3VdbeAddOp3(v, OP_Eq, regRowid, 0, rowidChng);
85727     }
85728     j3 = sqlite3VdbeAddOp3(v, OP_NotExists, baseCur, 0, regRowid);
85729     switch( onError ){
85730       default: {
85731         onError = OE_Abort;
85732         /* Fall thru into the next case */
85733       }
85734       case OE_Rollback:
85735       case OE_Abort:
85736       case OE_Fail: {
85737         sqlite3HaltConstraint(
85738           pParse, onError, "PRIMARY KEY must be unique", P4_STATIC);
85739         break;
85740       }
85741       case OE_Replace: {
85742         /* If there are DELETE triggers on this table and the
85743         ** recursive-triggers flag is set, call GenerateRowDelete() to
85744         ** remove the conflicting row from the the table. This will fire
85745         ** the triggers and remove both the table and index b-tree entries.
85746         **
85747         ** Otherwise, if there are no triggers or the recursive-triggers
85748         ** flag is not set, but the table has one or more indexes, call 
85749         ** GenerateRowIndexDelete(). This removes the index b-tree entries 
85750         ** only. The table b-tree entry will be replaced by the new entry 
85751         ** when it is inserted.  
85752         **
85753         ** If either GenerateRowDelete() or GenerateRowIndexDelete() is called,
85754         ** also invoke MultiWrite() to indicate that this VDBE may require
85755         ** statement rollback (if the statement is aborted after the delete
85756         ** takes place). Earlier versions called sqlite3MultiWrite() regardless,
85757         ** but being more selective here allows statements like:
85758         **
85759         **   REPLACE INTO t(rowid) VALUES($newrowid)
85760         **
85761         ** to run without a statement journal if there are no indexes on the
85762         ** table.
85763         */
85764         Trigger *pTrigger = 0;
85765         if( pParse->db->flags&SQLITE_RecTriggers ){
85766           pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
85767         }
85768         if( pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0) ){
85769           sqlite3MultiWrite(pParse);
85770           sqlite3GenerateRowDelete(
85771               pParse, pTab, baseCur, regRowid, 0, pTrigger, OE_Replace
85772           );
85773         }else if( pTab->pIndex ){
85774           sqlite3MultiWrite(pParse);
85775           sqlite3GenerateRowIndexDelete(pParse, pTab, baseCur, 0);
85776         }
85777         seenReplace = 1;
85778         break;
85779       }
85780       case OE_Ignore: {
85781         assert( seenReplace==0 );
85782         sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest);
85783         break;
85784       }
85785     }
85786     sqlite3VdbeJumpHere(v, j3);
85787     if( isUpdate ){
85788       sqlite3VdbeJumpHere(v, j2);
85789     }
85790   }
85791
85792   /* Test all UNIQUE constraints by creating entries for each UNIQUE
85793   ** index and making sure that duplicate entries do not already exist.
85794   ** Add the new records to the indices as we go.
85795   */
85796   for(iCur=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, iCur++){
85797     int regIdx;
85798     int regR;
85799
85800     if( aRegIdx[iCur]==0 ) continue;  /* Skip unused indices */
85801
85802     /* Create a key for accessing the index entry */
85803     regIdx = sqlite3GetTempRange(pParse, pIdx->nColumn+1);
85804     for(i=0; i<pIdx->nColumn; i++){
85805       int idx = pIdx->aiColumn[i];
85806       if( idx==pTab->iPKey ){
85807         sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i);
85808       }else{
85809         sqlite3VdbeAddOp2(v, OP_SCopy, regData+idx, regIdx+i);
85810       }
85811     }
85812     sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i);
85813     sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn+1, aRegIdx[iCur]);
85814     sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v, pIdx), P4_TRANSIENT);
85815     sqlite3ExprCacheAffinityChange(pParse, regIdx, pIdx->nColumn+1);
85816
85817     /* Find out what action to take in case there is an indexing conflict */
85818     onError = pIdx->onError;
85819     if( onError==OE_None ){ 
85820       sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1);
85821       continue;  /* pIdx is not a UNIQUE index */
85822     }
85823     if( overrideError!=OE_Default ){
85824       onError = overrideError;
85825     }else if( onError==OE_Default ){
85826       onError = OE_Abort;
85827     }
85828     if( seenReplace ){
85829       if( onError==OE_Ignore ) onError = OE_Replace;
85830       else if( onError==OE_Fail ) onError = OE_Abort;
85831     }
85832     
85833     /* Check to see if the new index entry will be unique */
85834     regR = sqlite3GetTempReg(pParse);
85835     sqlite3VdbeAddOp2(v, OP_SCopy, regOldRowid, regR);
85836     j3 = sqlite3VdbeAddOp4(v, OP_IsUnique, baseCur+iCur+1, 0,
85837                            regR, SQLITE_INT_TO_PTR(regIdx),
85838                            P4_INT32);
85839     sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1);
85840
85841     /* Generate code that executes if the new index entry is not unique */
85842     assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail
85843         || onError==OE_Ignore || onError==OE_Replace );
85844     switch( onError ){
85845       case OE_Rollback:
85846       case OE_Abort:
85847       case OE_Fail: {
85848         int j;
85849         StrAccum errMsg;
85850         const char *zSep;
85851         char *zErr;
85852
85853         sqlite3StrAccumInit(&errMsg, 0, 0, 200);
85854         errMsg.db = pParse->db;
85855         zSep = pIdx->nColumn>1 ? "columns " : "column ";
85856         for(j=0; j<pIdx->nColumn; j++){
85857           char *zCol = pTab->aCol[pIdx->aiColumn[j]].zName;
85858           sqlite3StrAccumAppend(&errMsg, zSep, -1);
85859           zSep = ", ";
85860           sqlite3StrAccumAppend(&errMsg, zCol, -1);
85861         }
85862         sqlite3StrAccumAppend(&errMsg,
85863             pIdx->nColumn>1 ? " are not unique" : " is not unique", -1);
85864         zErr = sqlite3StrAccumFinish(&errMsg);
85865         sqlite3HaltConstraint(pParse, onError, zErr, 0);
85866         sqlite3DbFree(errMsg.db, zErr);
85867         break;
85868       }
85869       case OE_Ignore: {
85870         assert( seenReplace==0 );
85871         sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest);
85872         break;
85873       }
85874       default: {
85875         Trigger *pTrigger = 0;
85876         assert( onError==OE_Replace );
85877         sqlite3MultiWrite(pParse);
85878         if( pParse->db->flags&SQLITE_RecTriggers ){
85879           pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
85880         }
85881         sqlite3GenerateRowDelete(
85882             pParse, pTab, baseCur, regR, 0, pTrigger, OE_Replace
85883         );
85884         seenReplace = 1;
85885         break;
85886       }
85887     }
85888     sqlite3VdbeJumpHere(v, j3);
85889     sqlite3ReleaseTempReg(pParse, regR);
85890   }
85891   
85892   if( pbMayReplace ){
85893     *pbMayReplace = seenReplace;
85894   }
85895 }
85896
85897 /*
85898 ** This routine generates code to finish the INSERT or UPDATE operation
85899 ** that was started by a prior call to sqlite3GenerateConstraintChecks.
85900 ** A consecutive range of registers starting at regRowid contains the
85901 ** rowid and the content to be inserted.
85902 **
85903 ** The arguments to this routine should be the same as the first six
85904 ** arguments to sqlite3GenerateConstraintChecks.
85905 */
85906 SQLITE_PRIVATE void sqlite3CompleteInsertion(
85907   Parse *pParse,      /* The parser context */
85908   Table *pTab,        /* the table into which we are inserting */
85909   int baseCur,        /* Index of a read/write cursor pointing at pTab */
85910   int regRowid,       /* Range of content */
85911   int *aRegIdx,       /* Register used by each index.  0 for unused indices */
85912   int isUpdate,       /* True for UPDATE, False for INSERT */
85913   int appendBias,     /* True if this is likely to be an append */
85914   int useSeekResult   /* True to set the USESEEKRESULT flag on OP_[Idx]Insert */
85915 ){
85916   int i;
85917   Vdbe *v;
85918   int nIdx;
85919   Index *pIdx;
85920   u8 pik_flags;
85921   int regData;
85922   int regRec;
85923
85924   v = sqlite3GetVdbe(pParse);
85925   assert( v!=0 );
85926   assert( pTab->pSelect==0 );  /* This table is not a VIEW */
85927   for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){}
85928   for(i=nIdx-1; i>=0; i--){
85929     if( aRegIdx[i]==0 ) continue;
85930     sqlite3VdbeAddOp2(v, OP_IdxInsert, baseCur+i+1, aRegIdx[i]);
85931     if( useSeekResult ){
85932       sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
85933     }
85934   }
85935   regData = regRowid + 1;
85936   regRec = sqlite3GetTempReg(pParse);
85937   sqlite3VdbeAddOp3(v, OP_MakeRecord, regData, pTab->nCol, regRec);
85938   sqlite3TableAffinityStr(v, pTab);
85939   sqlite3ExprCacheAffinityChange(pParse, regData, pTab->nCol);
85940   if( pParse->nested ){
85941     pik_flags = 0;
85942   }else{
85943     pik_flags = OPFLAG_NCHANGE;
85944     pik_flags |= (isUpdate?OPFLAG_ISUPDATE:OPFLAG_LASTROWID);
85945   }
85946   if( appendBias ){
85947     pik_flags |= OPFLAG_APPEND;
85948   }
85949   if( useSeekResult ){
85950     pik_flags |= OPFLAG_USESEEKRESULT;
85951   }
85952   sqlite3VdbeAddOp3(v, OP_Insert, baseCur, regRec, regRowid);
85953   if( !pParse->nested ){
85954     sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_TRANSIENT);
85955   }
85956   sqlite3VdbeChangeP5(v, pik_flags);
85957 }
85958
85959 /*
85960 ** Generate code that will open cursors for a table and for all
85961 ** indices of that table.  The "baseCur" parameter is the cursor number used
85962 ** for the table.  Indices are opened on subsequent cursors.
85963 **
85964 ** Return the number of indices on the table.
85965 */
85966 SQLITE_PRIVATE int sqlite3OpenTableAndIndices(
85967   Parse *pParse,   /* Parsing context */
85968   Table *pTab,     /* Table to be opened */
85969   int baseCur,     /* Cursor number assigned to the table */
85970   int op           /* OP_OpenRead or OP_OpenWrite */
85971 ){
85972   int i;
85973   int iDb;
85974   Index *pIdx;
85975   Vdbe *v;
85976
85977   if( IsVirtual(pTab) ) return 0;
85978   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
85979   v = sqlite3GetVdbe(pParse);
85980   assert( v!=0 );
85981   sqlite3OpenTable(pParse, baseCur, iDb, pTab, op);
85982   for(i=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
85983     KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
85984     assert( pIdx->pSchema==pTab->pSchema );
85985     sqlite3VdbeAddOp4(v, op, i+baseCur, pIdx->tnum, iDb,
85986                       (char*)pKey, P4_KEYINFO_HANDOFF);
85987     VdbeComment((v, "%s", pIdx->zName));
85988   }
85989   if( pParse->nTab<baseCur+i ){
85990     pParse->nTab = baseCur+i;
85991   }
85992   return i-1;
85993 }
85994
85995
85996 #ifdef SQLITE_TEST
85997 /*
85998 ** The following global variable is incremented whenever the
85999 ** transfer optimization is used.  This is used for testing
86000 ** purposes only - to make sure the transfer optimization really
86001 ** is happening when it is suppose to.
86002 */
86003 SQLITE_API int sqlite3_xferopt_count;
86004 #endif /* SQLITE_TEST */
86005
86006
86007 #ifndef SQLITE_OMIT_XFER_OPT
86008 /*
86009 ** Check to collation names to see if they are compatible.
86010 */
86011 static int xferCompatibleCollation(const char *z1, const char *z2){
86012   if( z1==0 ){
86013     return z2==0;
86014   }
86015   if( z2==0 ){
86016     return 0;
86017   }
86018   return sqlite3StrICmp(z1, z2)==0;
86019 }
86020
86021
86022 /*
86023 ** Check to see if index pSrc is compatible as a source of data
86024 ** for index pDest in an insert transfer optimization.  The rules
86025 ** for a compatible index:
86026 **
86027 **    *   The index is over the same set of columns
86028 **    *   The same DESC and ASC markings occurs on all columns
86029 **    *   The same onError processing (OE_Abort, OE_Ignore, etc)
86030 **    *   The same collating sequence on each column
86031 */
86032 static int xferCompatibleIndex(Index *pDest, Index *pSrc){
86033   int i;
86034   assert( pDest && pSrc );
86035   assert( pDest->pTable!=pSrc->pTable );
86036   if( pDest->nColumn!=pSrc->nColumn ){
86037     return 0;   /* Different number of columns */
86038   }
86039   if( pDest->onError!=pSrc->onError ){
86040     return 0;   /* Different conflict resolution strategies */
86041   }
86042   for(i=0; i<pSrc->nColumn; i++){
86043     if( pSrc->aiColumn[i]!=pDest->aiColumn[i] ){
86044       return 0;   /* Different columns indexed */
86045     }
86046     if( pSrc->aSortOrder[i]!=pDest->aSortOrder[i] ){
86047       return 0;   /* Different sort orders */
86048     }
86049     if( !xferCompatibleCollation(pSrc->azColl[i],pDest->azColl[i]) ){
86050       return 0;   /* Different collating sequences */
86051     }
86052   }
86053
86054   /* If no test above fails then the indices must be compatible */
86055   return 1;
86056 }
86057
86058 /*
86059 ** Attempt the transfer optimization on INSERTs of the form
86060 **
86061 **     INSERT INTO tab1 SELECT * FROM tab2;
86062 **
86063 ** This optimization is only attempted if
86064 **
86065 **    (1)  tab1 and tab2 have identical schemas including all the
86066 **         same indices and constraints
86067 **
86068 **    (2)  tab1 and tab2 are different tables
86069 **
86070 **    (3)  There must be no triggers on tab1
86071 **
86072 **    (4)  The result set of the SELECT statement is "*"
86073 **
86074 **    (5)  The SELECT statement has no WHERE, HAVING, ORDER BY, GROUP BY,
86075 **         or LIMIT clause.
86076 **
86077 **    (6)  The SELECT statement is a simple (not a compound) select that
86078 **         contains only tab2 in its FROM clause
86079 **
86080 ** This method for implementing the INSERT transfers raw records from
86081 ** tab2 over to tab1.  The columns are not decoded.  Raw records from
86082 ** the indices of tab2 are transfered to tab1 as well.  In so doing,
86083 ** the resulting tab1 has much less fragmentation.
86084 **
86085 ** This routine returns TRUE if the optimization is attempted.  If any
86086 ** of the conditions above fail so that the optimization should not
86087 ** be attempted, then this routine returns FALSE.
86088 */
86089 static int xferOptimization(
86090   Parse *pParse,        /* Parser context */
86091   Table *pDest,         /* The table we are inserting into */
86092   Select *pSelect,      /* A SELECT statement to use as the data source */
86093   int onError,          /* How to handle constraint errors */
86094   int iDbDest           /* The database of pDest */
86095 ){
86096   ExprList *pEList;                /* The result set of the SELECT */
86097   Table *pSrc;                     /* The table in the FROM clause of SELECT */
86098   Index *pSrcIdx, *pDestIdx;       /* Source and destination indices */
86099   struct SrcList_item *pItem;      /* An element of pSelect->pSrc */
86100   int i;                           /* Loop counter */
86101   int iDbSrc;                      /* The database of pSrc */
86102   int iSrc, iDest;                 /* Cursors from source and destination */
86103   int addr1, addr2;                /* Loop addresses */
86104   int emptyDestTest;               /* Address of test for empty pDest */
86105   int emptySrcTest;                /* Address of test for empty pSrc */
86106   Vdbe *v;                         /* The VDBE we are building */
86107   KeyInfo *pKey;                   /* Key information for an index */
86108   int regAutoinc;                  /* Memory register used by AUTOINC */
86109   int destHasUniqueIdx = 0;        /* True if pDest has a UNIQUE index */
86110   int regData, regRowid;           /* Registers holding data and rowid */
86111
86112   if( pSelect==0 ){
86113     return 0;   /* Must be of the form  INSERT INTO ... SELECT ... */
86114   }
86115   if( sqlite3TriggerList(pParse, pDest) ){
86116     return 0;   /* tab1 must not have triggers */
86117   }
86118 #ifndef SQLITE_OMIT_VIRTUALTABLE
86119   if( pDest->tabFlags & TF_Virtual ){
86120     return 0;   /* tab1 must not be a virtual table */
86121   }
86122 #endif
86123   if( onError==OE_Default ){
86124     onError = OE_Abort;
86125   }
86126   if( onError!=OE_Abort && onError!=OE_Rollback ){
86127     return 0;   /* Cannot do OR REPLACE or OR IGNORE or OR FAIL */
86128   }
86129   assert(pSelect->pSrc);   /* allocated even if there is no FROM clause */
86130   if( pSelect->pSrc->nSrc!=1 ){
86131     return 0;   /* FROM clause must have exactly one term */
86132   }
86133   if( pSelect->pSrc->a[0].pSelect ){
86134     return 0;   /* FROM clause cannot contain a subquery */
86135   }
86136   if( pSelect->pWhere ){
86137     return 0;   /* SELECT may not have a WHERE clause */
86138   }
86139   if( pSelect->pOrderBy ){
86140     return 0;   /* SELECT may not have an ORDER BY clause */
86141   }
86142   /* Do not need to test for a HAVING clause.  If HAVING is present but
86143   ** there is no ORDER BY, we will get an error. */
86144   if( pSelect->pGroupBy ){
86145     return 0;   /* SELECT may not have a GROUP BY clause */
86146   }
86147   if( pSelect->pLimit ){
86148     return 0;   /* SELECT may not have a LIMIT clause */
86149   }
86150   assert( pSelect->pOffset==0 );  /* Must be so if pLimit==0 */
86151   if( pSelect->pPrior ){
86152     return 0;   /* SELECT may not be a compound query */
86153   }
86154   if( pSelect->selFlags & SF_Distinct ){
86155     return 0;   /* SELECT may not be DISTINCT */
86156   }
86157   pEList = pSelect->pEList;
86158   assert( pEList!=0 );
86159   if( pEList->nExpr!=1 ){
86160     return 0;   /* The result set must have exactly one column */
86161   }
86162   assert( pEList->a[0].pExpr );
86163   if( pEList->a[0].pExpr->op!=TK_ALL ){
86164     return 0;   /* The result set must be the special operator "*" */
86165   }
86166
86167   /* At this point we have established that the statement is of the
86168   ** correct syntactic form to participate in this optimization.  Now
86169   ** we have to check the semantics.
86170   */
86171   pItem = pSelect->pSrc->a;
86172   pSrc = sqlite3LocateTable(pParse, 0, pItem->zName, pItem->zDatabase);
86173   if( pSrc==0 ){
86174     return 0;   /* FROM clause does not contain a real table */
86175   }
86176   if( pSrc==pDest ){
86177     return 0;   /* tab1 and tab2 may not be the same table */
86178   }
86179 #ifndef SQLITE_OMIT_VIRTUALTABLE
86180   if( pSrc->tabFlags & TF_Virtual ){
86181     return 0;   /* tab2 must not be a virtual table */
86182   }
86183 #endif
86184   if( pSrc->pSelect ){
86185     return 0;   /* tab2 may not be a view */
86186   }
86187   if( pDest->nCol!=pSrc->nCol ){
86188     return 0;   /* Number of columns must be the same in tab1 and tab2 */
86189   }
86190   if( pDest->iPKey!=pSrc->iPKey ){
86191     return 0;   /* Both tables must have the same INTEGER PRIMARY KEY */
86192   }
86193   for(i=0; i<pDest->nCol; i++){
86194     if( pDest->aCol[i].affinity!=pSrc->aCol[i].affinity ){
86195       return 0;    /* Affinity must be the same on all columns */
86196     }
86197     if( !xferCompatibleCollation(pDest->aCol[i].zColl, pSrc->aCol[i].zColl) ){
86198       return 0;    /* Collating sequence must be the same on all columns */
86199     }
86200     if( pDest->aCol[i].notNull && !pSrc->aCol[i].notNull ){
86201       return 0;    /* tab2 must be NOT NULL if tab1 is */
86202     }
86203   }
86204   for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
86205     if( pDestIdx->onError!=OE_None ){
86206       destHasUniqueIdx = 1;
86207     }
86208     for(pSrcIdx=pSrc->pIndex; pSrcIdx; pSrcIdx=pSrcIdx->pNext){
86209       if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
86210     }
86211     if( pSrcIdx==0 ){
86212       return 0;    /* pDestIdx has no corresponding index in pSrc */
86213     }
86214   }
86215 #ifndef SQLITE_OMIT_CHECK
86216   if( pDest->pCheck && sqlite3ExprCompare(pSrc->pCheck, pDest->pCheck) ){
86217     return 0;   /* Tables have different CHECK constraints.  Ticket #2252 */
86218   }
86219 #endif
86220
86221   /* If we get this far, it means either:
86222   **
86223   **    *   We can always do the transfer if the table contains an
86224   **        an integer primary key
86225   **
86226   **    *   We can conditionally do the transfer if the destination
86227   **        table is empty.
86228   */
86229 #ifdef SQLITE_TEST
86230   sqlite3_xferopt_count++;
86231 #endif
86232   iDbSrc = sqlite3SchemaToIndex(pParse->db, pSrc->pSchema);
86233   v = sqlite3GetVdbe(pParse);
86234   sqlite3CodeVerifySchema(pParse, iDbSrc);
86235   iSrc = pParse->nTab++;
86236   iDest = pParse->nTab++;
86237   regAutoinc = autoIncBegin(pParse, iDbDest, pDest);
86238   sqlite3OpenTable(pParse, iDest, iDbDest, pDest, OP_OpenWrite);
86239   if( (pDest->iPKey<0 && pDest->pIndex!=0) || destHasUniqueIdx ){
86240     /* If tables do not have an INTEGER PRIMARY KEY and there
86241     ** are indices to be copied and the destination is not empty,
86242     ** we have to disallow the transfer optimization because the
86243     ** the rowids might change which will mess up indexing.
86244     **
86245     ** Or if the destination has a UNIQUE index and is not empty,
86246     ** we also disallow the transfer optimization because we cannot
86247     ** insure that all entries in the union of DEST and SRC will be
86248     ** unique.
86249     */
86250     addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iDest, 0);
86251     emptyDestTest = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0);
86252     sqlite3VdbeJumpHere(v, addr1);
86253   }else{
86254     emptyDestTest = 0;
86255   }
86256   sqlite3OpenTable(pParse, iSrc, iDbSrc, pSrc, OP_OpenRead);
86257   emptySrcTest = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0);
86258   regData = sqlite3GetTempReg(pParse);
86259   regRowid = sqlite3GetTempReg(pParse);
86260   if( pDest->iPKey>=0 ){
86261     addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);
86262     addr2 = sqlite3VdbeAddOp3(v, OP_NotExists, iDest, 0, regRowid);
86263     sqlite3HaltConstraint(
86264         pParse, onError, "PRIMARY KEY must be unique", P4_STATIC);
86265     sqlite3VdbeJumpHere(v, addr2);
86266     autoIncStep(pParse, regAutoinc, regRowid);
86267   }else if( pDest->pIndex==0 ){
86268     addr1 = sqlite3VdbeAddOp2(v, OP_NewRowid, iDest, regRowid);
86269   }else{
86270     addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);
86271     assert( (pDest->tabFlags & TF_Autoincrement)==0 );
86272   }
86273   sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData);
86274   sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid);
86275   sqlite3VdbeChangeP5(v, OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND);
86276   sqlite3VdbeChangeP4(v, -1, pDest->zName, 0);
86277   sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1);
86278   for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
86279     for(pSrcIdx=pSrc->pIndex; ALWAYS(pSrcIdx); pSrcIdx=pSrcIdx->pNext){
86280       if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
86281     }
86282     assert( pSrcIdx );
86283     sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);
86284     sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
86285     pKey = sqlite3IndexKeyinfo(pParse, pSrcIdx);
86286     sqlite3VdbeAddOp4(v, OP_OpenRead, iSrc, pSrcIdx->tnum, iDbSrc,
86287                       (char*)pKey, P4_KEYINFO_HANDOFF);
86288     VdbeComment((v, "%s", pSrcIdx->zName));
86289     pKey = sqlite3IndexKeyinfo(pParse, pDestIdx);
86290     sqlite3VdbeAddOp4(v, OP_OpenWrite, iDest, pDestIdx->tnum, iDbDest,
86291                       (char*)pKey, P4_KEYINFO_HANDOFF);
86292     VdbeComment((v, "%s", pDestIdx->zName));
86293     addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0);
86294     sqlite3VdbeAddOp2(v, OP_RowKey, iSrc, regData);
86295     sqlite3VdbeAddOp3(v, OP_IdxInsert, iDest, regData, 1);
86296     sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1+1);
86297     sqlite3VdbeJumpHere(v, addr1);
86298   }
86299   sqlite3VdbeJumpHere(v, emptySrcTest);
86300   sqlite3ReleaseTempReg(pParse, regRowid);
86301   sqlite3ReleaseTempReg(pParse, regData);
86302   sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);
86303   sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
86304   if( emptyDestTest ){
86305     sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_OK, 0);
86306     sqlite3VdbeJumpHere(v, emptyDestTest);
86307     sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
86308     return 0;
86309   }else{
86310     return 1;
86311   }
86312 }
86313 #endif /* SQLITE_OMIT_XFER_OPT */
86314
86315 /************** End of insert.c **********************************************/
86316 /************** Begin file legacy.c ******************************************/
86317 /*
86318 ** 2001 September 15
86319 **
86320 ** The author disclaims copyright to this source code.  In place of
86321 ** a legal notice, here is a blessing:
86322 **
86323 **    May you do good and not evil.
86324 **    May you find forgiveness for yourself and forgive others.
86325 **    May you share freely, never taking more than you give.
86326 **
86327 *************************************************************************
86328 ** Main file for the SQLite library.  The routines in this file
86329 ** implement the programmer interface to the library.  Routines in
86330 ** other files are for internal use by SQLite and should not be
86331 ** accessed by users of the library.
86332 */
86333
86334
86335 /*
86336 ** Execute SQL code.  Return one of the SQLITE_ success/failure
86337 ** codes.  Also write an error message into memory obtained from
86338 ** malloc() and make *pzErrMsg point to that message.
86339 **
86340 ** If the SQL is a query, then for each row in the query result
86341 ** the xCallback() function is called.  pArg becomes the first
86342 ** argument to xCallback().  If xCallback=NULL then no callback
86343 ** is invoked, even for queries.
86344 */
86345 SQLITE_API int sqlite3_exec(
86346   sqlite3 *db,                /* The database on which the SQL executes */
86347   const char *zSql,           /* The SQL to be executed */
86348   sqlite3_callback xCallback, /* Invoke this callback routine */
86349   void *pArg,                 /* First argument to xCallback() */
86350   char **pzErrMsg             /* Write error messages here */
86351 ){
86352   int rc = SQLITE_OK;         /* Return code */
86353   const char *zLeftover;      /* Tail of unprocessed SQL */
86354   sqlite3_stmt *pStmt = 0;    /* The current SQL statement */
86355   char **azCols = 0;          /* Names of result columns */
86356   int nRetry = 0;             /* Number of retry attempts */
86357   int callbackIsInit;         /* True if callback data is initialized */
86358
86359   if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
86360   if( zSql==0 ) zSql = "";
86361
86362   sqlite3_mutex_enter(db->mutex);
86363   sqlite3Error(db, SQLITE_OK, 0);
86364   while( (rc==SQLITE_OK || (rc==SQLITE_SCHEMA && (++nRetry)<2)) && zSql[0] ){
86365     int nCol;
86366     char **azVals = 0;
86367
86368     pStmt = 0;
86369     rc = sqlite3_prepare(db, zSql, -1, &pStmt, &zLeftover);
86370     assert( rc==SQLITE_OK || pStmt==0 );
86371     if( rc!=SQLITE_OK ){
86372       continue;
86373     }
86374     if( !pStmt ){
86375       /* this happens for a comment or white-space */
86376       zSql = zLeftover;
86377       continue;
86378     }
86379
86380     callbackIsInit = 0;
86381     nCol = sqlite3_column_count(pStmt);
86382
86383     while( 1 ){
86384       int i;
86385       rc = sqlite3_step(pStmt);
86386
86387       /* Invoke the callback function if required */
86388       if( xCallback && (SQLITE_ROW==rc || 
86389           (SQLITE_DONE==rc && !callbackIsInit
86390                            && db->flags&SQLITE_NullCallback)) ){
86391         if( !callbackIsInit ){
86392           azCols = sqlite3DbMallocZero(db, 2*nCol*sizeof(const char*) + 1);
86393           if( azCols==0 ){
86394             goto exec_out;
86395           }
86396           for(i=0; i<nCol; i++){
86397             azCols[i] = (char *)sqlite3_column_name(pStmt, i);
86398             /* sqlite3VdbeSetColName() installs column names as UTF8
86399             ** strings so there is no way for sqlite3_column_name() to fail. */
86400             assert( azCols[i]!=0 );
86401           }
86402           callbackIsInit = 1;
86403         }
86404         if( rc==SQLITE_ROW ){
86405           azVals = &azCols[nCol];
86406           for(i=0; i<nCol; i++){
86407             azVals[i] = (char *)sqlite3_column_text(pStmt, i);
86408             if( !azVals[i] && sqlite3_column_type(pStmt, i)!=SQLITE_NULL ){
86409               db->mallocFailed = 1;
86410               goto exec_out;
86411             }
86412           }
86413         }
86414         if( xCallback(pArg, nCol, azVals, azCols) ){
86415           rc = SQLITE_ABORT;
86416           sqlite3VdbeFinalize((Vdbe *)pStmt);
86417           pStmt = 0;
86418           sqlite3Error(db, SQLITE_ABORT, 0);
86419           goto exec_out;
86420         }
86421       }
86422
86423       if( rc!=SQLITE_ROW ){
86424         rc = sqlite3VdbeFinalize((Vdbe *)pStmt);
86425         pStmt = 0;
86426         if( rc!=SQLITE_SCHEMA ){
86427           nRetry = 0;
86428           zSql = zLeftover;
86429           while( sqlite3Isspace(zSql[0]) ) zSql++;
86430         }
86431         break;
86432       }
86433     }
86434
86435     sqlite3DbFree(db, azCols);
86436     azCols = 0;
86437   }
86438
86439 exec_out:
86440   if( pStmt ) sqlite3VdbeFinalize((Vdbe *)pStmt);
86441   sqlite3DbFree(db, azCols);
86442
86443   rc = sqlite3ApiExit(db, rc);
86444   if( rc!=SQLITE_OK && ALWAYS(rc==sqlite3_errcode(db)) && pzErrMsg ){
86445     int nErrMsg = 1 + sqlite3Strlen30(sqlite3_errmsg(db));
86446     *pzErrMsg = sqlite3Malloc(nErrMsg);
86447     if( *pzErrMsg ){
86448       memcpy(*pzErrMsg, sqlite3_errmsg(db), nErrMsg);
86449     }else{
86450       rc = SQLITE_NOMEM;
86451       sqlite3Error(db, SQLITE_NOMEM, 0);
86452     }
86453   }else if( pzErrMsg ){
86454     *pzErrMsg = 0;
86455   }
86456
86457   assert( (rc&db->errMask)==rc );
86458   sqlite3_mutex_leave(db->mutex);
86459   return rc;
86460 }
86461
86462 /************** End of legacy.c **********************************************/
86463 /************** Begin file loadext.c *****************************************/
86464 /*
86465 ** 2006 June 7
86466 **
86467 ** The author disclaims copyright to this source code.  In place of
86468 ** a legal notice, here is a blessing:
86469 **
86470 **    May you do good and not evil.
86471 **    May you find forgiveness for yourself and forgive others.
86472 **    May you share freely, never taking more than you give.
86473 **
86474 *************************************************************************
86475 ** This file contains code used to dynamically load extensions into
86476 ** the SQLite library.
86477 */
86478
86479 #ifndef SQLITE_CORE
86480   #define SQLITE_CORE 1  /* Disable the API redefinition in sqlite3ext.h */
86481 #endif
86482 /************** Include sqlite3ext.h in the middle of loadext.c **************/
86483 /************** Begin file sqlite3ext.h **************************************/
86484 /*
86485 ** 2006 June 7
86486 **
86487 ** The author disclaims copyright to this source code.  In place of
86488 ** a legal notice, here is a blessing:
86489 **
86490 **    May you do good and not evil.
86491 **    May you find forgiveness for yourself and forgive others.
86492 **    May you share freely, never taking more than you give.
86493 **
86494 *************************************************************************
86495 ** This header file defines the SQLite interface for use by
86496 ** shared libraries that want to be imported as extensions into
86497 ** an SQLite instance.  Shared libraries that intend to be loaded
86498 ** as extensions by SQLite should #include this file instead of 
86499 ** sqlite3.h.
86500 */
86501 #ifndef _SQLITE3EXT_H_
86502 #define _SQLITE3EXT_H_
86503
86504 typedef struct sqlite3_api_routines sqlite3_api_routines;
86505
86506 /*
86507 ** The following structure holds pointers to all of the SQLite API
86508 ** routines.
86509 **
86510 ** WARNING:  In order to maintain backwards compatibility, add new
86511 ** interfaces to the end of this structure only.  If you insert new
86512 ** interfaces in the middle of this structure, then older different
86513 ** versions of SQLite will not be able to load each others' shared
86514 ** libraries!
86515 */
86516 struct sqlite3_api_routines {
86517   void * (*aggregate_context)(sqlite3_context*,int nBytes);
86518   int  (*aggregate_count)(sqlite3_context*);
86519   int  (*bind_blob)(sqlite3_stmt*,int,const void*,int n,void(*)(void*));
86520   int  (*bind_double)(sqlite3_stmt*,int,double);
86521   int  (*bind_int)(sqlite3_stmt*,int,int);
86522   int  (*bind_int64)(sqlite3_stmt*,int,sqlite_int64);
86523   int  (*bind_null)(sqlite3_stmt*,int);
86524   int  (*bind_parameter_count)(sqlite3_stmt*);
86525   int  (*bind_parameter_index)(sqlite3_stmt*,const char*zName);
86526   const char * (*bind_parameter_name)(sqlite3_stmt*,int);
86527   int  (*bind_text)(sqlite3_stmt*,int,const char*,int n,void(*)(void*));
86528   int  (*bind_text16)(sqlite3_stmt*,int,const void*,int,void(*)(void*));
86529   int  (*bind_value)(sqlite3_stmt*,int,const sqlite3_value*);
86530   int  (*busy_handler)(sqlite3*,int(*)(void*,int),void*);
86531   int  (*busy_timeout)(sqlite3*,int ms);
86532   int  (*changes)(sqlite3*);
86533   int  (*close)(sqlite3*);
86534   int  (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const char*));
86535   int  (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,int eTextRep,const void*));
86536   const void * (*column_blob)(sqlite3_stmt*,int iCol);
86537   int  (*column_bytes)(sqlite3_stmt*,int iCol);
86538   int  (*column_bytes16)(sqlite3_stmt*,int iCol);
86539   int  (*column_count)(sqlite3_stmt*pStmt);
86540   const char * (*column_database_name)(sqlite3_stmt*,int);
86541   const void * (*column_database_name16)(sqlite3_stmt*,int);
86542   const char * (*column_decltype)(sqlite3_stmt*,int i);
86543   const void * (*column_decltype16)(sqlite3_stmt*,int);
86544   double  (*column_double)(sqlite3_stmt*,int iCol);
86545   int  (*column_int)(sqlite3_stmt*,int iCol);
86546   sqlite_int64  (*column_int64)(sqlite3_stmt*,int iCol);
86547   const char * (*column_name)(sqlite3_stmt*,int);
86548   const void * (*column_name16)(sqlite3_stmt*,int);
86549   const char * (*column_origin_name)(sqlite3_stmt*,int);
86550   const void * (*column_origin_name16)(sqlite3_stmt*,int);
86551   const char * (*column_table_name)(sqlite3_stmt*,int);
86552   const void * (*column_table_name16)(sqlite3_stmt*,int);
86553   const unsigned char * (*column_text)(sqlite3_stmt*,int iCol);
86554   const void * (*column_text16)(sqlite3_stmt*,int iCol);
86555   int  (*column_type)(sqlite3_stmt*,int iCol);
86556   sqlite3_value* (*column_value)(sqlite3_stmt*,int iCol);
86557   void * (*commit_hook)(sqlite3*,int(*)(void*),void*);
86558   int  (*complete)(const char*sql);
86559   int  (*complete16)(const void*sql);
86560   int  (*create_collation)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*));
86561   int  (*create_collation16)(sqlite3*,const void*,int,void*,int(*)(void*,int,const void*,int,const void*));
86562   int  (*create_function)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*));
86563   int  (*create_function16)(sqlite3*,const void*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*));
86564   int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*);
86565   int  (*data_count)(sqlite3_stmt*pStmt);
86566   sqlite3 * (*db_handle)(sqlite3_stmt*);
86567   int (*declare_vtab)(sqlite3*,const char*);
86568   int  (*enable_shared_cache)(int);
86569   int  (*errcode)(sqlite3*db);
86570   const char * (*errmsg)(sqlite3*);
86571   const void * (*errmsg16)(sqlite3*);
86572   int  (*exec)(sqlite3*,const char*,sqlite3_callback,void*,char**);
86573   int  (*expired)(sqlite3_stmt*);
86574   int  (*finalize)(sqlite3_stmt*pStmt);
86575   void  (*free)(void*);
86576   void  (*free_table)(char**result);
86577   int  (*get_autocommit)(sqlite3*);
86578   void * (*get_auxdata)(sqlite3_context*,int);
86579   int  (*get_table)(sqlite3*,const char*,char***,int*,int*,char**);
86580   int  (*global_recover)(void);
86581   void  (*interruptx)(sqlite3*);
86582   sqlite_int64  (*last_insert_rowid)(sqlite3*);
86583   const char * (*libversion)(void);
86584   int  (*libversion_number)(void);
86585   void *(*malloc)(int);
86586   char * (*mprintf)(const char*,...);
86587   int  (*open)(const char*,sqlite3**);
86588   int  (*open16)(const void*,sqlite3**);
86589   int  (*prepare)(sqlite3*,const char*,int,sqlite3_stmt**,const char**);
86590   int  (*prepare16)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
86591   void * (*profile)(sqlite3*,void(*)(void*,const char*,sqlite_uint64),void*);
86592   void  (*progress_handler)(sqlite3*,int,int(*)(void*),void*);
86593   void *(*realloc)(void*,int);
86594   int  (*reset)(sqlite3_stmt*pStmt);
86595   void  (*result_blob)(sqlite3_context*,const void*,int,void(*)(void*));
86596   void  (*result_double)(sqlite3_context*,double);
86597   void  (*result_error)(sqlite3_context*,const char*,int);
86598   void  (*result_error16)(sqlite3_context*,const void*,int);
86599   void  (*result_int)(sqlite3_context*,int);
86600   void  (*result_int64)(sqlite3_context*,sqlite_int64);
86601   void  (*result_null)(sqlite3_context*);
86602   void  (*result_text)(sqlite3_context*,const char*,int,void(*)(void*));
86603   void  (*result_text16)(sqlite3_context*,const void*,int,void(*)(void*));
86604   void  (*result_text16be)(sqlite3_context*,const void*,int,void(*)(void*));
86605   void  (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*));
86606   void  (*result_value)(sqlite3_context*,sqlite3_value*);
86607   void * (*rollback_hook)(sqlite3*,void(*)(void*),void*);
86608   int  (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,const char*,const char*),void*);
86609   void  (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*));
86610   char * (*snprintf)(int,char*,const char*,...);
86611   int  (*step)(sqlite3_stmt*);
86612   int  (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,char const**,char const**,int*,int*,int*);
86613   void  (*thread_cleanup)(void);
86614   int  (*total_changes)(sqlite3*);
86615   void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*);
86616   int  (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*);
86617   void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,sqlite_int64),void*);
86618   void * (*user_data)(sqlite3_context*);
86619   const void * (*value_blob)(sqlite3_value*);
86620   int  (*value_bytes)(sqlite3_value*);
86621   int  (*value_bytes16)(sqlite3_value*);
86622   double  (*value_double)(sqlite3_value*);
86623   int  (*value_int)(sqlite3_value*);
86624   sqlite_int64  (*value_int64)(sqlite3_value*);
86625   int  (*value_numeric_type)(sqlite3_value*);
86626   const unsigned char * (*value_text)(sqlite3_value*);
86627   const void * (*value_text16)(sqlite3_value*);
86628   const void * (*value_text16be)(sqlite3_value*);
86629   const void * (*value_text16le)(sqlite3_value*);
86630   int  (*value_type)(sqlite3_value*);
86631   char *(*vmprintf)(const char*,va_list);
86632   /* Added ??? */
86633   int (*overload_function)(sqlite3*, const char *zFuncName, int nArg);
86634   /* Added by 3.3.13 */
86635   int (*prepare_v2)(sqlite3*,const char*,int,sqlite3_stmt**,const char**);
86636   int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
86637   int (*clear_bindings)(sqlite3_stmt*);
86638   /* Added by 3.4.1 */
86639   int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*,void (*xDestroy)(void *));
86640   /* Added by 3.5.0 */
86641   int (*bind_zeroblob)(sqlite3_stmt*,int,int);
86642   int (*blob_bytes)(sqlite3_blob*);
86643   int (*blob_close)(sqlite3_blob*);
86644   int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64,int,sqlite3_blob**);
86645   int (*blob_read)(sqlite3_blob*,void*,int,int);
86646   int (*blob_write)(sqlite3_blob*,const void*,int,int);
86647   int (*create_collation_v2)(sqlite3*,const char*,int,void*,int(*)(void*,int,const void*,int,const void*),void(*)(void*));
86648   int (*file_control)(sqlite3*,const char*,int,void*);
86649   sqlite3_int64 (*memory_highwater)(int);
86650   sqlite3_int64 (*memory_used)(void);
86651   sqlite3_mutex *(*mutex_alloc)(int);
86652   void (*mutex_enter)(sqlite3_mutex*);
86653   void (*mutex_free)(sqlite3_mutex*);
86654   void (*mutex_leave)(sqlite3_mutex*);
86655   int (*mutex_try)(sqlite3_mutex*);
86656   int (*open_v2)(const char*,sqlite3**,int,const char*);
86657   int (*release_memory)(int);
86658   void (*result_error_nomem)(sqlite3_context*);
86659   void (*result_error_toobig)(sqlite3_context*);
86660   int (*sleep)(int);
86661   void (*soft_heap_limit)(int);
86662   sqlite3_vfs *(*vfs_find)(const char*);
86663   int (*vfs_register)(sqlite3_vfs*,int);
86664   int (*vfs_unregister)(sqlite3_vfs*);
86665   int (*xthreadsafe)(void);
86666   void (*result_zeroblob)(sqlite3_context*,int);
86667   void (*result_error_code)(sqlite3_context*,int);
86668   int (*test_control)(int, ...);
86669   void (*randomness)(int,void*);
86670   sqlite3 *(*context_db_handle)(sqlite3_context*);
86671   int (*extended_result_codes)(sqlite3*,int);
86672   int (*limit)(sqlite3*,int,int);
86673   sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*);
86674   const char *(*sql)(sqlite3_stmt*);
86675   int (*status)(int,int*,int*,int);
86676   int (*backup_finish)(sqlite3_backup*);
86677   sqlite3_backup *(*backup_init)(sqlite3*,const char*,sqlite3*,const char*);
86678   int (*backup_pagecount)(sqlite3_backup*);
86679   int (*backup_remaining)(sqlite3_backup*);
86680   int (*backup_step)(sqlite3_backup*,int);
86681   const char *(*compileoption_get)(int);
86682   int (*compileoption_used)(const char*);
86683   int (*create_function_v2)(sqlite3*,const char*,int,int,void*,void (*xFunc)(sqlite3_context*,int,sqlite3_value**),void (*xStep)(sqlite3_context*,int,sqlite3_value**),void (*xFinal)(sqlite3_context*),void(*xDestroy)(void*));
86684   int (*db_config)(sqlite3*,int,...);
86685   sqlite3_mutex *(*db_mutex)(sqlite3*);
86686   int (*db_status)(sqlite3*,int,int*,int*,int);
86687   int (*extended_errcode)(sqlite3*);
86688   void (*log)(int,const char*,...);
86689   sqlite3_int64 (*soft_heap_limit64)(sqlite3_int64);
86690   const char *(*sourceid)(void);
86691   int (*stmt_status)(sqlite3_stmt*,int,int);
86692   int (*strnicmp)(const char*,const char*,int);
86693   int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*);
86694   int (*wal_autocheckpoint)(sqlite3*,int);
86695   int (*wal_checkpoint)(sqlite3*,const char*);
86696   void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*);
86697 };
86698
86699 /*
86700 ** The following macros redefine the API routines so that they are
86701 ** redirected throught the global sqlite3_api structure.
86702 **
86703 ** This header file is also used by the loadext.c source file
86704 ** (part of the main SQLite library - not an extension) so that
86705 ** it can get access to the sqlite3_api_routines structure
86706 ** definition.  But the main library does not want to redefine
86707 ** the API.  So the redefinition macros are only valid if the
86708 ** SQLITE_CORE macros is undefined.
86709 */
86710 #ifndef SQLITE_CORE
86711 #define sqlite3_aggregate_context      sqlite3_api->aggregate_context
86712 #ifndef SQLITE_OMIT_DEPRECATED
86713 #define sqlite3_aggregate_count        sqlite3_api->aggregate_count
86714 #endif
86715 #define sqlite3_bind_blob              sqlite3_api->bind_blob
86716 #define sqlite3_bind_double            sqlite3_api->bind_double
86717 #define sqlite3_bind_int               sqlite3_api->bind_int
86718 #define sqlite3_bind_int64             sqlite3_api->bind_int64
86719 #define sqlite3_bind_null              sqlite3_api->bind_null
86720 #define sqlite3_bind_parameter_count   sqlite3_api->bind_parameter_count
86721 #define sqlite3_bind_parameter_index   sqlite3_api->bind_parameter_index
86722 #define sqlite3_bind_parameter_name    sqlite3_api->bind_parameter_name
86723 #define sqlite3_bind_text              sqlite3_api->bind_text
86724 #define sqlite3_bind_text16            sqlite3_api->bind_text16
86725 #define sqlite3_bind_value             sqlite3_api->bind_value
86726 #define sqlite3_busy_handler           sqlite3_api->busy_handler
86727 #define sqlite3_busy_timeout           sqlite3_api->busy_timeout
86728 #define sqlite3_changes                sqlite3_api->changes
86729 #define sqlite3_close                  sqlite3_api->close
86730 #define sqlite3_collation_needed       sqlite3_api->collation_needed
86731 #define sqlite3_collation_needed16     sqlite3_api->collation_needed16
86732 #define sqlite3_column_blob            sqlite3_api->column_blob
86733 #define sqlite3_column_bytes           sqlite3_api->column_bytes
86734 #define sqlite3_column_bytes16         sqlite3_api->column_bytes16
86735 #define sqlite3_column_count           sqlite3_api->column_count
86736 #define sqlite3_column_database_name   sqlite3_api->column_database_name
86737 #define sqlite3_column_database_name16 sqlite3_api->column_database_name16
86738 #define sqlite3_column_decltype        sqlite3_api->column_decltype
86739 #define sqlite3_column_decltype16      sqlite3_api->column_decltype16
86740 #define sqlite3_column_double          sqlite3_api->column_double
86741 #define sqlite3_column_int             sqlite3_api->column_int
86742 #define sqlite3_column_int64           sqlite3_api->column_int64
86743 #define sqlite3_column_name            sqlite3_api->column_name
86744 #define sqlite3_column_name16          sqlite3_api->column_name16
86745 #define sqlite3_column_origin_name     sqlite3_api->column_origin_name
86746 #define sqlite3_column_origin_name16   sqlite3_api->column_origin_name16
86747 #define sqlite3_column_table_name      sqlite3_api->column_table_name
86748 #define sqlite3_column_table_name16    sqlite3_api->column_table_name16
86749 #define sqlite3_column_text            sqlite3_api->column_text
86750 #define sqlite3_column_text16          sqlite3_api->column_text16
86751 #define sqlite3_column_type            sqlite3_api->column_type
86752 #define sqlite3_column_value           sqlite3_api->column_value
86753 #define sqlite3_commit_hook            sqlite3_api->commit_hook
86754 #define sqlite3_complete               sqlite3_api->complete
86755 #define sqlite3_complete16             sqlite3_api->complete16
86756 #define sqlite3_create_collation       sqlite3_api->create_collation
86757 #define sqlite3_create_collation16     sqlite3_api->create_collation16
86758 #define sqlite3_create_function        sqlite3_api->create_function
86759 #define sqlite3_create_function16      sqlite3_api->create_function16
86760 #define sqlite3_create_module          sqlite3_api->create_module
86761 #define sqlite3_create_module_v2       sqlite3_api->create_module_v2
86762 #define sqlite3_data_count             sqlite3_api->data_count
86763 #define sqlite3_db_handle              sqlite3_api->db_handle
86764 #define sqlite3_declare_vtab           sqlite3_api->declare_vtab
86765 #define sqlite3_enable_shared_cache    sqlite3_api->enable_shared_cache
86766 #define sqlite3_errcode                sqlite3_api->errcode
86767 #define sqlite3_errmsg                 sqlite3_api->errmsg
86768 #define sqlite3_errmsg16               sqlite3_api->errmsg16
86769 #define sqlite3_exec                   sqlite3_api->exec
86770 #ifndef SQLITE_OMIT_DEPRECATED
86771 #define sqlite3_expired                sqlite3_api->expired
86772 #endif
86773 #define sqlite3_finalize               sqlite3_api->finalize
86774 #define sqlite3_free                   sqlite3_api->free
86775 #define sqlite3_free_table             sqlite3_api->free_table
86776 #define sqlite3_get_autocommit         sqlite3_api->get_autocommit
86777 #define sqlite3_get_auxdata            sqlite3_api->get_auxdata
86778 #define sqlite3_get_table              sqlite3_api->get_table
86779 #ifndef SQLITE_OMIT_DEPRECATED
86780 #define sqlite3_global_recover         sqlite3_api->global_recover
86781 #endif
86782 #define sqlite3_interrupt              sqlite3_api->interruptx
86783 #define sqlite3_last_insert_rowid      sqlite3_api->last_insert_rowid
86784 #define sqlite3_libversion             sqlite3_api->libversion
86785 #define sqlite3_libversion_number      sqlite3_api->libversion_number
86786 #define sqlite3_malloc                 sqlite3_api->malloc
86787 #define sqlite3_mprintf                sqlite3_api->mprintf
86788 #define sqlite3_open                   sqlite3_api->open
86789 #define sqlite3_open16                 sqlite3_api->open16
86790 #define sqlite3_prepare                sqlite3_api->prepare
86791 #define sqlite3_prepare16              sqlite3_api->prepare16
86792 #define sqlite3_prepare_v2             sqlite3_api->prepare_v2
86793 #define sqlite3_prepare16_v2           sqlite3_api->prepare16_v2
86794 #define sqlite3_profile                sqlite3_api->profile
86795 #define sqlite3_progress_handler       sqlite3_api->progress_handler
86796 #define sqlite3_realloc                sqlite3_api->realloc
86797 #define sqlite3_reset                  sqlite3_api->reset
86798 #define sqlite3_result_blob            sqlite3_api->result_blob
86799 #define sqlite3_result_double          sqlite3_api->result_double
86800 #define sqlite3_result_error           sqlite3_api->result_error
86801 #define sqlite3_result_error16         sqlite3_api->result_error16
86802 #define sqlite3_result_int             sqlite3_api->result_int
86803 #define sqlite3_result_int64           sqlite3_api->result_int64
86804 #define sqlite3_result_null            sqlite3_api->result_null
86805 #define sqlite3_result_text            sqlite3_api->result_text
86806 #define sqlite3_result_text16          sqlite3_api->result_text16
86807 #define sqlite3_result_text16be        sqlite3_api->result_text16be
86808 #define sqlite3_result_text16le        sqlite3_api->result_text16le
86809 #define sqlite3_result_value           sqlite3_api->result_value
86810 #define sqlite3_rollback_hook          sqlite3_api->rollback_hook
86811 #define sqlite3_set_authorizer         sqlite3_api->set_authorizer
86812 #define sqlite3_set_auxdata            sqlite3_api->set_auxdata
86813 #define sqlite3_snprintf               sqlite3_api->snprintf
86814 #define sqlite3_step                   sqlite3_api->step
86815 #define sqlite3_table_column_metadata  sqlite3_api->table_column_metadata
86816 #define sqlite3_thread_cleanup         sqlite3_api->thread_cleanup
86817 #define sqlite3_total_changes          sqlite3_api->total_changes
86818 #define sqlite3_trace                  sqlite3_api->trace
86819 #ifndef SQLITE_OMIT_DEPRECATED
86820 #define sqlite3_transfer_bindings      sqlite3_api->transfer_bindings
86821 #endif
86822 #define sqlite3_update_hook            sqlite3_api->update_hook
86823 #define sqlite3_user_data              sqlite3_api->user_data
86824 #define sqlite3_value_blob             sqlite3_api->value_blob
86825 #define sqlite3_value_bytes            sqlite3_api->value_bytes
86826 #define sqlite3_value_bytes16          sqlite3_api->value_bytes16
86827 #define sqlite3_value_double           sqlite3_api->value_double
86828 #define sqlite3_value_int              sqlite3_api->value_int
86829 #define sqlite3_value_int64            sqlite3_api->value_int64
86830 #define sqlite3_value_numeric_type     sqlite3_api->value_numeric_type
86831 #define sqlite3_value_text             sqlite3_api->value_text
86832 #define sqlite3_value_text16           sqlite3_api->value_text16
86833 #define sqlite3_value_text16be         sqlite3_api->value_text16be
86834 #define sqlite3_value_text16le         sqlite3_api->value_text16le
86835 #define sqlite3_value_type             sqlite3_api->value_type
86836 #define sqlite3_vmprintf               sqlite3_api->vmprintf
86837 #define sqlite3_overload_function      sqlite3_api->overload_function
86838 #define sqlite3_prepare_v2             sqlite3_api->prepare_v2
86839 #define sqlite3_prepare16_v2           sqlite3_api->prepare16_v2
86840 #define sqlite3_clear_bindings         sqlite3_api->clear_bindings
86841 #define sqlite3_bind_zeroblob          sqlite3_api->bind_zeroblob
86842 #define sqlite3_blob_bytes             sqlite3_api->blob_bytes
86843 #define sqlite3_blob_close             sqlite3_api->blob_close
86844 #define sqlite3_blob_open              sqlite3_api->blob_open
86845 #define sqlite3_blob_read              sqlite3_api->blob_read
86846 #define sqlite3_blob_write             sqlite3_api->blob_write
86847 #define sqlite3_create_collation_v2    sqlite3_api->create_collation_v2
86848 #define sqlite3_file_control           sqlite3_api->file_control
86849 #define sqlite3_memory_highwater       sqlite3_api->memory_highwater
86850 #define sqlite3_memory_used            sqlite3_api->memory_used
86851 #define sqlite3_mutex_alloc            sqlite3_api->mutex_alloc
86852 #define sqlite3_mutex_enter            sqlite3_api->mutex_enter
86853 #define sqlite3_mutex_free             sqlite3_api->mutex_free
86854 #define sqlite3_mutex_leave            sqlite3_api->mutex_leave
86855 #define sqlite3_mutex_try              sqlite3_api->mutex_try
86856 #define sqlite3_open_v2                sqlite3_api->open_v2
86857 #define sqlite3_release_memory         sqlite3_api->release_memory
86858 #define sqlite3_result_error_nomem     sqlite3_api->result_error_nomem
86859 #define sqlite3_result_error_toobig    sqlite3_api->result_error_toobig
86860 #define sqlite3_sleep                  sqlite3_api->sleep
86861 #define sqlite3_soft_heap_limit        sqlite3_api->soft_heap_limit
86862 #define sqlite3_vfs_find               sqlite3_api->vfs_find
86863 #define sqlite3_vfs_register           sqlite3_api->vfs_register
86864 #define sqlite3_vfs_unregister         sqlite3_api->vfs_unregister
86865 #define sqlite3_threadsafe             sqlite3_api->xthreadsafe
86866 #define sqlite3_result_zeroblob        sqlite3_api->result_zeroblob
86867 #define sqlite3_result_error_code      sqlite3_api->result_error_code
86868 #define sqlite3_test_control           sqlite3_api->test_control
86869 #define sqlite3_randomness             sqlite3_api->randomness
86870 #define sqlite3_context_db_handle      sqlite3_api->context_db_handle
86871 #define sqlite3_extended_result_codes  sqlite3_api->extended_result_codes
86872 #define sqlite3_limit                  sqlite3_api->limit
86873 #define sqlite3_next_stmt              sqlite3_api->next_stmt
86874 #define sqlite3_sql                    sqlite3_api->sql
86875 #define sqlite3_status                 sqlite3_api->status
86876 #define sqlite3_backup_finish          sqlite3_api->backup_finish
86877 #define sqlite3_backup_init            sqlite3_api->backup_init
86878 #define sqlite3_backup_pagecount       sqlite3_api->backup_pagecount
86879 #define sqlite3_backup_remaining       sqlite3_api->backup_remaining
86880 #define sqlite3_backup_step            sqlite3_api->backup_step
86881 #define sqlite3_compileoption_get      sqlite3_api->compileoption_get
86882 #define sqlite3_compileoption_used     sqlite3_api->compileoption_used
86883 #define sqlite3_create_function_v2     sqlite3_api->create_function_v2
86884 #define sqlite3_db_config              sqlite3_api->db_config
86885 #define sqlite3_db_mutex               sqlite3_api->db_mutex
86886 #define sqlite3_db_status              sqlite3_api->db_status
86887 #define sqlite3_extended_errcode       sqlite3_api->extended_errcode
86888 #define sqlite3_log                    sqlite3_api->log
86889 #define sqlite3_soft_heap_limit64      sqlite3_api->soft_heap_limit64
86890 #define sqlite3_sourceid               sqlite3_api->sourceid
86891 #define sqlite3_stmt_status            sqlite3_api->stmt_status
86892 #define sqlite3_strnicmp               sqlite3_api->strnicmp
86893 #define sqlite3_unlock_notify          sqlite3_api->unlock_notify
86894 #define sqlite3_wal_autocheckpoint     sqlite3_api->wal_autocheckpoint
86895 #define sqlite3_wal_checkpoint         sqlite3_api->wal_checkpoint
86896 #define sqlite3_wal_hook               sqlite3_api->wal_hook
86897 #endif /* SQLITE_CORE */
86898
86899 #define SQLITE_EXTENSION_INIT1     const sqlite3_api_routines *sqlite3_api = 0;
86900 #define SQLITE_EXTENSION_INIT2(v)  sqlite3_api = v;
86901
86902 #endif /* _SQLITE3EXT_H_ */
86903
86904 /************** End of sqlite3ext.h ******************************************/
86905 /************** Continuing where we left off in loadext.c ********************/
86906
86907 #ifndef SQLITE_OMIT_LOAD_EXTENSION
86908
86909 /*
86910 ** Some API routines are omitted when various features are
86911 ** excluded from a build of SQLite.  Substitute a NULL pointer
86912 ** for any missing APIs.
86913 */
86914 #ifndef SQLITE_ENABLE_COLUMN_METADATA
86915 # define sqlite3_column_database_name   0
86916 # define sqlite3_column_database_name16 0
86917 # define sqlite3_column_table_name      0
86918 # define sqlite3_column_table_name16    0
86919 # define sqlite3_column_origin_name     0
86920 # define sqlite3_column_origin_name16   0
86921 # define sqlite3_table_column_metadata  0
86922 #endif
86923
86924 #ifdef SQLITE_OMIT_AUTHORIZATION
86925 # define sqlite3_set_authorizer         0
86926 #endif
86927
86928 #ifdef SQLITE_OMIT_UTF16
86929 # define sqlite3_bind_text16            0
86930 # define sqlite3_collation_needed16     0
86931 # define sqlite3_column_decltype16      0
86932 # define sqlite3_column_name16          0
86933 # define sqlite3_column_text16          0
86934 # define sqlite3_complete16             0
86935 # define sqlite3_create_collation16     0
86936 # define sqlite3_create_function16      0
86937 # define sqlite3_errmsg16               0
86938 # define sqlite3_open16                 0
86939 # define sqlite3_prepare16              0
86940 # define sqlite3_prepare16_v2           0
86941 # define sqlite3_result_error16         0
86942 # define sqlite3_result_text16          0
86943 # define sqlite3_result_text16be        0
86944 # define sqlite3_result_text16le        0
86945 # define sqlite3_value_text16           0
86946 # define sqlite3_value_text16be         0
86947 # define sqlite3_value_text16le         0
86948 # define sqlite3_column_database_name16 0
86949 # define sqlite3_column_table_name16    0
86950 # define sqlite3_column_origin_name16   0
86951 #endif
86952
86953 #ifdef SQLITE_OMIT_COMPLETE
86954 # define sqlite3_complete 0
86955 # define sqlite3_complete16 0
86956 #endif
86957
86958 #ifdef SQLITE_OMIT_DECLTYPE
86959 # define sqlite3_column_decltype16      0
86960 # define sqlite3_column_decltype        0
86961 #endif
86962
86963 #ifdef SQLITE_OMIT_PROGRESS_CALLBACK
86964 # define sqlite3_progress_handler 0
86965 #endif
86966
86967 #ifdef SQLITE_OMIT_VIRTUALTABLE
86968 # define sqlite3_create_module 0
86969 # define sqlite3_create_module_v2 0
86970 # define sqlite3_declare_vtab 0
86971 #endif
86972
86973 #ifdef SQLITE_OMIT_SHARED_CACHE
86974 # define sqlite3_enable_shared_cache 0
86975 #endif
86976
86977 #ifdef SQLITE_OMIT_TRACE
86978 # define sqlite3_profile       0
86979 # define sqlite3_trace         0
86980 #endif
86981
86982 #ifdef SQLITE_OMIT_GET_TABLE
86983 # define sqlite3_free_table    0
86984 # define sqlite3_get_table     0
86985 #endif
86986
86987 #ifdef SQLITE_OMIT_INCRBLOB
86988 #define sqlite3_bind_zeroblob  0
86989 #define sqlite3_blob_bytes     0
86990 #define sqlite3_blob_close     0
86991 #define sqlite3_blob_open      0
86992 #define sqlite3_blob_read      0
86993 #define sqlite3_blob_write     0
86994 #endif
86995
86996 /*
86997 ** The following structure contains pointers to all SQLite API routines.
86998 ** A pointer to this structure is passed into extensions when they are
86999 ** loaded so that the extension can make calls back into the SQLite
87000 ** library.
87001 **
87002 ** When adding new APIs, add them to the bottom of this structure
87003 ** in order to preserve backwards compatibility.
87004 **
87005 ** Extensions that use newer APIs should first call the
87006 ** sqlite3_libversion_number() to make sure that the API they
87007 ** intend to use is supported by the library.  Extensions should
87008 ** also check to make sure that the pointer to the function is
87009 ** not NULL before calling it.
87010 */
87011 static const sqlite3_api_routines sqlite3Apis = {
87012   sqlite3_aggregate_context,
87013 #ifndef SQLITE_OMIT_DEPRECATED
87014   sqlite3_aggregate_count,
87015 #else
87016   0,
87017 #endif
87018   sqlite3_bind_blob,
87019   sqlite3_bind_double,
87020   sqlite3_bind_int,
87021   sqlite3_bind_int64,
87022   sqlite3_bind_null,
87023   sqlite3_bind_parameter_count,
87024   sqlite3_bind_parameter_index,
87025   sqlite3_bind_parameter_name,
87026   sqlite3_bind_text,
87027   sqlite3_bind_text16,
87028   sqlite3_bind_value,
87029   sqlite3_busy_handler,
87030   sqlite3_busy_timeout,
87031   sqlite3_changes,
87032   sqlite3_close,
87033   sqlite3_collation_needed,
87034   sqlite3_collation_needed16,
87035   sqlite3_column_blob,
87036   sqlite3_column_bytes,
87037   sqlite3_column_bytes16,
87038   sqlite3_column_count,
87039   sqlite3_column_database_name,
87040   sqlite3_column_database_name16,
87041   sqlite3_column_decltype,
87042   sqlite3_column_decltype16,
87043   sqlite3_column_double,
87044   sqlite3_column_int,
87045   sqlite3_column_int64,
87046   sqlite3_column_name,
87047   sqlite3_column_name16,
87048   sqlite3_column_origin_name,
87049   sqlite3_column_origin_name16,
87050   sqlite3_column_table_name,
87051   sqlite3_column_table_name16,
87052   sqlite3_column_text,
87053   sqlite3_column_text16,
87054   sqlite3_column_type,
87055   sqlite3_column_value,
87056   sqlite3_commit_hook,
87057   sqlite3_complete,
87058   sqlite3_complete16,
87059   sqlite3_create_collation,
87060   sqlite3_create_collation16,
87061   sqlite3_create_function,
87062   sqlite3_create_function16,
87063   sqlite3_create_module,
87064   sqlite3_data_count,
87065   sqlite3_db_handle,
87066   sqlite3_declare_vtab,
87067   sqlite3_enable_shared_cache,
87068   sqlite3_errcode,
87069   sqlite3_errmsg,
87070   sqlite3_errmsg16,
87071   sqlite3_exec,
87072 #ifndef SQLITE_OMIT_DEPRECATED
87073   sqlite3_expired,
87074 #else
87075   0,
87076 #endif
87077   sqlite3_finalize,
87078   sqlite3_free,
87079   sqlite3_free_table,
87080   sqlite3_get_autocommit,
87081   sqlite3_get_auxdata,
87082   sqlite3_get_table,
87083   0,     /* Was sqlite3_global_recover(), but that function is deprecated */
87084   sqlite3_interrupt,
87085   sqlite3_last_insert_rowid,
87086   sqlite3_libversion,
87087   sqlite3_libversion_number,
87088   sqlite3_malloc,
87089   sqlite3_mprintf,
87090   sqlite3_open,
87091   sqlite3_open16,
87092   sqlite3_prepare,
87093   sqlite3_prepare16,
87094   sqlite3_profile,
87095   sqlite3_progress_handler,
87096   sqlite3_realloc,
87097   sqlite3_reset,
87098   sqlite3_result_blob,
87099   sqlite3_result_double,
87100   sqlite3_result_error,
87101   sqlite3_result_error16,
87102   sqlite3_result_int,
87103   sqlite3_result_int64,
87104   sqlite3_result_null,
87105   sqlite3_result_text,
87106   sqlite3_result_text16,
87107   sqlite3_result_text16be,
87108   sqlite3_result_text16le,
87109   sqlite3_result_value,
87110   sqlite3_rollback_hook,
87111   sqlite3_set_authorizer,
87112   sqlite3_set_auxdata,
87113   sqlite3_snprintf,
87114   sqlite3_step,
87115   sqlite3_table_column_metadata,
87116 #ifndef SQLITE_OMIT_DEPRECATED
87117   sqlite3_thread_cleanup,
87118 #else
87119   0,
87120 #endif
87121   sqlite3_total_changes,
87122   sqlite3_trace,
87123 #ifndef SQLITE_OMIT_DEPRECATED
87124   sqlite3_transfer_bindings,
87125 #else
87126   0,
87127 #endif
87128   sqlite3_update_hook,
87129   sqlite3_user_data,
87130   sqlite3_value_blob,
87131   sqlite3_value_bytes,
87132   sqlite3_value_bytes16,
87133   sqlite3_value_double,
87134   sqlite3_value_int,
87135   sqlite3_value_int64,
87136   sqlite3_value_numeric_type,
87137   sqlite3_value_text,
87138   sqlite3_value_text16,
87139   sqlite3_value_text16be,
87140   sqlite3_value_text16le,
87141   sqlite3_value_type,
87142   sqlite3_vmprintf,
87143   /*
87144   ** The original API set ends here.  All extensions can call any
87145   ** of the APIs above provided that the pointer is not NULL.  But
87146   ** before calling APIs that follow, extension should check the
87147   ** sqlite3_libversion_number() to make sure they are dealing with
87148   ** a library that is new enough to support that API.
87149   *************************************************************************
87150   */
87151   sqlite3_overload_function,
87152
87153   /*
87154   ** Added after 3.3.13
87155   */
87156   sqlite3_prepare_v2,
87157   sqlite3_prepare16_v2,
87158   sqlite3_clear_bindings,
87159
87160   /*
87161   ** Added for 3.4.1
87162   */
87163   sqlite3_create_module_v2,
87164
87165   /*
87166   ** Added for 3.5.0
87167   */
87168   sqlite3_bind_zeroblob,
87169   sqlite3_blob_bytes,
87170   sqlite3_blob_close,
87171   sqlite3_blob_open,
87172   sqlite3_blob_read,
87173   sqlite3_blob_write,
87174   sqlite3_create_collation_v2,
87175   sqlite3_file_control,
87176   sqlite3_memory_highwater,
87177   sqlite3_memory_used,
87178 #ifdef SQLITE_MUTEX_OMIT
87179   0, 
87180   0, 
87181   0,
87182   0,
87183   0,
87184 #else
87185   sqlite3_mutex_alloc,
87186   sqlite3_mutex_enter,
87187   sqlite3_mutex_free,
87188   sqlite3_mutex_leave,
87189   sqlite3_mutex_try,
87190 #endif
87191   sqlite3_open_v2,
87192   sqlite3_release_memory,
87193   sqlite3_result_error_nomem,
87194   sqlite3_result_error_toobig,
87195   sqlite3_sleep,
87196   sqlite3_soft_heap_limit,
87197   sqlite3_vfs_find,
87198   sqlite3_vfs_register,
87199   sqlite3_vfs_unregister,
87200
87201   /*
87202   ** Added for 3.5.8
87203   */
87204   sqlite3_threadsafe,
87205   sqlite3_result_zeroblob,
87206   sqlite3_result_error_code,
87207   sqlite3_test_control,
87208   sqlite3_randomness,
87209   sqlite3_context_db_handle,
87210
87211   /*
87212   ** Added for 3.6.0
87213   */
87214   sqlite3_extended_result_codes,
87215   sqlite3_limit,
87216   sqlite3_next_stmt,
87217   sqlite3_sql,
87218   sqlite3_status,
87219
87220   /*
87221   ** Added for 3.7.4
87222   */
87223   sqlite3_backup_finish,
87224   sqlite3_backup_init,
87225   sqlite3_backup_pagecount,
87226   sqlite3_backup_remaining,
87227   sqlite3_backup_step,
87228 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
87229   sqlite3_compileoption_get,
87230   sqlite3_compileoption_used,
87231 #else
87232   0,
87233   0,
87234 #endif
87235   sqlite3_create_function_v2,
87236   sqlite3_db_config,
87237   sqlite3_db_mutex,
87238   sqlite3_db_status,
87239   sqlite3_extended_errcode,
87240   sqlite3_log,
87241   sqlite3_soft_heap_limit64,
87242   sqlite3_sourceid,
87243   sqlite3_stmt_status,
87244   sqlite3_strnicmp,
87245 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
87246   sqlite3_unlock_notify,
87247 #else
87248   0,
87249 #endif
87250 #ifndef SQLITE_OMIT_WAL
87251   sqlite3_wal_autocheckpoint,
87252   sqlite3_wal_checkpoint,
87253   sqlite3_wal_hook,
87254 #else
87255   0,
87256   0,
87257   0,
87258 #endif
87259 };
87260
87261 /*
87262 ** Attempt to load an SQLite extension library contained in the file
87263 ** zFile.  The entry point is zProc.  zProc may be 0 in which case a
87264 ** default entry point name (sqlite3_extension_init) is used.  Use
87265 ** of the default name is recommended.
87266 **
87267 ** Return SQLITE_OK on success and SQLITE_ERROR if something goes wrong.
87268 **
87269 ** If an error occurs and pzErrMsg is not 0, then fill *pzErrMsg with 
87270 ** error message text.  The calling function should free this memory
87271 ** by calling sqlite3DbFree(db, ).
87272 */
87273 static int sqlite3LoadExtension(
87274   sqlite3 *db,          /* Load the extension into this database connection */
87275   const char *zFile,    /* Name of the shared library containing extension */
87276   const char *zProc,    /* Entry point.  Use "sqlite3_extension_init" if 0 */
87277   char **pzErrMsg       /* Put error message here if not 0 */
87278 ){
87279   sqlite3_vfs *pVfs = db->pVfs;
87280   void *handle;
87281   int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);
87282   char *zErrmsg = 0;
87283   void **aHandle;
87284   const int nMsg = 300;
87285
87286   if( pzErrMsg ) *pzErrMsg = 0;
87287
87288   /* Ticket #1863.  To avoid a creating security problems for older
87289   ** applications that relink against newer versions of SQLite, the
87290   ** ability to run load_extension is turned off by default.  One
87291   ** must call sqlite3_enable_load_extension() to turn on extension
87292   ** loading.  Otherwise you get the following error.
87293   */
87294   if( (db->flags & SQLITE_LoadExtension)==0 ){
87295     if( pzErrMsg ){
87296       *pzErrMsg = sqlite3_mprintf("not authorized");
87297     }
87298     return SQLITE_ERROR;
87299   }
87300
87301   if( zProc==0 ){
87302     zProc = "sqlite3_extension_init";
87303   }
87304
87305   handle = sqlite3OsDlOpen(pVfs, zFile);
87306   if( handle==0 ){
87307     if( pzErrMsg ){
87308       *pzErrMsg = zErrmsg = sqlite3_malloc(nMsg);
87309       if( zErrmsg ){
87310         sqlite3_snprintf(nMsg, zErrmsg, 
87311             "unable to open shared library [%s]", zFile);
87312         sqlite3OsDlError(pVfs, nMsg-1, zErrmsg);
87313       }
87314     }
87315     return SQLITE_ERROR;
87316   }
87317   xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))
87318                    sqlite3OsDlSym(pVfs, handle, zProc);
87319   if( xInit==0 ){
87320     if( pzErrMsg ){
87321       *pzErrMsg = zErrmsg = sqlite3_malloc(nMsg);
87322       if( zErrmsg ){
87323         sqlite3_snprintf(nMsg, zErrmsg,
87324             "no entry point [%s] in shared library [%s]", zProc,zFile);
87325         sqlite3OsDlError(pVfs, nMsg-1, zErrmsg);
87326       }
87327       sqlite3OsDlClose(pVfs, handle);
87328     }
87329     return SQLITE_ERROR;
87330   }else if( xInit(db, &zErrmsg, &sqlite3Apis) ){
87331     if( pzErrMsg ){
87332       *pzErrMsg = sqlite3_mprintf("error during initialization: %s", zErrmsg);
87333     }
87334     sqlite3_free(zErrmsg);
87335     sqlite3OsDlClose(pVfs, handle);
87336     return SQLITE_ERROR;
87337   }
87338
87339   /* Append the new shared library handle to the db->aExtension array. */
87340   aHandle = sqlite3DbMallocZero(db, sizeof(handle)*(db->nExtension+1));
87341   if( aHandle==0 ){
87342     return SQLITE_NOMEM;
87343   }
87344   if( db->nExtension>0 ){
87345     memcpy(aHandle, db->aExtension, sizeof(handle)*db->nExtension);
87346   }
87347   sqlite3DbFree(db, db->aExtension);
87348   db->aExtension = aHandle;
87349
87350   db->aExtension[db->nExtension++] = handle;
87351   return SQLITE_OK;
87352 }
87353 SQLITE_API int sqlite3_load_extension(
87354   sqlite3 *db,          /* Load the extension into this database connection */
87355   const char *zFile,    /* Name of the shared library containing extension */
87356   const char *zProc,    /* Entry point.  Use "sqlite3_extension_init" if 0 */
87357   char **pzErrMsg       /* Put error message here if not 0 */
87358 ){
87359   int rc;
87360   sqlite3_mutex_enter(db->mutex);
87361   rc = sqlite3LoadExtension(db, zFile, zProc, pzErrMsg);
87362   rc = sqlite3ApiExit(db, rc);
87363   sqlite3_mutex_leave(db->mutex);
87364   return rc;
87365 }
87366
87367 /*
87368 ** Call this routine when the database connection is closing in order
87369 ** to clean up loaded extensions
87370 */
87371 SQLITE_PRIVATE void sqlite3CloseExtensions(sqlite3 *db){
87372   int i;
87373   assert( sqlite3_mutex_held(db->mutex) );
87374   for(i=0; i<db->nExtension; i++){
87375     sqlite3OsDlClose(db->pVfs, db->aExtension[i]);
87376   }
87377   sqlite3DbFree(db, db->aExtension);
87378 }
87379
87380 /*
87381 ** Enable or disable extension loading.  Extension loading is disabled by
87382 ** default so as not to open security holes in older applications.
87383 */
87384 SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff){
87385   sqlite3_mutex_enter(db->mutex);
87386   if( onoff ){
87387     db->flags |= SQLITE_LoadExtension;
87388   }else{
87389     db->flags &= ~SQLITE_LoadExtension;
87390   }
87391   sqlite3_mutex_leave(db->mutex);
87392   return SQLITE_OK;
87393 }
87394
87395 #endif /* SQLITE_OMIT_LOAD_EXTENSION */
87396
87397 /*
87398 ** The auto-extension code added regardless of whether or not extension
87399 ** loading is supported.  We need a dummy sqlite3Apis pointer for that
87400 ** code if regular extension loading is not available.  This is that
87401 ** dummy pointer.
87402 */
87403 #ifdef SQLITE_OMIT_LOAD_EXTENSION
87404 static const sqlite3_api_routines sqlite3Apis = { 0 };
87405 #endif
87406
87407
87408 /*
87409 ** The following object holds the list of automatically loaded
87410 ** extensions.
87411 **
87412 ** This list is shared across threads.  The SQLITE_MUTEX_STATIC_MASTER
87413 ** mutex must be held while accessing this list.
87414 */
87415 typedef struct sqlite3AutoExtList sqlite3AutoExtList;
87416 static SQLITE_WSD struct sqlite3AutoExtList {
87417   int nExt;              /* Number of entries in aExt[] */          
87418   void (**aExt)(void);   /* Pointers to the extension init functions */
87419 } sqlite3Autoext = { 0, 0 };
87420
87421 /* The "wsdAutoext" macro will resolve to the autoextension
87422 ** state vector.  If writable static data is unsupported on the target,
87423 ** we have to locate the state vector at run-time.  In the more common
87424 ** case where writable static data is supported, wsdStat can refer directly
87425 ** to the "sqlite3Autoext" state vector declared above.
87426 */
87427 #ifdef SQLITE_OMIT_WSD
87428 # define wsdAutoextInit \
87429   sqlite3AutoExtList *x = &GLOBAL(sqlite3AutoExtList,sqlite3Autoext)
87430 # define wsdAutoext x[0]
87431 #else
87432 # define wsdAutoextInit
87433 # define wsdAutoext sqlite3Autoext
87434 #endif
87435
87436
87437 /*
87438 ** Register a statically linked extension that is automatically
87439 ** loaded by every new database connection.
87440 */
87441 SQLITE_API int sqlite3_auto_extension(void (*xInit)(void)){
87442   int rc = SQLITE_OK;
87443 #ifndef SQLITE_OMIT_AUTOINIT
87444   rc = sqlite3_initialize();
87445   if( rc ){
87446     return rc;
87447   }else
87448 #endif
87449   {
87450     int i;
87451 #if SQLITE_THREADSAFE
87452     sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
87453 #endif
87454     wsdAutoextInit;
87455     sqlite3_mutex_enter(mutex);
87456     for(i=0; i<wsdAutoext.nExt; i++){
87457       if( wsdAutoext.aExt[i]==xInit ) break;
87458     }
87459     if( i==wsdAutoext.nExt ){
87460       int nByte = (wsdAutoext.nExt+1)*sizeof(wsdAutoext.aExt[0]);
87461       void (**aNew)(void);
87462       aNew = sqlite3_realloc(wsdAutoext.aExt, nByte);
87463       if( aNew==0 ){
87464         rc = SQLITE_NOMEM;
87465       }else{
87466         wsdAutoext.aExt = aNew;
87467         wsdAutoext.aExt[wsdAutoext.nExt] = xInit;
87468         wsdAutoext.nExt++;
87469       }
87470     }
87471     sqlite3_mutex_leave(mutex);
87472     assert( (rc&0xff)==rc );
87473     return rc;
87474   }
87475 }
87476
87477 /*
87478 ** Reset the automatic extension loading mechanism.
87479 */
87480 SQLITE_API void sqlite3_reset_auto_extension(void){
87481 #ifndef SQLITE_OMIT_AUTOINIT
87482   if( sqlite3_initialize()==SQLITE_OK )
87483 #endif
87484   {
87485 #if SQLITE_THREADSAFE
87486     sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
87487 #endif
87488     wsdAutoextInit;
87489     sqlite3_mutex_enter(mutex);
87490     sqlite3_free(wsdAutoext.aExt);
87491     wsdAutoext.aExt = 0;
87492     wsdAutoext.nExt = 0;
87493     sqlite3_mutex_leave(mutex);
87494   }
87495 }
87496
87497 /*
87498 ** Load all automatic extensions.
87499 **
87500 ** If anything goes wrong, set an error in the database connection.
87501 */
87502 SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){
87503   int i;
87504   int go = 1;
87505   int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);
87506
87507   wsdAutoextInit;
87508   if( wsdAutoext.nExt==0 ){
87509     /* Common case: early out without every having to acquire a mutex */
87510     return;
87511   }
87512   for(i=0; go; i++){
87513     char *zErrmsg;
87514 #if SQLITE_THREADSAFE
87515     sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
87516 #endif
87517     sqlite3_mutex_enter(mutex);
87518     if( i>=wsdAutoext.nExt ){
87519       xInit = 0;
87520       go = 0;
87521     }else{
87522       xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))
87523               wsdAutoext.aExt[i];
87524     }
87525     sqlite3_mutex_leave(mutex);
87526     zErrmsg = 0;
87527     if( xInit && xInit(db, &zErrmsg, &sqlite3Apis) ){
87528       sqlite3Error(db, SQLITE_ERROR,
87529             "automatic extension loading failed: %s", zErrmsg);
87530       go = 0;
87531     }
87532     sqlite3_free(zErrmsg);
87533   }
87534 }
87535
87536 /************** End of loadext.c *********************************************/
87537 /************** Begin file pragma.c ******************************************/
87538 /*
87539 ** 2003 April 6
87540 **
87541 ** The author disclaims copyright to this source code.  In place of
87542 ** a legal notice, here is a blessing:
87543 **
87544 **    May you do good and not evil.
87545 **    May you find forgiveness for yourself and forgive others.
87546 **    May you share freely, never taking more than you give.
87547 **
87548 *************************************************************************
87549 ** This file contains code used to implement the PRAGMA command.
87550 */
87551
87552 /* Ignore this whole file if pragmas are disabled
87553 */
87554 #if !defined(SQLITE_OMIT_PRAGMA)
87555
87556 /*
87557 ** Interpret the given string as a safety level.  Return 0 for OFF,
87558 ** 1 for ON or NORMAL and 2 for FULL.  Return 1 for an empty or 
87559 ** unrecognized string argument.
87560 **
87561 ** Note that the values returned are one less that the values that
87562 ** should be passed into sqlite3BtreeSetSafetyLevel().  The is done
87563 ** to support legacy SQL code.  The safety level used to be boolean
87564 ** and older scripts may have used numbers 0 for OFF and 1 for ON.
87565 */
87566 static u8 getSafetyLevel(const char *z){
87567                              /* 123456789 123456789 */
87568   static const char zText[] = "onoffalseyestruefull";
87569   static const u8 iOffset[] = {0, 1, 2, 4, 9, 12, 16};
87570   static const u8 iLength[] = {2, 2, 3, 5, 3, 4, 4};
87571   static const u8 iValue[] =  {1, 0, 0, 0, 1, 1, 2};
87572   int i, n;
87573   if( sqlite3Isdigit(*z) ){
87574     return (u8)sqlite3Atoi(z);
87575   }
87576   n = sqlite3Strlen30(z);
87577   for(i=0; i<ArraySize(iLength); i++){
87578     if( iLength[i]==n && sqlite3StrNICmp(&zText[iOffset[i]],z,n)==0 ){
87579       return iValue[i];
87580     }
87581   }
87582   return 1;
87583 }
87584
87585 /*
87586 ** Interpret the given string as a boolean value.
87587 */
87588 static u8 getBoolean(const char *z){
87589   return getSafetyLevel(z)&1;
87590 }
87591
87592 /*
87593 ** Interpret the given string as a locking mode value.
87594 */
87595 static int getLockingMode(const char *z){
87596   if( z ){
87597     if( 0==sqlite3StrICmp(z, "exclusive") ) return PAGER_LOCKINGMODE_EXCLUSIVE;
87598     if( 0==sqlite3StrICmp(z, "normal") ) return PAGER_LOCKINGMODE_NORMAL;
87599   }
87600   return PAGER_LOCKINGMODE_QUERY;
87601 }
87602
87603 #ifndef SQLITE_OMIT_AUTOVACUUM
87604 /*
87605 ** Interpret the given string as an auto-vacuum mode value.
87606 **
87607 ** The following strings, "none", "full" and "incremental" are 
87608 ** acceptable, as are their numeric equivalents: 0, 1 and 2 respectively.
87609 */
87610 static int getAutoVacuum(const char *z){
87611   int i;
87612   if( 0==sqlite3StrICmp(z, "none") ) return BTREE_AUTOVACUUM_NONE;
87613   if( 0==sqlite3StrICmp(z, "full") ) return BTREE_AUTOVACUUM_FULL;
87614   if( 0==sqlite3StrICmp(z, "incremental") ) return BTREE_AUTOVACUUM_INCR;
87615   i = sqlite3Atoi(z);
87616   return (u8)((i>=0&&i<=2)?i:0);
87617 }
87618 #endif /* ifndef SQLITE_OMIT_AUTOVACUUM */
87619
87620 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
87621 /*
87622 ** Interpret the given string as a temp db location. Return 1 for file
87623 ** backed temporary databases, 2 for the Red-Black tree in memory database
87624 ** and 0 to use the compile-time default.
87625 */
87626 static int getTempStore(const char *z){
87627   if( z[0]>='0' && z[0]<='2' ){
87628     return z[0] - '0';
87629   }else if( sqlite3StrICmp(z, "file")==0 ){
87630     return 1;
87631   }else if( sqlite3StrICmp(z, "memory")==0 ){
87632     return 2;
87633   }else{
87634     return 0;
87635   }
87636 }
87637 #endif /* SQLITE_PAGER_PRAGMAS */
87638
87639 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
87640 /*
87641 ** Invalidate temp storage, either when the temp storage is changed
87642 ** from default, or when 'file' and the temp_store_directory has changed
87643 */
87644 static int invalidateTempStorage(Parse *pParse){
87645   sqlite3 *db = pParse->db;
87646   if( db->aDb[1].pBt!=0 ){
87647     if( !db->autoCommit || sqlite3BtreeIsInReadTrans(db->aDb[1].pBt) ){
87648       sqlite3ErrorMsg(pParse, "temporary storage cannot be changed "
87649         "from within a transaction");
87650       return SQLITE_ERROR;
87651     }
87652     sqlite3BtreeClose(db->aDb[1].pBt);
87653     db->aDb[1].pBt = 0;
87654     sqlite3ResetInternalSchema(db, -1);
87655   }
87656   return SQLITE_OK;
87657 }
87658 #endif /* SQLITE_PAGER_PRAGMAS */
87659
87660 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
87661 /*
87662 ** If the TEMP database is open, close it and mark the database schema
87663 ** as needing reloading.  This must be done when using the SQLITE_TEMP_STORE
87664 ** or DEFAULT_TEMP_STORE pragmas.
87665 */
87666 static int changeTempStorage(Parse *pParse, const char *zStorageType){
87667   int ts = getTempStore(zStorageType);
87668   sqlite3 *db = pParse->db;
87669   if( db->temp_store==ts ) return SQLITE_OK;
87670   if( invalidateTempStorage( pParse ) != SQLITE_OK ){
87671     return SQLITE_ERROR;
87672   }
87673   db->temp_store = (u8)ts;
87674   return SQLITE_OK;
87675 }
87676 #endif /* SQLITE_PAGER_PRAGMAS */
87677
87678 /*
87679 ** Generate code to return a single integer value.
87680 */
87681 static void returnSingleInt(Parse *pParse, const char *zLabel, i64 value){
87682   Vdbe *v = sqlite3GetVdbe(pParse);
87683   int mem = ++pParse->nMem;
87684   i64 *pI64 = sqlite3DbMallocRaw(pParse->db, sizeof(value));
87685   if( pI64 ){
87686     memcpy(pI64, &value, sizeof(value));
87687   }
87688   sqlite3VdbeAddOp4(v, OP_Int64, 0, mem, 0, (char*)pI64, P4_INT64);
87689   sqlite3VdbeSetNumCols(v, 1);
87690   sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLabel, SQLITE_STATIC);
87691   sqlite3VdbeAddOp2(v, OP_ResultRow, mem, 1);
87692 }
87693
87694 #ifndef SQLITE_OMIT_FLAG_PRAGMAS
87695 /*
87696 ** Check to see if zRight and zLeft refer to a pragma that queries
87697 ** or changes one of the flags in db->flags.  Return 1 if so and 0 if not.
87698 ** Also, implement the pragma.
87699 */
87700 static int flagPragma(Parse *pParse, const char *zLeft, const char *zRight){
87701   static const struct sPragmaType {
87702     const char *zName;  /* Name of the pragma */
87703     int mask;           /* Mask for the db->flags value */
87704   } aPragma[] = {
87705     { "full_column_names",        SQLITE_FullColNames  },
87706     { "short_column_names",       SQLITE_ShortColNames },
87707     { "count_changes",            SQLITE_CountRows     },
87708     { "empty_result_callbacks",   SQLITE_NullCallback  },
87709     { "legacy_file_format",       SQLITE_LegacyFileFmt },
87710     { "fullfsync",                SQLITE_FullFSync     },
87711     { "checkpoint_fullfsync",     SQLITE_CkptFullFSync },
87712     { "reverse_unordered_selects", SQLITE_ReverseOrder  },
87713 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
87714     { "automatic_index",          SQLITE_AutoIndex     },
87715 #endif
87716 #ifdef SQLITE_DEBUG
87717     { "sql_trace",                SQLITE_SqlTrace      },
87718     { "vdbe_listing",             SQLITE_VdbeListing   },
87719     { "vdbe_trace",               SQLITE_VdbeTrace     },
87720 #endif
87721 #ifndef SQLITE_OMIT_CHECK
87722     { "ignore_check_constraints", SQLITE_IgnoreChecks  },
87723 #endif
87724     /* The following is VERY experimental */
87725     { "writable_schema",          SQLITE_WriteSchema|SQLITE_RecoveryMode },
87726     { "omit_readlock",            SQLITE_NoReadlock    },
87727
87728     /* TODO: Maybe it shouldn't be possible to change the ReadUncommitted
87729     ** flag if there are any active statements. */
87730     { "read_uncommitted",         SQLITE_ReadUncommitted },
87731     { "recursive_triggers",       SQLITE_RecTriggers },
87732
87733     /* This flag may only be set if both foreign-key and trigger support
87734     ** are present in the build.  */
87735 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
87736     { "foreign_keys",             SQLITE_ForeignKeys },
87737 #endif
87738   };
87739   int i;
87740   const struct sPragmaType *p;
87741   for(i=0, p=aPragma; i<ArraySize(aPragma); i++, p++){
87742     if( sqlite3StrICmp(zLeft, p->zName)==0 ){
87743       sqlite3 *db = pParse->db;
87744       Vdbe *v;
87745       v = sqlite3GetVdbe(pParse);
87746       assert( v!=0 );  /* Already allocated by sqlite3Pragma() */
87747       if( ALWAYS(v) ){
87748         if( zRight==0 ){
87749           returnSingleInt(pParse, p->zName, (db->flags & p->mask)!=0 );
87750         }else{
87751           int mask = p->mask;          /* Mask of bits to set or clear. */
87752           if( db->autoCommit==0 ){
87753             /* Foreign key support may not be enabled or disabled while not
87754             ** in auto-commit mode.  */
87755             mask &= ~(SQLITE_ForeignKeys);
87756           }
87757
87758           if( getBoolean(zRight) ){
87759             db->flags |= mask;
87760           }else{
87761             db->flags &= ~mask;
87762           }
87763
87764           /* Many of the flag-pragmas modify the code generated by the SQL 
87765           ** compiler (eg. count_changes). So add an opcode to expire all
87766           ** compiled SQL statements after modifying a pragma value.
87767           */
87768           sqlite3VdbeAddOp2(v, OP_Expire, 0, 0);
87769         }
87770       }
87771
87772       return 1;
87773     }
87774   }
87775   return 0;
87776 }
87777 #endif /* SQLITE_OMIT_FLAG_PRAGMAS */
87778
87779 /*
87780 ** Return a human-readable name for a constraint resolution action.
87781 */
87782 #ifndef SQLITE_OMIT_FOREIGN_KEY
87783 static const char *actionName(u8 action){
87784   const char *zName;
87785   switch( action ){
87786     case OE_SetNull:  zName = "SET NULL";        break;
87787     case OE_SetDflt:  zName = "SET DEFAULT";     break;
87788     case OE_Cascade:  zName = "CASCADE";         break;
87789     case OE_Restrict: zName = "RESTRICT";        break;
87790     default:          zName = "NO ACTION";  
87791                       assert( action==OE_None ); break;
87792   }
87793   return zName;
87794 }
87795 #endif
87796
87797
87798 /*
87799 ** Parameter eMode must be one of the PAGER_JOURNALMODE_XXX constants
87800 ** defined in pager.h. This function returns the associated lowercase
87801 ** journal-mode name.
87802 */
87803 SQLITE_PRIVATE const char *sqlite3JournalModename(int eMode){
87804   static char * const azModeName[] = {
87805     "delete", "persist", "off", "truncate", "memory"
87806 #ifndef SQLITE_OMIT_WAL
87807      , "wal"
87808 #endif
87809   };
87810   assert( PAGER_JOURNALMODE_DELETE==0 );
87811   assert( PAGER_JOURNALMODE_PERSIST==1 );
87812   assert( PAGER_JOURNALMODE_OFF==2 );
87813   assert( PAGER_JOURNALMODE_TRUNCATE==3 );
87814   assert( PAGER_JOURNALMODE_MEMORY==4 );
87815   assert( PAGER_JOURNALMODE_WAL==5 );
87816   assert( eMode>=0 && eMode<=ArraySize(azModeName) );
87817
87818   if( eMode==ArraySize(azModeName) ) return 0;
87819   return azModeName[eMode];
87820 }
87821
87822 /*
87823 ** Process a pragma statement.  
87824 **
87825 ** Pragmas are of this form:
87826 **
87827 **      PRAGMA [database.]id [= value]
87828 **
87829 ** The identifier might also be a string.  The value is a string, and
87830 ** identifier, or a number.  If minusFlag is true, then the value is
87831 ** a number that was preceded by a minus sign.
87832 **
87833 ** If the left side is "database.id" then pId1 is the database name
87834 ** and pId2 is the id.  If the left side is just "id" then pId1 is the
87835 ** id and pId2 is any empty string.
87836 */
87837 SQLITE_PRIVATE void sqlite3Pragma(
87838   Parse *pParse, 
87839   Token *pId1,        /* First part of [database.]id field */
87840   Token *pId2,        /* Second part of [database.]id field, or NULL */
87841   Token *pValue,      /* Token for <value>, or NULL */
87842   int minusFlag       /* True if a '-' sign preceded <value> */
87843 ){
87844   char *zLeft = 0;       /* Nul-terminated UTF-8 string <id> */
87845   char *zRight = 0;      /* Nul-terminated UTF-8 string <value>, or NULL */
87846   const char *zDb = 0;   /* The database name */
87847   Token *pId;            /* Pointer to <id> token */
87848   int iDb;               /* Database index for <database> */
87849   sqlite3 *db = pParse->db;
87850   Db *pDb;
87851   Vdbe *v = pParse->pVdbe = sqlite3VdbeCreate(db);
87852   if( v==0 ) return;
87853   sqlite3VdbeRunOnlyOnce(v);
87854   pParse->nMem = 2;
87855
87856   /* Interpret the [database.] part of the pragma statement. iDb is the
87857   ** index of the database this pragma is being applied to in db.aDb[]. */
87858   iDb = sqlite3TwoPartName(pParse, pId1, pId2, &pId);
87859   if( iDb<0 ) return;
87860   pDb = &db->aDb[iDb];
87861
87862   /* If the temp database has been explicitly named as part of the 
87863   ** pragma, make sure it is open. 
87864   */
87865   if( iDb==1 && sqlite3OpenTempDatabase(pParse) ){
87866     return;
87867   }
87868
87869   zLeft = sqlite3NameFromToken(db, pId);
87870   if( !zLeft ) return;
87871   if( minusFlag ){
87872     zRight = sqlite3MPrintf(db, "-%T", pValue);
87873   }else{
87874     zRight = sqlite3NameFromToken(db, pValue);
87875   }
87876
87877   assert( pId2 );
87878   zDb = pId2->n>0 ? pDb->zName : 0;
87879   if( sqlite3AuthCheck(pParse, SQLITE_PRAGMA, zLeft, zRight, zDb) ){
87880     goto pragma_out;
87881   }
87882  
87883 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
87884   /*
87885   **  PRAGMA [database.]default_cache_size
87886   **  PRAGMA [database.]default_cache_size=N
87887   **
87888   ** The first form reports the current persistent setting for the
87889   ** page cache size.  The value returned is the maximum number of
87890   ** pages in the page cache.  The second form sets both the current
87891   ** page cache size value and the persistent page cache size value
87892   ** stored in the database file.
87893   **
87894   ** Older versions of SQLite would set the default cache size to a
87895   ** negative number to indicate synchronous=OFF.  These days, synchronous
87896   ** is always on by default regardless of the sign of the default cache
87897   ** size.  But continue to take the absolute value of the default cache
87898   ** size of historical compatibility.
87899   */
87900   if( sqlite3StrICmp(zLeft,"default_cache_size")==0 ){
87901     static const VdbeOpList getCacheSize[] = {
87902       { OP_Transaction, 0, 0,        0},                         /* 0 */
87903       { OP_ReadCookie,  0, 1,        BTREE_DEFAULT_CACHE_SIZE},  /* 1 */
87904       { OP_IfPos,       1, 7,        0},
87905       { OP_Integer,     0, 2,        0},
87906       { OP_Subtract,    1, 2,        1},
87907       { OP_IfPos,       1, 7,        0},
87908       { OP_Integer,     0, 1,        0},                         /* 6 */
87909       { OP_ResultRow,   1, 1,        0},
87910     };
87911     int addr;
87912     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
87913     sqlite3VdbeUsesBtree(v, iDb);
87914     if( !zRight ){
87915       sqlite3VdbeSetNumCols(v, 1);
87916       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cache_size", SQLITE_STATIC);
87917       pParse->nMem += 2;
87918       addr = sqlite3VdbeAddOpList(v, ArraySize(getCacheSize), getCacheSize);
87919       sqlite3VdbeChangeP1(v, addr, iDb);
87920       sqlite3VdbeChangeP1(v, addr+1, iDb);
87921       sqlite3VdbeChangeP1(v, addr+6, SQLITE_DEFAULT_CACHE_SIZE);
87922     }else{
87923       int size = sqlite3AbsInt32(sqlite3Atoi(zRight));
87924       sqlite3BeginWriteOperation(pParse, 0, iDb);
87925       sqlite3VdbeAddOp2(v, OP_Integer, size, 1);
87926       sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_DEFAULT_CACHE_SIZE, 1);
87927       assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
87928       pDb->pSchema->cache_size = size;
87929       sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
87930     }
87931   }else
87932
87933   /*
87934   **  PRAGMA [database.]page_size
87935   **  PRAGMA [database.]page_size=N
87936   **
87937   ** The first form reports the current setting for the
87938   ** database page size in bytes.  The second form sets the
87939   ** database page size value.  The value can only be set if
87940   ** the database has not yet been created.
87941   */
87942   if( sqlite3StrICmp(zLeft,"page_size")==0 ){
87943     Btree *pBt = pDb->pBt;
87944     assert( pBt!=0 );
87945     if( !zRight ){
87946       int size = ALWAYS(pBt) ? sqlite3BtreeGetPageSize(pBt) : 0;
87947       returnSingleInt(pParse, "page_size", size);
87948     }else{
87949       /* Malloc may fail when setting the page-size, as there is an internal
87950       ** buffer that the pager module resizes using sqlite3_realloc().
87951       */
87952       db->nextPagesize = sqlite3Atoi(zRight);
87953       if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize, -1, 0) ){
87954         db->mallocFailed = 1;
87955       }
87956     }
87957   }else
87958
87959   /*
87960   **  PRAGMA [database.]secure_delete
87961   **  PRAGMA [database.]secure_delete=ON/OFF
87962   **
87963   ** The first form reports the current setting for the
87964   ** secure_delete flag.  The second form changes the secure_delete
87965   ** flag setting and reports thenew value.
87966   */
87967   if( sqlite3StrICmp(zLeft,"secure_delete")==0 ){
87968     Btree *pBt = pDb->pBt;
87969     int b = -1;
87970     assert( pBt!=0 );
87971     if( zRight ){
87972       b = getBoolean(zRight);
87973     }
87974     if( pId2->n==0 && b>=0 ){
87975       int ii;
87976       for(ii=0; ii<db->nDb; ii++){
87977         sqlite3BtreeSecureDelete(db->aDb[ii].pBt, b);
87978       }
87979     }
87980     b = sqlite3BtreeSecureDelete(pBt, b);
87981     returnSingleInt(pParse, "secure_delete", b);
87982   }else
87983
87984   /*
87985   **  PRAGMA [database.]max_page_count
87986   **  PRAGMA [database.]max_page_count=N
87987   **
87988   ** The first form reports the current setting for the
87989   ** maximum number of pages in the database file.  The 
87990   ** second form attempts to change this setting.  Both
87991   ** forms return the current setting.
87992   **
87993   **  PRAGMA [database.]page_count
87994   **
87995   ** Return the number of pages in the specified database.
87996   */
87997   if( sqlite3StrICmp(zLeft,"page_count")==0
87998    || sqlite3StrICmp(zLeft,"max_page_count")==0
87999   ){
88000     int iReg;
88001     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
88002     sqlite3CodeVerifySchema(pParse, iDb);
88003     iReg = ++pParse->nMem;
88004     if( zLeft[0]=='p' ){
88005       sqlite3VdbeAddOp2(v, OP_Pagecount, iDb, iReg);
88006     }else{
88007       sqlite3VdbeAddOp3(v, OP_MaxPgcnt, iDb, iReg, sqlite3Atoi(zRight));
88008     }
88009     sqlite3VdbeAddOp2(v, OP_ResultRow, iReg, 1);
88010     sqlite3VdbeSetNumCols(v, 1);
88011     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT);
88012   }else
88013
88014   /*
88015   **  PRAGMA [database.]locking_mode
88016   **  PRAGMA [database.]locking_mode = (normal|exclusive)
88017   */
88018   if( sqlite3StrICmp(zLeft,"locking_mode")==0 ){
88019     const char *zRet = "normal";
88020     int eMode = getLockingMode(zRight);
88021
88022     if( pId2->n==0 && eMode==PAGER_LOCKINGMODE_QUERY ){
88023       /* Simple "PRAGMA locking_mode;" statement. This is a query for
88024       ** the current default locking mode (which may be different to
88025       ** the locking-mode of the main database).
88026       */
88027       eMode = db->dfltLockMode;
88028     }else{
88029       Pager *pPager;
88030       if( pId2->n==0 ){
88031         /* This indicates that no database name was specified as part
88032         ** of the PRAGMA command. In this case the locking-mode must be
88033         ** set on all attached databases, as well as the main db file.
88034         **
88035         ** Also, the sqlite3.dfltLockMode variable is set so that
88036         ** any subsequently attached databases also use the specified
88037         ** locking mode.
88038         */
88039         int ii;
88040         assert(pDb==&db->aDb[0]);
88041         for(ii=2; ii<db->nDb; ii++){
88042           pPager = sqlite3BtreePager(db->aDb[ii].pBt);
88043           sqlite3PagerLockingMode(pPager, eMode);
88044         }
88045         db->dfltLockMode = (u8)eMode;
88046       }
88047       pPager = sqlite3BtreePager(pDb->pBt);
88048       eMode = sqlite3PagerLockingMode(pPager, eMode);
88049     }
88050
88051     assert(eMode==PAGER_LOCKINGMODE_NORMAL||eMode==PAGER_LOCKINGMODE_EXCLUSIVE);
88052     if( eMode==PAGER_LOCKINGMODE_EXCLUSIVE ){
88053       zRet = "exclusive";
88054     }
88055     sqlite3VdbeSetNumCols(v, 1);
88056     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "locking_mode", SQLITE_STATIC);
88057     sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, zRet, 0);
88058     sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
88059   }else
88060
88061   /*
88062   **  PRAGMA [database.]journal_mode
88063   **  PRAGMA [database.]journal_mode =
88064   **                      (delete|persist|off|truncate|memory|wal|off)
88065   */
88066   if( sqlite3StrICmp(zLeft,"journal_mode")==0 ){
88067     int eMode;        /* One of the PAGER_JOURNALMODE_XXX symbols */
88068     int ii;           /* Loop counter */
88069
88070     /* Force the schema to be loaded on all databases.  This cases all
88071     ** database files to be opened and the journal_modes set. */
88072     if( sqlite3ReadSchema(pParse) ){
88073       goto pragma_out;
88074     }
88075
88076     sqlite3VdbeSetNumCols(v, 1);
88077     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "journal_mode", SQLITE_STATIC);
88078
88079     if( zRight==0 ){
88080       /* If there is no "=MODE" part of the pragma, do a query for the
88081       ** current mode */
88082       eMode = PAGER_JOURNALMODE_QUERY;
88083     }else{
88084       const char *zMode;
88085       int n = sqlite3Strlen30(zRight);
88086       for(eMode=0; (zMode = sqlite3JournalModename(eMode))!=0; eMode++){
88087         if( sqlite3StrNICmp(zRight, zMode, n)==0 ) break;
88088       }
88089       if( !zMode ){
88090         /* If the "=MODE" part does not match any known journal mode,
88091         ** then do a query */
88092         eMode = PAGER_JOURNALMODE_QUERY;
88093       }
88094     }
88095     if( eMode==PAGER_JOURNALMODE_QUERY && pId2->n==0 ){
88096       /* Convert "PRAGMA journal_mode" into "PRAGMA main.journal_mode" */
88097       iDb = 0;
88098       pId2->n = 1;
88099     }
88100     for(ii=db->nDb-1; ii>=0; ii--){
88101       if( db->aDb[ii].pBt && (ii==iDb || pId2->n==0) ){
88102         sqlite3VdbeUsesBtree(v, ii);
88103         sqlite3VdbeAddOp3(v, OP_JournalMode, ii, 1, eMode);
88104       }
88105     }
88106     sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
88107   }else
88108
88109   /*
88110   **  PRAGMA [database.]journal_size_limit
88111   **  PRAGMA [database.]journal_size_limit=N
88112   **
88113   ** Get or set the size limit on rollback journal files.
88114   */
88115   if( sqlite3StrICmp(zLeft,"journal_size_limit")==0 ){
88116     Pager *pPager = sqlite3BtreePager(pDb->pBt);
88117     i64 iLimit = -2;
88118     if( zRight ){
88119       sqlite3Atoi64(zRight, &iLimit, 1000000, SQLITE_UTF8);
88120       if( iLimit<-1 ) iLimit = -1;
88121     }
88122     iLimit = sqlite3PagerJournalSizeLimit(pPager, iLimit);
88123     returnSingleInt(pParse, "journal_size_limit", iLimit);
88124   }else
88125
88126 #endif /* SQLITE_OMIT_PAGER_PRAGMAS */
88127
88128   /*
88129   **  PRAGMA [database.]auto_vacuum
88130   **  PRAGMA [database.]auto_vacuum=N
88131   **
88132   ** Get or set the value of the database 'auto-vacuum' parameter.
88133   ** The value is one of:  0 NONE 1 FULL 2 INCREMENTAL
88134   */
88135 #ifndef SQLITE_OMIT_AUTOVACUUM
88136   if( sqlite3StrICmp(zLeft,"auto_vacuum")==0 ){
88137     Btree *pBt = pDb->pBt;
88138     assert( pBt!=0 );
88139     if( sqlite3ReadSchema(pParse) ){
88140       goto pragma_out;
88141     }
88142     if( !zRight ){
88143       int auto_vacuum;
88144       if( ALWAYS(pBt) ){
88145          auto_vacuum = sqlite3BtreeGetAutoVacuum(pBt);
88146       }else{
88147          auto_vacuum = SQLITE_DEFAULT_AUTOVACUUM;
88148       }
88149       returnSingleInt(pParse, "auto_vacuum", auto_vacuum);
88150     }else{
88151       int eAuto = getAutoVacuum(zRight);
88152       assert( eAuto>=0 && eAuto<=2 );
88153       db->nextAutovac = (u8)eAuto;
88154       if( ALWAYS(eAuto>=0) ){
88155         /* Call SetAutoVacuum() to set initialize the internal auto and
88156         ** incr-vacuum flags. This is required in case this connection
88157         ** creates the database file. It is important that it is created
88158         ** as an auto-vacuum capable db.
88159         */
88160         int rc = sqlite3BtreeSetAutoVacuum(pBt, eAuto);
88161         if( rc==SQLITE_OK && (eAuto==1 || eAuto==2) ){
88162           /* When setting the auto_vacuum mode to either "full" or 
88163           ** "incremental", write the value of meta[6] in the database
88164           ** file. Before writing to meta[6], check that meta[3] indicates
88165           ** that this really is an auto-vacuum capable database.
88166           */
88167           static const VdbeOpList setMeta6[] = {
88168             { OP_Transaction,    0,         1,                 0},    /* 0 */
88169             { OP_ReadCookie,     0,         1,         BTREE_LARGEST_ROOT_PAGE},
88170             { OP_If,             1,         0,                 0},    /* 2 */
88171             { OP_Halt,           SQLITE_OK, OE_Abort,          0},    /* 3 */
88172             { OP_Integer,        0,         1,                 0},    /* 4 */
88173             { OP_SetCookie,      0,         BTREE_INCR_VACUUM, 1},    /* 5 */
88174           };
88175           int iAddr;
88176           iAddr = sqlite3VdbeAddOpList(v, ArraySize(setMeta6), setMeta6);
88177           sqlite3VdbeChangeP1(v, iAddr, iDb);
88178           sqlite3VdbeChangeP1(v, iAddr+1, iDb);
88179           sqlite3VdbeChangeP2(v, iAddr+2, iAddr+4);
88180           sqlite3VdbeChangeP1(v, iAddr+4, eAuto-1);
88181           sqlite3VdbeChangeP1(v, iAddr+5, iDb);
88182           sqlite3VdbeUsesBtree(v, iDb);
88183         }
88184       }
88185     }
88186   }else
88187 #endif
88188
88189   /*
88190   **  PRAGMA [database.]incremental_vacuum(N)
88191   **
88192   ** Do N steps of incremental vacuuming on a database.
88193   */
88194 #ifndef SQLITE_OMIT_AUTOVACUUM
88195   if( sqlite3StrICmp(zLeft,"incremental_vacuum")==0 ){
88196     int iLimit, addr;
88197     if( sqlite3ReadSchema(pParse) ){
88198       goto pragma_out;
88199     }
88200     if( zRight==0 || !sqlite3GetInt32(zRight, &iLimit) || iLimit<=0 ){
88201       iLimit = 0x7fffffff;
88202     }
88203     sqlite3BeginWriteOperation(pParse, 0, iDb);
88204     sqlite3VdbeAddOp2(v, OP_Integer, iLimit, 1);
88205     addr = sqlite3VdbeAddOp1(v, OP_IncrVacuum, iDb);
88206     sqlite3VdbeAddOp1(v, OP_ResultRow, 1);
88207     sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1);
88208     sqlite3VdbeAddOp2(v, OP_IfPos, 1, addr);
88209     sqlite3VdbeJumpHere(v, addr);
88210   }else
88211 #endif
88212
88213 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
88214   /*
88215   **  PRAGMA [database.]cache_size
88216   **  PRAGMA [database.]cache_size=N
88217   **
88218   ** The first form reports the current local setting for the
88219   ** page cache size.  The local setting can be different from
88220   ** the persistent cache size value that is stored in the database
88221   ** file itself.  The value returned is the maximum number of
88222   ** pages in the page cache.  The second form sets the local
88223   ** page cache size value.  It does not change the persistent
88224   ** cache size stored on the disk so the cache size will revert
88225   ** to its default value when the database is closed and reopened.
88226   ** N should be a positive integer.
88227   */
88228   if( sqlite3StrICmp(zLeft,"cache_size")==0 ){
88229     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
88230     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
88231     if( !zRight ){
88232       returnSingleInt(pParse, "cache_size", pDb->pSchema->cache_size);
88233     }else{
88234       int size = sqlite3AbsInt32(sqlite3Atoi(zRight));
88235       pDb->pSchema->cache_size = size;
88236       sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
88237     }
88238   }else
88239
88240   /*
88241   **   PRAGMA temp_store
88242   **   PRAGMA temp_store = "default"|"memory"|"file"
88243   **
88244   ** Return or set the local value of the temp_store flag.  Changing
88245   ** the local value does not make changes to the disk file and the default
88246   ** value will be restored the next time the database is opened.
88247   **
88248   ** Note that it is possible for the library compile-time options to
88249   ** override this setting
88250   */
88251   if( sqlite3StrICmp(zLeft, "temp_store")==0 ){
88252     if( !zRight ){
88253       returnSingleInt(pParse, "temp_store", db->temp_store);
88254     }else{
88255       changeTempStorage(pParse, zRight);
88256     }
88257   }else
88258
88259   /*
88260   **   PRAGMA temp_store_directory
88261   **   PRAGMA temp_store_directory = ""|"directory_name"
88262   **
88263   ** Return or set the local value of the temp_store_directory flag.  Changing
88264   ** the value sets a specific directory to be used for temporary files.
88265   ** Setting to a null string reverts to the default temporary directory search.
88266   ** If temporary directory is changed, then invalidateTempStorage.
88267   **
88268   */
88269   if( sqlite3StrICmp(zLeft, "temp_store_directory")==0 ){
88270     if( !zRight ){
88271       if( sqlite3_temp_directory ){
88272         sqlite3VdbeSetNumCols(v, 1);
88273         sqlite3VdbeSetColName(v, 0, COLNAME_NAME, 
88274             "temp_store_directory", SQLITE_STATIC);
88275         sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, sqlite3_temp_directory, 0);
88276         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
88277       }
88278     }else{
88279 #ifndef SQLITE_OMIT_WSD
88280       if( zRight[0] ){
88281         int rc;
88282         int res;
88283         rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res);
88284         if( rc!=SQLITE_OK || res==0 ){
88285           sqlite3ErrorMsg(pParse, "not a writable directory");
88286           goto pragma_out;
88287         }
88288       }
88289       if( SQLITE_TEMP_STORE==0
88290        || (SQLITE_TEMP_STORE==1 && db->temp_store<=1)
88291        || (SQLITE_TEMP_STORE==2 && db->temp_store==1)
88292       ){
88293         invalidateTempStorage(pParse);
88294       }
88295       sqlite3_free(sqlite3_temp_directory);
88296       if( zRight[0] ){
88297         sqlite3_temp_directory = sqlite3_mprintf("%s", zRight);
88298       }else{
88299         sqlite3_temp_directory = 0;
88300       }
88301 #endif /* SQLITE_OMIT_WSD */
88302     }
88303   }else
88304
88305 #if !defined(SQLITE_ENABLE_LOCKING_STYLE)
88306 #  if defined(__APPLE__)
88307 #    define SQLITE_ENABLE_LOCKING_STYLE 1
88308 #  else
88309 #    define SQLITE_ENABLE_LOCKING_STYLE 0
88310 #  endif
88311 #endif
88312 #if SQLITE_ENABLE_LOCKING_STYLE
88313   /*
88314    **   PRAGMA [database.]lock_proxy_file
88315    **   PRAGMA [database.]lock_proxy_file = ":auto:"|"lock_file_path"
88316    **
88317    ** Return or set the value of the lock_proxy_file flag.  Changing
88318    ** the value sets a specific file to be used for database access locks.
88319    **
88320    */
88321   if( sqlite3StrICmp(zLeft, "lock_proxy_file")==0 ){
88322     if( !zRight ){
88323       Pager *pPager = sqlite3BtreePager(pDb->pBt);
88324       char *proxy_file_path = NULL;
88325       sqlite3_file *pFile = sqlite3PagerFile(pPager);
88326       sqlite3OsFileControl(pFile, SQLITE_GET_LOCKPROXYFILE, 
88327                            &proxy_file_path);
88328       
88329       if( proxy_file_path ){
88330         sqlite3VdbeSetNumCols(v, 1);
88331         sqlite3VdbeSetColName(v, 0, COLNAME_NAME, 
88332                               "lock_proxy_file", SQLITE_STATIC);
88333         sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, proxy_file_path, 0);
88334         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
88335       }
88336     }else{
88337       Pager *pPager = sqlite3BtreePager(pDb->pBt);
88338       sqlite3_file *pFile = sqlite3PagerFile(pPager);
88339       int res;
88340       if( zRight[0] ){
88341         res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE, 
88342                                      zRight);
88343       } else {
88344         res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE, 
88345                                      NULL);
88346       }
88347       if( res!=SQLITE_OK ){
88348         sqlite3ErrorMsg(pParse, "failed to set lock proxy file");
88349         goto pragma_out;
88350       }
88351     }
88352   }else
88353 #endif /* SQLITE_ENABLE_LOCKING_STYLE */      
88354     
88355   /*
88356   **   PRAGMA [database.]synchronous
88357   **   PRAGMA [database.]synchronous=OFF|ON|NORMAL|FULL
88358   **
88359   ** Return or set the local value of the synchronous flag.  Changing
88360   ** the local value does not make changes to the disk file and the
88361   ** default value will be restored the next time the database is
88362   ** opened.
88363   */
88364   if( sqlite3StrICmp(zLeft,"synchronous")==0 ){
88365     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
88366     if( !zRight ){
88367       returnSingleInt(pParse, "synchronous", pDb->safety_level-1);
88368     }else{
88369       if( !db->autoCommit ){
88370         sqlite3ErrorMsg(pParse, 
88371             "Safety level may not be changed inside a transaction");
88372       }else{
88373         pDb->safety_level = getSafetyLevel(zRight)+1;
88374       }
88375     }
88376   }else
88377 #endif /* SQLITE_OMIT_PAGER_PRAGMAS */
88378
88379 #ifndef SQLITE_OMIT_FLAG_PRAGMAS
88380   if( flagPragma(pParse, zLeft, zRight) ){
88381     /* The flagPragma() subroutine also generates any necessary code
88382     ** there is nothing more to do here */
88383   }else
88384 #endif /* SQLITE_OMIT_FLAG_PRAGMAS */
88385
88386 #ifndef SQLITE_OMIT_SCHEMA_PRAGMAS
88387   /*
88388   **   PRAGMA table_info(<table>)
88389   **
88390   ** Return a single row for each column of the named table. The columns of
88391   ** the returned data set are:
88392   **
88393   ** cid:        Column id (numbered from left to right, starting at 0)
88394   ** name:       Column name
88395   ** type:       Column declaration type.
88396   ** notnull:    True if 'NOT NULL' is part of column declaration
88397   ** dflt_value: The default value for the column, if any.
88398   */
88399   if( sqlite3StrICmp(zLeft, "table_info")==0 && zRight ){
88400     Table *pTab;
88401     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
88402     pTab = sqlite3FindTable(db, zRight, zDb);
88403     if( pTab ){
88404       int i;
88405       int nHidden = 0;
88406       Column *pCol;
88407       sqlite3VdbeSetNumCols(v, 6);
88408       pParse->nMem = 6;
88409       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cid", SQLITE_STATIC);
88410       sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
88411       sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "type", SQLITE_STATIC);
88412       sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "notnull", SQLITE_STATIC);
88413       sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "dflt_value", SQLITE_STATIC);
88414       sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "pk", SQLITE_STATIC);
88415       sqlite3ViewGetColumnNames(pParse, pTab);
88416       for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
88417         if( IsHiddenColumn(pCol) ){
88418           nHidden++;
88419           continue;
88420         }
88421         sqlite3VdbeAddOp2(v, OP_Integer, i-nHidden, 1);
88422         sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pCol->zName, 0);
88423         sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
88424            pCol->zType ? pCol->zType : "", 0);
88425         sqlite3VdbeAddOp2(v, OP_Integer, (pCol->notNull ? 1 : 0), 4);
88426         if( pCol->zDflt ){
88427           sqlite3VdbeAddOp4(v, OP_String8, 0, 5, 0, (char*)pCol->zDflt, 0);
88428         }else{
88429           sqlite3VdbeAddOp2(v, OP_Null, 0, 5);
88430         }
88431         sqlite3VdbeAddOp2(v, OP_Integer, pCol->isPrimKey, 6);
88432         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 6);
88433       }
88434     }
88435   }else
88436
88437   if( sqlite3StrICmp(zLeft, "index_info")==0 && zRight ){
88438     Index *pIdx;
88439     Table *pTab;
88440     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
88441     pIdx = sqlite3FindIndex(db, zRight, zDb);
88442     if( pIdx ){
88443       int i;
88444       pTab = pIdx->pTable;
88445       sqlite3VdbeSetNumCols(v, 3);
88446       pParse->nMem = 3;
88447       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seqno", SQLITE_STATIC);
88448       sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "cid", SQLITE_STATIC);
88449       sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "name", SQLITE_STATIC);
88450       for(i=0; i<pIdx->nColumn; i++){
88451         int cnum = pIdx->aiColumn[i];
88452         sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
88453         sqlite3VdbeAddOp2(v, OP_Integer, cnum, 2);
88454         assert( pTab->nCol>cnum );
88455         sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pTab->aCol[cnum].zName, 0);
88456         sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
88457       }
88458     }
88459   }else
88460
88461   if( sqlite3StrICmp(zLeft, "index_list")==0 && zRight ){
88462     Index *pIdx;
88463     Table *pTab;
88464     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
88465     pTab = sqlite3FindTable(db, zRight, zDb);
88466     if( pTab ){
88467       v = sqlite3GetVdbe(pParse);
88468       pIdx = pTab->pIndex;
88469       if( pIdx ){
88470         int i = 0; 
88471         sqlite3VdbeSetNumCols(v, 3);
88472         pParse->nMem = 3;
88473         sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
88474         sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
88475         sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "unique", SQLITE_STATIC);
88476         while(pIdx){
88477           sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
88478           sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pIdx->zName, 0);
88479           sqlite3VdbeAddOp2(v, OP_Integer, pIdx->onError!=OE_None, 3);
88480           sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
88481           ++i;
88482           pIdx = pIdx->pNext;
88483         }
88484       }
88485     }
88486   }else
88487
88488   if( sqlite3StrICmp(zLeft, "database_list")==0 ){
88489     int i;
88490     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
88491     sqlite3VdbeSetNumCols(v, 3);
88492     pParse->nMem = 3;
88493     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
88494     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
88495     sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "file", SQLITE_STATIC);
88496     for(i=0; i<db->nDb; i++){
88497       if( db->aDb[i].pBt==0 ) continue;
88498       assert( db->aDb[i].zName!=0 );
88499       sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
88500       sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, db->aDb[i].zName, 0);
88501       sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
88502            sqlite3BtreeGetFilename(db->aDb[i].pBt), 0);
88503       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
88504     }
88505   }else
88506
88507   if( sqlite3StrICmp(zLeft, "collation_list")==0 ){
88508     int i = 0;
88509     HashElem *p;
88510     sqlite3VdbeSetNumCols(v, 2);
88511     pParse->nMem = 2;
88512     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
88513     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
88514     for(p=sqliteHashFirst(&db->aCollSeq); p; p=sqliteHashNext(p)){
88515       CollSeq *pColl = (CollSeq *)sqliteHashData(p);
88516       sqlite3VdbeAddOp2(v, OP_Integer, i++, 1);
88517       sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pColl->zName, 0);
88518       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
88519     }
88520   }else
88521 #endif /* SQLITE_OMIT_SCHEMA_PRAGMAS */
88522
88523 #ifndef SQLITE_OMIT_FOREIGN_KEY
88524   if( sqlite3StrICmp(zLeft, "foreign_key_list")==0 && zRight ){
88525     FKey *pFK;
88526     Table *pTab;
88527     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
88528     pTab = sqlite3FindTable(db, zRight, zDb);
88529     if( pTab ){
88530       v = sqlite3GetVdbe(pParse);
88531       pFK = pTab->pFKey;
88532       if( pFK ){
88533         int i = 0; 
88534         sqlite3VdbeSetNumCols(v, 8);
88535         pParse->nMem = 8;
88536         sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "id", SQLITE_STATIC);
88537         sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "seq", SQLITE_STATIC);
88538         sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "table", SQLITE_STATIC);
88539         sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "from", SQLITE_STATIC);
88540         sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "to", SQLITE_STATIC);
88541         sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "on_update", SQLITE_STATIC);
88542         sqlite3VdbeSetColName(v, 6, COLNAME_NAME, "on_delete", SQLITE_STATIC);
88543         sqlite3VdbeSetColName(v, 7, COLNAME_NAME, "match", SQLITE_STATIC);
88544         while(pFK){
88545           int j;
88546           for(j=0; j<pFK->nCol; j++){
88547             char *zCol = pFK->aCol[j].zCol;
88548             char *zOnDelete = (char *)actionName(pFK->aAction[0]);
88549             char *zOnUpdate = (char *)actionName(pFK->aAction[1]);
88550             sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
88551             sqlite3VdbeAddOp2(v, OP_Integer, j, 2);
88552             sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pFK->zTo, 0);
88553             sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0,
88554                               pTab->aCol[pFK->aCol[j].iFrom].zName, 0);
88555             sqlite3VdbeAddOp4(v, zCol ? OP_String8 : OP_Null, 0, 5, 0, zCol, 0);
88556             sqlite3VdbeAddOp4(v, OP_String8, 0, 6, 0, zOnUpdate, 0);
88557             sqlite3VdbeAddOp4(v, OP_String8, 0, 7, 0, zOnDelete, 0);
88558             sqlite3VdbeAddOp4(v, OP_String8, 0, 8, 0, "NONE", 0);
88559             sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 8);
88560           }
88561           ++i;
88562           pFK = pFK->pNextFrom;
88563         }
88564       }
88565     }
88566   }else
88567 #endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */
88568
88569 #ifndef NDEBUG
88570   if( sqlite3StrICmp(zLeft, "parser_trace")==0 ){
88571     if( zRight ){
88572       if( getBoolean(zRight) ){
88573         sqlite3ParserTrace(stderr, "parser: ");
88574       }else{
88575         sqlite3ParserTrace(0, 0);
88576       }
88577     }
88578   }else
88579 #endif
88580
88581   /* Reinstall the LIKE and GLOB functions.  The variant of LIKE
88582   ** used will be case sensitive or not depending on the RHS.
88583   */
88584   if( sqlite3StrICmp(zLeft, "case_sensitive_like")==0 ){
88585     if( zRight ){
88586       sqlite3RegisterLikeFunctions(db, getBoolean(zRight));
88587     }
88588   }else
88589
88590 #ifndef SQLITE_INTEGRITY_CHECK_ERROR_MAX
88591 # define SQLITE_INTEGRITY_CHECK_ERROR_MAX 100
88592 #endif
88593
88594 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
88595   /* Pragma "quick_check" is an experimental reduced version of 
88596   ** integrity_check designed to detect most database corruption
88597   ** without most of the overhead of a full integrity-check.
88598   */
88599   if( sqlite3StrICmp(zLeft, "integrity_check")==0
88600    || sqlite3StrICmp(zLeft, "quick_check")==0 
88601   ){
88602     int i, j, addr, mxErr;
88603
88604     /* Code that appears at the end of the integrity check.  If no error
88605     ** messages have been generated, output OK.  Otherwise output the
88606     ** error message
88607     */
88608     static const VdbeOpList endCode[] = {
88609       { OP_AddImm,      1, 0,        0},    /* 0 */
88610       { OP_IfNeg,       1, 0,        0},    /* 1 */
88611       { OP_String8,     0, 3,        0},    /* 2 */
88612       { OP_ResultRow,   3, 1,        0},
88613     };
88614
88615     int isQuick = (zLeft[0]=='q');
88616
88617     /* Initialize the VDBE program */
88618     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
88619     pParse->nMem = 6;
88620     sqlite3VdbeSetNumCols(v, 1);
88621     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "integrity_check", SQLITE_STATIC);
88622
88623     /* Set the maximum error count */
88624     mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
88625     if( zRight ){
88626       sqlite3GetInt32(zRight, &mxErr);
88627       if( mxErr<=0 ){
88628         mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
88629       }
88630     }
88631     sqlite3VdbeAddOp2(v, OP_Integer, mxErr, 1);  /* reg[1] holds errors left */
88632
88633     /* Do an integrity check on each database file */
88634     for(i=0; i<db->nDb; i++){
88635       HashElem *x;
88636       Hash *pTbls;
88637       int cnt = 0;
88638
88639       if( OMIT_TEMPDB && i==1 ) continue;
88640
88641       sqlite3CodeVerifySchema(pParse, i);
88642       addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Halt if out of errors */
88643       sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
88644       sqlite3VdbeJumpHere(v, addr);
88645
88646       /* Do an integrity check of the B-Tree
88647       **
88648       ** Begin by filling registers 2, 3, ... with the root pages numbers
88649       ** for all tables and indices in the database.
88650       */
88651       assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
88652       pTbls = &db->aDb[i].pSchema->tblHash;
88653       for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
88654         Table *pTab = sqliteHashData(x);
88655         Index *pIdx;
88656         sqlite3VdbeAddOp2(v, OP_Integer, pTab->tnum, 2+cnt);
88657         cnt++;
88658         for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
88659           sqlite3VdbeAddOp2(v, OP_Integer, pIdx->tnum, 2+cnt);
88660           cnt++;
88661         }
88662       }
88663
88664       /* Make sure sufficient number of registers have been allocated */
88665       if( pParse->nMem < cnt+4 ){
88666         pParse->nMem = cnt+4;
88667       }
88668
88669       /* Do the b-tree integrity checks */
88670       sqlite3VdbeAddOp3(v, OP_IntegrityCk, 2, cnt, 1);
88671       sqlite3VdbeChangeP5(v, (u8)i);
88672       addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2);
88673       sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
88674          sqlite3MPrintf(db, "*** in database %s ***\n", db->aDb[i].zName),
88675          P4_DYNAMIC);
88676       sqlite3VdbeAddOp3(v, OP_Move, 2, 4, 1);
88677       sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 2);
88678       sqlite3VdbeAddOp2(v, OP_ResultRow, 2, 1);
88679       sqlite3VdbeJumpHere(v, addr);
88680
88681       /* Make sure all the indices are constructed correctly.
88682       */
88683       for(x=sqliteHashFirst(pTbls); x && !isQuick; x=sqliteHashNext(x)){
88684         Table *pTab = sqliteHashData(x);
88685         Index *pIdx;
88686         int loopTop;
88687
88688         if( pTab->pIndex==0 ) continue;
88689         addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1);  /* Stop if out of errors */
88690         sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
88691         sqlite3VdbeJumpHere(v, addr);
88692         sqlite3OpenTableAndIndices(pParse, pTab, 1, OP_OpenRead);
88693         sqlite3VdbeAddOp2(v, OP_Integer, 0, 2);  /* reg(2) will count entries */
88694         loopTop = sqlite3VdbeAddOp2(v, OP_Rewind, 1, 0);
88695         sqlite3VdbeAddOp2(v, OP_AddImm, 2, 1);   /* increment entry count */
88696         for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
88697           int jmp2;
88698           int r1;
88699           static const VdbeOpList idxErr[] = {
88700             { OP_AddImm,      1, -1,  0},
88701             { OP_String8,     0,  3,  0},    /* 1 */
88702             { OP_Rowid,       1,  4,  0},
88703             { OP_String8,     0,  5,  0},    /* 3 */
88704             { OP_String8,     0,  6,  0},    /* 4 */
88705             { OP_Concat,      4,  3,  3},
88706             { OP_Concat,      5,  3,  3},
88707             { OP_Concat,      6,  3,  3},
88708             { OP_ResultRow,   3,  1,  0},
88709             { OP_IfPos,       1,  0,  0},    /* 9 */
88710             { OP_Halt,        0,  0,  0},
88711           };
88712           r1 = sqlite3GenerateIndexKey(pParse, pIdx, 1, 3, 0);
88713           jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, j+2, 0, r1, pIdx->nColumn+1);
88714           addr = sqlite3VdbeAddOpList(v, ArraySize(idxErr), idxErr);
88715           sqlite3VdbeChangeP4(v, addr+1, "rowid ", P4_STATIC);
88716           sqlite3VdbeChangeP4(v, addr+3, " missing from index ", P4_STATIC);
88717           sqlite3VdbeChangeP4(v, addr+4, pIdx->zName, P4_TRANSIENT);
88718           sqlite3VdbeJumpHere(v, addr+9);
88719           sqlite3VdbeJumpHere(v, jmp2);
88720         }
88721         sqlite3VdbeAddOp2(v, OP_Next, 1, loopTop+1);
88722         sqlite3VdbeJumpHere(v, loopTop);
88723         for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
88724           static const VdbeOpList cntIdx[] = {
88725              { OP_Integer,      0,  3,  0},
88726              { OP_Rewind,       0,  0,  0},  /* 1 */
88727              { OP_AddImm,       3,  1,  0},
88728              { OP_Next,         0,  0,  0},  /* 3 */
88729              { OP_Eq,           2,  0,  3},  /* 4 */
88730              { OP_AddImm,       1, -1,  0},
88731              { OP_String8,      0,  2,  0},  /* 6 */
88732              { OP_String8,      0,  3,  0},  /* 7 */
88733              { OP_Concat,       3,  2,  2},
88734              { OP_ResultRow,    2,  1,  0},
88735           };
88736           addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1);
88737           sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
88738           sqlite3VdbeJumpHere(v, addr);
88739           addr = sqlite3VdbeAddOpList(v, ArraySize(cntIdx), cntIdx);
88740           sqlite3VdbeChangeP1(v, addr+1, j+2);
88741           sqlite3VdbeChangeP2(v, addr+1, addr+4);
88742           sqlite3VdbeChangeP1(v, addr+3, j+2);
88743           sqlite3VdbeChangeP2(v, addr+3, addr+2);
88744           sqlite3VdbeJumpHere(v, addr+4);
88745           sqlite3VdbeChangeP4(v, addr+6, 
88746                      "wrong # of entries in index ", P4_STATIC);
88747           sqlite3VdbeChangeP4(v, addr+7, pIdx->zName, P4_TRANSIENT);
88748         }
88749       } 
88750     }
88751     addr = sqlite3VdbeAddOpList(v, ArraySize(endCode), endCode);
88752     sqlite3VdbeChangeP2(v, addr, -mxErr);
88753     sqlite3VdbeJumpHere(v, addr+1);
88754     sqlite3VdbeChangeP4(v, addr+2, "ok", P4_STATIC);
88755   }else
88756 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
88757
88758 #ifndef SQLITE_OMIT_UTF16
88759   /*
88760   **   PRAGMA encoding
88761   **   PRAGMA encoding = "utf-8"|"utf-16"|"utf-16le"|"utf-16be"
88762   **
88763   ** In its first form, this pragma returns the encoding of the main
88764   ** database. If the database is not initialized, it is initialized now.
88765   **
88766   ** The second form of this pragma is a no-op if the main database file
88767   ** has not already been initialized. In this case it sets the default
88768   ** encoding that will be used for the main database file if a new file
88769   ** is created. If an existing main database file is opened, then the
88770   ** default text encoding for the existing database is used.
88771   ** 
88772   ** In all cases new databases created using the ATTACH command are
88773   ** created to use the same default text encoding as the main database. If
88774   ** the main database has not been initialized and/or created when ATTACH
88775   ** is executed, this is done before the ATTACH operation.
88776   **
88777   ** In the second form this pragma sets the text encoding to be used in
88778   ** new database files created using this database handle. It is only
88779   ** useful if invoked immediately after the main database i
88780   */
88781   if( sqlite3StrICmp(zLeft, "encoding")==0 ){
88782     static const struct EncName {
88783       char *zName;
88784       u8 enc;
88785     } encnames[] = {
88786       { "UTF8",     SQLITE_UTF8        },
88787       { "UTF-8",    SQLITE_UTF8        },  /* Must be element [1] */
88788       { "UTF-16le", SQLITE_UTF16LE     },  /* Must be element [2] */
88789       { "UTF-16be", SQLITE_UTF16BE     },  /* Must be element [3] */
88790       { "UTF16le",  SQLITE_UTF16LE     },
88791       { "UTF16be",  SQLITE_UTF16BE     },
88792       { "UTF-16",   0                  }, /* SQLITE_UTF16NATIVE */
88793       { "UTF16",    0                  }, /* SQLITE_UTF16NATIVE */
88794       { 0, 0 }
88795     };
88796     const struct EncName *pEnc;
88797     if( !zRight ){    /* "PRAGMA encoding" */
88798       if( sqlite3ReadSchema(pParse) ) goto pragma_out;
88799       sqlite3VdbeSetNumCols(v, 1);
88800       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "encoding", SQLITE_STATIC);
88801       sqlite3VdbeAddOp2(v, OP_String8, 0, 1);
88802       assert( encnames[SQLITE_UTF8].enc==SQLITE_UTF8 );
88803       assert( encnames[SQLITE_UTF16LE].enc==SQLITE_UTF16LE );
88804       assert( encnames[SQLITE_UTF16BE].enc==SQLITE_UTF16BE );
88805       sqlite3VdbeChangeP4(v, -1, encnames[ENC(pParse->db)].zName, P4_STATIC);
88806       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
88807     }else{                        /* "PRAGMA encoding = XXX" */
88808       /* Only change the value of sqlite.enc if the database handle is not
88809       ** initialized. If the main database exists, the new sqlite.enc value
88810       ** will be overwritten when the schema is next loaded. If it does not
88811       ** already exists, it will be created to use the new encoding value.
88812       */
88813       if( 
88814         !(DbHasProperty(db, 0, DB_SchemaLoaded)) || 
88815         DbHasProperty(db, 0, DB_Empty) 
88816       ){
88817         for(pEnc=&encnames[0]; pEnc->zName; pEnc++){
88818           if( 0==sqlite3StrICmp(zRight, pEnc->zName) ){
88819             ENC(pParse->db) = pEnc->enc ? pEnc->enc : SQLITE_UTF16NATIVE;
88820             break;
88821           }
88822         }
88823         if( !pEnc->zName ){
88824           sqlite3ErrorMsg(pParse, "unsupported encoding: %s", zRight);
88825         }
88826       }
88827     }
88828   }else
88829 #endif /* SQLITE_OMIT_UTF16 */
88830
88831 #ifndef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
88832   /*
88833   **   PRAGMA [database.]schema_version
88834   **   PRAGMA [database.]schema_version = <integer>
88835   **
88836   **   PRAGMA [database.]user_version
88837   **   PRAGMA [database.]user_version = <integer>
88838   **
88839   ** The pragma's schema_version and user_version are used to set or get
88840   ** the value of the schema-version and user-version, respectively. Both
88841   ** the schema-version and the user-version are 32-bit signed integers
88842   ** stored in the database header.
88843   **
88844   ** The schema-cookie is usually only manipulated internally by SQLite. It
88845   ** is incremented by SQLite whenever the database schema is modified (by
88846   ** creating or dropping a table or index). The schema version is used by
88847   ** SQLite each time a query is executed to ensure that the internal cache
88848   ** of the schema used when compiling the SQL query matches the schema of
88849   ** the database against which the compiled query is actually executed.
88850   ** Subverting this mechanism by using "PRAGMA schema_version" to modify
88851   ** the schema-version is potentially dangerous and may lead to program
88852   ** crashes or database corruption. Use with caution!
88853   **
88854   ** The user-version is not used internally by SQLite. It may be used by
88855   ** applications for any purpose.
88856   */
88857   if( sqlite3StrICmp(zLeft, "schema_version")==0 
88858    || sqlite3StrICmp(zLeft, "user_version")==0 
88859    || sqlite3StrICmp(zLeft, "freelist_count")==0 
88860   ){
88861     int iCookie;   /* Cookie index. 1 for schema-cookie, 6 for user-cookie. */
88862     sqlite3VdbeUsesBtree(v, iDb);
88863     switch( zLeft[0] ){
88864       case 'f': case 'F':
88865         iCookie = BTREE_FREE_PAGE_COUNT;
88866         break;
88867       case 's': case 'S':
88868         iCookie = BTREE_SCHEMA_VERSION;
88869         break;
88870       default:
88871         iCookie = BTREE_USER_VERSION;
88872         break;
88873     }
88874
88875     if( zRight && iCookie!=BTREE_FREE_PAGE_COUNT ){
88876       /* Write the specified cookie value */
88877       static const VdbeOpList setCookie[] = {
88878         { OP_Transaction,    0,  1,  0},    /* 0 */
88879         { OP_Integer,        0,  1,  0},    /* 1 */
88880         { OP_SetCookie,      0,  0,  1},    /* 2 */
88881       };
88882       int addr = sqlite3VdbeAddOpList(v, ArraySize(setCookie), setCookie);
88883       sqlite3VdbeChangeP1(v, addr, iDb);
88884       sqlite3VdbeChangeP1(v, addr+1, sqlite3Atoi(zRight));
88885       sqlite3VdbeChangeP1(v, addr+2, iDb);
88886       sqlite3VdbeChangeP2(v, addr+2, iCookie);
88887     }else{
88888       /* Read the specified cookie value */
88889       static const VdbeOpList readCookie[] = {
88890         { OP_Transaction,     0,  0,  0},    /* 0 */
88891         { OP_ReadCookie,      0,  1,  0},    /* 1 */
88892         { OP_ResultRow,       1,  1,  0}
88893       };
88894       int addr = sqlite3VdbeAddOpList(v, ArraySize(readCookie), readCookie);
88895       sqlite3VdbeChangeP1(v, addr, iDb);
88896       sqlite3VdbeChangeP1(v, addr+1, iDb);
88897       sqlite3VdbeChangeP3(v, addr+1, iCookie);
88898       sqlite3VdbeSetNumCols(v, 1);
88899       sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT);
88900     }
88901   }else
88902 #endif /* SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS */
88903
88904 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
88905   /*
88906   **   PRAGMA compile_options
88907   **
88908   ** Return the names of all compile-time options used in this build,
88909   ** one option per row.
88910   */
88911   if( sqlite3StrICmp(zLeft, "compile_options")==0 ){
88912     int i = 0;
88913     const char *zOpt;
88914     sqlite3VdbeSetNumCols(v, 1);
88915     pParse->nMem = 1;
88916     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "compile_option", SQLITE_STATIC);
88917     while( (zOpt = sqlite3_compileoption_get(i++))!=0 ){
88918       sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, zOpt, 0);
88919       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
88920     }
88921   }else
88922 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
88923
88924 #ifndef SQLITE_OMIT_WAL
88925   /*
88926   **   PRAGMA [database.]wal_checkpoint = passive|full|restart
88927   **
88928   ** Checkpoint the database.
88929   */
88930   if( sqlite3StrICmp(zLeft, "wal_checkpoint")==0 ){
88931     int iBt = (pId2->z?iDb:SQLITE_MAX_ATTACHED);
88932     int eMode = SQLITE_CHECKPOINT_PASSIVE;
88933     if( zRight ){
88934       if( sqlite3StrICmp(zRight, "full")==0 ){
88935         eMode = SQLITE_CHECKPOINT_FULL;
88936       }else if( sqlite3StrICmp(zRight, "restart")==0 ){
88937         eMode = SQLITE_CHECKPOINT_RESTART;
88938       }
88939     }
88940     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
88941     sqlite3VdbeSetNumCols(v, 3);
88942     pParse->nMem = 3;
88943     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "busy", SQLITE_STATIC);
88944     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "log", SQLITE_STATIC);
88945     sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "checkpointed", SQLITE_STATIC);
88946
88947     sqlite3VdbeAddOp3(v, OP_Checkpoint, iBt, eMode, 1);
88948     sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
88949   }else
88950
88951   /*
88952   **   PRAGMA wal_autocheckpoint
88953   **   PRAGMA wal_autocheckpoint = N
88954   **
88955   ** Configure a database connection to automatically checkpoint a database
88956   ** after accumulating N frames in the log. Or query for the current value
88957   ** of N.
88958   */
88959   if( sqlite3StrICmp(zLeft, "wal_autocheckpoint")==0 ){
88960     if( zRight ){
88961       sqlite3_wal_autocheckpoint(db, sqlite3Atoi(zRight));
88962     }
88963     returnSingleInt(pParse, "wal_autocheckpoint", 
88964        db->xWalCallback==sqlite3WalDefaultHook ? 
88965            SQLITE_PTR_TO_INT(db->pWalArg) : 0);
88966   }else
88967 #endif
88968
88969 #if defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
88970   /*
88971   ** Report the current state of file logs for all databases
88972   */
88973   if( sqlite3StrICmp(zLeft, "lock_status")==0 ){
88974     static const char *const azLockName[] = {
88975       "unlocked", "shared", "reserved", "pending", "exclusive"
88976     };
88977     int i;
88978     sqlite3VdbeSetNumCols(v, 2);
88979     pParse->nMem = 2;
88980     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "database", SQLITE_STATIC);
88981     sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "status", SQLITE_STATIC);
88982     for(i=0; i<db->nDb; i++){
88983       Btree *pBt;
88984       Pager *pPager;
88985       const char *zState = "unknown";
88986       int j;
88987       if( db->aDb[i].zName==0 ) continue;
88988       sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, db->aDb[i].zName, P4_STATIC);
88989       pBt = db->aDb[i].pBt;
88990       if( pBt==0 || (pPager = sqlite3BtreePager(pBt))==0 ){
88991         zState = "closed";
88992       }else if( sqlite3_file_control(db, i ? db->aDb[i].zName : 0, 
88993                                      SQLITE_FCNTL_LOCKSTATE, &j)==SQLITE_OK ){
88994          zState = azLockName[j];
88995       }
88996       sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, zState, P4_STATIC);
88997       sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
88998     }
88999
89000   }else
89001 #endif
89002
89003 #ifdef SQLITE_HAS_CODEC
89004   if( sqlite3StrICmp(zLeft, "key")==0 && zRight ){
89005     sqlite3_key(db, zRight, sqlite3Strlen30(zRight));
89006   }else
89007   if( sqlite3StrICmp(zLeft, "rekey")==0 && zRight ){
89008     sqlite3_rekey(db, zRight, sqlite3Strlen30(zRight));
89009   }else
89010   if( zRight && (sqlite3StrICmp(zLeft, "hexkey")==0 ||
89011                  sqlite3StrICmp(zLeft, "hexrekey")==0) ){
89012     int i, h1, h2;
89013     char zKey[40];
89014     for(i=0; (h1 = zRight[i])!=0 && (h2 = zRight[i+1])!=0; i+=2){
89015       h1 += 9*(1&(h1>>6));
89016       h2 += 9*(1&(h2>>6));
89017       zKey[i/2] = (h2 & 0x0f) | ((h1 & 0xf)<<4);
89018     }
89019     if( (zLeft[3] & 0xf)==0xb ){
89020       sqlite3_key(db, zKey, i/2);
89021     }else{
89022       sqlite3_rekey(db, zKey, i/2);
89023     }
89024   }else
89025 #endif
89026 #if defined(SQLITE_HAS_CODEC) || defined(SQLITE_ENABLE_CEROD)
89027   if( sqlite3StrICmp(zLeft, "activate_extensions")==0 ){
89028 #ifdef SQLITE_HAS_CODEC
89029     if( sqlite3StrNICmp(zRight, "see-", 4)==0 ){
89030       sqlite3_activate_see(&zRight[4]);
89031     }
89032 #endif
89033 #ifdef SQLITE_ENABLE_CEROD
89034     if( sqlite3StrNICmp(zRight, "cerod-", 6)==0 ){
89035       sqlite3_activate_cerod(&zRight[6]);
89036     }
89037 #endif
89038   }else
89039 #endif
89040
89041  
89042   {/* Empty ELSE clause */}
89043
89044   /*
89045   ** Reset the safety level, in case the fullfsync flag or synchronous
89046   ** setting changed.
89047   */
89048 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
89049   if( db->autoCommit ){
89050     sqlite3BtreeSetSafetyLevel(pDb->pBt, pDb->safety_level,
89051                (db->flags&SQLITE_FullFSync)!=0,
89052                (db->flags&SQLITE_CkptFullFSync)!=0);
89053   }
89054 #endif
89055 pragma_out:
89056   sqlite3DbFree(db, zLeft);
89057   sqlite3DbFree(db, zRight);
89058 }
89059
89060 #endif /* SQLITE_OMIT_PRAGMA */
89061
89062 /************** End of pragma.c **********************************************/
89063 /************** Begin file prepare.c *****************************************/
89064 /*
89065 ** 2005 May 25
89066 **
89067 ** The author disclaims copyright to this source code.  In place of
89068 ** a legal notice, here is a blessing:
89069 **
89070 **    May you do good and not evil.
89071 **    May you find forgiveness for yourself and forgive others.
89072 **    May you share freely, never taking more than you give.
89073 **
89074 *************************************************************************
89075 ** This file contains the implementation of the sqlite3_prepare()
89076 ** interface, and routines that contribute to loading the database schema
89077 ** from disk.
89078 */
89079
89080 /*
89081 ** Fill the InitData structure with an error message that indicates
89082 ** that the database is corrupt.
89083 */
89084 static void corruptSchema(
89085   InitData *pData,     /* Initialization context */
89086   const char *zObj,    /* Object being parsed at the point of error */
89087   const char *zExtra   /* Error information */
89088 ){
89089   sqlite3 *db = pData->db;
89090   if( !db->mallocFailed && (db->flags & SQLITE_RecoveryMode)==0 ){
89091     if( zObj==0 ) zObj = "?";
89092     sqlite3SetString(pData->pzErrMsg, db,
89093       "malformed database schema (%s)", zObj);
89094     if( zExtra ){
89095       *pData->pzErrMsg = sqlite3MAppendf(db, *pData->pzErrMsg, 
89096                                  "%s - %s", *pData->pzErrMsg, zExtra);
89097     }
89098   }
89099   pData->rc = db->mallocFailed ? SQLITE_NOMEM : SQLITE_CORRUPT_BKPT;
89100 }
89101
89102 /*
89103 ** This is the callback routine for the code that initializes the
89104 ** database.  See sqlite3Init() below for additional information.
89105 ** This routine is also called from the OP_ParseSchema opcode of the VDBE.
89106 **
89107 ** Each callback contains the following information:
89108 **
89109 **     argv[0] = name of thing being created
89110 **     argv[1] = root page number for table or index. 0 for trigger or view.
89111 **     argv[2] = SQL text for the CREATE statement.
89112 **
89113 */
89114 SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){
89115   InitData *pData = (InitData*)pInit;
89116   sqlite3 *db = pData->db;
89117   int iDb = pData->iDb;
89118
89119   assert( argc==3 );
89120   UNUSED_PARAMETER2(NotUsed, argc);
89121   assert( sqlite3_mutex_held(db->mutex) );
89122   DbClearProperty(db, iDb, DB_Empty);
89123   if( db->mallocFailed ){
89124     corruptSchema(pData, argv[0], 0);
89125     return 1;
89126   }
89127
89128   assert( iDb>=0 && iDb<db->nDb );
89129   if( argv==0 ) return 0;   /* Might happen if EMPTY_RESULT_CALLBACKS are on */
89130   if( argv[1]==0 ){
89131     corruptSchema(pData, argv[0], 0);
89132   }else if( argv[2] && argv[2][0] ){
89133     /* Call the parser to process a CREATE TABLE, INDEX or VIEW.
89134     ** But because db->init.busy is set to 1, no VDBE code is generated
89135     ** or executed.  All the parser does is build the internal data
89136     ** structures that describe the table, index, or view.
89137     */
89138     int rc;
89139     sqlite3_stmt *pStmt;
89140     TESTONLY(int rcp);            /* Return code from sqlite3_prepare() */
89141
89142     assert( db->init.busy );
89143     db->init.iDb = iDb;
89144     db->init.newTnum = sqlite3Atoi(argv[1]);
89145     db->init.orphanTrigger = 0;
89146     TESTONLY(rcp = ) sqlite3_prepare(db, argv[2], -1, &pStmt, 0);
89147     rc = db->errCode;
89148     assert( (rc&0xFF)==(rcp&0xFF) );
89149     db->init.iDb = 0;
89150     if( SQLITE_OK!=rc ){
89151       if( db->init.orphanTrigger ){
89152         assert( iDb==1 );
89153       }else{
89154         pData->rc = rc;
89155         if( rc==SQLITE_NOMEM ){
89156           db->mallocFailed = 1;
89157         }else if( rc!=SQLITE_INTERRUPT && (rc&0xFF)!=SQLITE_LOCKED ){
89158           corruptSchema(pData, argv[0], sqlite3_errmsg(db));
89159         }
89160       }
89161     }
89162     sqlite3_finalize(pStmt);
89163   }else if( argv[0]==0 ){
89164     corruptSchema(pData, 0, 0);
89165   }else{
89166     /* If the SQL column is blank it means this is an index that
89167     ** was created to be the PRIMARY KEY or to fulfill a UNIQUE
89168     ** constraint for a CREATE TABLE.  The index should have already
89169     ** been created when we processed the CREATE TABLE.  All we have
89170     ** to do here is record the root page number for that index.
89171     */
89172     Index *pIndex;
89173     pIndex = sqlite3FindIndex(db, argv[0], db->aDb[iDb].zName);
89174     if( pIndex==0 ){
89175       /* This can occur if there exists an index on a TEMP table which
89176       ** has the same name as another index on a permanent index.  Since
89177       ** the permanent table is hidden by the TEMP table, we can also
89178       ** safely ignore the index on the permanent table.
89179       */
89180       /* Do Nothing */;
89181     }else if( sqlite3GetInt32(argv[1], &pIndex->tnum)==0 ){
89182       corruptSchema(pData, argv[0], "invalid rootpage");
89183     }
89184   }
89185   return 0;
89186 }
89187
89188 /*
89189 ** Attempt to read the database schema and initialize internal
89190 ** data structures for a single database file.  The index of the
89191 ** database file is given by iDb.  iDb==0 is used for the main
89192 ** database.  iDb==1 should never be used.  iDb>=2 is used for
89193 ** auxiliary databases.  Return one of the SQLITE_ error codes to
89194 ** indicate success or failure.
89195 */
89196 static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
89197   int rc;
89198   int i;
89199   int size;
89200   Table *pTab;
89201   Db *pDb;
89202   char const *azArg[4];
89203   int meta[5];
89204   InitData initData;
89205   char const *zMasterSchema;
89206   char const *zMasterName;
89207   int openedTransaction = 0;
89208
89209   /*
89210   ** The master database table has a structure like this
89211   */
89212   static const char master_schema[] = 
89213      "CREATE TABLE sqlite_master(\n"
89214      "  type text,\n"
89215      "  name text,\n"
89216      "  tbl_name text,\n"
89217      "  rootpage integer,\n"
89218      "  sql text\n"
89219      ")"
89220   ;
89221 #ifndef SQLITE_OMIT_TEMPDB
89222   static const char temp_master_schema[] = 
89223      "CREATE TEMP TABLE sqlite_temp_master(\n"
89224      "  type text,\n"
89225      "  name text,\n"
89226      "  tbl_name text,\n"
89227      "  rootpage integer,\n"
89228      "  sql text\n"
89229      ")"
89230   ;
89231 #else
89232   #define temp_master_schema 0
89233 #endif
89234
89235   assert( iDb>=0 && iDb<db->nDb );
89236   assert( db->aDb[iDb].pSchema );
89237   assert( sqlite3_mutex_held(db->mutex) );
89238   assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) );
89239
89240   /* zMasterSchema and zInitScript are set to point at the master schema
89241   ** and initialisation script appropriate for the database being
89242   ** initialised. zMasterName is the name of the master table.
89243   */
89244   if( !OMIT_TEMPDB && iDb==1 ){
89245     zMasterSchema = temp_master_schema;
89246   }else{
89247     zMasterSchema = master_schema;
89248   }
89249   zMasterName = SCHEMA_TABLE(iDb);
89250
89251   /* Construct the schema tables.  */
89252   azArg[0] = zMasterName;
89253   azArg[1] = "1";
89254   azArg[2] = zMasterSchema;
89255   azArg[3] = 0;
89256   initData.db = db;
89257   initData.iDb = iDb;
89258   initData.rc = SQLITE_OK;
89259   initData.pzErrMsg = pzErrMsg;
89260   sqlite3InitCallback(&initData, 3, (char **)azArg, 0);
89261   if( initData.rc ){
89262     rc = initData.rc;
89263     goto error_out;
89264   }
89265   pTab = sqlite3FindTable(db, zMasterName, db->aDb[iDb].zName);
89266   if( ALWAYS(pTab) ){
89267     pTab->tabFlags |= TF_Readonly;
89268   }
89269
89270   /* Create a cursor to hold the database open
89271   */
89272   pDb = &db->aDb[iDb];
89273   if( pDb->pBt==0 ){
89274     if( !OMIT_TEMPDB && ALWAYS(iDb==1) ){
89275       DbSetProperty(db, 1, DB_SchemaLoaded);
89276     }
89277     return SQLITE_OK;
89278   }
89279
89280   /* If there is not already a read-only (or read-write) transaction opened
89281   ** on the b-tree database, open one now. If a transaction is opened, it 
89282   ** will be closed before this function returns.  */
89283   sqlite3BtreeEnter(pDb->pBt);
89284   if( !sqlite3BtreeIsInReadTrans(pDb->pBt) ){
89285     rc = sqlite3BtreeBeginTrans(pDb->pBt, 0);
89286     if( rc!=SQLITE_OK ){
89287       sqlite3SetString(pzErrMsg, db, "%s", sqlite3ErrStr(rc));
89288       goto initone_error_out;
89289     }
89290     openedTransaction = 1;
89291   }
89292
89293   /* Get the database meta information.
89294   **
89295   ** Meta values are as follows:
89296   **    meta[0]   Schema cookie.  Changes with each schema change.
89297   **    meta[1]   File format of schema layer.
89298   **    meta[2]   Size of the page cache.
89299   **    meta[3]   Largest rootpage (auto/incr_vacuum mode)
89300   **    meta[4]   Db text encoding. 1:UTF-8 2:UTF-16LE 3:UTF-16BE
89301   **    meta[5]   User version
89302   **    meta[6]   Incremental vacuum mode
89303   **    meta[7]   unused
89304   **    meta[8]   unused
89305   **    meta[9]   unused
89306   **
89307   ** Note: The #defined SQLITE_UTF* symbols in sqliteInt.h correspond to
89308   ** the possible values of meta[4].
89309   */
89310   for(i=0; i<ArraySize(meta); i++){
89311     sqlite3BtreeGetMeta(pDb->pBt, i+1, (u32 *)&meta[i]);
89312   }
89313   pDb->pSchema->schema_cookie = meta[BTREE_SCHEMA_VERSION-1];
89314
89315   /* If opening a non-empty database, check the text encoding. For the
89316   ** main database, set sqlite3.enc to the encoding of the main database.
89317   ** For an attached db, it is an error if the encoding is not the same
89318   ** as sqlite3.enc.
89319   */
89320   if( meta[BTREE_TEXT_ENCODING-1] ){  /* text encoding */
89321     if( iDb==0 ){
89322       u8 encoding;
89323       /* If opening the main database, set ENC(db). */
89324       encoding = (u8)meta[BTREE_TEXT_ENCODING-1] & 3;
89325       if( encoding==0 ) encoding = SQLITE_UTF8;
89326       ENC(db) = encoding;
89327       db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
89328     }else{
89329       /* If opening an attached database, the encoding much match ENC(db) */
89330       if( meta[BTREE_TEXT_ENCODING-1]!=ENC(db) ){
89331         sqlite3SetString(pzErrMsg, db, "attached databases must use the same"
89332             " text encoding as main database");
89333         rc = SQLITE_ERROR;
89334         goto initone_error_out;
89335       }
89336     }
89337   }else{
89338     DbSetProperty(db, iDb, DB_Empty);
89339   }
89340   pDb->pSchema->enc = ENC(db);
89341
89342   if( pDb->pSchema->cache_size==0 ){
89343     size = sqlite3AbsInt32(meta[BTREE_DEFAULT_CACHE_SIZE-1]);
89344     if( size==0 ){ size = SQLITE_DEFAULT_CACHE_SIZE; }
89345     pDb->pSchema->cache_size = size;
89346     sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
89347   }
89348
89349   /*
89350   ** file_format==1    Version 3.0.0.
89351   ** file_format==2    Version 3.1.3.  // ALTER TABLE ADD COLUMN
89352   ** file_format==3    Version 3.1.4.  // ditto but with non-NULL defaults
89353   ** file_format==4    Version 3.3.0.  // DESC indices.  Boolean constants
89354   */
89355   pDb->pSchema->file_format = (u8)meta[BTREE_FILE_FORMAT-1];
89356   if( pDb->pSchema->file_format==0 ){
89357     pDb->pSchema->file_format = 1;
89358   }
89359   if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
89360     sqlite3SetString(pzErrMsg, db, "unsupported file format");
89361     rc = SQLITE_ERROR;
89362     goto initone_error_out;
89363   }
89364
89365   /* Ticket #2804:  When we open a database in the newer file format,
89366   ** clear the legacy_file_format pragma flag so that a VACUUM will
89367   ** not downgrade the database and thus invalidate any descending
89368   ** indices that the user might have created.
89369   */
89370   if( iDb==0 && meta[BTREE_FILE_FORMAT-1]>=4 ){
89371     db->flags &= ~SQLITE_LegacyFileFmt;
89372   }
89373
89374   /* Read the schema information out of the schema tables
89375   */
89376   assert( db->init.busy );
89377   {
89378     char *zSql;
89379     zSql = sqlite3MPrintf(db, 
89380         "SELECT name, rootpage, sql FROM '%q'.%s ORDER BY rowid",
89381         db->aDb[iDb].zName, zMasterName);
89382 #ifndef SQLITE_OMIT_AUTHORIZATION
89383     {
89384       int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
89385       xAuth = db->xAuth;
89386       db->xAuth = 0;
89387 #endif
89388       rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0);
89389 #ifndef SQLITE_OMIT_AUTHORIZATION
89390       db->xAuth = xAuth;
89391     }
89392 #endif
89393     if( rc==SQLITE_OK ) rc = initData.rc;
89394     sqlite3DbFree(db, zSql);
89395 #ifndef SQLITE_OMIT_ANALYZE
89396     if( rc==SQLITE_OK ){
89397       sqlite3AnalysisLoad(db, iDb);
89398     }
89399 #endif
89400   }
89401   if( db->mallocFailed ){
89402     rc = SQLITE_NOMEM;
89403     sqlite3ResetInternalSchema(db, -1);
89404   }
89405   if( rc==SQLITE_OK || (db->flags&SQLITE_RecoveryMode)){
89406     /* Black magic: If the SQLITE_RecoveryMode flag is set, then consider
89407     ** the schema loaded, even if errors occurred. In this situation the 
89408     ** current sqlite3_prepare() operation will fail, but the following one
89409     ** will attempt to compile the supplied statement against whatever subset
89410     ** of the schema was loaded before the error occurred. The primary
89411     ** purpose of this is to allow access to the sqlite_master table
89412     ** even when its contents have been corrupted.
89413     */
89414     DbSetProperty(db, iDb, DB_SchemaLoaded);
89415     rc = SQLITE_OK;
89416   }
89417
89418   /* Jump here for an error that occurs after successfully allocating
89419   ** curMain and calling sqlite3BtreeEnter(). For an error that occurs
89420   ** before that point, jump to error_out.
89421   */
89422 initone_error_out:
89423   if( openedTransaction ){
89424     sqlite3BtreeCommit(pDb->pBt);
89425   }
89426   sqlite3BtreeLeave(pDb->pBt);
89427
89428 error_out:
89429   if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
89430     db->mallocFailed = 1;
89431   }
89432   return rc;
89433 }
89434
89435 /*
89436 ** Initialize all database files - the main database file, the file
89437 ** used to store temporary tables, and any additional database files
89438 ** created using ATTACH statements.  Return a success code.  If an
89439 ** error occurs, write an error message into *pzErrMsg.
89440 **
89441 ** After a database is initialized, the DB_SchemaLoaded bit is set
89442 ** bit is set in the flags field of the Db structure. If the database
89443 ** file was of zero-length, then the DB_Empty flag is also set.
89444 */
89445 SQLITE_PRIVATE int sqlite3Init(sqlite3 *db, char **pzErrMsg){
89446   int i, rc;
89447   int commit_internal = !(db->flags&SQLITE_InternChanges);
89448   
89449   assert( sqlite3_mutex_held(db->mutex) );
89450   rc = SQLITE_OK;
89451   db->init.busy = 1;
89452   for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
89453     if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue;
89454     rc = sqlite3InitOne(db, i, pzErrMsg);
89455     if( rc ){
89456       sqlite3ResetInternalSchema(db, i);
89457     }
89458   }
89459
89460   /* Once all the other databases have been initialised, load the schema
89461   ** for the TEMP database. This is loaded last, as the TEMP database
89462   ** schema may contain references to objects in other databases.
89463   */
89464 #ifndef SQLITE_OMIT_TEMPDB
89465   if( rc==SQLITE_OK && ALWAYS(db->nDb>1)
89466                     && !DbHasProperty(db, 1, DB_SchemaLoaded) ){
89467     rc = sqlite3InitOne(db, 1, pzErrMsg);
89468     if( rc ){
89469       sqlite3ResetInternalSchema(db, 1);
89470     }
89471   }
89472 #endif
89473
89474   db->init.busy = 0;
89475   if( rc==SQLITE_OK && commit_internal ){
89476     sqlite3CommitInternalChanges(db);
89477   }
89478
89479   return rc; 
89480 }
89481
89482 /*
89483 ** This routine is a no-op if the database schema is already initialised.
89484 ** Otherwise, the schema is loaded. An error code is returned.
89485 */
89486 SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse){
89487   int rc = SQLITE_OK;
89488   sqlite3 *db = pParse->db;
89489   assert( sqlite3_mutex_held(db->mutex) );
89490   if( !db->init.busy ){
89491     rc = sqlite3Init(db, &pParse->zErrMsg);
89492   }
89493   if( rc!=SQLITE_OK ){
89494     pParse->rc = rc;
89495     pParse->nErr++;
89496   }
89497   return rc;
89498 }
89499
89500
89501 /*
89502 ** Check schema cookies in all databases.  If any cookie is out
89503 ** of date set pParse->rc to SQLITE_SCHEMA.  If all schema cookies
89504 ** make no changes to pParse->rc.
89505 */
89506 static void schemaIsValid(Parse *pParse){
89507   sqlite3 *db = pParse->db;
89508   int iDb;
89509   int rc;
89510   int cookie;
89511
89512   assert( pParse->checkSchema );
89513   assert( sqlite3_mutex_held(db->mutex) );
89514   for(iDb=0; iDb<db->nDb; iDb++){
89515     int openedTransaction = 0;         /* True if a transaction is opened */
89516     Btree *pBt = db->aDb[iDb].pBt;     /* Btree database to read cookie from */
89517     if( pBt==0 ) continue;
89518
89519     /* If there is not already a read-only (or read-write) transaction opened
89520     ** on the b-tree database, open one now. If a transaction is opened, it 
89521     ** will be closed immediately after reading the meta-value. */
89522     if( !sqlite3BtreeIsInReadTrans(pBt) ){
89523       rc = sqlite3BtreeBeginTrans(pBt, 0);
89524       if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
89525         db->mallocFailed = 1;
89526       }
89527       if( rc!=SQLITE_OK ) return;
89528       openedTransaction = 1;
89529     }
89530
89531     /* Read the schema cookie from the database. If it does not match the 
89532     ** value stored as part of the in-memory schema representation,
89533     ** set Parse.rc to SQLITE_SCHEMA. */
89534     sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie);
89535     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
89536     if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){
89537       sqlite3ResetInternalSchema(db, iDb);
89538       pParse->rc = SQLITE_SCHEMA;
89539     }
89540
89541     /* Close the transaction, if one was opened. */
89542     if( openedTransaction ){
89543       sqlite3BtreeCommit(pBt);
89544     }
89545   }
89546 }
89547
89548 /*
89549 ** Convert a schema pointer into the iDb index that indicates
89550 ** which database file in db->aDb[] the schema refers to.
89551 **
89552 ** If the same database is attached more than once, the first
89553 ** attached database is returned.
89554 */
89555 SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){
89556   int i = -1000000;
89557
89558   /* If pSchema is NULL, then return -1000000. This happens when code in 
89559   ** expr.c is trying to resolve a reference to a transient table (i.e. one
89560   ** created by a sub-select). In this case the return value of this 
89561   ** function should never be used.
89562   **
89563   ** We return -1000000 instead of the more usual -1 simply because using
89564   ** -1000000 as the incorrect index into db->aDb[] is much 
89565   ** more likely to cause a segfault than -1 (of course there are assert()
89566   ** statements too, but it never hurts to play the odds).
89567   */
89568   assert( sqlite3_mutex_held(db->mutex) );
89569   if( pSchema ){
89570     for(i=0; ALWAYS(i<db->nDb); i++){
89571       if( db->aDb[i].pSchema==pSchema ){
89572         break;
89573       }
89574     }
89575     assert( i>=0 && i<db->nDb );
89576   }
89577   return i;
89578 }
89579
89580 /*
89581 ** Compile the UTF-8 encoded SQL statement zSql into a statement handle.
89582 */
89583 static int sqlite3Prepare(
89584   sqlite3 *db,              /* Database handle. */
89585   const char *zSql,         /* UTF-8 encoded SQL statement. */
89586   int nBytes,               /* Length of zSql in bytes. */
89587   int saveSqlFlag,          /* True to copy SQL text into the sqlite3_stmt */
89588   Vdbe *pReprepare,         /* VM being reprepared */
89589   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
89590   const char **pzTail       /* OUT: End of parsed string */
89591 ){
89592   Parse *pParse;            /* Parsing context */
89593   char *zErrMsg = 0;        /* Error message */
89594   int rc = SQLITE_OK;       /* Result code */
89595   int i;                    /* Loop counter */
89596
89597   /* Allocate the parsing context */
89598   pParse = sqlite3StackAllocZero(db, sizeof(*pParse));
89599   if( pParse==0 ){
89600     rc = SQLITE_NOMEM;
89601     goto end_prepare;
89602   }
89603   pParse->pReprepare = pReprepare;
89604   assert( ppStmt && *ppStmt==0 );
89605   assert( !db->mallocFailed );
89606   assert( sqlite3_mutex_held(db->mutex) );
89607
89608   /* Check to verify that it is possible to get a read lock on all
89609   ** database schemas.  The inability to get a read lock indicates that
89610   ** some other database connection is holding a write-lock, which in
89611   ** turn means that the other connection has made uncommitted changes
89612   ** to the schema.
89613   **
89614   ** Were we to proceed and prepare the statement against the uncommitted
89615   ** schema changes and if those schema changes are subsequently rolled
89616   ** back and different changes are made in their place, then when this
89617   ** prepared statement goes to run the schema cookie would fail to detect
89618   ** the schema change.  Disaster would follow.
89619   **
89620   ** This thread is currently holding mutexes on all Btrees (because
89621   ** of the sqlite3BtreeEnterAll() in sqlite3LockAndPrepare()) so it
89622   ** is not possible for another thread to start a new schema change
89623   ** while this routine is running.  Hence, we do not need to hold 
89624   ** locks on the schema, we just need to make sure nobody else is 
89625   ** holding them.
89626   **
89627   ** Note that setting READ_UNCOMMITTED overrides most lock detection,
89628   ** but it does *not* override schema lock detection, so this all still
89629   ** works even if READ_UNCOMMITTED is set.
89630   */
89631   for(i=0; i<db->nDb; i++) {
89632     Btree *pBt = db->aDb[i].pBt;
89633     if( pBt ){
89634       assert( sqlite3BtreeHoldsMutex(pBt) );
89635       rc = sqlite3BtreeSchemaLocked(pBt);
89636       if( rc ){
89637         const char *zDb = db->aDb[i].zName;
89638         sqlite3Error(db, rc, "database schema is locked: %s", zDb);
89639         testcase( db->flags & SQLITE_ReadUncommitted );
89640         goto end_prepare;
89641       }
89642     }
89643   }
89644
89645   sqlite3VtabUnlockList(db);
89646
89647   pParse->db = db;
89648   pParse->nQueryLoop = (double)1;
89649   if( nBytes>=0 && (nBytes==0 || zSql[nBytes-1]!=0) ){
89650     char *zSqlCopy;
89651     int mxLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];
89652     testcase( nBytes==mxLen );
89653     testcase( nBytes==mxLen+1 );
89654     if( nBytes>mxLen ){
89655       sqlite3Error(db, SQLITE_TOOBIG, "statement too long");
89656       rc = sqlite3ApiExit(db, SQLITE_TOOBIG);
89657       goto end_prepare;
89658     }
89659     zSqlCopy = sqlite3DbStrNDup(db, zSql, nBytes);
89660     if( zSqlCopy ){
89661       sqlite3RunParser(pParse, zSqlCopy, &zErrMsg);
89662       sqlite3DbFree(db, zSqlCopy);
89663       pParse->zTail = &zSql[pParse->zTail-zSqlCopy];
89664     }else{
89665       pParse->zTail = &zSql[nBytes];
89666     }
89667   }else{
89668     sqlite3RunParser(pParse, zSql, &zErrMsg);
89669   }
89670   assert( 1==(int)pParse->nQueryLoop );
89671
89672   if( db->mallocFailed ){
89673     pParse->rc = SQLITE_NOMEM;
89674   }
89675   if( pParse->rc==SQLITE_DONE ) pParse->rc = SQLITE_OK;
89676   if( pParse->checkSchema ){
89677     schemaIsValid(pParse);
89678   }
89679   if( db->mallocFailed ){
89680     pParse->rc = SQLITE_NOMEM;
89681   }
89682   if( pzTail ){
89683     *pzTail = pParse->zTail;
89684   }
89685   rc = pParse->rc;
89686
89687 #ifndef SQLITE_OMIT_EXPLAIN
89688   if( rc==SQLITE_OK && pParse->pVdbe && pParse->explain ){
89689     static const char * const azColName[] = {
89690        "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment",
89691        "selectid", "order", "from", "detail"
89692     };
89693     int iFirst, mx;
89694     if( pParse->explain==2 ){
89695       sqlite3VdbeSetNumCols(pParse->pVdbe, 4);
89696       iFirst = 8;
89697       mx = 12;
89698     }else{
89699       sqlite3VdbeSetNumCols(pParse->pVdbe, 8);
89700       iFirst = 0;
89701       mx = 8;
89702     }
89703     for(i=iFirst; i<mx; i++){
89704       sqlite3VdbeSetColName(pParse->pVdbe, i-iFirst, COLNAME_NAME,
89705                             azColName[i], SQLITE_STATIC);
89706     }
89707   }
89708 #endif
89709
89710   assert( db->init.busy==0 || saveSqlFlag==0 );
89711   if( db->init.busy==0 ){
89712     Vdbe *pVdbe = pParse->pVdbe;
89713     sqlite3VdbeSetSql(pVdbe, zSql, (int)(pParse->zTail-zSql), saveSqlFlag);
89714   }
89715   if( pParse->pVdbe && (rc!=SQLITE_OK || db->mallocFailed) ){
89716     sqlite3VdbeFinalize(pParse->pVdbe);
89717     assert(!(*ppStmt));
89718   }else{
89719     *ppStmt = (sqlite3_stmt*)pParse->pVdbe;
89720   }
89721
89722   if( zErrMsg ){
89723     sqlite3Error(db, rc, "%s", zErrMsg);
89724     sqlite3DbFree(db, zErrMsg);
89725   }else{
89726     sqlite3Error(db, rc, 0);
89727   }
89728
89729   /* Delete any TriggerPrg structures allocated while parsing this statement. */
89730   while( pParse->pTriggerPrg ){
89731     TriggerPrg *pT = pParse->pTriggerPrg;
89732     pParse->pTriggerPrg = pT->pNext;
89733     sqlite3DbFree(db, pT);
89734   }
89735
89736 end_prepare:
89737
89738   sqlite3StackFree(db, pParse);
89739   rc = sqlite3ApiExit(db, rc);
89740   assert( (rc&db->errMask)==rc );
89741   return rc;
89742 }
89743 static int sqlite3LockAndPrepare(
89744   sqlite3 *db,              /* Database handle. */
89745   const char *zSql,         /* UTF-8 encoded SQL statement. */
89746   int nBytes,               /* Length of zSql in bytes. */
89747   int saveSqlFlag,          /* True to copy SQL text into the sqlite3_stmt */
89748   Vdbe *pOld,               /* VM being reprepared */
89749   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
89750   const char **pzTail       /* OUT: End of parsed string */
89751 ){
89752   int rc;
89753   assert( ppStmt!=0 );
89754   *ppStmt = 0;
89755   if( !sqlite3SafetyCheckOk(db) ){
89756     return SQLITE_MISUSE_BKPT;
89757   }
89758   sqlite3_mutex_enter(db->mutex);
89759   sqlite3BtreeEnterAll(db);
89760   rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
89761   if( rc==SQLITE_SCHEMA ){
89762     sqlite3_finalize(*ppStmt);
89763     rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
89764   }
89765   sqlite3BtreeLeaveAll(db);
89766   sqlite3_mutex_leave(db->mutex);
89767   return rc;
89768 }
89769
89770 /*
89771 ** Rerun the compilation of a statement after a schema change.
89772 **
89773 ** If the statement is successfully recompiled, return SQLITE_OK. Otherwise,
89774 ** if the statement cannot be recompiled because another connection has
89775 ** locked the sqlite3_master table, return SQLITE_LOCKED. If any other error
89776 ** occurs, return SQLITE_SCHEMA.
89777 */
89778 SQLITE_PRIVATE int sqlite3Reprepare(Vdbe *p){
89779   int rc;
89780   sqlite3_stmt *pNew;
89781   const char *zSql;
89782   sqlite3 *db;
89783
89784   assert( sqlite3_mutex_held(sqlite3VdbeDb(p)->mutex) );
89785   zSql = sqlite3_sql((sqlite3_stmt *)p);
89786   assert( zSql!=0 );  /* Reprepare only called for prepare_v2() statements */
89787   db = sqlite3VdbeDb(p);
89788   assert( sqlite3_mutex_held(db->mutex) );
89789   rc = sqlite3LockAndPrepare(db, zSql, -1, 0, p, &pNew, 0);
89790   if( rc ){
89791     if( rc==SQLITE_NOMEM ){
89792       db->mallocFailed = 1;
89793     }
89794     assert( pNew==0 );
89795     return rc;
89796   }else{
89797     assert( pNew!=0 );
89798   }
89799   sqlite3VdbeSwap((Vdbe*)pNew, p);
89800   sqlite3TransferBindings(pNew, (sqlite3_stmt*)p);
89801   sqlite3VdbeResetStepResult((Vdbe*)pNew);
89802   sqlite3VdbeFinalize((Vdbe*)pNew);
89803   return SQLITE_OK;
89804 }
89805
89806
89807 /*
89808 ** Two versions of the official API.  Legacy and new use.  In the legacy
89809 ** version, the original SQL text is not saved in the prepared statement
89810 ** and so if a schema change occurs, SQLITE_SCHEMA is returned by
89811 ** sqlite3_step().  In the new version, the original SQL text is retained
89812 ** and the statement is automatically recompiled if an schema change
89813 ** occurs.
89814 */
89815 SQLITE_API int sqlite3_prepare(
89816   sqlite3 *db,              /* Database handle. */
89817   const char *zSql,         /* UTF-8 encoded SQL statement. */
89818   int nBytes,               /* Length of zSql in bytes. */
89819   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
89820   const char **pzTail       /* OUT: End of parsed string */
89821 ){
89822   int rc;
89823   rc = sqlite3LockAndPrepare(db,zSql,nBytes,0,0,ppStmt,pzTail);
89824   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
89825   return rc;
89826 }
89827 SQLITE_API int sqlite3_prepare_v2(
89828   sqlite3 *db,              /* Database handle. */
89829   const char *zSql,         /* UTF-8 encoded SQL statement. */
89830   int nBytes,               /* Length of zSql in bytes. */
89831   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
89832   const char **pzTail       /* OUT: End of parsed string */
89833 ){
89834   int rc;
89835   rc = sqlite3LockAndPrepare(db,zSql,nBytes,1,0,ppStmt,pzTail);
89836   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
89837   return rc;
89838 }
89839
89840
89841 #ifndef SQLITE_OMIT_UTF16
89842 /*
89843 ** Compile the UTF-16 encoded SQL statement zSql into a statement handle.
89844 */
89845 static int sqlite3Prepare16(
89846   sqlite3 *db,              /* Database handle. */ 
89847   const void *zSql,         /* UTF-16 encoded SQL statement. */
89848   int nBytes,               /* Length of zSql in bytes. */
89849   int saveSqlFlag,          /* True to save SQL text into the sqlite3_stmt */
89850   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
89851   const void **pzTail       /* OUT: End of parsed string */
89852 ){
89853   /* This function currently works by first transforming the UTF-16
89854   ** encoded string to UTF-8, then invoking sqlite3_prepare(). The
89855   ** tricky bit is figuring out the pointer to return in *pzTail.
89856   */
89857   char *zSql8;
89858   const char *zTail8 = 0;
89859   int rc = SQLITE_OK;
89860
89861   assert( ppStmt );
89862   *ppStmt = 0;
89863   if( !sqlite3SafetyCheckOk(db) ){
89864     return SQLITE_MISUSE_BKPT;
89865   }
89866   sqlite3_mutex_enter(db->mutex);
89867   zSql8 = sqlite3Utf16to8(db, zSql, nBytes, SQLITE_UTF16NATIVE);
89868   if( zSql8 ){
89869     rc = sqlite3LockAndPrepare(db, zSql8, -1, saveSqlFlag, 0, ppStmt, &zTail8);
89870   }
89871
89872   if( zTail8 && pzTail ){
89873     /* If sqlite3_prepare returns a tail pointer, we calculate the
89874     ** equivalent pointer into the UTF-16 string by counting the unicode
89875     ** characters between zSql8 and zTail8, and then returning a pointer
89876     ** the same number of characters into the UTF-16 string.
89877     */
89878     int chars_parsed = sqlite3Utf8CharLen(zSql8, (int)(zTail8-zSql8));
89879     *pzTail = (u8 *)zSql + sqlite3Utf16ByteLen(zSql, chars_parsed);
89880   }
89881   sqlite3DbFree(db, zSql8); 
89882   rc = sqlite3ApiExit(db, rc);
89883   sqlite3_mutex_leave(db->mutex);
89884   return rc;
89885 }
89886
89887 /*
89888 ** Two versions of the official API.  Legacy and new use.  In the legacy
89889 ** version, the original SQL text is not saved in the prepared statement
89890 ** and so if a schema change occurs, SQLITE_SCHEMA is returned by
89891 ** sqlite3_step().  In the new version, the original SQL text is retained
89892 ** and the statement is automatically recompiled if an schema change
89893 ** occurs.
89894 */
89895 SQLITE_API int sqlite3_prepare16(
89896   sqlite3 *db,              /* Database handle. */ 
89897   const void *zSql,         /* UTF-16 encoded SQL statement. */
89898   int nBytes,               /* Length of zSql in bytes. */
89899   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
89900   const void **pzTail       /* OUT: End of parsed string */
89901 ){
89902   int rc;
89903   rc = sqlite3Prepare16(db,zSql,nBytes,0,ppStmt,pzTail);
89904   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
89905   return rc;
89906 }
89907 SQLITE_API int sqlite3_prepare16_v2(
89908   sqlite3 *db,              /* Database handle. */ 
89909   const void *zSql,         /* UTF-16 encoded SQL statement. */
89910   int nBytes,               /* Length of zSql in bytes. */
89911   sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */
89912   const void **pzTail       /* OUT: End of parsed string */
89913 ){
89914   int rc;
89915   rc = sqlite3Prepare16(db,zSql,nBytes,1,ppStmt,pzTail);
89916   assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 );  /* VERIFY: F13021 */
89917   return rc;
89918 }
89919
89920 #endif /* SQLITE_OMIT_UTF16 */
89921
89922 /************** End of prepare.c *********************************************/
89923 /************** Begin file select.c ******************************************/
89924 /*
89925 ** 2001 September 15
89926 **
89927 ** The author disclaims copyright to this source code.  In place of
89928 ** a legal notice, here is a blessing:
89929 **
89930 **    May you do good and not evil.
89931 **    May you find forgiveness for yourself and forgive others.
89932 **    May you share freely, never taking more than you give.
89933 **
89934 *************************************************************************
89935 ** This file contains C code routines that are called by the parser
89936 ** to handle SELECT statements in SQLite.
89937 */
89938
89939
89940 /*
89941 ** Delete all the content of a Select structure but do not deallocate
89942 ** the select structure itself.
89943 */
89944 static void clearSelect(sqlite3 *db, Select *p){
89945   sqlite3ExprListDelete(db, p->pEList);
89946   sqlite3SrcListDelete(db, p->pSrc);
89947   sqlite3ExprDelete(db, p->pWhere);
89948   sqlite3ExprListDelete(db, p->pGroupBy);
89949   sqlite3ExprDelete(db, p->pHaving);
89950   sqlite3ExprListDelete(db, p->pOrderBy);
89951   sqlite3SelectDelete(db, p->pPrior);
89952   sqlite3ExprDelete(db, p->pLimit);
89953   sqlite3ExprDelete(db, p->pOffset);
89954 }
89955
89956 /*
89957 ** Initialize a SelectDest structure.
89958 */
89959 SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest *pDest, int eDest, int iParm){
89960   pDest->eDest = (u8)eDest;
89961   pDest->iParm = iParm;
89962   pDest->affinity = 0;
89963   pDest->iMem = 0;
89964   pDest->nMem = 0;
89965 }
89966
89967
89968 /*
89969 ** Allocate a new Select structure and return a pointer to that
89970 ** structure.
89971 */
89972 SQLITE_PRIVATE Select *sqlite3SelectNew(
89973   Parse *pParse,        /* Parsing context */
89974   ExprList *pEList,     /* which columns to include in the result */
89975   SrcList *pSrc,        /* the FROM clause -- which tables to scan */
89976   Expr *pWhere,         /* the WHERE clause */
89977   ExprList *pGroupBy,   /* the GROUP BY clause */
89978   Expr *pHaving,        /* the HAVING clause */
89979   ExprList *pOrderBy,   /* the ORDER BY clause */
89980   int isDistinct,       /* true if the DISTINCT keyword is present */
89981   Expr *pLimit,         /* LIMIT value.  NULL means not used */
89982   Expr *pOffset         /* OFFSET value.  NULL means no offset */
89983 ){
89984   Select *pNew;
89985   Select standin;
89986   sqlite3 *db = pParse->db;
89987   pNew = sqlite3DbMallocZero(db, sizeof(*pNew) );
89988   assert( db->mallocFailed || !pOffset || pLimit ); /* OFFSET implies LIMIT */
89989   if( pNew==0 ){
89990     pNew = &standin;
89991     memset(pNew, 0, sizeof(*pNew));
89992   }
89993   if( pEList==0 ){
89994     pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db,TK_ALL,0));
89995   }
89996   pNew->pEList = pEList;
89997   pNew->pSrc = pSrc;
89998   pNew->pWhere = pWhere;
89999   pNew->pGroupBy = pGroupBy;
90000   pNew->pHaving = pHaving;
90001   pNew->pOrderBy = pOrderBy;
90002   pNew->selFlags = isDistinct ? SF_Distinct : 0;
90003   pNew->op = TK_SELECT;
90004   pNew->pLimit = pLimit;
90005   pNew->pOffset = pOffset;
90006   assert( pOffset==0 || pLimit!=0 );
90007   pNew->addrOpenEphm[0] = -1;
90008   pNew->addrOpenEphm[1] = -1;
90009   pNew->addrOpenEphm[2] = -1;
90010   if( db->mallocFailed ) {
90011     clearSelect(db, pNew);
90012     if( pNew!=&standin ) sqlite3DbFree(db, pNew);
90013     pNew = 0;
90014   }
90015   return pNew;
90016 }
90017
90018 /*
90019 ** Delete the given Select structure and all of its substructures.
90020 */
90021 SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3 *db, Select *p){
90022   if( p ){
90023     clearSelect(db, p);
90024     sqlite3DbFree(db, p);
90025   }
90026 }
90027
90028 /*
90029 ** Given 1 to 3 identifiers preceeding the JOIN keyword, determine the
90030 ** type of join.  Return an integer constant that expresses that type
90031 ** in terms of the following bit values:
90032 **
90033 **     JT_INNER
90034 **     JT_CROSS
90035 **     JT_OUTER
90036 **     JT_NATURAL
90037 **     JT_LEFT
90038 **     JT_RIGHT
90039 **
90040 ** A full outer join is the combination of JT_LEFT and JT_RIGHT.
90041 **
90042 ** If an illegal or unsupported join type is seen, then still return
90043 ** a join type, but put an error in the pParse structure.
90044 */
90045 SQLITE_PRIVATE int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){
90046   int jointype = 0;
90047   Token *apAll[3];
90048   Token *p;
90049                              /*   0123456789 123456789 123456789 123 */
90050   static const char zKeyText[] = "naturaleftouterightfullinnercross";
90051   static const struct {
90052     u8 i;        /* Beginning of keyword text in zKeyText[] */
90053     u8 nChar;    /* Length of the keyword in characters */
90054     u8 code;     /* Join type mask */
90055   } aKeyword[] = {
90056     /* natural */ { 0,  7, JT_NATURAL                },
90057     /* left    */ { 6,  4, JT_LEFT|JT_OUTER          },
90058     /* outer   */ { 10, 5, JT_OUTER                  },
90059     /* right   */ { 14, 5, JT_RIGHT|JT_OUTER         },
90060     /* full    */ { 19, 4, JT_LEFT|JT_RIGHT|JT_OUTER },
90061     /* inner   */ { 23, 5, JT_INNER                  },
90062     /* cross   */ { 28, 5, JT_INNER|JT_CROSS         },
90063   };
90064   int i, j;
90065   apAll[0] = pA;
90066   apAll[1] = pB;
90067   apAll[2] = pC;
90068   for(i=0; i<3 && apAll[i]; i++){
90069     p = apAll[i];
90070     for(j=0; j<ArraySize(aKeyword); j++){
90071       if( p->n==aKeyword[j].nChar 
90072           && sqlite3StrNICmp((char*)p->z, &zKeyText[aKeyword[j].i], p->n)==0 ){
90073         jointype |= aKeyword[j].code;
90074         break;
90075       }
90076     }
90077     testcase( j==0 || j==1 || j==2 || j==3 || j==4 || j==5 || j==6 );
90078     if( j>=ArraySize(aKeyword) ){
90079       jointype |= JT_ERROR;
90080       break;
90081     }
90082   }
90083   if(
90084      (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) ||
90085      (jointype & JT_ERROR)!=0
90086   ){
90087     const char *zSp = " ";
90088     assert( pB!=0 );
90089     if( pC==0 ){ zSp++; }
90090     sqlite3ErrorMsg(pParse, "unknown or unsupported join type: "
90091        "%T %T%s%T", pA, pB, zSp, pC);
90092     jointype = JT_INNER;
90093   }else if( (jointype & JT_OUTER)!=0 
90094          && (jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ){
90095     sqlite3ErrorMsg(pParse, 
90096       "RIGHT and FULL OUTER JOINs are not currently supported");
90097     jointype = JT_INNER;
90098   }
90099   return jointype;
90100 }
90101
90102 /*
90103 ** Return the index of a column in a table.  Return -1 if the column
90104 ** is not contained in the table.
90105 */
90106 static int columnIndex(Table *pTab, const char *zCol){
90107   int i;
90108   for(i=0; i<pTab->nCol; i++){
90109     if( sqlite3StrICmp(pTab->aCol[i].zName, zCol)==0 ) return i;
90110   }
90111   return -1;
90112 }
90113
90114 /*
90115 ** Search the first N tables in pSrc, from left to right, looking for a
90116 ** table that has a column named zCol.  
90117 **
90118 ** When found, set *piTab and *piCol to the table index and column index
90119 ** of the matching column and return TRUE.
90120 **
90121 ** If not found, return FALSE.
90122 */
90123 static int tableAndColumnIndex(
90124   SrcList *pSrc,       /* Array of tables to search */
90125   int N,               /* Number of tables in pSrc->a[] to search */
90126   const char *zCol,    /* Name of the column we are looking for */
90127   int *piTab,          /* Write index of pSrc->a[] here */
90128   int *piCol           /* Write index of pSrc->a[*piTab].pTab->aCol[] here */
90129 ){
90130   int i;               /* For looping over tables in pSrc */
90131   int iCol;            /* Index of column matching zCol */
90132
90133   assert( (piTab==0)==(piCol==0) );  /* Both or neither are NULL */
90134   for(i=0; i<N; i++){
90135     iCol = columnIndex(pSrc->a[i].pTab, zCol);
90136     if( iCol>=0 ){
90137       if( piTab ){
90138         *piTab = i;
90139         *piCol = iCol;
90140       }
90141       return 1;
90142     }
90143   }
90144   return 0;
90145 }
90146
90147 /*
90148 ** This function is used to add terms implied by JOIN syntax to the
90149 ** WHERE clause expression of a SELECT statement. The new term, which
90150 ** is ANDed with the existing WHERE clause, is of the form:
90151 **
90152 **    (tab1.col1 = tab2.col2)
90153 **
90154 ** where tab1 is the iSrc'th table in SrcList pSrc and tab2 is the 
90155 ** (iSrc+1)'th. Column col1 is column iColLeft of tab1, and col2 is
90156 ** column iColRight of tab2.
90157 */
90158 static void addWhereTerm(
90159   Parse *pParse,                  /* Parsing context */
90160   SrcList *pSrc,                  /* List of tables in FROM clause */
90161   int iLeft,                      /* Index of first table to join in pSrc */
90162   int iColLeft,                   /* Index of column in first table */
90163   int iRight,                     /* Index of second table in pSrc */
90164   int iColRight,                  /* Index of column in second table */
90165   int isOuterJoin,                /* True if this is an OUTER join */
90166   Expr **ppWhere                  /* IN/OUT: The WHERE clause to add to */
90167 ){
90168   sqlite3 *db = pParse->db;
90169   Expr *pE1;
90170   Expr *pE2;
90171   Expr *pEq;
90172
90173   assert( iLeft<iRight );
90174   assert( pSrc->nSrc>iRight );
90175   assert( pSrc->a[iLeft].pTab );
90176   assert( pSrc->a[iRight].pTab );
90177
90178   pE1 = sqlite3CreateColumnExpr(db, pSrc, iLeft, iColLeft);
90179   pE2 = sqlite3CreateColumnExpr(db, pSrc, iRight, iColRight);
90180
90181   pEq = sqlite3PExpr(pParse, TK_EQ, pE1, pE2, 0);
90182   if( pEq && isOuterJoin ){
90183     ExprSetProperty(pEq, EP_FromJoin);
90184     assert( !ExprHasAnyProperty(pEq, EP_TokenOnly|EP_Reduced) );
90185     ExprSetIrreducible(pEq);
90186     pEq->iRightJoinTable = (i16)pE2->iTable;
90187   }
90188   *ppWhere = sqlite3ExprAnd(db, *ppWhere, pEq);
90189 }
90190
90191 /*
90192 ** Set the EP_FromJoin property on all terms of the given expression.
90193 ** And set the Expr.iRightJoinTable to iTable for every term in the
90194 ** expression.
90195 **
90196 ** The EP_FromJoin property is used on terms of an expression to tell
90197 ** the LEFT OUTER JOIN processing logic that this term is part of the
90198 ** join restriction specified in the ON or USING clause and not a part
90199 ** of the more general WHERE clause.  These terms are moved over to the
90200 ** WHERE clause during join processing but we need to remember that they
90201 ** originated in the ON or USING clause.
90202 **
90203 ** The Expr.iRightJoinTable tells the WHERE clause processing that the
90204 ** expression depends on table iRightJoinTable even if that table is not
90205 ** explicitly mentioned in the expression.  That information is needed
90206 ** for cases like this:
90207 **
90208 **    SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5
90209 **
90210 ** The where clause needs to defer the handling of the t1.x=5
90211 ** term until after the t2 loop of the join.  In that way, a
90212 ** NULL t2 row will be inserted whenever t1.x!=5.  If we do not
90213 ** defer the handling of t1.x=5, it will be processed immediately
90214 ** after the t1 loop and rows with t1.x!=5 will never appear in
90215 ** the output, which is incorrect.
90216 */
90217 static void setJoinExpr(Expr *p, int iTable){
90218   while( p ){
90219     ExprSetProperty(p, EP_FromJoin);
90220     assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) );
90221     ExprSetIrreducible(p);
90222     p->iRightJoinTable = (i16)iTable;
90223     setJoinExpr(p->pLeft, iTable);
90224     p = p->pRight;
90225   } 
90226 }
90227
90228 /*
90229 ** This routine processes the join information for a SELECT statement.
90230 ** ON and USING clauses are converted into extra terms of the WHERE clause.
90231 ** NATURAL joins also create extra WHERE clause terms.
90232 **
90233 ** The terms of a FROM clause are contained in the Select.pSrc structure.
90234 ** The left most table is the first entry in Select.pSrc.  The right-most
90235 ** table is the last entry.  The join operator is held in the entry to
90236 ** the left.  Thus entry 0 contains the join operator for the join between
90237 ** entries 0 and 1.  Any ON or USING clauses associated with the join are
90238 ** also attached to the left entry.
90239 **
90240 ** This routine returns the number of errors encountered.
90241 */
90242 static int sqliteProcessJoin(Parse *pParse, Select *p){
90243   SrcList *pSrc;                  /* All tables in the FROM clause */
90244   int i, j;                       /* Loop counters */
90245   struct SrcList_item *pLeft;     /* Left table being joined */
90246   struct SrcList_item *pRight;    /* Right table being joined */
90247
90248   pSrc = p->pSrc;
90249   pLeft = &pSrc->a[0];
90250   pRight = &pLeft[1];
90251   for(i=0; i<pSrc->nSrc-1; i++, pRight++, pLeft++){
90252     Table *pLeftTab = pLeft->pTab;
90253     Table *pRightTab = pRight->pTab;
90254     int isOuter;
90255
90256     if( NEVER(pLeftTab==0 || pRightTab==0) ) continue;
90257     isOuter = (pRight->jointype & JT_OUTER)!=0;
90258
90259     /* When the NATURAL keyword is present, add WHERE clause terms for
90260     ** every column that the two tables have in common.
90261     */
90262     if( pRight->jointype & JT_NATURAL ){
90263       if( pRight->pOn || pRight->pUsing ){
90264         sqlite3ErrorMsg(pParse, "a NATURAL join may not have "
90265            "an ON or USING clause", 0);
90266         return 1;
90267       }
90268       for(j=0; j<pRightTab->nCol; j++){
90269         char *zName;   /* Name of column in the right table */
90270         int iLeft;     /* Matching left table */
90271         int iLeftCol;  /* Matching column in the left table */
90272
90273         zName = pRightTab->aCol[j].zName;
90274         if( tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol) ){
90275           addWhereTerm(pParse, pSrc, iLeft, iLeftCol, i+1, j,
90276                        isOuter, &p->pWhere);
90277         }
90278       }
90279     }
90280
90281     /* Disallow both ON and USING clauses in the same join
90282     */
90283     if( pRight->pOn && pRight->pUsing ){
90284       sqlite3ErrorMsg(pParse, "cannot have both ON and USING "
90285         "clauses in the same join");
90286       return 1;
90287     }
90288
90289     /* Add the ON clause to the end of the WHERE clause, connected by
90290     ** an AND operator.
90291     */
90292     if( pRight->pOn ){
90293       if( isOuter ) setJoinExpr(pRight->pOn, pRight->iCursor);
90294       p->pWhere = sqlite3ExprAnd(pParse->db, p->pWhere, pRight->pOn);
90295       pRight->pOn = 0;
90296     }
90297
90298     /* Create extra terms on the WHERE clause for each column named
90299     ** in the USING clause.  Example: If the two tables to be joined are 
90300     ** A and B and the USING clause names X, Y, and Z, then add this
90301     ** to the WHERE clause:    A.X=B.X AND A.Y=B.Y AND A.Z=B.Z
90302     ** Report an error if any column mentioned in the USING clause is
90303     ** not contained in both tables to be joined.
90304     */
90305     if( pRight->pUsing ){
90306       IdList *pList = pRight->pUsing;
90307       for(j=0; j<pList->nId; j++){
90308         char *zName;     /* Name of the term in the USING clause */
90309         int iLeft;       /* Table on the left with matching column name */
90310         int iLeftCol;    /* Column number of matching column on the left */
90311         int iRightCol;   /* Column number of matching column on the right */
90312
90313         zName = pList->a[j].zName;
90314         iRightCol = columnIndex(pRightTab, zName);
90315         if( iRightCol<0
90316          || !tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol)
90317         ){
90318           sqlite3ErrorMsg(pParse, "cannot join using column %s - column "
90319             "not present in both tables", zName);
90320           return 1;
90321         }
90322         addWhereTerm(pParse, pSrc, iLeft, iLeftCol, i+1, iRightCol,
90323                      isOuter, &p->pWhere);
90324       }
90325     }
90326   }
90327   return 0;
90328 }
90329
90330 /*
90331 ** Insert code into "v" that will push the record on the top of the
90332 ** stack into the sorter.
90333 */
90334 static void pushOntoSorter(
90335   Parse *pParse,         /* Parser context */
90336   ExprList *pOrderBy,    /* The ORDER BY clause */
90337   Select *pSelect,       /* The whole SELECT statement */
90338   int regData            /* Register holding data to be sorted */
90339 ){
90340   Vdbe *v = pParse->pVdbe;
90341   int nExpr = pOrderBy->nExpr;
90342   int regBase = sqlite3GetTempRange(pParse, nExpr+2);
90343   int regRecord = sqlite3GetTempReg(pParse);
90344   sqlite3ExprCacheClear(pParse);
90345   sqlite3ExprCodeExprList(pParse, pOrderBy, regBase, 0);
90346   sqlite3VdbeAddOp2(v, OP_Sequence, pOrderBy->iECursor, regBase+nExpr);
90347   sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+1, 1);
90348   sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nExpr + 2, regRecord);
90349   sqlite3VdbeAddOp2(v, OP_IdxInsert, pOrderBy->iECursor, regRecord);
90350   sqlite3ReleaseTempReg(pParse, regRecord);
90351   sqlite3ReleaseTempRange(pParse, regBase, nExpr+2);
90352   if( pSelect->iLimit ){
90353     int addr1, addr2;
90354     int iLimit;
90355     if( pSelect->iOffset ){
90356       iLimit = pSelect->iOffset+1;
90357     }else{
90358       iLimit = pSelect->iLimit;
90359     }
90360     addr1 = sqlite3VdbeAddOp1(v, OP_IfZero, iLimit);
90361     sqlite3VdbeAddOp2(v, OP_AddImm, iLimit, -1);
90362     addr2 = sqlite3VdbeAddOp0(v, OP_Goto);
90363     sqlite3VdbeJumpHere(v, addr1);
90364     sqlite3VdbeAddOp1(v, OP_Last, pOrderBy->iECursor);
90365     sqlite3VdbeAddOp1(v, OP_Delete, pOrderBy->iECursor);
90366     sqlite3VdbeJumpHere(v, addr2);
90367   }
90368 }
90369
90370 /*
90371 ** Add code to implement the OFFSET
90372 */
90373 static void codeOffset(
90374   Vdbe *v,          /* Generate code into this VM */
90375   Select *p,        /* The SELECT statement being coded */
90376   int iContinue     /* Jump here to skip the current record */
90377 ){
90378   if( p->iOffset && iContinue!=0 ){
90379     int addr;
90380     sqlite3VdbeAddOp2(v, OP_AddImm, p->iOffset, -1);
90381     addr = sqlite3VdbeAddOp1(v, OP_IfNeg, p->iOffset);
90382     sqlite3VdbeAddOp2(v, OP_Goto, 0, iContinue);
90383     VdbeComment((v, "skip OFFSET records"));
90384     sqlite3VdbeJumpHere(v, addr);
90385   }
90386 }
90387
90388 /*
90389 ** Add code that will check to make sure the N registers starting at iMem
90390 ** form a distinct entry.  iTab is a sorting index that holds previously
90391 ** seen combinations of the N values.  A new entry is made in iTab
90392 ** if the current N values are new.
90393 **
90394 ** A jump to addrRepeat is made and the N+1 values are popped from the
90395 ** stack if the top N elements are not distinct.
90396 */
90397 static void codeDistinct(
90398   Parse *pParse,     /* Parsing and code generating context */
90399   int iTab,          /* A sorting index used to test for distinctness */
90400   int addrRepeat,    /* Jump to here if not distinct */
90401   int N,             /* Number of elements */
90402   int iMem           /* First element */
90403 ){
90404   Vdbe *v;
90405   int r1;
90406
90407   v = pParse->pVdbe;
90408   r1 = sqlite3GetTempReg(pParse);
90409   sqlite3VdbeAddOp4Int(v, OP_Found, iTab, addrRepeat, iMem, N);
90410   sqlite3VdbeAddOp3(v, OP_MakeRecord, iMem, N, r1);
90411   sqlite3VdbeAddOp2(v, OP_IdxInsert, iTab, r1);
90412   sqlite3ReleaseTempReg(pParse, r1);
90413 }
90414
90415 #ifndef SQLITE_OMIT_SUBQUERY
90416 /*
90417 ** Generate an error message when a SELECT is used within a subexpression
90418 ** (example:  "a IN (SELECT * FROM table)") but it has more than 1 result
90419 ** column.  We do this in a subroutine because the error used to occur
90420 ** in multiple places.  (The error only occurs in one place now, but we
90421 ** retain the subroutine to minimize code disruption.)
90422 */
90423 static int checkForMultiColumnSelectError(
90424   Parse *pParse,       /* Parse context. */
90425   SelectDest *pDest,   /* Destination of SELECT results */
90426   int nExpr            /* Number of result columns returned by SELECT */
90427 ){
90428   int eDest = pDest->eDest;
90429   if( nExpr>1 && (eDest==SRT_Mem || eDest==SRT_Set) ){
90430     sqlite3ErrorMsg(pParse, "only a single result allowed for "
90431        "a SELECT that is part of an expression");
90432     return 1;
90433   }else{
90434     return 0;
90435   }
90436 }
90437 #endif
90438
90439 /*
90440 ** This routine generates the code for the inside of the inner loop
90441 ** of a SELECT.
90442 **
90443 ** If srcTab and nColumn are both zero, then the pEList expressions
90444 ** are evaluated in order to get the data for this row.  If nColumn>0
90445 ** then data is pulled from srcTab and pEList is used only to get the
90446 ** datatypes for each column.
90447 */
90448 static void selectInnerLoop(
90449   Parse *pParse,          /* The parser context */
90450   Select *p,              /* The complete select statement being coded */
90451   ExprList *pEList,       /* List of values being extracted */
90452   int srcTab,             /* Pull data from this table */
90453   int nColumn,            /* Number of columns in the source table */
90454   ExprList *pOrderBy,     /* If not NULL, sort results using this key */
90455   int distinct,           /* If >=0, make sure results are distinct */
90456   SelectDest *pDest,      /* How to dispose of the results */
90457   int iContinue,          /* Jump here to continue with next row */
90458   int iBreak              /* Jump here to break out of the inner loop */
90459 ){
90460   Vdbe *v = pParse->pVdbe;
90461   int i;
90462   int hasDistinct;        /* True if the DISTINCT keyword is present */
90463   int regResult;              /* Start of memory holding result set */
90464   int eDest = pDest->eDest;   /* How to dispose of results */
90465   int iParm = pDest->iParm;   /* First argument to disposal method */
90466   int nResultCol;             /* Number of result columns */
90467
90468   assert( v );
90469   if( NEVER(v==0) ) return;
90470   assert( pEList!=0 );
90471   hasDistinct = distinct>=0;
90472   if( pOrderBy==0 && !hasDistinct ){
90473     codeOffset(v, p, iContinue);
90474   }
90475
90476   /* Pull the requested columns.
90477   */
90478   if( nColumn>0 ){
90479     nResultCol = nColumn;
90480   }else{
90481     nResultCol = pEList->nExpr;
90482   }
90483   if( pDest->iMem==0 ){
90484     pDest->iMem = pParse->nMem+1;
90485     pDest->nMem = nResultCol;
90486     pParse->nMem += nResultCol;
90487   }else{ 
90488     assert( pDest->nMem==nResultCol );
90489   }
90490   regResult = pDest->iMem;
90491   if( nColumn>0 ){
90492     for(i=0; i<nColumn; i++){
90493       sqlite3VdbeAddOp3(v, OP_Column, srcTab, i, regResult+i);
90494     }
90495   }else if( eDest!=SRT_Exists ){
90496     /* If the destination is an EXISTS(...) expression, the actual
90497     ** values returned by the SELECT are not required.
90498     */
90499     sqlite3ExprCacheClear(pParse);
90500     sqlite3ExprCodeExprList(pParse, pEList, regResult, eDest==SRT_Output);
90501   }
90502   nColumn = nResultCol;
90503
90504   /* If the DISTINCT keyword was present on the SELECT statement
90505   ** and this row has been seen before, then do not make this row
90506   ** part of the result.
90507   */
90508   if( hasDistinct ){
90509     assert( pEList!=0 );
90510     assert( pEList->nExpr==nColumn );
90511     codeDistinct(pParse, distinct, iContinue, nColumn, regResult);
90512     if( pOrderBy==0 ){
90513       codeOffset(v, p, iContinue);
90514     }
90515   }
90516
90517   switch( eDest ){
90518     /* In this mode, write each query result to the key of the temporary
90519     ** table iParm.
90520     */
90521 #ifndef SQLITE_OMIT_COMPOUND_SELECT
90522     case SRT_Union: {
90523       int r1;
90524       r1 = sqlite3GetTempReg(pParse);
90525       sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
90526       sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1);
90527       sqlite3ReleaseTempReg(pParse, r1);
90528       break;
90529     }
90530
90531     /* Construct a record from the query result, but instead of
90532     ** saving that record, use it as a key to delete elements from
90533     ** the temporary table iParm.
90534     */
90535     case SRT_Except: {
90536       sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nColumn);
90537       break;
90538     }
90539 #endif
90540
90541     /* Store the result as data using a unique key.
90542     */
90543     case SRT_Table:
90544     case SRT_EphemTab: {
90545       int r1 = sqlite3GetTempReg(pParse);
90546       testcase( eDest==SRT_Table );
90547       testcase( eDest==SRT_EphemTab );
90548       sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
90549       if( pOrderBy ){
90550         pushOntoSorter(pParse, pOrderBy, p, r1);
90551       }else{
90552         int r2 = sqlite3GetTempReg(pParse);
90553         sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, r2);
90554         sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, r2);
90555         sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
90556         sqlite3ReleaseTempReg(pParse, r2);
90557       }
90558       sqlite3ReleaseTempReg(pParse, r1);
90559       break;
90560     }
90561
90562 #ifndef SQLITE_OMIT_SUBQUERY
90563     /* If we are creating a set for an "expr IN (SELECT ...)" construct,
90564     ** then there should be a single item on the stack.  Write this
90565     ** item into the set table with bogus data.
90566     */
90567     case SRT_Set: {
90568       assert( nColumn==1 );
90569       p->affinity = sqlite3CompareAffinity(pEList->a[0].pExpr, pDest->affinity);
90570       if( pOrderBy ){
90571         /* At first glance you would think we could optimize out the
90572         ** ORDER BY in this case since the order of entries in the set
90573         ** does not matter.  But there might be a LIMIT clause, in which
90574         ** case the order does matter */
90575         pushOntoSorter(pParse, pOrderBy, p, regResult);
90576       }else{
90577         int r1 = sqlite3GetTempReg(pParse);
90578         sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult, 1, r1, &p->affinity, 1);
90579         sqlite3ExprCacheAffinityChange(pParse, regResult, 1);
90580         sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1);
90581         sqlite3ReleaseTempReg(pParse, r1);
90582       }
90583       break;
90584     }
90585
90586     /* If any row exist in the result set, record that fact and abort.
90587     */
90588     case SRT_Exists: {
90589       sqlite3VdbeAddOp2(v, OP_Integer, 1, iParm);
90590       /* The LIMIT clause will terminate the loop for us */
90591       break;
90592     }
90593
90594     /* If this is a scalar select that is part of an expression, then
90595     ** store the results in the appropriate memory cell and break out
90596     ** of the scan loop.
90597     */
90598     case SRT_Mem: {
90599       assert( nColumn==1 );
90600       if( pOrderBy ){
90601         pushOntoSorter(pParse, pOrderBy, p, regResult);
90602       }else{
90603         sqlite3ExprCodeMove(pParse, regResult, iParm, 1);
90604         /* The LIMIT clause will jump out of the loop for us */
90605       }
90606       break;
90607     }
90608 #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
90609
90610     /* Send the data to the callback function or to a subroutine.  In the
90611     ** case of a subroutine, the subroutine itself is responsible for
90612     ** popping the data from the stack.
90613     */
90614     case SRT_Coroutine:
90615     case SRT_Output: {
90616       testcase( eDest==SRT_Coroutine );
90617       testcase( eDest==SRT_Output );
90618       if( pOrderBy ){
90619         int r1 = sqlite3GetTempReg(pParse);
90620         sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
90621         pushOntoSorter(pParse, pOrderBy, p, r1);
90622         sqlite3ReleaseTempReg(pParse, r1);
90623       }else if( eDest==SRT_Coroutine ){
90624         sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
90625       }else{
90626         sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nColumn);
90627         sqlite3ExprCacheAffinityChange(pParse, regResult, nColumn);
90628       }
90629       break;
90630     }
90631
90632 #if !defined(SQLITE_OMIT_TRIGGER)
90633     /* Discard the results.  This is used for SELECT statements inside
90634     ** the body of a TRIGGER.  The purpose of such selects is to call
90635     ** user-defined functions that have side effects.  We do not care
90636     ** about the actual results of the select.
90637     */
90638     default: {
90639       assert( eDest==SRT_Discard );
90640       break;
90641     }
90642 #endif
90643   }
90644
90645   /* Jump to the end of the loop if the LIMIT is reached.  Except, if
90646   ** there is a sorter, in which case the sorter has already limited
90647   ** the output for us.
90648   */
90649   if( pOrderBy==0 && p->iLimit ){
90650     sqlite3VdbeAddOp3(v, OP_IfZero, p->iLimit, iBreak, -1);
90651   }
90652 }
90653
90654 /*
90655 ** Given an expression list, generate a KeyInfo structure that records
90656 ** the collating sequence for each expression in that expression list.
90657 **
90658 ** If the ExprList is an ORDER BY or GROUP BY clause then the resulting
90659 ** KeyInfo structure is appropriate for initializing a virtual index to
90660 ** implement that clause.  If the ExprList is the result set of a SELECT
90661 ** then the KeyInfo structure is appropriate for initializing a virtual
90662 ** index to implement a DISTINCT test.
90663 **
90664 ** Space to hold the KeyInfo structure is obtain from malloc.  The calling
90665 ** function is responsible for seeing that this structure is eventually
90666 ** freed.  Add the KeyInfo structure to the P4 field of an opcode using
90667 ** P4_KEYINFO_HANDOFF is the usual way of dealing with this.
90668 */
90669 static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){
90670   sqlite3 *db = pParse->db;
90671   int nExpr;
90672   KeyInfo *pInfo;
90673   struct ExprList_item *pItem;
90674   int i;
90675
90676   nExpr = pList->nExpr;
90677   pInfo = sqlite3DbMallocZero(db, sizeof(*pInfo) + nExpr*(sizeof(CollSeq*)+1) );
90678   if( pInfo ){
90679     pInfo->aSortOrder = (u8*)&pInfo->aColl[nExpr];
90680     pInfo->nField = (u16)nExpr;
90681     pInfo->enc = ENC(db);
90682     pInfo->db = db;
90683     for(i=0, pItem=pList->a; i<nExpr; i++, pItem++){
90684       CollSeq *pColl;
90685       pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
90686       if( !pColl ){
90687         pColl = db->pDfltColl;
90688       }
90689       pInfo->aColl[i] = pColl;
90690       pInfo->aSortOrder[i] = pItem->sortOrder;
90691     }
90692   }
90693   return pInfo;
90694 }
90695
90696 #ifndef SQLITE_OMIT_COMPOUND_SELECT
90697 /*
90698 ** Name of the connection operator, used for error messages.
90699 */
90700 static const char *selectOpName(int id){
90701   char *z;
90702   switch( id ){
90703     case TK_ALL:       z = "UNION ALL";   break;
90704     case TK_INTERSECT: z = "INTERSECT";   break;
90705     case TK_EXCEPT:    z = "EXCEPT";      break;
90706     default:           z = "UNION";       break;
90707   }
90708   return z;
90709 }
90710 #endif /* SQLITE_OMIT_COMPOUND_SELECT */
90711
90712 #ifndef SQLITE_OMIT_EXPLAIN
90713 /*
90714 ** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
90715 ** is a no-op. Otherwise, it adds a single row of output to the EQP result,
90716 ** where the caption is of the form:
90717 **
90718 **   "USE TEMP B-TREE FOR xxx"
90719 **
90720 ** where xxx is one of "DISTINCT", "ORDER BY" or "GROUP BY". Exactly which
90721 ** is determined by the zUsage argument.
90722 */
90723 static void explainTempTable(Parse *pParse, const char *zUsage){
90724   if( pParse->explain==2 ){
90725     Vdbe *v = pParse->pVdbe;
90726     char *zMsg = sqlite3MPrintf(pParse->db, "USE TEMP B-TREE FOR %s", zUsage);
90727     sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
90728   }
90729 }
90730
90731 /*
90732 ** Assign expression b to lvalue a. A second, no-op, version of this macro
90733 ** is provided when SQLITE_OMIT_EXPLAIN is defined. This allows the code
90734 ** in sqlite3Select() to assign values to structure member variables that
90735 ** only exist if SQLITE_OMIT_EXPLAIN is not defined without polluting the
90736 ** code with #ifndef directives.
90737 */
90738 # define explainSetInteger(a, b) a = b
90739
90740 #else
90741 /* No-op versions of the explainXXX() functions and macros. */
90742 # define explainTempTable(y,z)
90743 # define explainSetInteger(y,z)
90744 #endif
90745
90746 #if !defined(SQLITE_OMIT_EXPLAIN) && !defined(SQLITE_OMIT_COMPOUND_SELECT)
90747 /*
90748 ** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
90749 ** is a no-op. Otherwise, it adds a single row of output to the EQP result,
90750 ** where the caption is of one of the two forms:
90751 **
90752 **   "COMPOSITE SUBQUERIES iSub1 and iSub2 (op)"
90753 **   "COMPOSITE SUBQUERIES iSub1 and iSub2 USING TEMP B-TREE (op)"
90754 **
90755 ** where iSub1 and iSub2 are the integers passed as the corresponding
90756 ** function parameters, and op is the text representation of the parameter
90757 ** of the same name. The parameter "op" must be one of TK_UNION, TK_EXCEPT,
90758 ** TK_INTERSECT or TK_ALL. The first form is used if argument bUseTmp is 
90759 ** false, or the second form if it is true.
90760 */
90761 static void explainComposite(
90762   Parse *pParse,                  /* Parse context */
90763   int op,                         /* One of TK_UNION, TK_EXCEPT etc. */
90764   int iSub1,                      /* Subquery id 1 */
90765   int iSub2,                      /* Subquery id 2 */
90766   int bUseTmp                     /* True if a temp table was used */
90767 ){
90768   assert( op==TK_UNION || op==TK_EXCEPT || op==TK_INTERSECT || op==TK_ALL );
90769   if( pParse->explain==2 ){
90770     Vdbe *v = pParse->pVdbe;
90771     char *zMsg = sqlite3MPrintf(
90772         pParse->db, "COMPOUND SUBQUERIES %d AND %d %s(%s)", iSub1, iSub2,
90773         bUseTmp?"USING TEMP B-TREE ":"", selectOpName(op)
90774     );
90775     sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
90776   }
90777 }
90778 #else
90779 /* No-op versions of the explainXXX() functions and macros. */
90780 # define explainComposite(v,w,x,y,z)
90781 #endif
90782
90783 /*
90784 ** If the inner loop was generated using a non-null pOrderBy argument,
90785 ** then the results were placed in a sorter.  After the loop is terminated
90786 ** we need to run the sorter and output the results.  The following
90787 ** routine generates the code needed to do that.
90788 */
90789 static void generateSortTail(
90790   Parse *pParse,    /* Parsing context */
90791   Select *p,        /* The SELECT statement */
90792   Vdbe *v,          /* Generate code into this VDBE */
90793   int nColumn,      /* Number of columns of data */
90794   SelectDest *pDest /* Write the sorted results here */
90795 ){
90796   int addrBreak = sqlite3VdbeMakeLabel(v);     /* Jump here to exit loop */
90797   int addrContinue = sqlite3VdbeMakeLabel(v);  /* Jump here for next cycle */
90798   int addr;
90799   int iTab;
90800   int pseudoTab = 0;
90801   ExprList *pOrderBy = p->pOrderBy;
90802
90803   int eDest = pDest->eDest;
90804   int iParm = pDest->iParm;
90805
90806   int regRow;
90807   int regRowid;
90808
90809   iTab = pOrderBy->iECursor;
90810   regRow = sqlite3GetTempReg(pParse);
90811   if( eDest==SRT_Output || eDest==SRT_Coroutine ){
90812     pseudoTab = pParse->nTab++;
90813     sqlite3VdbeAddOp3(v, OP_OpenPseudo, pseudoTab, regRow, nColumn);
90814     regRowid = 0;
90815   }else{
90816     regRowid = sqlite3GetTempReg(pParse);
90817   }
90818   addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak);
90819   codeOffset(v, p, addrContinue);
90820   sqlite3VdbeAddOp3(v, OP_Column, iTab, pOrderBy->nExpr + 1, regRow);
90821   switch( eDest ){
90822     case SRT_Table:
90823     case SRT_EphemTab: {
90824       testcase( eDest==SRT_Table );
90825       testcase( eDest==SRT_EphemTab );
90826       sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid);
90827       sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid);
90828       sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
90829       break;
90830     }
90831 #ifndef SQLITE_OMIT_SUBQUERY
90832     case SRT_Set: {
90833       assert( nColumn==1 );
90834       sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, 1, regRowid, &p->affinity, 1);
90835       sqlite3ExprCacheAffinityChange(pParse, regRow, 1);
90836       sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, regRowid);
90837       break;
90838     }
90839     case SRT_Mem: {
90840       assert( nColumn==1 );
90841       sqlite3ExprCodeMove(pParse, regRow, iParm, 1);
90842       /* The LIMIT clause will terminate the loop for us */
90843       break;
90844     }
90845 #endif
90846     default: {
90847       int i;
90848       assert( eDest==SRT_Output || eDest==SRT_Coroutine ); 
90849       testcase( eDest==SRT_Output );
90850       testcase( eDest==SRT_Coroutine );
90851       for(i=0; i<nColumn; i++){
90852         assert( regRow!=pDest->iMem+i );
90853         sqlite3VdbeAddOp3(v, OP_Column, pseudoTab, i, pDest->iMem+i);
90854         if( i==0 ){
90855           sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
90856         }
90857       }
90858       if( eDest==SRT_Output ){
90859         sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iMem, nColumn);
90860         sqlite3ExprCacheAffinityChange(pParse, pDest->iMem, nColumn);
90861       }else{
90862         sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
90863       }
90864       break;
90865     }
90866   }
90867   sqlite3ReleaseTempReg(pParse, regRow);
90868   sqlite3ReleaseTempReg(pParse, regRowid);
90869
90870   /* The bottom of the loop
90871   */
90872   sqlite3VdbeResolveLabel(v, addrContinue);
90873   sqlite3VdbeAddOp2(v, OP_Next, iTab, addr);
90874   sqlite3VdbeResolveLabel(v, addrBreak);
90875   if( eDest==SRT_Output || eDest==SRT_Coroutine ){
90876     sqlite3VdbeAddOp2(v, OP_Close, pseudoTab, 0);
90877   }
90878 }
90879
90880 /*
90881 ** Return a pointer to a string containing the 'declaration type' of the
90882 ** expression pExpr. The string may be treated as static by the caller.
90883 **
90884 ** The declaration type is the exact datatype definition extracted from the
90885 ** original CREATE TABLE statement if the expression is a column. The
90886 ** declaration type for a ROWID field is INTEGER. Exactly when an expression
90887 ** is considered a column can be complex in the presence of subqueries. The
90888 ** result-set expression in all of the following SELECT statements is 
90889 ** considered a column by this function.
90890 **
90891 **   SELECT col FROM tbl;
90892 **   SELECT (SELECT col FROM tbl;
90893 **   SELECT (SELECT col FROM tbl);
90894 **   SELECT abc FROM (SELECT col AS abc FROM tbl);
90895 ** 
90896 ** The declaration type for any expression other than a column is NULL.
90897 */
90898 static const char *columnType(
90899   NameContext *pNC, 
90900   Expr *pExpr,
90901   const char **pzOriginDb,
90902   const char **pzOriginTab,
90903   const char **pzOriginCol
90904 ){
90905   char const *zType = 0;
90906   char const *zOriginDb = 0;
90907   char const *zOriginTab = 0;
90908   char const *zOriginCol = 0;
90909   int j;
90910   if( NEVER(pExpr==0) || pNC->pSrcList==0 ) return 0;
90911
90912   switch( pExpr->op ){
90913     case TK_AGG_COLUMN:
90914     case TK_COLUMN: {
90915       /* The expression is a column. Locate the table the column is being
90916       ** extracted from in NameContext.pSrcList. This table may be real
90917       ** database table or a subquery.
90918       */
90919       Table *pTab = 0;            /* Table structure column is extracted from */
90920       Select *pS = 0;             /* Select the column is extracted from */
90921       int iCol = pExpr->iColumn;  /* Index of column in pTab */
90922       testcase( pExpr->op==TK_AGG_COLUMN );
90923       testcase( pExpr->op==TK_COLUMN );
90924       while( pNC && !pTab ){
90925         SrcList *pTabList = pNC->pSrcList;
90926         for(j=0;j<pTabList->nSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++);
90927         if( j<pTabList->nSrc ){
90928           pTab = pTabList->a[j].pTab;
90929           pS = pTabList->a[j].pSelect;
90930         }else{
90931           pNC = pNC->pNext;
90932         }
90933       }
90934
90935       if( pTab==0 ){
90936         /* At one time, code such as "SELECT new.x" within a trigger would
90937         ** cause this condition to run.  Since then, we have restructured how
90938         ** trigger code is generated and so this condition is no longer 
90939         ** possible. However, it can still be true for statements like
90940         ** the following:
90941         **
90942         **   CREATE TABLE t1(col INTEGER);
90943         **   SELECT (SELECT t1.col) FROM FROM t1;
90944         **
90945         ** when columnType() is called on the expression "t1.col" in the 
90946         ** sub-select. In this case, set the column type to NULL, even
90947         ** though it should really be "INTEGER".
90948         **
90949         ** This is not a problem, as the column type of "t1.col" is never
90950         ** used. When columnType() is called on the expression 
90951         ** "(SELECT t1.col)", the correct type is returned (see the TK_SELECT
90952         ** branch below.  */
90953         break;
90954       }
90955
90956       assert( pTab && pExpr->pTab==pTab );
90957       if( pS ){
90958         /* The "table" is actually a sub-select or a view in the FROM clause
90959         ** of the SELECT statement. Return the declaration type and origin
90960         ** data for the result-set column of the sub-select.
90961         */
90962         if( iCol>=0 && ALWAYS(iCol<pS->pEList->nExpr) ){
90963           /* If iCol is less than zero, then the expression requests the
90964           ** rowid of the sub-select or view. This expression is legal (see 
90965           ** test case misc2.2.2) - it always evaluates to NULL.
90966           */
90967           NameContext sNC;
90968           Expr *p = pS->pEList->a[iCol].pExpr;
90969           sNC.pSrcList = pS->pSrc;
90970           sNC.pNext = pNC;
90971           sNC.pParse = pNC->pParse;
90972           zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); 
90973         }
90974       }else if( ALWAYS(pTab->pSchema) ){
90975         /* A real table */
90976         assert( !pS );
90977         if( iCol<0 ) iCol = pTab->iPKey;
90978         assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
90979         if( iCol<0 ){
90980           zType = "INTEGER";
90981           zOriginCol = "rowid";
90982         }else{
90983           zType = pTab->aCol[iCol].zType;
90984           zOriginCol = pTab->aCol[iCol].zName;
90985         }
90986         zOriginTab = pTab->zName;
90987         if( pNC->pParse ){
90988           int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema);
90989           zOriginDb = pNC->pParse->db->aDb[iDb].zName;
90990         }
90991       }
90992       break;
90993     }
90994 #ifndef SQLITE_OMIT_SUBQUERY
90995     case TK_SELECT: {
90996       /* The expression is a sub-select. Return the declaration type and
90997       ** origin info for the single column in the result set of the SELECT
90998       ** statement.
90999       */
91000       NameContext sNC;
91001       Select *pS = pExpr->x.pSelect;
91002       Expr *p = pS->pEList->a[0].pExpr;
91003       assert( ExprHasProperty(pExpr, EP_xIsSelect) );
91004       sNC.pSrcList = pS->pSrc;
91005       sNC.pNext = pNC;
91006       sNC.pParse = pNC->pParse;
91007       zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol); 
91008       break;
91009     }
91010 #endif
91011   }
91012   
91013   if( pzOriginDb ){
91014     assert( pzOriginTab && pzOriginCol );
91015     *pzOriginDb = zOriginDb;
91016     *pzOriginTab = zOriginTab;
91017     *pzOriginCol = zOriginCol;
91018   }
91019   return zType;
91020 }
91021
91022 /*
91023 ** Generate code that will tell the VDBE the declaration types of columns
91024 ** in the result set.
91025 */
91026 static void generateColumnTypes(
91027   Parse *pParse,      /* Parser context */
91028   SrcList *pTabList,  /* List of tables */
91029   ExprList *pEList    /* Expressions defining the result set */
91030 ){
91031 #ifndef SQLITE_OMIT_DECLTYPE
91032   Vdbe *v = pParse->pVdbe;
91033   int i;
91034   NameContext sNC;
91035   sNC.pSrcList = pTabList;
91036   sNC.pParse = pParse;
91037   for(i=0; i<pEList->nExpr; i++){
91038     Expr *p = pEList->a[i].pExpr;
91039     const char *zType;
91040 #ifdef SQLITE_ENABLE_COLUMN_METADATA
91041     const char *zOrigDb = 0;
91042     const char *zOrigTab = 0;
91043     const char *zOrigCol = 0;
91044     zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol);
91045
91046     /* The vdbe must make its own copy of the column-type and other 
91047     ** column specific strings, in case the schema is reset before this
91048     ** virtual machine is deleted.
91049     */
91050     sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, SQLITE_TRANSIENT);
91051     sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, SQLITE_TRANSIENT);
91052     sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, SQLITE_TRANSIENT);
91053 #else
91054     zType = columnType(&sNC, p, 0, 0, 0);
91055 #endif
91056     sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, SQLITE_TRANSIENT);
91057   }
91058 #endif /* SQLITE_OMIT_DECLTYPE */
91059 }
91060
91061 /*
91062 ** Generate code that will tell the VDBE the names of columns
91063 ** in the result set.  This information is used to provide the
91064 ** azCol[] values in the callback.
91065 */
91066 static void generateColumnNames(
91067   Parse *pParse,      /* Parser context */
91068   SrcList *pTabList,  /* List of tables */
91069   ExprList *pEList    /* Expressions defining the result set */
91070 ){
91071   Vdbe *v = pParse->pVdbe;
91072   int i, j;
91073   sqlite3 *db = pParse->db;
91074   int fullNames, shortNames;
91075
91076 #ifndef SQLITE_OMIT_EXPLAIN
91077   /* If this is an EXPLAIN, skip this step */
91078   if( pParse->explain ){
91079     return;
91080   }
91081 #endif
91082
91083   if( pParse->colNamesSet || NEVER(v==0) || db->mallocFailed ) return;
91084   pParse->colNamesSet = 1;
91085   fullNames = (db->flags & SQLITE_FullColNames)!=0;
91086   shortNames = (db->flags & SQLITE_ShortColNames)!=0;
91087   sqlite3VdbeSetNumCols(v, pEList->nExpr);
91088   for(i=0; i<pEList->nExpr; i++){
91089     Expr *p;
91090     p = pEList->a[i].pExpr;
91091     if( NEVER(p==0) ) continue;
91092     if( pEList->a[i].zName ){
91093       char *zName = pEList->a[i].zName;
91094       sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_TRANSIENT);
91095     }else if( (p->op==TK_COLUMN || p->op==TK_AGG_COLUMN) && pTabList ){
91096       Table *pTab;
91097       char *zCol;
91098       int iCol = p->iColumn;
91099       for(j=0; ALWAYS(j<pTabList->nSrc); j++){
91100         if( pTabList->a[j].iCursor==p->iTable ) break;
91101       }
91102       assert( j<pTabList->nSrc );
91103       pTab = pTabList->a[j].pTab;
91104       if( iCol<0 ) iCol = pTab->iPKey;
91105       assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
91106       if( iCol<0 ){
91107         zCol = "rowid";
91108       }else{
91109         zCol = pTab->aCol[iCol].zName;
91110       }
91111       if( !shortNames && !fullNames ){
91112         sqlite3VdbeSetColName(v, i, COLNAME_NAME, 
91113             sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC);
91114       }else if( fullNames ){
91115         char *zName = 0;
91116         zName = sqlite3MPrintf(db, "%s.%s", pTab->zName, zCol);
91117         sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_DYNAMIC);
91118       }else{
91119         sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, SQLITE_TRANSIENT);
91120       }
91121     }else{
91122       sqlite3VdbeSetColName(v, i, COLNAME_NAME, 
91123           sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC);
91124     }
91125   }
91126   generateColumnTypes(pParse, pTabList, pEList);
91127 }
91128
91129 /*
91130 ** Given a an expression list (which is really the list of expressions
91131 ** that form the result set of a SELECT statement) compute appropriate
91132 ** column names for a table that would hold the expression list.
91133 **
91134 ** All column names will be unique.
91135 **
91136 ** Only the column names are computed.  Column.zType, Column.zColl,
91137 ** and other fields of Column are zeroed.
91138 **
91139 ** Return SQLITE_OK on success.  If a memory allocation error occurs,
91140 ** store NULL in *paCol and 0 in *pnCol and return SQLITE_NOMEM.
91141 */
91142 static int selectColumnsFromExprList(
91143   Parse *pParse,          /* Parsing context */
91144   ExprList *pEList,       /* Expr list from which to derive column names */
91145   int *pnCol,             /* Write the number of columns here */
91146   Column **paCol          /* Write the new column list here */
91147 ){
91148   sqlite3 *db = pParse->db;   /* Database connection */
91149   int i, j;                   /* Loop counters */
91150   int cnt;                    /* Index added to make the name unique */
91151   Column *aCol, *pCol;        /* For looping over result columns */
91152   int nCol;                   /* Number of columns in the result set */
91153   Expr *p;                    /* Expression for a single result column */
91154   char *zName;                /* Column name */
91155   int nName;                  /* Size of name in zName[] */
91156
91157   *pnCol = nCol = pEList->nExpr;
91158   aCol = *paCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol);
91159   if( aCol==0 ) return SQLITE_NOMEM;
91160   for(i=0, pCol=aCol; i<nCol; i++, pCol++){
91161     /* Get an appropriate name for the column
91162     */
91163     p = pEList->a[i].pExpr;
91164     assert( p->pRight==0 || ExprHasProperty(p->pRight, EP_IntValue)
91165                || p->pRight->u.zToken==0 || p->pRight->u.zToken[0]!=0 );
91166     if( (zName = pEList->a[i].zName)!=0 ){
91167       /* If the column contains an "AS <name>" phrase, use <name> as the name */
91168       zName = sqlite3DbStrDup(db, zName);
91169     }else{
91170       Expr *pColExpr = p;  /* The expression that is the result column name */
91171       Table *pTab;         /* Table associated with this expression */
91172       while( pColExpr->op==TK_DOT ) pColExpr = pColExpr->pRight;
91173       if( pColExpr->op==TK_COLUMN && ALWAYS(pColExpr->pTab!=0) ){
91174         /* For columns use the column name name */
91175         int iCol = pColExpr->iColumn;
91176         pTab = pColExpr->pTab;
91177         if( iCol<0 ) iCol = pTab->iPKey;
91178         zName = sqlite3MPrintf(db, "%s",
91179                  iCol>=0 ? pTab->aCol[iCol].zName : "rowid");
91180       }else if( pColExpr->op==TK_ID ){
91181         assert( !ExprHasProperty(pColExpr, EP_IntValue) );
91182         zName = sqlite3MPrintf(db, "%s", pColExpr->u.zToken);
91183       }else{
91184         /* Use the original text of the column expression as its name */
91185         zName = sqlite3MPrintf(db, "%s", pEList->a[i].zSpan);
91186       }
91187     }
91188     if( db->mallocFailed ){
91189       sqlite3DbFree(db, zName);
91190       break;
91191     }
91192
91193     /* Make sure the column name is unique.  If the name is not unique,
91194     ** append a integer to the name so that it becomes unique.
91195     */
91196     nName = sqlite3Strlen30(zName);
91197     for(j=cnt=0; j<i; j++){
91198       if( sqlite3StrICmp(aCol[j].zName, zName)==0 ){
91199         char *zNewName;
91200         zName[nName] = 0;
91201         zNewName = sqlite3MPrintf(db, "%s:%d", zName, ++cnt);
91202         sqlite3DbFree(db, zName);
91203         zName = zNewName;
91204         j = -1;
91205         if( zName==0 ) break;
91206       }
91207     }
91208     pCol->zName = zName;
91209   }
91210   if( db->mallocFailed ){
91211     for(j=0; j<i; j++){
91212       sqlite3DbFree(db, aCol[j].zName);
91213     }
91214     sqlite3DbFree(db, aCol);
91215     *paCol = 0;
91216     *pnCol = 0;
91217     return SQLITE_NOMEM;
91218   }
91219   return SQLITE_OK;
91220 }
91221
91222 /*
91223 ** Add type and collation information to a column list based on
91224 ** a SELECT statement.
91225 ** 
91226 ** The column list presumably came from selectColumnNamesFromExprList().
91227 ** The column list has only names, not types or collations.  This
91228 ** routine goes through and adds the types and collations.
91229 **
91230 ** This routine requires that all identifiers in the SELECT
91231 ** statement be resolved.
91232 */
91233 static void selectAddColumnTypeAndCollation(
91234   Parse *pParse,        /* Parsing contexts */
91235   int nCol,             /* Number of columns */
91236   Column *aCol,         /* List of columns */
91237   Select *pSelect       /* SELECT used to determine types and collations */
91238 ){
91239   sqlite3 *db = pParse->db;
91240   NameContext sNC;
91241   Column *pCol;
91242   CollSeq *pColl;
91243   int i;
91244   Expr *p;
91245   struct ExprList_item *a;
91246
91247   assert( pSelect!=0 );
91248   assert( (pSelect->selFlags & SF_Resolved)!=0 );
91249   assert( nCol==pSelect->pEList->nExpr || db->mallocFailed );
91250   if( db->mallocFailed ) return;
91251   memset(&sNC, 0, sizeof(sNC));
91252   sNC.pSrcList = pSelect->pSrc;
91253   a = pSelect->pEList->a;
91254   for(i=0, pCol=aCol; i<nCol; i++, pCol++){
91255     p = a[i].pExpr;
91256     pCol->zType = sqlite3DbStrDup(db, columnType(&sNC, p, 0, 0, 0));
91257     pCol->affinity = sqlite3ExprAffinity(p);
91258     if( pCol->affinity==0 ) pCol->affinity = SQLITE_AFF_NONE;
91259     pColl = sqlite3ExprCollSeq(pParse, p);
91260     if( pColl ){
91261       pCol->zColl = sqlite3DbStrDup(db, pColl->zName);
91262     }
91263   }
91264 }
91265
91266 /*
91267 ** Given a SELECT statement, generate a Table structure that describes
91268 ** the result set of that SELECT.
91269 */
91270 SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){
91271   Table *pTab;
91272   sqlite3 *db = pParse->db;
91273   int savedFlags;
91274
91275   savedFlags = db->flags;
91276   db->flags &= ~SQLITE_FullColNames;
91277   db->flags |= SQLITE_ShortColNames;
91278   sqlite3SelectPrep(pParse, pSelect, 0);
91279   if( pParse->nErr ) return 0;
91280   while( pSelect->pPrior ) pSelect = pSelect->pPrior;
91281   db->flags = savedFlags;
91282   pTab = sqlite3DbMallocZero(db, sizeof(Table) );
91283   if( pTab==0 ){
91284     return 0;
91285   }
91286   /* The sqlite3ResultSetOfSelect() is only used n contexts where lookaside
91287   ** is disabled */
91288   assert( db->lookaside.bEnabled==0 );
91289   pTab->nRef = 1;
91290   pTab->zName = 0;
91291   pTab->nRowEst = 1000000;
91292   selectColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol);
91293   selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSelect);
91294   pTab->iPKey = -1;
91295   if( db->mallocFailed ){
91296     sqlite3DeleteTable(db, pTab);
91297     return 0;
91298   }
91299   return pTab;
91300 }
91301
91302 /*
91303 ** Get a VDBE for the given parser context.  Create a new one if necessary.
91304 ** If an error occurs, return NULL and leave a message in pParse.
91305 */
91306 SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){
91307   Vdbe *v = pParse->pVdbe;
91308   if( v==0 ){
91309     v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db);
91310 #ifndef SQLITE_OMIT_TRACE
91311     if( v ){
91312       sqlite3VdbeAddOp0(v, OP_Trace);
91313     }
91314 #endif
91315   }
91316   return v;
91317 }
91318
91319
91320 /*
91321 ** Compute the iLimit and iOffset fields of the SELECT based on the
91322 ** pLimit and pOffset expressions.  pLimit and pOffset hold the expressions
91323 ** that appear in the original SQL statement after the LIMIT and OFFSET
91324 ** keywords.  Or NULL if those keywords are omitted. iLimit and iOffset 
91325 ** are the integer memory register numbers for counters used to compute 
91326 ** the limit and offset.  If there is no limit and/or offset, then 
91327 ** iLimit and iOffset are negative.
91328 **
91329 ** This routine changes the values of iLimit and iOffset only if
91330 ** a limit or offset is defined by pLimit and pOffset.  iLimit and
91331 ** iOffset should have been preset to appropriate default values
91332 ** (usually but not always -1) prior to calling this routine.
91333 ** Only if pLimit!=0 or pOffset!=0 do the limit registers get
91334 ** redefined.  The UNION ALL operator uses this property to force
91335 ** the reuse of the same limit and offset registers across multiple
91336 ** SELECT statements.
91337 */
91338 static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){
91339   Vdbe *v = 0;
91340   int iLimit = 0;
91341   int iOffset;
91342   int addr1, n;
91343   if( p->iLimit ) return;
91344
91345   /* 
91346   ** "LIMIT -1" always shows all rows.  There is some
91347   ** contraversy about what the correct behavior should be.
91348   ** The current implementation interprets "LIMIT 0" to mean
91349   ** no rows.
91350   */
91351   sqlite3ExprCacheClear(pParse);
91352   assert( p->pOffset==0 || p->pLimit!=0 );
91353   if( p->pLimit ){
91354     p->iLimit = iLimit = ++pParse->nMem;
91355     v = sqlite3GetVdbe(pParse);
91356     if( NEVER(v==0) ) return;  /* VDBE should have already been allocated */
91357     if( sqlite3ExprIsInteger(p->pLimit, &n) ){
91358       sqlite3VdbeAddOp2(v, OP_Integer, n, iLimit);
91359       VdbeComment((v, "LIMIT counter"));
91360       if( n==0 ){
91361         sqlite3VdbeAddOp2(v, OP_Goto, 0, iBreak);
91362       }else{
91363         if( p->nSelectRow > (double)n ) p->nSelectRow = (double)n;
91364       }
91365     }else{
91366       sqlite3ExprCode(pParse, p->pLimit, iLimit);
91367       sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit);
91368       VdbeComment((v, "LIMIT counter"));
91369       sqlite3VdbeAddOp2(v, OP_IfZero, iLimit, iBreak);
91370     }
91371     if( p->pOffset ){
91372       p->iOffset = iOffset = ++pParse->nMem;
91373       pParse->nMem++;   /* Allocate an extra register for limit+offset */
91374       sqlite3ExprCode(pParse, p->pOffset, iOffset);
91375       sqlite3VdbeAddOp1(v, OP_MustBeInt, iOffset);
91376       VdbeComment((v, "OFFSET counter"));
91377       addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iOffset);
91378       sqlite3VdbeAddOp2(v, OP_Integer, 0, iOffset);
91379       sqlite3VdbeJumpHere(v, addr1);
91380       sqlite3VdbeAddOp3(v, OP_Add, iLimit, iOffset, iOffset+1);
91381       VdbeComment((v, "LIMIT+OFFSET"));
91382       addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iLimit);
91383       sqlite3VdbeAddOp2(v, OP_Integer, -1, iOffset+1);
91384       sqlite3VdbeJumpHere(v, addr1);
91385     }
91386   }
91387 }
91388
91389 #ifndef SQLITE_OMIT_COMPOUND_SELECT
91390 /*
91391 ** Return the appropriate collating sequence for the iCol-th column of
91392 ** the result set for the compound-select statement "p".  Return NULL if
91393 ** the column has no default collating sequence.
91394 **
91395 ** The collating sequence for the compound select is taken from the
91396 ** left-most term of the select that has a collating sequence.
91397 */
91398 static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){
91399   CollSeq *pRet;
91400   if( p->pPrior ){
91401     pRet = multiSelectCollSeq(pParse, p->pPrior, iCol);
91402   }else{
91403     pRet = 0;
91404   }
91405   assert( iCol>=0 );
91406   if( pRet==0 && iCol<p->pEList->nExpr ){
91407     pRet = sqlite3ExprCollSeq(pParse, p->pEList->a[iCol].pExpr);
91408   }
91409   return pRet;
91410 }
91411 #endif /* SQLITE_OMIT_COMPOUND_SELECT */
91412
91413 /* Forward reference */
91414 static int multiSelectOrderBy(
91415   Parse *pParse,        /* Parsing context */
91416   Select *p,            /* The right-most of SELECTs to be coded */
91417   SelectDest *pDest     /* What to do with query results */
91418 );
91419
91420
91421 #ifndef SQLITE_OMIT_COMPOUND_SELECT
91422 /*
91423 ** This routine is called to process a compound query form from
91424 ** two or more separate queries using UNION, UNION ALL, EXCEPT, or
91425 ** INTERSECT
91426 **
91427 ** "p" points to the right-most of the two queries.  the query on the
91428 ** left is p->pPrior.  The left query could also be a compound query
91429 ** in which case this routine will be called recursively. 
91430 **
91431 ** The results of the total query are to be written into a destination
91432 ** of type eDest with parameter iParm.
91433 **
91434 ** Example 1:  Consider a three-way compound SQL statement.
91435 **
91436 **     SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3
91437 **
91438 ** This statement is parsed up as follows:
91439 **
91440 **     SELECT c FROM t3
91441 **      |
91442 **      `----->  SELECT b FROM t2
91443 **                |
91444 **                `------>  SELECT a FROM t1
91445 **
91446 ** The arrows in the diagram above represent the Select.pPrior pointer.
91447 ** So if this routine is called with p equal to the t3 query, then
91448 ** pPrior will be the t2 query.  p->op will be TK_UNION in this case.
91449 **
91450 ** Notice that because of the way SQLite parses compound SELECTs, the
91451 ** individual selects always group from left to right.
91452 */
91453 static int multiSelect(
91454   Parse *pParse,        /* Parsing context */
91455   Select *p,            /* The right-most of SELECTs to be coded */
91456   SelectDest *pDest     /* What to do with query results */
91457 ){
91458   int rc = SQLITE_OK;   /* Success code from a subroutine */
91459   Select *pPrior;       /* Another SELECT immediately to our left */
91460   Vdbe *v;              /* Generate code to this VDBE */
91461   SelectDest dest;      /* Alternative data destination */
91462   Select *pDelete = 0;  /* Chain of simple selects to delete */
91463   sqlite3 *db;          /* Database connection */
91464 #ifndef SQLITE_OMIT_EXPLAIN
91465   int iSub1;            /* EQP id of left-hand query */
91466   int iSub2;            /* EQP id of right-hand query */
91467 #endif
91468
91469   /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs.  Only
91470   ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT.
91471   */
91472   assert( p && p->pPrior );  /* Calling function guarantees this much */
91473   db = pParse->db;
91474   pPrior = p->pPrior;
91475   assert( pPrior->pRightmost!=pPrior );
91476   assert( pPrior->pRightmost==p->pRightmost );
91477   dest = *pDest;
91478   if( pPrior->pOrderBy ){
91479     sqlite3ErrorMsg(pParse,"ORDER BY clause should come after %s not before",
91480       selectOpName(p->op));
91481     rc = 1;
91482     goto multi_select_end;
91483   }
91484   if( pPrior->pLimit ){
91485     sqlite3ErrorMsg(pParse,"LIMIT clause should come after %s not before",
91486       selectOpName(p->op));
91487     rc = 1;
91488     goto multi_select_end;
91489   }
91490
91491   v = sqlite3GetVdbe(pParse);
91492   assert( v!=0 );  /* The VDBE already created by calling function */
91493
91494   /* Create the destination temporary table if necessary
91495   */
91496   if( dest.eDest==SRT_EphemTab ){
91497     assert( p->pEList );
91498     sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iParm, p->pEList->nExpr);
91499     sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
91500     dest.eDest = SRT_Table;
91501   }
91502
91503   /* Make sure all SELECTs in the statement have the same number of elements
91504   ** in their result sets.
91505   */
91506   assert( p->pEList && pPrior->pEList );
91507   if( p->pEList->nExpr!=pPrior->pEList->nExpr ){
91508     sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s"
91509       " do not have the same number of result columns", selectOpName(p->op));
91510     rc = 1;
91511     goto multi_select_end;
91512   }
91513
91514   /* Compound SELECTs that have an ORDER BY clause are handled separately.
91515   */
91516   if( p->pOrderBy ){
91517     return multiSelectOrderBy(pParse, p, pDest);
91518   }
91519
91520   /* Generate code for the left and right SELECT statements.
91521   */
91522   switch( p->op ){
91523     case TK_ALL: {
91524       int addr = 0;
91525       int nLimit;
91526       assert( !pPrior->pLimit );
91527       pPrior->pLimit = p->pLimit;
91528       pPrior->pOffset = p->pOffset;
91529       explainSetInteger(iSub1, pParse->iNextSelectId);
91530       rc = sqlite3Select(pParse, pPrior, &dest);
91531       p->pLimit = 0;
91532       p->pOffset = 0;
91533       if( rc ){
91534         goto multi_select_end;
91535       }
91536       p->pPrior = 0;
91537       p->iLimit = pPrior->iLimit;
91538       p->iOffset = pPrior->iOffset;
91539       if( p->iLimit ){
91540         addr = sqlite3VdbeAddOp1(v, OP_IfZero, p->iLimit);
91541         VdbeComment((v, "Jump ahead if LIMIT reached"));
91542       }
91543       explainSetInteger(iSub2, pParse->iNextSelectId);
91544       rc = sqlite3Select(pParse, p, &dest);
91545       testcase( rc!=SQLITE_OK );
91546       pDelete = p->pPrior;
91547       p->pPrior = pPrior;
91548       p->nSelectRow += pPrior->nSelectRow;
91549       if( pPrior->pLimit
91550        && sqlite3ExprIsInteger(pPrior->pLimit, &nLimit)
91551        && p->nSelectRow > (double)nLimit 
91552       ){
91553         p->nSelectRow = (double)nLimit;
91554       }
91555       if( addr ){
91556         sqlite3VdbeJumpHere(v, addr);
91557       }
91558       break;
91559     }
91560     case TK_EXCEPT:
91561     case TK_UNION: {
91562       int unionTab;    /* Cursor number of the temporary table holding result */
91563       u8 op = 0;       /* One of the SRT_ operations to apply to self */
91564       int priorOp;     /* The SRT_ operation to apply to prior selects */
91565       Expr *pLimit, *pOffset; /* Saved values of p->nLimit and p->nOffset */
91566       int addr;
91567       SelectDest uniondest;
91568
91569       testcase( p->op==TK_EXCEPT );
91570       testcase( p->op==TK_UNION );
91571       priorOp = SRT_Union;
91572       if( dest.eDest==priorOp && ALWAYS(!p->pLimit &&!p->pOffset) ){
91573         /* We can reuse a temporary table generated by a SELECT to our
91574         ** right.
91575         */
91576         assert( p->pRightmost!=p );  /* Can only happen for leftward elements
91577                                      ** of a 3-way or more compound */
91578         assert( p->pLimit==0 );      /* Not allowed on leftward elements */
91579         assert( p->pOffset==0 );     /* Not allowed on leftward elements */
91580         unionTab = dest.iParm;
91581       }else{
91582         /* We will need to create our own temporary table to hold the
91583         ** intermediate results.
91584         */
91585         unionTab = pParse->nTab++;
91586         assert( p->pOrderBy==0 );
91587         addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, unionTab, 0);
91588         assert( p->addrOpenEphm[0] == -1 );
91589         p->addrOpenEphm[0] = addr;
91590         p->pRightmost->selFlags |= SF_UsesEphemeral;
91591         assert( p->pEList );
91592       }
91593
91594       /* Code the SELECT statements to our left
91595       */
91596       assert( !pPrior->pOrderBy );
91597       sqlite3SelectDestInit(&uniondest, priorOp, unionTab);
91598       explainSetInteger(iSub1, pParse->iNextSelectId);
91599       rc = sqlite3Select(pParse, pPrior, &uniondest);
91600       if( rc ){
91601         goto multi_select_end;
91602       }
91603
91604       /* Code the current SELECT statement
91605       */
91606       if( p->op==TK_EXCEPT ){
91607         op = SRT_Except;
91608       }else{
91609         assert( p->op==TK_UNION );
91610         op = SRT_Union;
91611       }
91612       p->pPrior = 0;
91613       pLimit = p->pLimit;
91614       p->pLimit = 0;
91615       pOffset = p->pOffset;
91616       p->pOffset = 0;
91617       uniondest.eDest = op;
91618       explainSetInteger(iSub2, pParse->iNextSelectId);
91619       rc = sqlite3Select(pParse, p, &uniondest);
91620       testcase( rc!=SQLITE_OK );
91621       /* Query flattening in sqlite3Select() might refill p->pOrderBy.
91622       ** Be sure to delete p->pOrderBy, therefore, to avoid a memory leak. */
91623       sqlite3ExprListDelete(db, p->pOrderBy);
91624       pDelete = p->pPrior;
91625       p->pPrior = pPrior;
91626       p->pOrderBy = 0;
91627       if( p->op==TK_UNION ) p->nSelectRow += pPrior->nSelectRow;
91628       sqlite3ExprDelete(db, p->pLimit);
91629       p->pLimit = pLimit;
91630       p->pOffset = pOffset;
91631       p->iLimit = 0;
91632       p->iOffset = 0;
91633
91634       /* Convert the data in the temporary table into whatever form
91635       ** it is that we currently need.
91636       */
91637       assert( unionTab==dest.iParm || dest.eDest!=priorOp );
91638       if( dest.eDest!=priorOp ){
91639         int iCont, iBreak, iStart;
91640         assert( p->pEList );
91641         if( dest.eDest==SRT_Output ){
91642           Select *pFirst = p;
91643           while( pFirst->pPrior ) pFirst = pFirst->pPrior;
91644           generateColumnNames(pParse, 0, pFirst->pEList);
91645         }
91646         iBreak = sqlite3VdbeMakeLabel(v);
91647         iCont = sqlite3VdbeMakeLabel(v);
91648         computeLimitRegisters(pParse, p, iBreak);
91649         sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak);
91650         iStart = sqlite3VdbeCurrentAddr(v);
91651         selectInnerLoop(pParse, p, p->pEList, unionTab, p->pEList->nExpr,
91652                         0, -1, &dest, iCont, iBreak);
91653         sqlite3VdbeResolveLabel(v, iCont);
91654         sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart);
91655         sqlite3VdbeResolveLabel(v, iBreak);
91656         sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0);
91657       }
91658       break;
91659     }
91660     default: assert( p->op==TK_INTERSECT ); {
91661       int tab1, tab2;
91662       int iCont, iBreak, iStart;
91663       Expr *pLimit, *pOffset;
91664       int addr;
91665       SelectDest intersectdest;
91666       int r1;
91667
91668       /* INTERSECT is different from the others since it requires
91669       ** two temporary tables.  Hence it has its own case.  Begin
91670       ** by allocating the tables we will need.
91671       */
91672       tab1 = pParse->nTab++;
91673       tab2 = pParse->nTab++;
91674       assert( p->pOrderBy==0 );
91675
91676       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab1, 0);
91677       assert( p->addrOpenEphm[0] == -1 );
91678       p->addrOpenEphm[0] = addr;
91679       p->pRightmost->selFlags |= SF_UsesEphemeral;
91680       assert( p->pEList );
91681
91682       /* Code the SELECTs to our left into temporary table "tab1".
91683       */
91684       sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1);
91685       explainSetInteger(iSub1, pParse->iNextSelectId);
91686       rc = sqlite3Select(pParse, pPrior, &intersectdest);
91687       if( rc ){
91688         goto multi_select_end;
91689       }
91690
91691       /* Code the current SELECT into temporary table "tab2"
91692       */
91693       addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0);
91694       assert( p->addrOpenEphm[1] == -1 );
91695       p->addrOpenEphm[1] = addr;
91696       p->pPrior = 0;
91697       pLimit = p->pLimit;
91698       p->pLimit = 0;
91699       pOffset = p->pOffset;
91700       p->pOffset = 0;
91701       intersectdest.iParm = tab2;
91702       explainSetInteger(iSub2, pParse->iNextSelectId);
91703       rc = sqlite3Select(pParse, p, &intersectdest);
91704       testcase( rc!=SQLITE_OK );
91705       pDelete = p->pPrior;
91706       p->pPrior = pPrior;
91707       if( p->nSelectRow>pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
91708       sqlite3ExprDelete(db, p->pLimit);
91709       p->pLimit = pLimit;
91710       p->pOffset = pOffset;
91711
91712       /* Generate code to take the intersection of the two temporary
91713       ** tables.
91714       */
91715       assert( p->pEList );
91716       if( dest.eDest==SRT_Output ){
91717         Select *pFirst = p;
91718         while( pFirst->pPrior ) pFirst = pFirst->pPrior;
91719         generateColumnNames(pParse, 0, pFirst->pEList);
91720       }
91721       iBreak = sqlite3VdbeMakeLabel(v);
91722       iCont = sqlite3VdbeMakeLabel(v);
91723       computeLimitRegisters(pParse, p, iBreak);
91724       sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak);
91725       r1 = sqlite3GetTempReg(pParse);
91726       iStart = sqlite3VdbeAddOp2(v, OP_RowKey, tab1, r1);
91727       sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0);
91728       sqlite3ReleaseTempReg(pParse, r1);
91729       selectInnerLoop(pParse, p, p->pEList, tab1, p->pEList->nExpr,
91730                       0, -1, &dest, iCont, iBreak);
91731       sqlite3VdbeResolveLabel(v, iCont);
91732       sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart);
91733       sqlite3VdbeResolveLabel(v, iBreak);
91734       sqlite3VdbeAddOp2(v, OP_Close, tab2, 0);
91735       sqlite3VdbeAddOp2(v, OP_Close, tab1, 0);
91736       break;
91737     }
91738   }
91739
91740   explainComposite(pParse, p->op, iSub1, iSub2, p->op!=TK_ALL);
91741
91742   /* Compute collating sequences used by 
91743   ** temporary tables needed to implement the compound select.
91744   ** Attach the KeyInfo structure to all temporary tables.
91745   **
91746   ** This section is run by the right-most SELECT statement only.
91747   ** SELECT statements to the left always skip this part.  The right-most
91748   ** SELECT might also skip this part if it has no ORDER BY clause and
91749   ** no temp tables are required.
91750   */
91751   if( p->selFlags & SF_UsesEphemeral ){
91752     int i;                        /* Loop counter */
91753     KeyInfo *pKeyInfo;            /* Collating sequence for the result set */
91754     Select *pLoop;                /* For looping through SELECT statements */
91755     CollSeq **apColl;             /* For looping through pKeyInfo->aColl[] */
91756     int nCol;                     /* Number of columns in result set */
91757
91758     assert( p->pRightmost==p );
91759     nCol = p->pEList->nExpr;
91760     pKeyInfo = sqlite3DbMallocZero(db,
91761                        sizeof(*pKeyInfo)+nCol*(sizeof(CollSeq*) + 1));
91762     if( !pKeyInfo ){
91763       rc = SQLITE_NOMEM;
91764       goto multi_select_end;
91765     }
91766
91767     pKeyInfo->enc = ENC(db);
91768     pKeyInfo->nField = (u16)nCol;
91769
91770     for(i=0, apColl=pKeyInfo->aColl; i<nCol; i++, apColl++){
91771       *apColl = multiSelectCollSeq(pParse, p, i);
91772       if( 0==*apColl ){
91773         *apColl = db->pDfltColl;
91774       }
91775     }
91776
91777     for(pLoop=p; pLoop; pLoop=pLoop->pPrior){
91778       for(i=0; i<2; i++){
91779         int addr = pLoop->addrOpenEphm[i];
91780         if( addr<0 ){
91781           /* If [0] is unused then [1] is also unused.  So we can
91782           ** always safely abort as soon as the first unused slot is found */
91783           assert( pLoop->addrOpenEphm[1]<0 );
91784           break;
91785         }
91786         sqlite3VdbeChangeP2(v, addr, nCol);
91787         sqlite3VdbeChangeP4(v, addr, (char*)pKeyInfo, P4_KEYINFO);
91788         pLoop->addrOpenEphm[i] = -1;
91789       }
91790     }
91791     sqlite3DbFree(db, pKeyInfo);
91792   }
91793
91794 multi_select_end:
91795   pDest->iMem = dest.iMem;
91796   pDest->nMem = dest.nMem;
91797   sqlite3SelectDelete(db, pDelete);
91798   return rc;
91799 }
91800 #endif /* SQLITE_OMIT_COMPOUND_SELECT */
91801
91802 /*
91803 ** Code an output subroutine for a coroutine implementation of a
91804 ** SELECT statment.
91805 **
91806 ** The data to be output is contained in pIn->iMem.  There are
91807 ** pIn->nMem columns to be output.  pDest is where the output should
91808 ** be sent.
91809 **
91810 ** regReturn is the number of the register holding the subroutine
91811 ** return address.
91812 **
91813 ** If regPrev>0 then it is the first register in a vector that
91814 ** records the previous output.  mem[regPrev] is a flag that is false
91815 ** if there has been no previous output.  If regPrev>0 then code is
91816 ** generated to suppress duplicates.  pKeyInfo is used for comparing
91817 ** keys.
91818 **
91819 ** If the LIMIT found in p->iLimit is reached, jump immediately to
91820 ** iBreak.
91821 */
91822 static int generateOutputSubroutine(
91823   Parse *pParse,          /* Parsing context */
91824   Select *p,              /* The SELECT statement */
91825   SelectDest *pIn,        /* Coroutine supplying data */
91826   SelectDest *pDest,      /* Where to send the data */
91827   int regReturn,          /* The return address register */
91828   int regPrev,            /* Previous result register.  No uniqueness if 0 */
91829   KeyInfo *pKeyInfo,      /* For comparing with previous entry */
91830   int p4type,             /* The p4 type for pKeyInfo */
91831   int iBreak              /* Jump here if we hit the LIMIT */
91832 ){
91833   Vdbe *v = pParse->pVdbe;
91834   int iContinue;
91835   int addr;
91836
91837   addr = sqlite3VdbeCurrentAddr(v);
91838   iContinue = sqlite3VdbeMakeLabel(v);
91839
91840   /* Suppress duplicates for UNION, EXCEPT, and INTERSECT 
91841   */
91842   if( regPrev ){
91843     int j1, j2;
91844     j1 = sqlite3VdbeAddOp1(v, OP_IfNot, regPrev);
91845     j2 = sqlite3VdbeAddOp4(v, OP_Compare, pIn->iMem, regPrev+1, pIn->nMem,
91846                               (char*)pKeyInfo, p4type);
91847     sqlite3VdbeAddOp3(v, OP_Jump, j2+2, iContinue, j2+2);
91848     sqlite3VdbeJumpHere(v, j1);
91849     sqlite3ExprCodeCopy(pParse, pIn->iMem, regPrev+1, pIn->nMem);
91850     sqlite3VdbeAddOp2(v, OP_Integer, 1, regPrev);
91851   }
91852   if( pParse->db->mallocFailed ) return 0;
91853
91854   /* Suppress the the first OFFSET entries if there is an OFFSET clause
91855   */
91856   codeOffset(v, p, iContinue);
91857
91858   switch( pDest->eDest ){
91859     /* Store the result as data using a unique key.
91860     */
91861     case SRT_Table:
91862     case SRT_EphemTab: {
91863       int r1 = sqlite3GetTempReg(pParse);
91864       int r2 = sqlite3GetTempReg(pParse);
91865       testcase( pDest->eDest==SRT_Table );
91866       testcase( pDest->eDest==SRT_EphemTab );
91867       sqlite3VdbeAddOp3(v, OP_MakeRecord, pIn->iMem, pIn->nMem, r1);
91868       sqlite3VdbeAddOp2(v, OP_NewRowid, pDest->iParm, r2);
91869       sqlite3VdbeAddOp3(v, OP_Insert, pDest->iParm, r1, r2);
91870       sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
91871       sqlite3ReleaseTempReg(pParse, r2);
91872       sqlite3ReleaseTempReg(pParse, r1);
91873       break;
91874     }
91875
91876 #ifndef SQLITE_OMIT_SUBQUERY
91877     /* If we are creating a set for an "expr IN (SELECT ...)" construct,
91878     ** then there should be a single item on the stack.  Write this
91879     ** item into the set table with bogus data.
91880     */
91881     case SRT_Set: {
91882       int r1;
91883       assert( pIn->nMem==1 );
91884       p->affinity = 
91885          sqlite3CompareAffinity(p->pEList->a[0].pExpr, pDest->affinity);
91886       r1 = sqlite3GetTempReg(pParse);
91887       sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iMem, 1, r1, &p->affinity, 1);
91888       sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, 1);
91889       sqlite3VdbeAddOp2(v, OP_IdxInsert, pDest->iParm, r1);
91890       sqlite3ReleaseTempReg(pParse, r1);
91891       break;
91892     }
91893
91894 #if 0  /* Never occurs on an ORDER BY query */
91895     /* If any row exist in the result set, record that fact and abort.
91896     */
91897     case SRT_Exists: {
91898       sqlite3VdbeAddOp2(v, OP_Integer, 1, pDest->iParm);
91899       /* The LIMIT clause will terminate the loop for us */
91900       break;
91901     }
91902 #endif
91903
91904     /* If this is a scalar select that is part of an expression, then
91905     ** store the results in the appropriate memory cell and break out
91906     ** of the scan loop.
91907     */
91908     case SRT_Mem: {
91909       assert( pIn->nMem==1 );
91910       sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iParm, 1);
91911       /* The LIMIT clause will jump out of the loop for us */
91912       break;
91913     }
91914 #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
91915
91916     /* The results are stored in a sequence of registers
91917     ** starting at pDest->iMem.  Then the co-routine yields.
91918     */
91919     case SRT_Coroutine: {
91920       if( pDest->iMem==0 ){
91921         pDest->iMem = sqlite3GetTempRange(pParse, pIn->nMem);
91922         pDest->nMem = pIn->nMem;
91923       }
91924       sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iMem, pDest->nMem);
91925       sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
91926       break;
91927     }
91928
91929     /* If none of the above, then the result destination must be
91930     ** SRT_Output.  This routine is never called with any other
91931     ** destination other than the ones handled above or SRT_Output.
91932     **
91933     ** For SRT_Output, results are stored in a sequence of registers.  
91934     ** Then the OP_ResultRow opcode is used to cause sqlite3_step() to
91935     ** return the next row of result.
91936     */
91937     default: {
91938       assert( pDest->eDest==SRT_Output );
91939       sqlite3VdbeAddOp2(v, OP_ResultRow, pIn->iMem, pIn->nMem);
91940       sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, pIn->nMem);
91941       break;
91942     }
91943   }
91944
91945   /* Jump to the end of the loop if the LIMIT is reached.
91946   */
91947   if( p->iLimit ){
91948     sqlite3VdbeAddOp3(v, OP_IfZero, p->iLimit, iBreak, -1);
91949   }
91950
91951   /* Generate the subroutine return
91952   */
91953   sqlite3VdbeResolveLabel(v, iContinue);
91954   sqlite3VdbeAddOp1(v, OP_Return, regReturn);
91955
91956   return addr;
91957 }
91958
91959 /*
91960 ** Alternative compound select code generator for cases when there
91961 ** is an ORDER BY clause.
91962 **
91963 ** We assume a query of the following form:
91964 **
91965 **      <selectA>  <operator>  <selectB>  ORDER BY <orderbylist>
91966 **
91967 ** <operator> is one of UNION ALL, UNION, EXCEPT, or INTERSECT.  The idea
91968 ** is to code both <selectA> and <selectB> with the ORDER BY clause as
91969 ** co-routines.  Then run the co-routines in parallel and merge the results
91970 ** into the output.  In addition to the two coroutines (called selectA and
91971 ** selectB) there are 7 subroutines:
91972 **
91973 **    outA:    Move the output of the selectA coroutine into the output
91974 **             of the compound query.
91975 **
91976 **    outB:    Move the output of the selectB coroutine into the output
91977 **             of the compound query.  (Only generated for UNION and
91978 **             UNION ALL.  EXCEPT and INSERTSECT never output a row that
91979 **             appears only in B.)
91980 **
91981 **    AltB:    Called when there is data from both coroutines and A<B.
91982 **
91983 **    AeqB:    Called when there is data from both coroutines and A==B.
91984 **
91985 **    AgtB:    Called when there is data from both coroutines and A>B.
91986 **
91987 **    EofA:    Called when data is exhausted from selectA.
91988 **
91989 **    EofB:    Called when data is exhausted from selectB.
91990 **
91991 ** The implementation of the latter five subroutines depend on which 
91992 ** <operator> is used:
91993 **
91994 **
91995 **             UNION ALL         UNION            EXCEPT          INTERSECT
91996 **          -------------  -----------------  --------------  -----------------
91997 **   AltB:   outA, nextA      outA, nextA       outA, nextA         nextA
91998 **
91999 **   AeqB:   outA, nextA         nextA             nextA         outA, nextA
92000 **
92001 **   AgtB:   outB, nextB      outB, nextB          nextB            nextB
92002 **
92003 **   EofA:   outB, nextB      outB, nextB          halt             halt
92004 **
92005 **   EofB:   outA, nextA      outA, nextA       outA, nextA         halt
92006 **
92007 ** In the AltB, AeqB, and AgtB subroutines, an EOF on A following nextA
92008 ** causes an immediate jump to EofA and an EOF on B following nextB causes
92009 ** an immediate jump to EofB.  Within EofA and EofB, and EOF on entry or
92010 ** following nextX causes a jump to the end of the select processing.
92011 **
92012 ** Duplicate removal in the UNION, EXCEPT, and INTERSECT cases is handled
92013 ** within the output subroutine.  The regPrev register set holds the previously
92014 ** output value.  A comparison is made against this value and the output
92015 ** is skipped if the next results would be the same as the previous.
92016 **
92017 ** The implementation plan is to implement the two coroutines and seven
92018 ** subroutines first, then put the control logic at the bottom.  Like this:
92019 **
92020 **          goto Init
92021 **     coA: coroutine for left query (A)
92022 **     coB: coroutine for right query (B)
92023 **    outA: output one row of A
92024 **    outB: output one row of B (UNION and UNION ALL only)
92025 **    EofA: ...
92026 **    EofB: ...
92027 **    AltB: ...
92028 **    AeqB: ...
92029 **    AgtB: ...
92030 **    Init: initialize coroutine registers
92031 **          yield coA
92032 **          if eof(A) goto EofA
92033 **          yield coB
92034 **          if eof(B) goto EofB
92035 **    Cmpr: Compare A, B
92036 **          Jump AltB, AeqB, AgtB
92037 **     End: ...
92038 **
92039 ** We call AltB, AeqB, AgtB, EofA, and EofB "subroutines" but they are not
92040 ** actually called using Gosub and they do not Return.  EofA and EofB loop
92041 ** until all data is exhausted then jump to the "end" labe.  AltB, AeqB,
92042 ** and AgtB jump to either L2 or to one of EofA or EofB.
92043 */
92044 #ifndef SQLITE_OMIT_COMPOUND_SELECT
92045 static int multiSelectOrderBy(
92046   Parse *pParse,        /* Parsing context */
92047   Select *p,            /* The right-most of SELECTs to be coded */
92048   SelectDest *pDest     /* What to do with query results */
92049 ){
92050   int i, j;             /* Loop counters */
92051   Select *pPrior;       /* Another SELECT immediately to our left */
92052   Vdbe *v;              /* Generate code to this VDBE */
92053   SelectDest destA;     /* Destination for coroutine A */
92054   SelectDest destB;     /* Destination for coroutine B */
92055   int regAddrA;         /* Address register for select-A coroutine */
92056   int regEofA;          /* Flag to indicate when select-A is complete */
92057   int regAddrB;         /* Address register for select-B coroutine */
92058   int regEofB;          /* Flag to indicate when select-B is complete */
92059   int addrSelectA;      /* Address of the select-A coroutine */
92060   int addrSelectB;      /* Address of the select-B coroutine */
92061   int regOutA;          /* Address register for the output-A subroutine */
92062   int regOutB;          /* Address register for the output-B subroutine */
92063   int addrOutA;         /* Address of the output-A subroutine */
92064   int addrOutB = 0;     /* Address of the output-B subroutine */
92065   int addrEofA;         /* Address of the select-A-exhausted subroutine */
92066   int addrEofB;         /* Address of the select-B-exhausted subroutine */
92067   int addrAltB;         /* Address of the A<B subroutine */
92068   int addrAeqB;         /* Address of the A==B subroutine */
92069   int addrAgtB;         /* Address of the A>B subroutine */
92070   int regLimitA;        /* Limit register for select-A */
92071   int regLimitB;        /* Limit register for select-A */
92072   int regPrev;          /* A range of registers to hold previous output */
92073   int savedLimit;       /* Saved value of p->iLimit */
92074   int savedOffset;      /* Saved value of p->iOffset */
92075   int labelCmpr;        /* Label for the start of the merge algorithm */
92076   int labelEnd;         /* Label for the end of the overall SELECT stmt */
92077   int j1;               /* Jump instructions that get retargetted */
92078   int op;               /* One of TK_ALL, TK_UNION, TK_EXCEPT, TK_INTERSECT */
92079   KeyInfo *pKeyDup = 0; /* Comparison information for duplicate removal */
92080   KeyInfo *pKeyMerge;   /* Comparison information for merging rows */
92081   sqlite3 *db;          /* Database connection */
92082   ExprList *pOrderBy;   /* The ORDER BY clause */
92083   int nOrderBy;         /* Number of terms in the ORDER BY clause */
92084   int *aPermute;        /* Mapping from ORDER BY terms to result set columns */
92085 #ifndef SQLITE_OMIT_EXPLAIN
92086   int iSub1;            /* EQP id of left-hand query */
92087   int iSub2;            /* EQP id of right-hand query */
92088 #endif
92089
92090   assert( p->pOrderBy!=0 );
92091   assert( pKeyDup==0 ); /* "Managed" code needs this.  Ticket #3382. */
92092   db = pParse->db;
92093   v = pParse->pVdbe;
92094   assert( v!=0 );       /* Already thrown the error if VDBE alloc failed */
92095   labelEnd = sqlite3VdbeMakeLabel(v);
92096   labelCmpr = sqlite3VdbeMakeLabel(v);
92097
92098
92099   /* Patch up the ORDER BY clause
92100   */
92101   op = p->op;  
92102   pPrior = p->pPrior;
92103   assert( pPrior->pOrderBy==0 );
92104   pOrderBy = p->pOrderBy;
92105   assert( pOrderBy );
92106   nOrderBy = pOrderBy->nExpr;
92107
92108   /* For operators other than UNION ALL we have to make sure that
92109   ** the ORDER BY clause covers every term of the result set.  Add
92110   ** terms to the ORDER BY clause as necessary.
92111   */
92112   if( op!=TK_ALL ){
92113     for(i=1; db->mallocFailed==0 && i<=p->pEList->nExpr; i++){
92114       struct ExprList_item *pItem;
92115       for(j=0, pItem=pOrderBy->a; j<nOrderBy; j++, pItem++){
92116         assert( pItem->iCol>0 );
92117         if( pItem->iCol==i ) break;
92118       }
92119       if( j==nOrderBy ){
92120         Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0);
92121         if( pNew==0 ) return SQLITE_NOMEM;
92122         pNew->flags |= EP_IntValue;
92123         pNew->u.iValue = i;
92124         pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew);
92125         pOrderBy->a[nOrderBy++].iCol = (u16)i;
92126       }
92127     }
92128   }
92129
92130   /* Compute the comparison permutation and keyinfo that is used with
92131   ** the permutation used to determine if the next
92132   ** row of results comes from selectA or selectB.  Also add explicit
92133   ** collations to the ORDER BY clause terms so that when the subqueries
92134   ** to the right and the left are evaluated, they use the correct
92135   ** collation.
92136   */
92137   aPermute = sqlite3DbMallocRaw(db, sizeof(int)*nOrderBy);
92138   if( aPermute ){
92139     struct ExprList_item *pItem;
92140     for(i=0, pItem=pOrderBy->a; i<nOrderBy; i++, pItem++){
92141       assert( pItem->iCol>0  && pItem->iCol<=p->pEList->nExpr );
92142       aPermute[i] = pItem->iCol - 1;
92143     }
92144     pKeyMerge =
92145       sqlite3DbMallocRaw(db, sizeof(*pKeyMerge)+nOrderBy*(sizeof(CollSeq*)+1));
92146     if( pKeyMerge ){
92147       pKeyMerge->aSortOrder = (u8*)&pKeyMerge->aColl[nOrderBy];
92148       pKeyMerge->nField = (u16)nOrderBy;
92149       pKeyMerge->enc = ENC(db);
92150       for(i=0; i<nOrderBy; i++){
92151         CollSeq *pColl;
92152         Expr *pTerm = pOrderBy->a[i].pExpr;
92153         if( pTerm->flags & EP_ExpCollate ){
92154           pColl = pTerm->pColl;
92155         }else{
92156           pColl = multiSelectCollSeq(pParse, p, aPermute[i]);
92157           pTerm->flags |= EP_ExpCollate;
92158           pTerm->pColl = pColl;
92159         }
92160         pKeyMerge->aColl[i] = pColl;
92161         pKeyMerge->aSortOrder[i] = pOrderBy->a[i].sortOrder;
92162       }
92163     }
92164   }else{
92165     pKeyMerge = 0;
92166   }
92167
92168   /* Reattach the ORDER BY clause to the query.
92169   */
92170   p->pOrderBy = pOrderBy;
92171   pPrior->pOrderBy = sqlite3ExprListDup(pParse->db, pOrderBy, 0);
92172
92173   /* Allocate a range of temporary registers and the KeyInfo needed
92174   ** for the logic that removes duplicate result rows when the
92175   ** operator is UNION, EXCEPT, or INTERSECT (but not UNION ALL).
92176   */
92177   if( op==TK_ALL ){
92178     regPrev = 0;
92179   }else{
92180     int nExpr = p->pEList->nExpr;
92181     assert( nOrderBy>=nExpr || db->mallocFailed );
92182     regPrev = sqlite3GetTempRange(pParse, nExpr+1);
92183     sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev);
92184     pKeyDup = sqlite3DbMallocZero(db,
92185                   sizeof(*pKeyDup) + nExpr*(sizeof(CollSeq*)+1) );
92186     if( pKeyDup ){
92187       pKeyDup->aSortOrder = (u8*)&pKeyDup->aColl[nExpr];
92188       pKeyDup->nField = (u16)nExpr;
92189       pKeyDup->enc = ENC(db);
92190       for(i=0; i<nExpr; i++){
92191         pKeyDup->aColl[i] = multiSelectCollSeq(pParse, p, i);
92192         pKeyDup->aSortOrder[i] = 0;
92193       }
92194     }
92195   }
92196  
92197   /* Separate the left and the right query from one another
92198   */
92199   p->pPrior = 0;
92200   sqlite3ResolveOrderGroupBy(pParse, p, p->pOrderBy, "ORDER");
92201   if( pPrior->pPrior==0 ){
92202     sqlite3ResolveOrderGroupBy(pParse, pPrior, pPrior->pOrderBy, "ORDER");
92203   }
92204
92205   /* Compute the limit registers */
92206   computeLimitRegisters(pParse, p, labelEnd);
92207   if( p->iLimit && op==TK_ALL ){
92208     regLimitA = ++pParse->nMem;
92209     regLimitB = ++pParse->nMem;
92210     sqlite3VdbeAddOp2(v, OP_Copy, p->iOffset ? p->iOffset+1 : p->iLimit,
92211                                   regLimitA);
92212     sqlite3VdbeAddOp2(v, OP_Copy, regLimitA, regLimitB);
92213   }else{
92214     regLimitA = regLimitB = 0;
92215   }
92216   sqlite3ExprDelete(db, p->pLimit);
92217   p->pLimit = 0;
92218   sqlite3ExprDelete(db, p->pOffset);
92219   p->pOffset = 0;
92220
92221   regAddrA = ++pParse->nMem;
92222   regEofA = ++pParse->nMem;
92223   regAddrB = ++pParse->nMem;
92224   regEofB = ++pParse->nMem;
92225   regOutA = ++pParse->nMem;
92226   regOutB = ++pParse->nMem;
92227   sqlite3SelectDestInit(&destA, SRT_Coroutine, regAddrA);
92228   sqlite3SelectDestInit(&destB, SRT_Coroutine, regAddrB);
92229
92230   /* Jump past the various subroutines and coroutines to the main
92231   ** merge loop
92232   */
92233   j1 = sqlite3VdbeAddOp0(v, OP_Goto);
92234   addrSelectA = sqlite3VdbeCurrentAddr(v);
92235
92236
92237   /* Generate a coroutine to evaluate the SELECT statement to the
92238   ** left of the compound operator - the "A" select.
92239   */
92240   VdbeNoopComment((v, "Begin coroutine for left SELECT"));
92241   pPrior->iLimit = regLimitA;
92242   explainSetInteger(iSub1, pParse->iNextSelectId);
92243   sqlite3Select(pParse, pPrior, &destA);
92244   sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofA);
92245   sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
92246   VdbeNoopComment((v, "End coroutine for left SELECT"));
92247
92248   /* Generate a coroutine to evaluate the SELECT statement on 
92249   ** the right - the "B" select
92250   */
92251   addrSelectB = sqlite3VdbeCurrentAddr(v);
92252   VdbeNoopComment((v, "Begin coroutine for right SELECT"));
92253   savedLimit = p->iLimit;
92254   savedOffset = p->iOffset;
92255   p->iLimit = regLimitB;
92256   p->iOffset = 0;  
92257   explainSetInteger(iSub2, pParse->iNextSelectId);
92258   sqlite3Select(pParse, p, &destB);
92259   p->iLimit = savedLimit;
92260   p->iOffset = savedOffset;
92261   sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofB);
92262   sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
92263   VdbeNoopComment((v, "End coroutine for right SELECT"));
92264
92265   /* Generate a subroutine that outputs the current row of the A
92266   ** select as the next output row of the compound select.
92267   */
92268   VdbeNoopComment((v, "Output routine for A"));
92269   addrOutA = generateOutputSubroutine(pParse,
92270                  p, &destA, pDest, regOutA,
92271                  regPrev, pKeyDup, P4_KEYINFO_HANDOFF, labelEnd);
92272   
92273   /* Generate a subroutine that outputs the current row of the B
92274   ** select as the next output row of the compound select.
92275   */
92276   if( op==TK_ALL || op==TK_UNION ){
92277     VdbeNoopComment((v, "Output routine for B"));
92278     addrOutB = generateOutputSubroutine(pParse,
92279                  p, &destB, pDest, regOutB,
92280                  regPrev, pKeyDup, P4_KEYINFO_STATIC, labelEnd);
92281   }
92282
92283   /* Generate a subroutine to run when the results from select A
92284   ** are exhausted and only data in select B remains.
92285   */
92286   VdbeNoopComment((v, "eof-A subroutine"));
92287   if( op==TK_EXCEPT || op==TK_INTERSECT ){
92288     addrEofA = sqlite3VdbeAddOp2(v, OP_Goto, 0, labelEnd);
92289   }else{  
92290     addrEofA = sqlite3VdbeAddOp2(v, OP_If, regEofB, labelEnd);
92291     sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
92292     sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
92293     sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofA);
92294     p->nSelectRow += pPrior->nSelectRow;
92295   }
92296
92297   /* Generate a subroutine to run when the results from select B
92298   ** are exhausted and only data in select A remains.
92299   */
92300   if( op==TK_INTERSECT ){
92301     addrEofB = addrEofA;
92302     if( p->nSelectRow > pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
92303   }else{  
92304     VdbeNoopComment((v, "eof-B subroutine"));
92305     addrEofB = sqlite3VdbeAddOp2(v, OP_If, regEofA, labelEnd);
92306     sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA);
92307     sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
92308     sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofB);
92309   }
92310
92311   /* Generate code to handle the case of A<B
92312   */
92313   VdbeNoopComment((v, "A-lt-B subroutine"));
92314   addrAltB = sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA);
92315   sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
92316   sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
92317   sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
92318
92319   /* Generate code to handle the case of A==B
92320   */
92321   if( op==TK_ALL ){
92322     addrAeqB = addrAltB;
92323   }else if( op==TK_INTERSECT ){
92324     addrAeqB = addrAltB;
92325     addrAltB++;
92326   }else{
92327     VdbeNoopComment((v, "A-eq-B subroutine"));
92328     addrAeqB =
92329     sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
92330     sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
92331     sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
92332   }
92333
92334   /* Generate code to handle the case of A>B
92335   */
92336   VdbeNoopComment((v, "A-gt-B subroutine"));
92337   addrAgtB = sqlite3VdbeCurrentAddr(v);
92338   if( op==TK_ALL || op==TK_UNION ){
92339     sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
92340   }
92341   sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
92342   sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB);
92343   sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
92344
92345   /* This code runs once to initialize everything.
92346   */
92347   sqlite3VdbeJumpHere(v, j1);
92348   sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofA);
92349   sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofB);
92350   sqlite3VdbeAddOp2(v, OP_Gosub, regAddrA, addrSelectA);
92351   sqlite3VdbeAddOp2(v, OP_Gosub, regAddrB, addrSelectB);
92352   sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
92353   sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB);
92354
92355   /* Implement the main merge loop
92356   */
92357   sqlite3VdbeResolveLabel(v, labelCmpr);
92358   sqlite3VdbeAddOp4(v, OP_Permutation, 0, 0, 0, (char*)aPermute, P4_INTARRAY);
92359   sqlite3VdbeAddOp4(v, OP_Compare, destA.iMem, destB.iMem, nOrderBy,
92360                          (char*)pKeyMerge, P4_KEYINFO_HANDOFF);
92361   sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB);
92362
92363   /* Release temporary registers
92364   */
92365   if( regPrev ){
92366     sqlite3ReleaseTempRange(pParse, regPrev, nOrderBy+1);
92367   }
92368
92369   /* Jump to the this point in order to terminate the query.
92370   */
92371   sqlite3VdbeResolveLabel(v, labelEnd);
92372
92373   /* Set the number of output columns
92374   */
92375   if( pDest->eDest==SRT_Output ){
92376     Select *pFirst = pPrior;
92377     while( pFirst->pPrior ) pFirst = pFirst->pPrior;
92378     generateColumnNames(pParse, 0, pFirst->pEList);
92379   }
92380
92381   /* Reassembly the compound query so that it will be freed correctly
92382   ** by the calling function */
92383   if( p->pPrior ){
92384     sqlite3SelectDelete(db, p->pPrior);
92385   }
92386   p->pPrior = pPrior;
92387
92388   /*** TBD:  Insert subroutine calls to close cursors on incomplete
92389   **** subqueries ****/
92390   explainComposite(pParse, p->op, iSub1, iSub2, 0);
92391   return SQLITE_OK;
92392 }
92393 #endif
92394
92395 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
92396 /* Forward Declarations */
92397 static void substExprList(sqlite3*, ExprList*, int, ExprList*);
92398 static void substSelect(sqlite3*, Select *, int, ExprList *);
92399
92400 /*
92401 ** Scan through the expression pExpr.  Replace every reference to
92402 ** a column in table number iTable with a copy of the iColumn-th
92403 ** entry in pEList.  (But leave references to the ROWID column 
92404 ** unchanged.)
92405 **
92406 ** This routine is part of the flattening procedure.  A subquery
92407 ** whose result set is defined by pEList appears as entry in the
92408 ** FROM clause of a SELECT such that the VDBE cursor assigned to that
92409 ** FORM clause entry is iTable.  This routine make the necessary 
92410 ** changes to pExpr so that it refers directly to the source table
92411 ** of the subquery rather the result set of the subquery.
92412 */
92413 static Expr *substExpr(
92414   sqlite3 *db,        /* Report malloc errors to this connection */
92415   Expr *pExpr,        /* Expr in which substitution occurs */
92416   int iTable,         /* Table to be substituted */
92417   ExprList *pEList    /* Substitute expressions */
92418 ){
92419   if( pExpr==0 ) return 0;
92420   if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable ){
92421     if( pExpr->iColumn<0 ){
92422       pExpr->op = TK_NULL;
92423     }else{
92424       Expr *pNew;
92425       assert( pEList!=0 && pExpr->iColumn<pEList->nExpr );
92426       assert( pExpr->pLeft==0 && pExpr->pRight==0 );
92427       pNew = sqlite3ExprDup(db, pEList->a[pExpr->iColumn].pExpr, 0);
92428       if( pNew && pExpr->pColl ){
92429         pNew->pColl = pExpr->pColl;
92430       }
92431       sqlite3ExprDelete(db, pExpr);
92432       pExpr = pNew;
92433     }
92434   }else{
92435     pExpr->pLeft = substExpr(db, pExpr->pLeft, iTable, pEList);
92436     pExpr->pRight = substExpr(db, pExpr->pRight, iTable, pEList);
92437     if( ExprHasProperty(pExpr, EP_xIsSelect) ){
92438       substSelect(db, pExpr->x.pSelect, iTable, pEList);
92439     }else{
92440       substExprList(db, pExpr->x.pList, iTable, pEList);
92441     }
92442   }
92443   return pExpr;
92444 }
92445 static void substExprList(
92446   sqlite3 *db,         /* Report malloc errors here */
92447   ExprList *pList,     /* List to scan and in which to make substitutes */
92448   int iTable,          /* Table to be substituted */
92449   ExprList *pEList     /* Substitute values */
92450 ){
92451   int i;
92452   if( pList==0 ) return;
92453   for(i=0; i<pList->nExpr; i++){
92454     pList->a[i].pExpr = substExpr(db, pList->a[i].pExpr, iTable, pEList);
92455   }
92456 }
92457 static void substSelect(
92458   sqlite3 *db,         /* Report malloc errors here */
92459   Select *p,           /* SELECT statement in which to make substitutions */
92460   int iTable,          /* Table to be replaced */
92461   ExprList *pEList     /* Substitute values */
92462 ){
92463   SrcList *pSrc;
92464   struct SrcList_item *pItem;
92465   int i;
92466   if( !p ) return;
92467   substExprList(db, p->pEList, iTable, pEList);
92468   substExprList(db, p->pGroupBy, iTable, pEList);
92469   substExprList(db, p->pOrderBy, iTable, pEList);
92470   p->pHaving = substExpr(db, p->pHaving, iTable, pEList);
92471   p->pWhere = substExpr(db, p->pWhere, iTable, pEList);
92472   substSelect(db, p->pPrior, iTable, pEList);
92473   pSrc = p->pSrc;
92474   assert( pSrc );  /* Even for (SELECT 1) we have: pSrc!=0 but pSrc->nSrc==0 */
92475   if( ALWAYS(pSrc) ){
92476     for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
92477       substSelect(db, pItem->pSelect, iTable, pEList);
92478     }
92479   }
92480 }
92481 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
92482
92483 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
92484 /*
92485 ** This routine attempts to flatten subqueries in order to speed
92486 ** execution.  It returns 1 if it makes changes and 0 if no flattening
92487 ** occurs.
92488 **
92489 ** To understand the concept of flattening, consider the following
92490 ** query:
92491 **
92492 **     SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5
92493 **
92494 ** The default way of implementing this query is to execute the
92495 ** subquery first and store the results in a temporary table, then
92496 ** run the outer query on that temporary table.  This requires two
92497 ** passes over the data.  Furthermore, because the temporary table
92498 ** has no indices, the WHERE clause on the outer query cannot be
92499 ** optimized.
92500 **
92501 ** This routine attempts to rewrite queries such as the above into
92502 ** a single flat select, like this:
92503 **
92504 **     SELECT x+y AS a FROM t1 WHERE z<100 AND a>5
92505 **
92506 ** The code generated for this simpification gives the same result
92507 ** but only has to scan the data once.  And because indices might 
92508 ** exist on the table t1, a complete scan of the data might be
92509 ** avoided.
92510 **
92511 ** Flattening is only attempted if all of the following are true:
92512 **
92513 **   (1)  The subquery and the outer query do not both use aggregates.
92514 **
92515 **   (2)  The subquery is not an aggregate or the outer query is not a join.
92516 **
92517 **   (3)  The subquery is not the right operand of a left outer join
92518 **        (Originally ticket #306.  Strengthened by ticket #3300)
92519 **
92520 **   (4)  The subquery is not DISTINCT.
92521 **
92522 **  (**)  At one point restrictions (4) and (5) defined a subset of DISTINCT
92523 **        sub-queries that were excluded from this optimization. Restriction 
92524 **        (4) has since been expanded to exclude all DISTINCT subqueries.
92525 **
92526 **   (6)  The subquery does not use aggregates or the outer query is not
92527 **        DISTINCT.
92528 **
92529 **   (7)  The subquery has a FROM clause.
92530 **
92531 **   (8)  The subquery does not use LIMIT or the outer query is not a join.
92532 **
92533 **   (9)  The subquery does not use LIMIT or the outer query does not use
92534 **        aggregates.
92535 **
92536 **  (10)  The subquery does not use aggregates or the outer query does not
92537 **        use LIMIT.
92538 **
92539 **  (11)  The subquery and the outer query do not both have ORDER BY clauses.
92540 **
92541 **  (**)  Not implemented.  Subsumed into restriction (3).  Was previously
92542 **        a separate restriction deriving from ticket #350.
92543 **
92544 **  (13)  The subquery and outer query do not both use LIMIT.
92545 **
92546 **  (14)  The subquery does not use OFFSET.
92547 **
92548 **  (15)  The outer query is not part of a compound select or the
92549 **        subquery does not have a LIMIT clause.
92550 **        (See ticket #2339 and ticket [02a8e81d44]).
92551 **
92552 **  (16)  The outer query is not an aggregate or the subquery does
92553 **        not contain ORDER BY.  (Ticket #2942)  This used to not matter
92554 **        until we introduced the group_concat() function.  
92555 **
92556 **  (17)  The sub-query is not a compound select, or it is a UNION ALL 
92557 **        compound clause made up entirely of non-aggregate queries, and 
92558 **        the parent query:
92559 **
92560 **          * is not itself part of a compound select,
92561 **          * is not an aggregate or DISTINCT query, and
92562 **          * has no other tables or sub-selects in the FROM clause.
92563 **
92564 **        The parent and sub-query may contain WHERE clauses. Subject to
92565 **        rules (11), (13) and (14), they may also contain ORDER BY,
92566 **        LIMIT and OFFSET clauses.
92567 **
92568 **  (18)  If the sub-query is a compound select, then all terms of the
92569 **        ORDER by clause of the parent must be simple references to 
92570 **        columns of the sub-query.
92571 **
92572 **  (19)  The subquery does not use LIMIT or the outer query does not
92573 **        have a WHERE clause.
92574 **
92575 **  (20)  If the sub-query is a compound select, then it must not use
92576 **        an ORDER BY clause.  Ticket #3773.  We could relax this constraint
92577 **        somewhat by saying that the terms of the ORDER BY clause must
92578 **        appear as unmodified result columns in the outer query.  But
92579 **        have other optimizations in mind to deal with that case.
92580 **
92581 **  (21)  The subquery does not use LIMIT or the outer query is not
92582 **        DISTINCT.  (See ticket [752e1646fc]).
92583 **
92584 ** In this routine, the "p" parameter is a pointer to the outer query.
92585 ** The subquery is p->pSrc->a[iFrom].  isAgg is true if the outer query
92586 ** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates.
92587 **
92588 ** If flattening is not attempted, this routine is a no-op and returns 0.
92589 ** If flattening is attempted this routine returns 1.
92590 **
92591 ** All of the expression analysis must occur on both the outer query and
92592 ** the subquery before this routine runs.
92593 */
92594 static int flattenSubquery(
92595   Parse *pParse,       /* Parsing context */
92596   Select *p,           /* The parent or outer SELECT statement */
92597   int iFrom,           /* Index in p->pSrc->a[] of the inner subquery */
92598   int isAgg,           /* True if outer SELECT uses aggregate functions */
92599   int subqueryIsAgg    /* True if the subquery uses aggregate functions */
92600 ){
92601   const char *zSavedAuthContext = pParse->zAuthContext;
92602   Select *pParent;
92603   Select *pSub;       /* The inner query or "subquery" */
92604   Select *pSub1;      /* Pointer to the rightmost select in sub-query */
92605   SrcList *pSrc;      /* The FROM clause of the outer query */
92606   SrcList *pSubSrc;   /* The FROM clause of the subquery */
92607   ExprList *pList;    /* The result set of the outer query */
92608   int iParent;        /* VDBE cursor number of the pSub result set temp table */
92609   int i;              /* Loop counter */
92610   Expr *pWhere;                    /* The WHERE clause */
92611   struct SrcList_item *pSubitem;   /* The subquery */
92612   sqlite3 *db = pParse->db;
92613
92614   /* Check to see if flattening is permitted.  Return 0 if not.
92615   */
92616   assert( p!=0 );
92617   assert( p->pPrior==0 );  /* Unable to flatten compound queries */
92618   if( db->flags & SQLITE_QueryFlattener ) return 0;
92619   pSrc = p->pSrc;
92620   assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc );
92621   pSubitem = &pSrc->a[iFrom];
92622   iParent = pSubitem->iCursor;
92623   pSub = pSubitem->pSelect;
92624   assert( pSub!=0 );
92625   if( isAgg && subqueryIsAgg ) return 0;                 /* Restriction (1)  */
92626   if( subqueryIsAgg && pSrc->nSrc>1 ) return 0;          /* Restriction (2)  */
92627   pSubSrc = pSub->pSrc;
92628   assert( pSubSrc );
92629   /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants,
92630   ** not arbitrary expresssions, we allowed some combining of LIMIT and OFFSET
92631   ** because they could be computed at compile-time.  But when LIMIT and OFFSET
92632   ** became arbitrary expressions, we were forced to add restrictions (13)
92633   ** and (14). */
92634   if( pSub->pLimit && p->pLimit ) return 0;              /* Restriction (13) */
92635   if( pSub->pOffset ) return 0;                          /* Restriction (14) */
92636   if( p->pRightmost && pSub->pLimit ){
92637     return 0;                                            /* Restriction (15) */
92638   }
92639   if( pSubSrc->nSrc==0 ) return 0;                       /* Restriction (7)  */
92640   if( pSub->selFlags & SF_Distinct ) return 0;           /* Restriction (5)  */
92641   if( pSub->pLimit && (pSrc->nSrc>1 || isAgg) ){
92642      return 0;         /* Restrictions (8)(9) */
92643   }
92644   if( (p->selFlags & SF_Distinct)!=0 && subqueryIsAgg ){
92645      return 0;         /* Restriction (6)  */
92646   }
92647   if( p->pOrderBy && pSub->pOrderBy ){
92648      return 0;                                           /* Restriction (11) */
92649   }
92650   if( isAgg && pSub->pOrderBy ) return 0;                /* Restriction (16) */
92651   if( pSub->pLimit && p->pWhere ) return 0;              /* Restriction (19) */
92652   if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){
92653      return 0;         /* Restriction (21) */
92654   }
92655
92656   /* OBSOLETE COMMENT 1:
92657   ** Restriction 3:  If the subquery is a join, make sure the subquery is 
92658   ** not used as the right operand of an outer join.  Examples of why this
92659   ** is not allowed:
92660   **
92661   **         t1 LEFT OUTER JOIN (t2 JOIN t3)
92662   **
92663   ** If we flatten the above, we would get
92664   **
92665   **         (t1 LEFT OUTER JOIN t2) JOIN t3
92666   **
92667   ** which is not at all the same thing.
92668   **
92669   ** OBSOLETE COMMENT 2:
92670   ** Restriction 12:  If the subquery is the right operand of a left outer
92671   ** join, make sure the subquery has no WHERE clause.
92672   ** An examples of why this is not allowed:
92673   **
92674   **         t1 LEFT OUTER JOIN (SELECT * FROM t2 WHERE t2.x>0)
92675   **
92676   ** If we flatten the above, we would get
92677   **
92678   **         (t1 LEFT OUTER JOIN t2) WHERE t2.x>0
92679   **
92680   ** But the t2.x>0 test will always fail on a NULL row of t2, which
92681   ** effectively converts the OUTER JOIN into an INNER JOIN.
92682   **
92683   ** THIS OVERRIDES OBSOLETE COMMENTS 1 AND 2 ABOVE:
92684   ** Ticket #3300 shows that flattening the right term of a LEFT JOIN
92685   ** is fraught with danger.  Best to avoid the whole thing.  If the
92686   ** subquery is the right term of a LEFT JOIN, then do not flatten.
92687   */
92688   if( (pSubitem->jointype & JT_OUTER)!=0 ){
92689     return 0;
92690   }
92691
92692   /* Restriction 17: If the sub-query is a compound SELECT, then it must
92693   ** use only the UNION ALL operator. And none of the simple select queries
92694   ** that make up the compound SELECT are allowed to be aggregate or distinct
92695   ** queries.
92696   */
92697   if( pSub->pPrior ){
92698     if( pSub->pOrderBy ){
92699       return 0;  /* Restriction 20 */
92700     }
92701     if( isAgg || (p->selFlags & SF_Distinct)!=0 || pSrc->nSrc!=1 ){
92702       return 0;
92703     }
92704     for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){
92705       testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
92706       testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
92707       if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0
92708        || (pSub1->pPrior && pSub1->op!=TK_ALL) 
92709        || NEVER(pSub1->pSrc==0) || pSub1->pSrc->nSrc!=1
92710       ){
92711         return 0;
92712       }
92713     }
92714
92715     /* Restriction 18. */
92716     if( p->pOrderBy ){
92717       int ii;
92718       for(ii=0; ii<p->pOrderBy->nExpr; ii++){
92719         if( p->pOrderBy->a[ii].iCol==0 ) return 0;
92720       }
92721     }
92722   }
92723
92724   /***** If we reach this point, flattening is permitted. *****/
92725
92726   /* Authorize the subquery */
92727   pParse->zAuthContext = pSubitem->zName;
92728   sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0);
92729   pParse->zAuthContext = zSavedAuthContext;
92730
92731   /* If the sub-query is a compound SELECT statement, then (by restrictions
92732   ** 17 and 18 above) it must be a UNION ALL and the parent query must 
92733   ** be of the form:
92734   **
92735   **     SELECT <expr-list> FROM (<sub-query>) <where-clause> 
92736   **
92737   ** followed by any ORDER BY, LIMIT and/or OFFSET clauses. This block
92738   ** creates N-1 copies of the parent query without any ORDER BY, LIMIT or 
92739   ** OFFSET clauses and joins them to the left-hand-side of the original
92740   ** using UNION ALL operators. In this case N is the number of simple
92741   ** select statements in the compound sub-query.
92742   **
92743   ** Example:
92744   **
92745   **     SELECT a+1 FROM (
92746   **        SELECT x FROM tab
92747   **        UNION ALL
92748   **        SELECT y FROM tab
92749   **        UNION ALL
92750   **        SELECT abs(z*2) FROM tab2
92751   **     ) WHERE a!=5 ORDER BY 1
92752   **
92753   ** Transformed into:
92754   **
92755   **     SELECT x+1 FROM tab WHERE x+1!=5
92756   **     UNION ALL
92757   **     SELECT y+1 FROM tab WHERE y+1!=5
92758   **     UNION ALL
92759   **     SELECT abs(z*2)+1 FROM tab2 WHERE abs(z*2)+1!=5
92760   **     ORDER BY 1
92761   **
92762   ** We call this the "compound-subquery flattening".
92763   */
92764   for(pSub=pSub->pPrior; pSub; pSub=pSub->pPrior){
92765     Select *pNew;
92766     ExprList *pOrderBy = p->pOrderBy;
92767     Expr *pLimit = p->pLimit;
92768     Select *pPrior = p->pPrior;
92769     p->pOrderBy = 0;
92770     p->pSrc = 0;
92771     p->pPrior = 0;
92772     p->pLimit = 0;
92773     pNew = sqlite3SelectDup(db, p, 0);
92774     p->pLimit = pLimit;
92775     p->pOrderBy = pOrderBy;
92776     p->pSrc = pSrc;
92777     p->op = TK_ALL;
92778     p->pRightmost = 0;
92779     if( pNew==0 ){
92780       pNew = pPrior;
92781     }else{
92782       pNew->pPrior = pPrior;
92783       pNew->pRightmost = 0;
92784     }
92785     p->pPrior = pNew;
92786     if( db->mallocFailed ) return 1;
92787   }
92788
92789   /* Begin flattening the iFrom-th entry of the FROM clause 
92790   ** in the outer query.
92791   */
92792   pSub = pSub1 = pSubitem->pSelect;
92793
92794   /* Delete the transient table structure associated with the
92795   ** subquery
92796   */
92797   sqlite3DbFree(db, pSubitem->zDatabase);
92798   sqlite3DbFree(db, pSubitem->zName);
92799   sqlite3DbFree(db, pSubitem->zAlias);
92800   pSubitem->zDatabase = 0;
92801   pSubitem->zName = 0;
92802   pSubitem->zAlias = 0;
92803   pSubitem->pSelect = 0;
92804
92805   /* Defer deleting the Table object associated with the
92806   ** subquery until code generation is
92807   ** complete, since there may still exist Expr.pTab entries that
92808   ** refer to the subquery even after flattening.  Ticket #3346.
92809   **
92810   ** pSubitem->pTab is always non-NULL by test restrictions and tests above.
92811   */
92812   if( ALWAYS(pSubitem->pTab!=0) ){
92813     Table *pTabToDel = pSubitem->pTab;
92814     if( pTabToDel->nRef==1 ){
92815       Parse *pToplevel = sqlite3ParseToplevel(pParse);
92816       pTabToDel->pNextZombie = pToplevel->pZombieTab;
92817       pToplevel->pZombieTab = pTabToDel;
92818     }else{
92819       pTabToDel->nRef--;
92820     }
92821     pSubitem->pTab = 0;
92822   }
92823
92824   /* The following loop runs once for each term in a compound-subquery
92825   ** flattening (as described above).  If we are doing a different kind
92826   ** of flattening - a flattening other than a compound-subquery flattening -
92827   ** then this loop only runs once.
92828   **
92829   ** This loop moves all of the FROM elements of the subquery into the
92830   ** the FROM clause of the outer query.  Before doing this, remember
92831   ** the cursor number for the original outer query FROM element in
92832   ** iParent.  The iParent cursor will never be used.  Subsequent code
92833   ** will scan expressions looking for iParent references and replace
92834   ** those references with expressions that resolve to the subquery FROM
92835   ** elements we are now copying in.
92836   */
92837   for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){
92838     int nSubSrc;
92839     u8 jointype = 0;
92840     pSubSrc = pSub->pSrc;     /* FROM clause of subquery */
92841     nSubSrc = pSubSrc->nSrc;  /* Number of terms in subquery FROM clause */
92842     pSrc = pParent->pSrc;     /* FROM clause of the outer query */
92843
92844     if( pSrc ){
92845       assert( pParent==p );  /* First time through the loop */
92846       jointype = pSubitem->jointype;
92847     }else{
92848       assert( pParent!=p );  /* 2nd and subsequent times through the loop */
92849       pSrc = pParent->pSrc = sqlite3SrcListAppend(db, 0, 0, 0);
92850       if( pSrc==0 ){
92851         assert( db->mallocFailed );
92852         break;
92853       }
92854     }
92855
92856     /* The subquery uses a single slot of the FROM clause of the outer
92857     ** query.  If the subquery has more than one element in its FROM clause,
92858     ** then expand the outer query to make space for it to hold all elements
92859     ** of the subquery.
92860     **
92861     ** Example:
92862     **
92863     **    SELECT * FROM tabA, (SELECT * FROM sub1, sub2), tabB;
92864     **
92865     ** The outer query has 3 slots in its FROM clause.  One slot of the
92866     ** outer query (the middle slot) is used by the subquery.  The next
92867     ** block of code will expand the out query to 4 slots.  The middle
92868     ** slot is expanded to two slots in order to make space for the
92869     ** two elements in the FROM clause of the subquery.
92870     */
92871     if( nSubSrc>1 ){
92872       pParent->pSrc = pSrc = sqlite3SrcListEnlarge(db, pSrc, nSubSrc-1,iFrom+1);
92873       if( db->mallocFailed ){
92874         break;
92875       }
92876     }
92877
92878     /* Transfer the FROM clause terms from the subquery into the
92879     ** outer query.
92880     */
92881     for(i=0; i<nSubSrc; i++){
92882       sqlite3IdListDelete(db, pSrc->a[i+iFrom].pUsing);
92883       pSrc->a[i+iFrom] = pSubSrc->a[i];
92884       memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i]));
92885     }
92886     pSrc->a[iFrom].jointype = jointype;
92887   
92888     /* Now begin substituting subquery result set expressions for 
92889     ** references to the iParent in the outer query.
92890     ** 
92891     ** Example:
92892     **
92893     **   SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b;
92894     **   \                     \_____________ subquery __________/          /
92895     **    \_____________________ outer query ______________________________/
92896     **
92897     ** We look at every expression in the outer query and every place we see
92898     ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10".
92899     */
92900     pList = pParent->pEList;
92901     for(i=0; i<pList->nExpr; i++){
92902       if( pList->a[i].zName==0 ){
92903         const char *zSpan = pList->a[i].zSpan;
92904         if( ALWAYS(zSpan) ){
92905           pList->a[i].zName = sqlite3DbStrDup(db, zSpan);
92906         }
92907       }
92908     }
92909     substExprList(db, pParent->pEList, iParent, pSub->pEList);
92910     if( isAgg ){
92911       substExprList(db, pParent->pGroupBy, iParent, pSub->pEList);
92912       pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList);
92913     }
92914     if( pSub->pOrderBy ){
92915       assert( pParent->pOrderBy==0 );
92916       pParent->pOrderBy = pSub->pOrderBy;
92917       pSub->pOrderBy = 0;
92918     }else if( pParent->pOrderBy ){
92919       substExprList(db, pParent->pOrderBy, iParent, pSub->pEList);
92920     }
92921     if( pSub->pWhere ){
92922       pWhere = sqlite3ExprDup(db, pSub->pWhere, 0);
92923     }else{
92924       pWhere = 0;
92925     }
92926     if( subqueryIsAgg ){
92927       assert( pParent->pHaving==0 );
92928       pParent->pHaving = pParent->pWhere;
92929       pParent->pWhere = pWhere;
92930       pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList);
92931       pParent->pHaving = sqlite3ExprAnd(db, pParent->pHaving, 
92932                                   sqlite3ExprDup(db, pSub->pHaving, 0));
92933       assert( pParent->pGroupBy==0 );
92934       pParent->pGroupBy = sqlite3ExprListDup(db, pSub->pGroupBy, 0);
92935     }else{
92936       pParent->pWhere = substExpr(db, pParent->pWhere, iParent, pSub->pEList);
92937       pParent->pWhere = sqlite3ExprAnd(db, pParent->pWhere, pWhere);
92938     }
92939   
92940     /* The flattened query is distinct if either the inner or the
92941     ** outer query is distinct. 
92942     */
92943     pParent->selFlags |= pSub->selFlags & SF_Distinct;
92944   
92945     /*
92946     ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y;
92947     **
92948     ** One is tempted to try to add a and b to combine the limits.  But this
92949     ** does not work if either limit is negative.
92950     */
92951     if( pSub->pLimit ){
92952       pParent->pLimit = pSub->pLimit;
92953       pSub->pLimit = 0;
92954     }
92955   }
92956
92957   /* Finially, delete what is left of the subquery and return
92958   ** success.
92959   */
92960   sqlite3SelectDelete(db, pSub1);
92961
92962   return 1;
92963 }
92964 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
92965
92966 /*
92967 ** Analyze the SELECT statement passed as an argument to see if it
92968 ** is a min() or max() query. Return WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX if 
92969 ** it is, or 0 otherwise. At present, a query is considered to be
92970 ** a min()/max() query if:
92971 **
92972 **   1. There is a single object in the FROM clause.
92973 **
92974 **   2. There is a single expression in the result set, and it is
92975 **      either min(x) or max(x), where x is a column reference.
92976 */
92977 static u8 minMaxQuery(Select *p){
92978   Expr *pExpr;
92979   ExprList *pEList = p->pEList;
92980
92981   if( pEList->nExpr!=1 ) return WHERE_ORDERBY_NORMAL;
92982   pExpr = pEList->a[0].pExpr;
92983   if( pExpr->op!=TK_AGG_FUNCTION ) return 0;
92984   if( NEVER(ExprHasProperty(pExpr, EP_xIsSelect)) ) return 0;
92985   pEList = pExpr->x.pList;
92986   if( pEList==0 || pEList->nExpr!=1 ) return 0;
92987   if( pEList->a[0].pExpr->op!=TK_AGG_COLUMN ) return WHERE_ORDERBY_NORMAL;
92988   assert( !ExprHasProperty(pExpr, EP_IntValue) );
92989   if( sqlite3StrICmp(pExpr->u.zToken,"min")==0 ){
92990     return WHERE_ORDERBY_MIN;
92991   }else if( sqlite3StrICmp(pExpr->u.zToken,"max")==0 ){
92992     return WHERE_ORDERBY_MAX;
92993   }
92994   return WHERE_ORDERBY_NORMAL;
92995 }
92996
92997 /*
92998 ** The select statement passed as the first argument is an aggregate query.
92999 ** The second argment is the associated aggregate-info object. This 
93000 ** function tests if the SELECT is of the form:
93001 **
93002 **   SELECT count(*) FROM <tbl>
93003 **
93004 ** where table is a database table, not a sub-select or view. If the query
93005 ** does match this pattern, then a pointer to the Table object representing
93006 ** <tbl> is returned. Otherwise, 0 is returned.
93007 */
93008 static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){
93009   Table *pTab;
93010   Expr *pExpr;
93011
93012   assert( !p->pGroupBy );
93013
93014   if( p->pWhere || p->pEList->nExpr!=1 
93015    || p->pSrc->nSrc!=1 || p->pSrc->a[0].pSelect
93016   ){
93017     return 0;
93018   }
93019   pTab = p->pSrc->a[0].pTab;
93020   pExpr = p->pEList->a[0].pExpr;
93021   assert( pTab && !pTab->pSelect && pExpr );
93022
93023   if( IsVirtual(pTab) ) return 0;
93024   if( pExpr->op!=TK_AGG_FUNCTION ) return 0;
93025   if( (pAggInfo->aFunc[0].pFunc->flags&SQLITE_FUNC_COUNT)==0 ) return 0;
93026   if( pExpr->flags&EP_Distinct ) return 0;
93027
93028   return pTab;
93029 }
93030
93031 /*
93032 ** If the source-list item passed as an argument was augmented with an
93033 ** INDEXED BY clause, then try to locate the specified index. If there
93034 ** was such a clause and the named index cannot be found, return 
93035 ** SQLITE_ERROR and leave an error in pParse. Otherwise, populate 
93036 ** pFrom->pIndex and return SQLITE_OK.
93037 */
93038 SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *pParse, struct SrcList_item *pFrom){
93039   if( pFrom->pTab && pFrom->zIndex ){
93040     Table *pTab = pFrom->pTab;
93041     char *zIndex = pFrom->zIndex;
93042     Index *pIdx;
93043     for(pIdx=pTab->pIndex; 
93044         pIdx && sqlite3StrICmp(pIdx->zName, zIndex); 
93045         pIdx=pIdx->pNext
93046     );
93047     if( !pIdx ){
93048       sqlite3ErrorMsg(pParse, "no such index: %s", zIndex, 0);
93049       pParse->checkSchema = 1;
93050       return SQLITE_ERROR;
93051     }
93052     pFrom->pIndex = pIdx;
93053   }
93054   return SQLITE_OK;
93055 }
93056
93057 /*
93058 ** This routine is a Walker callback for "expanding" a SELECT statement.
93059 ** "Expanding" means to do the following:
93060 **
93061 **    (1)  Make sure VDBE cursor numbers have been assigned to every
93062 **         element of the FROM clause.
93063 **
93064 **    (2)  Fill in the pTabList->a[].pTab fields in the SrcList that 
93065 **         defines FROM clause.  When views appear in the FROM clause,
93066 **         fill pTabList->a[].pSelect with a copy of the SELECT statement
93067 **         that implements the view.  A copy is made of the view's SELECT
93068 **         statement so that we can freely modify or delete that statement
93069 **         without worrying about messing up the presistent representation
93070 **         of the view.
93071 **
93072 **    (3)  Add terms to the WHERE clause to accomodate the NATURAL keyword
93073 **         on joins and the ON and USING clause of joins.
93074 **
93075 **    (4)  Scan the list of columns in the result set (pEList) looking
93076 **         for instances of the "*" operator or the TABLE.* operator.
93077 **         If found, expand each "*" to be every column in every table
93078 **         and TABLE.* to be every column in TABLE.
93079 **
93080 */
93081 static int selectExpander(Walker *pWalker, Select *p){
93082   Parse *pParse = pWalker->pParse;
93083   int i, j, k;
93084   SrcList *pTabList;
93085   ExprList *pEList;
93086   struct SrcList_item *pFrom;
93087   sqlite3 *db = pParse->db;
93088
93089   if( db->mallocFailed  ){
93090     return WRC_Abort;
93091   }
93092   if( NEVER(p->pSrc==0) || (p->selFlags & SF_Expanded)!=0 ){
93093     return WRC_Prune;
93094   }
93095   p->selFlags |= SF_Expanded;
93096   pTabList = p->pSrc;
93097   pEList = p->pEList;
93098
93099   /* Make sure cursor numbers have been assigned to all entries in
93100   ** the FROM clause of the SELECT statement.
93101   */
93102   sqlite3SrcListAssignCursors(pParse, pTabList);
93103
93104   /* Look up every table named in the FROM clause of the select.  If
93105   ** an entry of the FROM clause is a subquery instead of a table or view,
93106   ** then create a transient table structure to describe the subquery.
93107   */
93108   for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
93109     Table *pTab;
93110     if( pFrom->pTab!=0 ){
93111       /* This statement has already been prepared.  There is no need
93112       ** to go further. */
93113       assert( i==0 );
93114       return WRC_Prune;
93115     }
93116     if( pFrom->zName==0 ){
93117 #ifndef SQLITE_OMIT_SUBQUERY
93118       Select *pSel = pFrom->pSelect;
93119       /* A sub-query in the FROM clause of a SELECT */
93120       assert( pSel!=0 );
93121       assert( pFrom->pTab==0 );
93122       sqlite3WalkSelect(pWalker, pSel);
93123       pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table));
93124       if( pTab==0 ) return WRC_Abort;
93125       pTab->nRef = 1;
93126       pTab->zName = sqlite3MPrintf(db, "sqlite_subquery_%p_", (void*)pTab);
93127       while( pSel->pPrior ){ pSel = pSel->pPrior; }
93128       selectColumnsFromExprList(pParse, pSel->pEList, &pTab->nCol, &pTab->aCol);
93129       pTab->iPKey = -1;
93130       pTab->nRowEst = 1000000;
93131       pTab->tabFlags |= TF_Ephemeral;
93132 #endif
93133     }else{
93134       /* An ordinary table or view name in the FROM clause */
93135       assert( pFrom->pTab==0 );
93136       pFrom->pTab = pTab = 
93137         sqlite3LocateTable(pParse,0,pFrom->zName,pFrom->zDatabase);
93138       if( pTab==0 ) return WRC_Abort;
93139       pTab->nRef++;
93140 #if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE)
93141       if( pTab->pSelect || IsVirtual(pTab) ){
93142         /* We reach here if the named table is a really a view */
93143         if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort;
93144         assert( pFrom->pSelect==0 );
93145         pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0);
93146         sqlite3WalkSelect(pWalker, pFrom->pSelect);
93147       }
93148 #endif
93149     }
93150
93151     /* Locate the index named by the INDEXED BY clause, if any. */
93152     if( sqlite3IndexedByLookup(pParse, pFrom) ){
93153       return WRC_Abort;
93154     }
93155   }
93156
93157   /* Process NATURAL keywords, and ON and USING clauses of joins.
93158   */
93159   if( db->mallocFailed || sqliteProcessJoin(pParse, p) ){
93160     return WRC_Abort;
93161   }
93162
93163   /* For every "*" that occurs in the column list, insert the names of
93164   ** all columns in all tables.  And for every TABLE.* insert the names
93165   ** of all columns in TABLE.  The parser inserted a special expression
93166   ** with the TK_ALL operator for each "*" that it found in the column list.
93167   ** The following code just has to locate the TK_ALL expressions and expand
93168   ** each one to the list of all columns in all tables.
93169   **
93170   ** The first loop just checks to see if there are any "*" operators
93171   ** that need expanding.
93172   */
93173   for(k=0; k<pEList->nExpr; k++){
93174     Expr *pE = pEList->a[k].pExpr;
93175     if( pE->op==TK_ALL ) break;
93176     assert( pE->op!=TK_DOT || pE->pRight!=0 );
93177     assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) );
93178     if( pE->op==TK_DOT && pE->pRight->op==TK_ALL ) break;
93179   }
93180   if( k<pEList->nExpr ){
93181     /*
93182     ** If we get here it means the result set contains one or more "*"
93183     ** operators that need to be expanded.  Loop through each expression
93184     ** in the result set and expand them one by one.
93185     */
93186     struct ExprList_item *a = pEList->a;
93187     ExprList *pNew = 0;
93188     int flags = pParse->db->flags;
93189     int longNames = (flags & SQLITE_FullColNames)!=0
93190                       && (flags & SQLITE_ShortColNames)==0;
93191
93192     for(k=0; k<pEList->nExpr; k++){
93193       Expr *pE = a[k].pExpr;
93194       assert( pE->op!=TK_DOT || pE->pRight!=0 );
93195       if( pE->op!=TK_ALL && (pE->op!=TK_DOT || pE->pRight->op!=TK_ALL) ){
93196         /* This particular expression does not need to be expanded.
93197         */
93198         pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr);
93199         if( pNew ){
93200           pNew->a[pNew->nExpr-1].zName = a[k].zName;
93201           pNew->a[pNew->nExpr-1].zSpan = a[k].zSpan;
93202           a[k].zName = 0;
93203           a[k].zSpan = 0;
93204         }
93205         a[k].pExpr = 0;
93206       }else{
93207         /* This expression is a "*" or a "TABLE.*" and needs to be
93208         ** expanded. */
93209         int tableSeen = 0;      /* Set to 1 when TABLE matches */
93210         char *zTName;            /* text of name of TABLE */
93211         if( pE->op==TK_DOT ){
93212           assert( pE->pLeft!=0 );
93213           assert( !ExprHasProperty(pE->pLeft, EP_IntValue) );
93214           zTName = pE->pLeft->u.zToken;
93215         }else{
93216           zTName = 0;
93217         }
93218         for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
93219           Table *pTab = pFrom->pTab;
93220           char *zTabName = pFrom->zAlias;
93221           if( zTabName==0 ){
93222             zTabName = pTab->zName;
93223           }
93224           if( db->mallocFailed ) break;
93225           if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){
93226             continue;
93227           }
93228           tableSeen = 1;
93229           for(j=0; j<pTab->nCol; j++){
93230             Expr *pExpr, *pRight;
93231             char *zName = pTab->aCol[j].zName;
93232             char *zColname;  /* The computed column name */
93233             char *zToFree;   /* Malloced string that needs to be freed */
93234             Token sColname;  /* Computed column name as a token */
93235
93236             /* If a column is marked as 'hidden' (currently only possible
93237             ** for virtual tables), do not include it in the expanded
93238             ** result-set list.
93239             */
93240             if( IsHiddenColumn(&pTab->aCol[j]) ){
93241               assert(IsVirtual(pTab));
93242               continue;
93243             }
93244
93245             if( i>0 && zTName==0 ){
93246               if( (pFrom->jointype & JT_NATURAL)!=0
93247                 && tableAndColumnIndex(pTabList, i, zName, 0, 0)
93248               ){
93249                 /* In a NATURAL join, omit the join columns from the 
93250                 ** table to the right of the join */
93251                 continue;
93252               }
93253               if( sqlite3IdListIndex(pFrom->pUsing, zName)>=0 ){
93254                 /* In a join with a USING clause, omit columns in the
93255                 ** using clause from the table on the right. */
93256                 continue;
93257               }
93258             }
93259             pRight = sqlite3Expr(db, TK_ID, zName);
93260             zColname = zName;
93261             zToFree = 0;
93262             if( longNames || pTabList->nSrc>1 ){
93263               Expr *pLeft;
93264               pLeft = sqlite3Expr(db, TK_ID, zTabName);
93265               pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
93266               if( longNames ){
93267                 zColname = sqlite3MPrintf(db, "%s.%s", zTabName, zName);
93268                 zToFree = zColname;
93269               }
93270             }else{
93271               pExpr = pRight;
93272             }
93273             pNew = sqlite3ExprListAppend(pParse, pNew, pExpr);
93274             sColname.z = zColname;
93275             sColname.n = sqlite3Strlen30(zColname);
93276             sqlite3ExprListSetName(pParse, pNew, &sColname, 0);
93277             sqlite3DbFree(db, zToFree);
93278           }
93279         }
93280         if( !tableSeen ){
93281           if( zTName ){
93282             sqlite3ErrorMsg(pParse, "no such table: %s", zTName);
93283           }else{
93284             sqlite3ErrorMsg(pParse, "no tables specified");
93285           }
93286         }
93287       }
93288     }
93289     sqlite3ExprListDelete(db, pEList);
93290     p->pEList = pNew;
93291   }
93292 #if SQLITE_MAX_COLUMN
93293   if( p->pEList && p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
93294     sqlite3ErrorMsg(pParse, "too many columns in result set");
93295   }
93296 #endif
93297   return WRC_Continue;
93298 }
93299
93300 /*
93301 ** No-op routine for the parse-tree walker.
93302 **
93303 ** When this routine is the Walker.xExprCallback then expression trees
93304 ** are walked without any actions being taken at each node.  Presumably,
93305 ** when this routine is used for Walker.xExprCallback then 
93306 ** Walker.xSelectCallback is set to do something useful for every 
93307 ** subquery in the parser tree.
93308 */
93309 static int exprWalkNoop(Walker *NotUsed, Expr *NotUsed2){
93310   UNUSED_PARAMETER2(NotUsed, NotUsed2);
93311   return WRC_Continue;
93312 }
93313
93314 /*
93315 ** This routine "expands" a SELECT statement and all of its subqueries.
93316 ** For additional information on what it means to "expand" a SELECT
93317 ** statement, see the comment on the selectExpand worker callback above.
93318 **
93319 ** Expanding a SELECT statement is the first step in processing a
93320 ** SELECT statement.  The SELECT statement must be expanded before
93321 ** name resolution is performed.
93322 **
93323 ** If anything goes wrong, an error message is written into pParse.
93324 ** The calling function can detect the problem by looking at pParse->nErr
93325 ** and/or pParse->db->mallocFailed.
93326 */
93327 static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
93328   Walker w;
93329   w.xSelectCallback = selectExpander;
93330   w.xExprCallback = exprWalkNoop;
93331   w.pParse = pParse;
93332   sqlite3WalkSelect(&w, pSelect);
93333 }
93334
93335
93336 #ifndef SQLITE_OMIT_SUBQUERY
93337 /*
93338 ** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo()
93339 ** interface.
93340 **
93341 ** For each FROM-clause subquery, add Column.zType and Column.zColl
93342 ** information to the Table structure that represents the result set
93343 ** of that subquery.
93344 **
93345 ** The Table structure that represents the result set was constructed
93346 ** by selectExpander() but the type and collation information was omitted
93347 ** at that point because identifiers had not yet been resolved.  This
93348 ** routine is called after identifier resolution.
93349 */
93350 static int selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
93351   Parse *pParse;
93352   int i;
93353   SrcList *pTabList;
93354   struct SrcList_item *pFrom;
93355
93356   assert( p->selFlags & SF_Resolved );
93357   if( (p->selFlags & SF_HasTypeInfo)==0 ){
93358     p->selFlags |= SF_HasTypeInfo;
93359     pParse = pWalker->pParse;
93360     pTabList = p->pSrc;
93361     for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
93362       Table *pTab = pFrom->pTab;
93363       if( ALWAYS(pTab!=0) && (pTab->tabFlags & TF_Ephemeral)!=0 ){
93364         /* A sub-query in the FROM clause of a SELECT */
93365         Select *pSel = pFrom->pSelect;
93366         assert( pSel );
93367         while( pSel->pPrior ) pSel = pSel->pPrior;
93368         selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSel);
93369       }
93370     }
93371   }
93372   return WRC_Continue;
93373 }
93374 #endif
93375
93376
93377 /*
93378 ** This routine adds datatype and collating sequence information to
93379 ** the Table structures of all FROM-clause subqueries in a
93380 ** SELECT statement.
93381 **
93382 ** Use this routine after name resolution.
93383 */
93384 static void sqlite3SelectAddTypeInfo(Parse *pParse, Select *pSelect){
93385 #ifndef SQLITE_OMIT_SUBQUERY
93386   Walker w;
93387   w.xSelectCallback = selectAddSubqueryTypeInfo;
93388   w.xExprCallback = exprWalkNoop;
93389   w.pParse = pParse;
93390   sqlite3WalkSelect(&w, pSelect);
93391 #endif
93392 }
93393
93394
93395 /*
93396 ** This routine sets of a SELECT statement for processing.  The
93397 ** following is accomplished:
93398 **
93399 **     *  VDBE Cursor numbers are assigned to all FROM-clause terms.
93400 **     *  Ephemeral Table objects are created for all FROM-clause subqueries.
93401 **     *  ON and USING clauses are shifted into WHERE statements
93402 **     *  Wildcards "*" and "TABLE.*" in result sets are expanded.
93403 **     *  Identifiers in expression are matched to tables.
93404 **
93405 ** This routine acts recursively on all subqueries within the SELECT.
93406 */
93407 SQLITE_PRIVATE void sqlite3SelectPrep(
93408   Parse *pParse,         /* The parser context */
93409   Select *p,             /* The SELECT statement being coded. */
93410   NameContext *pOuterNC  /* Name context for container */
93411 ){
93412   sqlite3 *db;
93413   if( NEVER(p==0) ) return;
93414   db = pParse->db;
93415   if( p->selFlags & SF_HasTypeInfo ) return;
93416   sqlite3SelectExpand(pParse, p);
93417   if( pParse->nErr || db->mallocFailed ) return;
93418   sqlite3ResolveSelectNames(pParse, p, pOuterNC);
93419   if( pParse->nErr || db->mallocFailed ) return;
93420   sqlite3SelectAddTypeInfo(pParse, p);
93421 }
93422
93423 /*
93424 ** Reset the aggregate accumulator.
93425 **
93426 ** The aggregate accumulator is a set of memory cells that hold
93427 ** intermediate results while calculating an aggregate.  This
93428 ** routine simply stores NULLs in all of those memory cells.
93429 */
93430 static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
93431   Vdbe *v = pParse->pVdbe;
93432   int i;
93433   struct AggInfo_func *pFunc;
93434   if( pAggInfo->nFunc+pAggInfo->nColumn==0 ){
93435     return;
93436   }
93437   for(i=0; i<pAggInfo->nColumn; i++){
93438     sqlite3VdbeAddOp2(v, OP_Null, 0, pAggInfo->aCol[i].iMem);
93439   }
93440   for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
93441     sqlite3VdbeAddOp2(v, OP_Null, 0, pFunc->iMem);
93442     if( pFunc->iDistinct>=0 ){
93443       Expr *pE = pFunc->pExpr;
93444       assert( !ExprHasProperty(pE, EP_xIsSelect) );
93445       if( pE->x.pList==0 || pE->x.pList->nExpr!=1 ){
93446         sqlite3ErrorMsg(pParse, "DISTINCT aggregates must have exactly one "
93447            "argument");
93448         pFunc->iDistinct = -1;
93449       }else{
93450         KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList);
93451         sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0,
93452                           (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
93453       }
93454     }
93455   }
93456 }
93457
93458 /*
93459 ** Invoke the OP_AggFinalize opcode for every aggregate function
93460 ** in the AggInfo structure.
93461 */
93462 static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){
93463   Vdbe *v = pParse->pVdbe;
93464   int i;
93465   struct AggInfo_func *pF;
93466   for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
93467     ExprList *pList = pF->pExpr->x.pList;
93468     assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) );
93469     sqlite3VdbeAddOp4(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0, 0,
93470                       (void*)pF->pFunc, P4_FUNCDEF);
93471   }
93472 }
93473
93474 /*
93475 ** Update the accumulator memory cells for an aggregate based on
93476 ** the current cursor position.
93477 */
93478 static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){
93479   Vdbe *v = pParse->pVdbe;
93480   int i;
93481   struct AggInfo_func *pF;
93482   struct AggInfo_col *pC;
93483
93484   pAggInfo->directMode = 1;
93485   sqlite3ExprCacheClear(pParse);
93486   for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
93487     int nArg;
93488     int addrNext = 0;
93489     int regAgg;
93490     ExprList *pList = pF->pExpr->x.pList;
93491     assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) );
93492     if( pList ){
93493       nArg = pList->nExpr;
93494       regAgg = sqlite3GetTempRange(pParse, nArg);
93495       sqlite3ExprCodeExprList(pParse, pList, regAgg, 1);
93496     }else{
93497       nArg = 0;
93498       regAgg = 0;
93499     }
93500     if( pF->iDistinct>=0 ){
93501       addrNext = sqlite3VdbeMakeLabel(v);
93502       assert( nArg==1 );
93503       codeDistinct(pParse, pF->iDistinct, addrNext, 1, regAgg);
93504     }
93505     if( pF->pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
93506       CollSeq *pColl = 0;
93507       struct ExprList_item *pItem;
93508       int j;
93509       assert( pList!=0 );  /* pList!=0 if pF->pFunc has NEEDCOLL */
93510       for(j=0, pItem=pList->a; !pColl && j<nArg; j++, pItem++){
93511         pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
93512       }
93513       if( !pColl ){
93514         pColl = pParse->db->pDfltColl;
93515       }
93516       sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
93517     }
93518     sqlite3VdbeAddOp4(v, OP_AggStep, 0, regAgg, pF->iMem,
93519                       (void*)pF->pFunc, P4_FUNCDEF);
93520     sqlite3VdbeChangeP5(v, (u8)nArg);
93521     sqlite3ExprCacheAffinityChange(pParse, regAgg, nArg);
93522     sqlite3ReleaseTempRange(pParse, regAgg, nArg);
93523     if( addrNext ){
93524       sqlite3VdbeResolveLabel(v, addrNext);
93525       sqlite3ExprCacheClear(pParse);
93526     }
93527   }
93528
93529   /* Before populating the accumulator registers, clear the column cache.
93530   ** Otherwise, if any of the required column values are already present 
93531   ** in registers, sqlite3ExprCode() may use OP_SCopy to copy the value
93532   ** to pC->iMem. But by the time the value is used, the original register
93533   ** may have been used, invalidating the underlying buffer holding the
93534   ** text or blob value. See ticket [883034dcb5].
93535   **
93536   ** Another solution would be to change the OP_SCopy used to copy cached
93537   ** values to an OP_Copy.
93538   */
93539   sqlite3ExprCacheClear(pParse);
93540   for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){
93541     sqlite3ExprCode(pParse, pC->pExpr, pC->iMem);
93542   }
93543   pAggInfo->directMode = 0;
93544   sqlite3ExprCacheClear(pParse);
93545 }
93546
93547 /*
93548 ** Add a single OP_Explain instruction to the VDBE to explain a simple
93549 ** count(*) query ("SELECT count(*) FROM pTab").
93550 */
93551 #ifndef SQLITE_OMIT_EXPLAIN
93552 static void explainSimpleCount(
93553   Parse *pParse,                  /* Parse context */
93554   Table *pTab,                    /* Table being queried */
93555   Index *pIdx                     /* Index used to optimize scan, or NULL */
93556 ){
93557   if( pParse->explain==2 ){
93558     char *zEqp = sqlite3MPrintf(pParse->db, "SCAN TABLE %s %s%s(~%d rows)",
93559         pTab->zName, 
93560         pIdx ? "USING COVERING INDEX " : "",
93561         pIdx ? pIdx->zName : "",
93562         pTab->nRowEst
93563     );
93564     sqlite3VdbeAddOp4(
93565         pParse->pVdbe, OP_Explain, pParse->iSelectId, 0, 0, zEqp, P4_DYNAMIC
93566     );
93567   }
93568 }
93569 #else
93570 # define explainSimpleCount(a,b,c)
93571 #endif
93572
93573 /*
93574 ** Generate code for the SELECT statement given in the p argument.  
93575 **
93576 ** The results are distributed in various ways depending on the
93577 ** contents of the SelectDest structure pointed to by argument pDest
93578 ** as follows:
93579 **
93580 **     pDest->eDest    Result
93581 **     ------------    -------------------------------------------
93582 **     SRT_Output      Generate a row of output (using the OP_ResultRow
93583 **                     opcode) for each row in the result set.
93584 **
93585 **     SRT_Mem         Only valid if the result is a single column.
93586 **                     Store the first column of the first result row
93587 **                     in register pDest->iParm then abandon the rest
93588 **                     of the query.  This destination implies "LIMIT 1".
93589 **
93590 **     SRT_Set         The result must be a single column.  Store each
93591 **                     row of result as the key in table pDest->iParm. 
93592 **                     Apply the affinity pDest->affinity before storing
93593 **                     results.  Used to implement "IN (SELECT ...)".
93594 **
93595 **     SRT_Union       Store results as a key in a temporary table pDest->iParm.
93596 **
93597 **     SRT_Except      Remove results from the temporary table pDest->iParm.
93598 **
93599 **     SRT_Table       Store results in temporary table pDest->iParm.
93600 **                     This is like SRT_EphemTab except that the table
93601 **                     is assumed to already be open.
93602 **
93603 **     SRT_EphemTab    Create an temporary table pDest->iParm and store
93604 **                     the result there. The cursor is left open after
93605 **                     returning.  This is like SRT_Table except that
93606 **                     this destination uses OP_OpenEphemeral to create
93607 **                     the table first.
93608 **
93609 **     SRT_Coroutine   Generate a co-routine that returns a new row of
93610 **                     results each time it is invoked.  The entry point
93611 **                     of the co-routine is stored in register pDest->iParm.
93612 **
93613 **     SRT_Exists      Store a 1 in memory cell pDest->iParm if the result
93614 **                     set is not empty.
93615 **
93616 **     SRT_Discard     Throw the results away.  This is used by SELECT
93617 **                     statements within triggers whose only purpose is
93618 **                     the side-effects of functions.
93619 **
93620 ** This routine returns the number of errors.  If any errors are
93621 ** encountered, then an appropriate error message is left in
93622 ** pParse->zErrMsg.
93623 **
93624 ** This routine does NOT free the Select structure passed in.  The
93625 ** calling function needs to do that.
93626 */
93627 SQLITE_PRIVATE int sqlite3Select(
93628   Parse *pParse,         /* The parser context */
93629   Select *p,             /* The SELECT statement being coded. */
93630   SelectDest *pDest      /* What to do with the query results */
93631 ){
93632   int i, j;              /* Loop counters */
93633   WhereInfo *pWInfo;     /* Return from sqlite3WhereBegin() */
93634   Vdbe *v;               /* The virtual machine under construction */
93635   int isAgg;             /* True for select lists like "count(*)" */
93636   ExprList *pEList;      /* List of columns to extract. */
93637   SrcList *pTabList;     /* List of tables to select from */
93638   Expr *pWhere;          /* The WHERE clause.  May be NULL */
93639   ExprList *pOrderBy;    /* The ORDER BY clause.  May be NULL */
93640   ExprList *pGroupBy;    /* The GROUP BY clause.  May be NULL */
93641   Expr *pHaving;         /* The HAVING clause.  May be NULL */
93642   int isDistinct;        /* True if the DISTINCT keyword is present */
93643   int distinct;          /* Table to use for the distinct set */
93644   int rc = 1;            /* Value to return from this function */
93645   int addrSortIndex;     /* Address of an OP_OpenEphemeral instruction */
93646   AggInfo sAggInfo;      /* Information used by aggregate queries */
93647   int iEnd;              /* Address of the end of the query */
93648   sqlite3 *db;           /* The database connection */
93649
93650 #ifndef SQLITE_OMIT_EXPLAIN
93651   int iRestoreSelectId = pParse->iSelectId;
93652   pParse->iSelectId = pParse->iNextSelectId++;
93653 #endif
93654
93655   db = pParse->db;
93656   if( p==0 || db->mallocFailed || pParse->nErr ){
93657     return 1;
93658   }
93659   if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
93660   memset(&sAggInfo, 0, sizeof(sAggInfo));
93661
93662   if( IgnorableOrderby(pDest) ){
93663     assert(pDest->eDest==SRT_Exists || pDest->eDest==SRT_Union || 
93664            pDest->eDest==SRT_Except || pDest->eDest==SRT_Discard);
93665     /* If ORDER BY makes no difference in the output then neither does
93666     ** DISTINCT so it can be removed too. */
93667     sqlite3ExprListDelete(db, p->pOrderBy);
93668     p->pOrderBy = 0;
93669     p->selFlags &= ~SF_Distinct;
93670   }
93671   sqlite3SelectPrep(pParse, p, 0);
93672   pOrderBy = p->pOrderBy;
93673   pTabList = p->pSrc;
93674   pEList = p->pEList;
93675   if( pParse->nErr || db->mallocFailed ){
93676     goto select_end;
93677   }
93678   isAgg = (p->selFlags & SF_Aggregate)!=0;
93679   assert( pEList!=0 );
93680
93681   /* Begin generating code.
93682   */
93683   v = sqlite3GetVdbe(pParse);
93684   if( v==0 ) goto select_end;
93685
93686   /* If writing to memory or generating a set
93687   ** only a single column may be output.
93688   */
93689 #ifndef SQLITE_OMIT_SUBQUERY
93690   if( checkForMultiColumnSelectError(pParse, pDest, pEList->nExpr) ){
93691     goto select_end;
93692   }
93693 #endif
93694
93695   /* Generate code for all sub-queries in the FROM clause
93696   */
93697 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
93698   for(i=0; !p->pPrior && i<pTabList->nSrc; i++){
93699     struct SrcList_item *pItem = &pTabList->a[i];
93700     SelectDest dest;
93701     Select *pSub = pItem->pSelect;
93702     int isAggSub;
93703
93704     if( pSub==0 || pItem->isPopulated ) continue;
93705
93706     /* Increment Parse.nHeight by the height of the largest expression
93707     ** tree refered to by this, the parent select. The child select
93708     ** may contain expression trees of at most
93709     ** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit
93710     ** more conservative than necessary, but much easier than enforcing
93711     ** an exact limit.
93712     */
93713     pParse->nHeight += sqlite3SelectExprHeight(p);
93714
93715     /* Check to see if the subquery can be absorbed into the parent. */
93716     isAggSub = (pSub->selFlags & SF_Aggregate)!=0;
93717     if( flattenSubquery(pParse, p, i, isAgg, isAggSub) ){
93718       if( isAggSub ){
93719         isAgg = 1;
93720         p->selFlags |= SF_Aggregate;
93721       }
93722       i = -1;
93723     }else{
93724       sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
93725       assert( pItem->isPopulated==0 );
93726       explainSetInteger(pItem->iSelectId, (u8)pParse->iNextSelectId);
93727       sqlite3Select(pParse, pSub, &dest);
93728       pItem->isPopulated = 1;
93729       pItem->pTab->nRowEst = (unsigned)pSub->nSelectRow;
93730     }
93731     if( /*pParse->nErr ||*/ db->mallocFailed ){
93732       goto select_end;
93733     }
93734     pParse->nHeight -= sqlite3SelectExprHeight(p);
93735     pTabList = p->pSrc;
93736     if( !IgnorableOrderby(pDest) ){
93737       pOrderBy = p->pOrderBy;
93738     }
93739   }
93740   pEList = p->pEList;
93741 #endif
93742   pWhere = p->pWhere;
93743   pGroupBy = p->pGroupBy;
93744   pHaving = p->pHaving;
93745   isDistinct = (p->selFlags & SF_Distinct)!=0;
93746
93747 #ifndef SQLITE_OMIT_COMPOUND_SELECT
93748   /* If there is are a sequence of queries, do the earlier ones first.
93749   */
93750   if( p->pPrior ){
93751     if( p->pRightmost==0 ){
93752       Select *pLoop, *pRight = 0;
93753       int cnt = 0;
93754       int mxSelect;
93755       for(pLoop=p; pLoop; pLoop=pLoop->pPrior, cnt++){
93756         pLoop->pRightmost = p;
93757         pLoop->pNext = pRight;
93758         pRight = pLoop;
93759       }
93760       mxSelect = db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT];
93761       if( mxSelect && cnt>mxSelect ){
93762         sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
93763         goto select_end;
93764       }
93765     }
93766     rc = multiSelect(pParse, p, pDest);
93767     explainSetInteger(pParse->iSelectId, iRestoreSelectId);
93768     return rc;
93769   }
93770 #endif
93771
93772   /* If possible, rewrite the query to use GROUP BY instead of DISTINCT.
93773   ** GROUP BY might use an index, DISTINCT never does.
93774   */
93775   assert( p->pGroupBy==0 || (p->selFlags & SF_Aggregate)!=0 );
93776   if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct ){
93777     p->pGroupBy = sqlite3ExprListDup(db, p->pEList, 0);
93778     pGroupBy = p->pGroupBy;
93779     p->selFlags &= ~SF_Distinct;
93780   }
93781
93782   /* If there is both a GROUP BY and an ORDER BY clause and they are
93783   ** identical, then disable the ORDER BY clause since the GROUP BY
93784   ** will cause elements to come out in the correct order.  This is
93785   ** an optimization - the correct answer should result regardless.
93786   ** Use the SQLITE_GroupByOrder flag with SQLITE_TESTCTRL_OPTIMIZER
93787   ** to disable this optimization for testing purposes.
93788   */
93789   if( sqlite3ExprListCompare(p->pGroupBy, pOrderBy)==0
93790          && (db->flags & SQLITE_GroupByOrder)==0 ){
93791     pOrderBy = 0;
93792   }
93793
93794   /* If there is an ORDER BY clause, then this sorting
93795   ** index might end up being unused if the data can be 
93796   ** extracted in pre-sorted order.  If that is the case, then the
93797   ** OP_OpenEphemeral instruction will be changed to an OP_Noop once
93798   ** we figure out that the sorting index is not needed.  The addrSortIndex
93799   ** variable is used to facilitate that change.
93800   */
93801   if( pOrderBy ){
93802     KeyInfo *pKeyInfo;
93803     pKeyInfo = keyInfoFromExprList(pParse, pOrderBy);
93804     pOrderBy->iECursor = pParse->nTab++;
93805     p->addrOpenEphm[2] = addrSortIndex =
93806       sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
93807                            pOrderBy->iECursor, pOrderBy->nExpr+2, 0,
93808                            (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
93809   }else{
93810     addrSortIndex = -1;
93811   }
93812
93813   /* If the output is destined for a temporary table, open that table.
93814   */
93815   if( pDest->eDest==SRT_EphemTab ){
93816     sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pDest->iParm, pEList->nExpr);
93817   }
93818
93819   /* Set the limiter.
93820   */
93821   iEnd = sqlite3VdbeMakeLabel(v);
93822   p->nSelectRow = (double)LARGEST_INT64;
93823   computeLimitRegisters(pParse, p, iEnd);
93824
93825   /* Open a virtual index to use for the distinct set.
93826   */
93827   if( p->selFlags & SF_Distinct ){
93828     KeyInfo *pKeyInfo;
93829     assert( isAgg || pGroupBy );
93830     distinct = pParse->nTab++;
93831     pKeyInfo = keyInfoFromExprList(pParse, p->pEList);
93832     sqlite3VdbeAddOp4(v, OP_OpenEphemeral, distinct, 0, 0,
93833                         (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
93834     sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
93835   }else{
93836     distinct = -1;
93837   }
93838
93839   /* Aggregate and non-aggregate queries are handled differently */
93840   if( !isAgg && pGroupBy==0 ){
93841     /* This case is for non-aggregate queries
93842     ** Begin the database scan
93843     */
93844     pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pOrderBy, 0);
93845     if( pWInfo==0 ) goto select_end;
93846     if( pWInfo->nRowOut < p->nSelectRow ) p->nSelectRow = pWInfo->nRowOut;
93847
93848     /* If sorting index that was created by a prior OP_OpenEphemeral 
93849     ** instruction ended up not being needed, then change the OP_OpenEphemeral
93850     ** into an OP_Noop.
93851     */
93852     if( addrSortIndex>=0 && pOrderBy==0 ){
93853       sqlite3VdbeChangeToNoop(v, addrSortIndex, 1);
93854       p->addrOpenEphm[2] = -1;
93855     }
93856
93857     /* Use the standard inner loop
93858     */
93859     assert(!isDistinct);
93860     selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, -1, pDest,
93861                     pWInfo->iContinue, pWInfo->iBreak);
93862
93863     /* End the database scan loop.
93864     */
93865     sqlite3WhereEnd(pWInfo);
93866   }else{
93867     /* This is the processing for aggregate queries */
93868     NameContext sNC;    /* Name context for processing aggregate information */
93869     int iAMem;          /* First Mem address for storing current GROUP BY */
93870     int iBMem;          /* First Mem address for previous GROUP BY */
93871     int iUseFlag;       /* Mem address holding flag indicating that at least
93872                         ** one row of the input to the aggregator has been
93873                         ** processed */
93874     int iAbortFlag;     /* Mem address which causes query abort if positive */
93875     int groupBySort;    /* Rows come from source in GROUP BY order */
93876     int addrEnd;        /* End of processing for this SELECT */
93877
93878     /* Remove any and all aliases between the result set and the
93879     ** GROUP BY clause.
93880     */
93881     if( pGroupBy ){
93882       int k;                        /* Loop counter */
93883       struct ExprList_item *pItem;  /* For looping over expression in a list */
93884
93885       for(k=p->pEList->nExpr, pItem=p->pEList->a; k>0; k--, pItem++){
93886         pItem->iAlias = 0;
93887       }
93888       for(k=pGroupBy->nExpr, pItem=pGroupBy->a; k>0; k--, pItem++){
93889         pItem->iAlias = 0;
93890       }
93891       if( p->nSelectRow>(double)100 ) p->nSelectRow = (double)100;
93892     }else{
93893       p->nSelectRow = (double)1;
93894     }
93895
93896  
93897     /* Create a label to jump to when we want to abort the query */
93898     addrEnd = sqlite3VdbeMakeLabel(v);
93899
93900     /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in
93901     ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the
93902     ** SELECT statement.
93903     */
93904     memset(&sNC, 0, sizeof(sNC));
93905     sNC.pParse = pParse;
93906     sNC.pSrcList = pTabList;
93907     sNC.pAggInfo = &sAggInfo;
93908     sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0;
93909     sAggInfo.pGroupBy = pGroupBy;
93910     sqlite3ExprAnalyzeAggList(&sNC, pEList);
93911     sqlite3ExprAnalyzeAggList(&sNC, pOrderBy);
93912     if( pHaving ){
93913       sqlite3ExprAnalyzeAggregates(&sNC, pHaving);
93914     }
93915     sAggInfo.nAccumulator = sAggInfo.nColumn;
93916     for(i=0; i<sAggInfo.nFunc; i++){
93917       assert( !ExprHasProperty(sAggInfo.aFunc[i].pExpr, EP_xIsSelect) );
93918       sqlite3ExprAnalyzeAggList(&sNC, sAggInfo.aFunc[i].pExpr->x.pList);
93919     }
93920     if( db->mallocFailed ) goto select_end;
93921
93922     /* Processing for aggregates with GROUP BY is very different and
93923     ** much more complex than aggregates without a GROUP BY.
93924     */
93925     if( pGroupBy ){
93926       KeyInfo *pKeyInfo;  /* Keying information for the group by clause */
93927       int j1;             /* A-vs-B comparision jump */
93928       int addrOutputRow;  /* Start of subroutine that outputs a result row */
93929       int regOutputRow;   /* Return address register for output subroutine */
93930       int addrSetAbort;   /* Set the abort flag and return */
93931       int addrTopOfLoop;  /* Top of the input loop */
93932       int addrSortingIdx; /* The OP_OpenEphemeral for the sorting index */
93933       int addrReset;      /* Subroutine for resetting the accumulator */
93934       int regReset;       /* Return address register for reset subroutine */
93935
93936       /* If there is a GROUP BY clause we might need a sorting index to
93937       ** implement it.  Allocate that sorting index now.  If it turns out
93938       ** that we do not need it after all, the OpenEphemeral instruction
93939       ** will be converted into a Noop.  
93940       */
93941       sAggInfo.sortingIdx = pParse->nTab++;
93942       pKeyInfo = keyInfoFromExprList(pParse, pGroupBy);
93943       addrSortingIdx = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, 
93944           sAggInfo.sortingIdx, sAggInfo.nSortingColumn, 
93945           0, (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
93946
93947       /* Initialize memory locations used by GROUP BY aggregate processing
93948       */
93949       iUseFlag = ++pParse->nMem;
93950       iAbortFlag = ++pParse->nMem;
93951       regOutputRow = ++pParse->nMem;
93952       addrOutputRow = sqlite3VdbeMakeLabel(v);
93953       regReset = ++pParse->nMem;
93954       addrReset = sqlite3VdbeMakeLabel(v);
93955       iAMem = pParse->nMem + 1;
93956       pParse->nMem += pGroupBy->nExpr;
93957       iBMem = pParse->nMem + 1;
93958       pParse->nMem += pGroupBy->nExpr;
93959       sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag);
93960       VdbeComment((v, "clear abort flag"));
93961       sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag);
93962       VdbeComment((v, "indicate accumulator empty"));
93963
93964       /* Begin a loop that will extract all source rows in GROUP BY order.
93965       ** This might involve two separate loops with an OP_Sort in between, or
93966       ** it might be a single loop that uses an index to extract information
93967       ** in the right order to begin with.
93968       */
93969       sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
93970       pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pGroupBy, 0);
93971       if( pWInfo==0 ) goto select_end;
93972       if( pGroupBy==0 ){
93973         /* The optimizer is able to deliver rows in group by order so
93974         ** we do not have to sort.  The OP_OpenEphemeral table will be
93975         ** cancelled later because we still need to use the pKeyInfo
93976         */
93977         pGroupBy = p->pGroupBy;
93978         groupBySort = 0;
93979       }else{
93980         /* Rows are coming out in undetermined order.  We have to push
93981         ** each row into a sorting index, terminate the first loop,
93982         ** then loop over the sorting index in order to get the output
93983         ** in sorted order
93984         */
93985         int regBase;
93986         int regRecord;
93987         int nCol;
93988         int nGroupBy;
93989
93990         explainTempTable(pParse, 
93991             isDistinct && !(p->selFlags&SF_Distinct)?"DISTINCT":"GROUP BY");
93992
93993         groupBySort = 1;
93994         nGroupBy = pGroupBy->nExpr;
93995         nCol = nGroupBy + 1;
93996         j = nGroupBy+1;
93997         for(i=0; i<sAggInfo.nColumn; i++){
93998           if( sAggInfo.aCol[i].iSorterColumn>=j ){
93999             nCol++;
94000             j++;
94001           }
94002         }
94003         regBase = sqlite3GetTempRange(pParse, nCol);
94004         sqlite3ExprCacheClear(pParse);
94005         sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0);
94006         sqlite3VdbeAddOp2(v, OP_Sequence, sAggInfo.sortingIdx,regBase+nGroupBy);
94007         j = nGroupBy+1;
94008         for(i=0; i<sAggInfo.nColumn; i++){
94009           struct AggInfo_col *pCol = &sAggInfo.aCol[i];
94010           if( pCol->iSorterColumn>=j ){
94011             int r1 = j + regBase;
94012             int r2;
94013
94014             r2 = sqlite3ExprCodeGetColumn(pParse, 
94015                                pCol->pTab, pCol->iColumn, pCol->iTable, r1);
94016             if( r1!=r2 ){
94017               sqlite3VdbeAddOp2(v, OP_SCopy, r2, r1);
94018             }
94019             j++;
94020           }
94021         }
94022         regRecord = sqlite3GetTempReg(pParse);
94023         sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord);
94024         sqlite3VdbeAddOp2(v, OP_IdxInsert, sAggInfo.sortingIdx, regRecord);
94025         sqlite3ReleaseTempReg(pParse, regRecord);
94026         sqlite3ReleaseTempRange(pParse, regBase, nCol);
94027         sqlite3WhereEnd(pWInfo);
94028         sqlite3VdbeAddOp2(v, OP_Sort, sAggInfo.sortingIdx, addrEnd);
94029         VdbeComment((v, "GROUP BY sort"));
94030         sAggInfo.useSortingIdx = 1;
94031         sqlite3ExprCacheClear(pParse);
94032       }
94033
94034       /* Evaluate the current GROUP BY terms and store in b0, b1, b2...
94035       ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth)
94036       ** Then compare the current GROUP BY terms against the GROUP BY terms
94037       ** from the previous row currently stored in a0, a1, a2...
94038       */
94039       addrTopOfLoop = sqlite3VdbeCurrentAddr(v);
94040       sqlite3ExprCacheClear(pParse);
94041       for(j=0; j<pGroupBy->nExpr; j++){
94042         if( groupBySort ){
94043           sqlite3VdbeAddOp3(v, OP_Column, sAggInfo.sortingIdx, j, iBMem+j);
94044         }else{
94045           sAggInfo.directMode = 1;
94046           sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j);
94047         }
94048       }
94049       sqlite3VdbeAddOp4(v, OP_Compare, iAMem, iBMem, pGroupBy->nExpr,
94050                           (char*)pKeyInfo, P4_KEYINFO);
94051       j1 = sqlite3VdbeCurrentAddr(v);
94052       sqlite3VdbeAddOp3(v, OP_Jump, j1+1, 0, j1+1);
94053
94054       /* Generate code that runs whenever the GROUP BY changes.
94055       ** Changes in the GROUP BY are detected by the previous code
94056       ** block.  If there were no changes, this block is skipped.
94057       **
94058       ** This code copies current group by terms in b0,b1,b2,...
94059       ** over to a0,a1,a2.  It then calls the output subroutine
94060       ** and resets the aggregate accumulator registers in preparation
94061       ** for the next GROUP BY batch.
94062       */
94063       sqlite3ExprCodeMove(pParse, iBMem, iAMem, pGroupBy->nExpr);
94064       sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
94065       VdbeComment((v, "output one row"));
94066       sqlite3VdbeAddOp2(v, OP_IfPos, iAbortFlag, addrEnd);
94067       VdbeComment((v, "check abort flag"));
94068       sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
94069       VdbeComment((v, "reset accumulator"));
94070
94071       /* Update the aggregate accumulators based on the content of
94072       ** the current row
94073       */
94074       sqlite3VdbeJumpHere(v, j1);
94075       updateAccumulator(pParse, &sAggInfo);
94076       sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag);
94077       VdbeComment((v, "indicate data in accumulator"));
94078
94079       /* End of the loop
94080       */
94081       if( groupBySort ){
94082         sqlite3VdbeAddOp2(v, OP_Next, sAggInfo.sortingIdx, addrTopOfLoop);
94083       }else{
94084         sqlite3WhereEnd(pWInfo);
94085         sqlite3VdbeChangeToNoop(v, addrSortingIdx, 1);
94086       }
94087
94088       /* Output the final row of result
94089       */
94090       sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
94091       VdbeComment((v, "output final row"));
94092
94093       /* Jump over the subroutines
94094       */
94095       sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEnd);
94096
94097       /* Generate a subroutine that outputs a single row of the result
94098       ** set.  This subroutine first looks at the iUseFlag.  If iUseFlag
94099       ** is less than or equal to zero, the subroutine is a no-op.  If
94100       ** the processing calls for the query to abort, this subroutine
94101       ** increments the iAbortFlag memory location before returning in
94102       ** order to signal the caller to abort.
94103       */
94104       addrSetAbort = sqlite3VdbeCurrentAddr(v);
94105       sqlite3VdbeAddOp2(v, OP_Integer, 1, iAbortFlag);
94106       VdbeComment((v, "set abort flag"));
94107       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
94108       sqlite3VdbeResolveLabel(v, addrOutputRow);
94109       addrOutputRow = sqlite3VdbeCurrentAddr(v);
94110       sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2);
94111       VdbeComment((v, "Groupby result generator entry point"));
94112       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
94113       finalizeAggFunctions(pParse, &sAggInfo);
94114       sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL);
94115       selectInnerLoop(pParse, p, p->pEList, 0, 0, pOrderBy,
94116                       distinct, pDest,
94117                       addrOutputRow+1, addrSetAbort);
94118       sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
94119       VdbeComment((v, "end groupby result generator"));
94120
94121       /* Generate a subroutine that will reset the group-by accumulator
94122       */
94123       sqlite3VdbeResolveLabel(v, addrReset);
94124       resetAccumulator(pParse, &sAggInfo);
94125       sqlite3VdbeAddOp1(v, OP_Return, regReset);
94126      
94127     } /* endif pGroupBy.  Begin aggregate queries without GROUP BY: */
94128     else {
94129       ExprList *pDel = 0;
94130 #ifndef SQLITE_OMIT_BTREECOUNT
94131       Table *pTab;
94132       if( (pTab = isSimpleCount(p, &sAggInfo))!=0 ){
94133         /* If isSimpleCount() returns a pointer to a Table structure, then
94134         ** the SQL statement is of the form:
94135         **
94136         **   SELECT count(*) FROM <tbl>
94137         **
94138         ** where the Table structure returned represents table <tbl>.
94139         **
94140         ** This statement is so common that it is optimized specially. The
94141         ** OP_Count instruction is executed either on the intkey table that
94142         ** contains the data for table <tbl> or on one of its indexes. It
94143         ** is better to execute the op on an index, as indexes are almost
94144         ** always spread across less pages than their corresponding tables.
94145         */
94146         const int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
94147         const int iCsr = pParse->nTab++;     /* Cursor to scan b-tree */
94148         Index *pIdx;                         /* Iterator variable */
94149         KeyInfo *pKeyInfo = 0;               /* Keyinfo for scanned index */
94150         Index *pBest = 0;                    /* Best index found so far */
94151         int iRoot = pTab->tnum;              /* Root page of scanned b-tree */
94152
94153         sqlite3CodeVerifySchema(pParse, iDb);
94154         sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
94155
94156         /* Search for the index that has the least amount of columns. If
94157         ** there is such an index, and it has less columns than the table
94158         ** does, then we can assume that it consumes less space on disk and
94159         ** will therefore be cheaper to scan to determine the query result.
94160         ** In this case set iRoot to the root page number of the index b-tree
94161         ** and pKeyInfo to the KeyInfo structure required to navigate the
94162         ** index.
94163         **
94164         ** In practice the KeyInfo structure will not be used. It is only 
94165         ** passed to keep OP_OpenRead happy.
94166         */
94167         for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
94168           if( !pBest || pIdx->nColumn<pBest->nColumn ){
94169             pBest = pIdx;
94170           }
94171         }
94172         if( pBest && pBest->nColumn<pTab->nCol ){
94173           iRoot = pBest->tnum;
94174           pKeyInfo = sqlite3IndexKeyinfo(pParse, pBest);
94175         }
94176
94177         /* Open a read-only cursor, execute the OP_Count, close the cursor. */
94178         sqlite3VdbeAddOp3(v, OP_OpenRead, iCsr, iRoot, iDb);
94179         if( pKeyInfo ){
94180           sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO_HANDOFF);
94181         }
94182         sqlite3VdbeAddOp2(v, OP_Count, iCsr, sAggInfo.aFunc[0].iMem);
94183         sqlite3VdbeAddOp1(v, OP_Close, iCsr);
94184         explainSimpleCount(pParse, pTab, pBest);
94185       }else
94186 #endif /* SQLITE_OMIT_BTREECOUNT */
94187       {
94188         /* Check if the query is of one of the following forms:
94189         **
94190         **   SELECT min(x) FROM ...
94191         **   SELECT max(x) FROM ...
94192         **
94193         ** If it is, then ask the code in where.c to attempt to sort results
94194         ** as if there was an "ORDER ON x" or "ORDER ON x DESC" clause. 
94195         ** If where.c is able to produce results sorted in this order, then
94196         ** add vdbe code to break out of the processing loop after the 
94197         ** first iteration (since the first iteration of the loop is 
94198         ** guaranteed to operate on the row with the minimum or maximum 
94199         ** value of x, the only row required).
94200         **
94201         ** A special flag must be passed to sqlite3WhereBegin() to slightly
94202         ** modify behaviour as follows:
94203         **
94204         **   + If the query is a "SELECT min(x)", then the loop coded by
94205         **     where.c should not iterate over any values with a NULL value
94206         **     for x.
94207         **
94208         **   + The optimizer code in where.c (the thing that decides which
94209         **     index or indices to use) should place a different priority on 
94210         **     satisfying the 'ORDER BY' clause than it does in other cases.
94211         **     Refer to code and comments in where.c for details.
94212         */
94213         ExprList *pMinMax = 0;
94214         u8 flag = minMaxQuery(p);
94215         if( flag ){
94216           assert( !ExprHasProperty(p->pEList->a[0].pExpr, EP_xIsSelect) );
94217           pMinMax = sqlite3ExprListDup(db, p->pEList->a[0].pExpr->x.pList,0);
94218           pDel = pMinMax;
94219           if( pMinMax && !db->mallocFailed ){
94220             pMinMax->a[0].sortOrder = flag!=WHERE_ORDERBY_MIN ?1:0;
94221             pMinMax->a[0].pExpr->op = TK_COLUMN;
94222           }
94223         }
94224   
94225         /* This case runs if the aggregate has no GROUP BY clause.  The
94226         ** processing is much simpler since there is only a single row
94227         ** of output.
94228         */
94229         resetAccumulator(pParse, &sAggInfo);
94230         pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pMinMax, flag);
94231         if( pWInfo==0 ){
94232           sqlite3ExprListDelete(db, pDel);
94233           goto select_end;
94234         }
94235         updateAccumulator(pParse, &sAggInfo);
94236         if( !pMinMax && flag ){
94237           sqlite3VdbeAddOp2(v, OP_Goto, 0, pWInfo->iBreak);
94238           VdbeComment((v, "%s() by index",
94239                 (flag==WHERE_ORDERBY_MIN?"min":"max")));
94240         }
94241         sqlite3WhereEnd(pWInfo);
94242         finalizeAggFunctions(pParse, &sAggInfo);
94243       }
94244
94245       pOrderBy = 0;
94246       sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL);
94247       selectInnerLoop(pParse, p, p->pEList, 0, 0, 0, -1, 
94248                       pDest, addrEnd, addrEnd);
94249       sqlite3ExprListDelete(db, pDel);
94250     }
94251     sqlite3VdbeResolveLabel(v, addrEnd);
94252     
94253   } /* endif aggregate query */
94254
94255   if( distinct>=0 ){
94256     explainTempTable(pParse, "DISTINCT");
94257   }
94258
94259   /* If there is an ORDER BY clause, then we need to sort the results
94260   ** and send them to the callback one by one.
94261   */
94262   if( pOrderBy ){
94263     explainTempTable(pParse, "ORDER BY");
94264     generateSortTail(pParse, p, v, pEList->nExpr, pDest);
94265   }
94266
94267   /* Jump here to skip this query
94268   */
94269   sqlite3VdbeResolveLabel(v, iEnd);
94270
94271   /* The SELECT was successfully coded.   Set the return code to 0
94272   ** to indicate no errors.
94273   */
94274   rc = 0;
94275
94276   /* Control jumps to here if an error is encountered above, or upon
94277   ** successful coding of the SELECT.
94278   */
94279 select_end:
94280   explainSetInteger(pParse->iSelectId, iRestoreSelectId);
94281
94282   /* Identify column names if results of the SELECT are to be output.
94283   */
94284   if( rc==SQLITE_OK && pDest->eDest==SRT_Output ){
94285     generateColumnNames(pParse, pTabList, pEList);
94286   }
94287
94288   sqlite3DbFree(db, sAggInfo.aCol);
94289   sqlite3DbFree(db, sAggInfo.aFunc);
94290   return rc;
94291 }
94292
94293 #if defined(SQLITE_DEBUG)
94294 /*
94295 *******************************************************************************
94296 ** The following code is used for testing and debugging only.  The code
94297 ** that follows does not appear in normal builds.
94298 **
94299 ** These routines are used to print out the content of all or part of a 
94300 ** parse structures such as Select or Expr.  Such printouts are useful
94301 ** for helping to understand what is happening inside the code generator
94302 ** during the execution of complex SELECT statements.
94303 **
94304 ** These routine are not called anywhere from within the normal
94305 ** code base.  Then are intended to be called from within the debugger
94306 ** or from temporary "printf" statements inserted for debugging.
94307 */
94308 SQLITE_PRIVATE void sqlite3PrintExpr(Expr *p){
94309   if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
94310     sqlite3DebugPrintf("(%s", p->u.zToken);
94311   }else{
94312     sqlite3DebugPrintf("(%d", p->op);
94313   }
94314   if( p->pLeft ){
94315     sqlite3DebugPrintf(" ");
94316     sqlite3PrintExpr(p->pLeft);
94317   }
94318   if( p->pRight ){
94319     sqlite3DebugPrintf(" ");
94320     sqlite3PrintExpr(p->pRight);
94321   }
94322   sqlite3DebugPrintf(")");
94323 }
94324 SQLITE_PRIVATE void sqlite3PrintExprList(ExprList *pList){
94325   int i;
94326   for(i=0; i<pList->nExpr; i++){
94327     sqlite3PrintExpr(pList->a[i].pExpr);
94328     if( i<pList->nExpr-1 ){
94329       sqlite3DebugPrintf(", ");
94330     }
94331   }
94332 }
94333 SQLITE_PRIVATE void sqlite3PrintSelect(Select *p, int indent){
94334   sqlite3DebugPrintf("%*sSELECT(%p) ", indent, "", p);
94335   sqlite3PrintExprList(p->pEList);
94336   sqlite3DebugPrintf("\n");
94337   if( p->pSrc ){
94338     char *zPrefix;
94339     int i;
94340     zPrefix = "FROM";
94341     for(i=0; i<p->pSrc->nSrc; i++){
94342       struct SrcList_item *pItem = &p->pSrc->a[i];
94343       sqlite3DebugPrintf("%*s ", indent+6, zPrefix);
94344       zPrefix = "";
94345       if( pItem->pSelect ){
94346         sqlite3DebugPrintf("(\n");
94347         sqlite3PrintSelect(pItem->pSelect, indent+10);
94348         sqlite3DebugPrintf("%*s)", indent+8, "");
94349       }else if( pItem->zName ){
94350         sqlite3DebugPrintf("%s", pItem->zName);
94351       }
94352       if( pItem->pTab ){
94353         sqlite3DebugPrintf("(table: %s)", pItem->pTab->zName);
94354       }
94355       if( pItem->zAlias ){
94356         sqlite3DebugPrintf(" AS %s", pItem->zAlias);
94357       }
94358       if( i<p->pSrc->nSrc-1 ){
94359         sqlite3DebugPrintf(",");
94360       }
94361       sqlite3DebugPrintf("\n");
94362     }
94363   }
94364   if( p->pWhere ){
94365     sqlite3DebugPrintf("%*s WHERE ", indent, "");
94366     sqlite3PrintExpr(p->pWhere);
94367     sqlite3DebugPrintf("\n");
94368   }
94369   if( p->pGroupBy ){
94370     sqlite3DebugPrintf("%*s GROUP BY ", indent, "");
94371     sqlite3PrintExprList(p->pGroupBy);
94372     sqlite3DebugPrintf("\n");
94373   }
94374   if( p->pHaving ){
94375     sqlite3DebugPrintf("%*s HAVING ", indent, "");
94376     sqlite3PrintExpr(p->pHaving);
94377     sqlite3DebugPrintf("\n");
94378   }
94379   if( p->pOrderBy ){
94380     sqlite3DebugPrintf("%*s ORDER BY ", indent, "");
94381     sqlite3PrintExprList(p->pOrderBy);
94382     sqlite3DebugPrintf("\n");
94383   }
94384 }
94385 /* End of the structure debug printing code
94386 *****************************************************************************/
94387 #endif /* defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */
94388
94389 /************** End of select.c **********************************************/
94390 /************** Begin file table.c *******************************************/
94391 /*
94392 ** 2001 September 15
94393 **
94394 ** The author disclaims copyright to this source code.  In place of
94395 ** a legal notice, here is a blessing:
94396 **
94397 **    May you do good and not evil.
94398 **    May you find forgiveness for yourself and forgive others.
94399 **    May you share freely, never taking more than you give.
94400 **
94401 *************************************************************************
94402 ** This file contains the sqlite3_get_table() and sqlite3_free_table()
94403 ** interface routines.  These are just wrappers around the main
94404 ** interface routine of sqlite3_exec().
94405 **
94406 ** These routines are in a separate files so that they will not be linked
94407 ** if they are not used.
94408 */
94409
94410 #ifndef SQLITE_OMIT_GET_TABLE
94411
94412 /*
94413 ** This structure is used to pass data from sqlite3_get_table() through
94414 ** to the callback function is uses to build the result.
94415 */
94416 typedef struct TabResult {
94417   char **azResult;   /* Accumulated output */
94418   char *zErrMsg;     /* Error message text, if an error occurs */
94419   int nAlloc;        /* Slots allocated for azResult[] */
94420   int nRow;          /* Number of rows in the result */
94421   int nColumn;       /* Number of columns in the result */
94422   int nData;         /* Slots used in azResult[].  (nRow+1)*nColumn */
94423   int rc;            /* Return code from sqlite3_exec() */
94424 } TabResult;
94425
94426 /*
94427 ** This routine is called once for each row in the result table.  Its job
94428 ** is to fill in the TabResult structure appropriately, allocating new
94429 ** memory as necessary.
94430 */
94431 static int sqlite3_get_table_cb(void *pArg, int nCol, char **argv, char **colv){
94432   TabResult *p = (TabResult*)pArg;  /* Result accumulator */
94433   int need;                         /* Slots needed in p->azResult[] */
94434   int i;                            /* Loop counter */
94435   char *z;                          /* A single column of result */
94436
94437   /* Make sure there is enough space in p->azResult to hold everything
94438   ** we need to remember from this invocation of the callback.
94439   */
94440   if( p->nRow==0 && argv!=0 ){
94441     need = nCol*2;
94442   }else{
94443     need = nCol;
94444   }
94445   if( p->nData + need > p->nAlloc ){
94446     char **azNew;
94447     p->nAlloc = p->nAlloc*2 + need;
94448     azNew = sqlite3_realloc( p->azResult, sizeof(char*)*p->nAlloc );
94449     if( azNew==0 ) goto malloc_failed;
94450     p->azResult = azNew;
94451   }
94452
94453   /* If this is the first row, then generate an extra row containing
94454   ** the names of all columns.
94455   */
94456   if( p->nRow==0 ){
94457     p->nColumn = nCol;
94458     for(i=0; i<nCol; i++){
94459       z = sqlite3_mprintf("%s", colv[i]);
94460       if( z==0 ) goto malloc_failed;
94461       p->azResult[p->nData++] = z;
94462     }
94463   }else if( p->nColumn!=nCol ){
94464     sqlite3_free(p->zErrMsg);
94465     p->zErrMsg = sqlite3_mprintf(
94466        "sqlite3_get_table() called with two or more incompatible queries"
94467     );
94468     p->rc = SQLITE_ERROR;
94469     return 1;
94470   }
94471
94472   /* Copy over the row data
94473   */
94474   if( argv!=0 ){
94475     for(i=0; i<nCol; i++){
94476       if( argv[i]==0 ){
94477         z = 0;
94478       }else{
94479         int n = sqlite3Strlen30(argv[i])+1;
94480         z = sqlite3_malloc( n );
94481         if( z==0 ) goto malloc_failed;
94482         memcpy(z, argv[i], n);
94483       }
94484       p->azResult[p->nData++] = z;
94485     }
94486     p->nRow++;
94487   }
94488   return 0;
94489
94490 malloc_failed:
94491   p->rc = SQLITE_NOMEM;
94492   return 1;
94493 }
94494
94495 /*
94496 ** Query the database.  But instead of invoking a callback for each row,
94497 ** malloc() for space to hold the result and return the entire results
94498 ** at the conclusion of the call.
94499 **
94500 ** The result that is written to ***pazResult is held in memory obtained
94501 ** from malloc().  But the caller cannot free this memory directly.  
94502 ** Instead, the entire table should be passed to sqlite3_free_table() when
94503 ** the calling procedure is finished using it.
94504 */
94505 SQLITE_API int sqlite3_get_table(
94506   sqlite3 *db,                /* The database on which the SQL executes */
94507   const char *zSql,           /* The SQL to be executed */
94508   char ***pazResult,          /* Write the result table here */
94509   int *pnRow,                 /* Write the number of rows in the result here */
94510   int *pnColumn,              /* Write the number of columns of result here */
94511   char **pzErrMsg             /* Write error messages here */
94512 ){
94513   int rc;
94514   TabResult res;
94515
94516   *pazResult = 0;
94517   if( pnColumn ) *pnColumn = 0;
94518   if( pnRow ) *pnRow = 0;
94519   if( pzErrMsg ) *pzErrMsg = 0;
94520   res.zErrMsg = 0;
94521   res.nRow = 0;
94522   res.nColumn = 0;
94523   res.nData = 1;
94524   res.nAlloc = 20;
94525   res.rc = SQLITE_OK;
94526   res.azResult = sqlite3_malloc(sizeof(char*)*res.nAlloc );
94527   if( res.azResult==0 ){
94528      db->errCode = SQLITE_NOMEM;
94529      return SQLITE_NOMEM;
94530   }
94531   res.azResult[0] = 0;
94532   rc = sqlite3_exec(db, zSql, sqlite3_get_table_cb, &res, pzErrMsg);
94533   assert( sizeof(res.azResult[0])>= sizeof(res.nData) );
94534   res.azResult[0] = SQLITE_INT_TO_PTR(res.nData);
94535   if( (rc&0xff)==SQLITE_ABORT ){
94536     sqlite3_free_table(&res.azResult[1]);
94537     if( res.zErrMsg ){
94538       if( pzErrMsg ){
94539         sqlite3_free(*pzErrMsg);
94540         *pzErrMsg = sqlite3_mprintf("%s",res.zErrMsg);
94541       }
94542       sqlite3_free(res.zErrMsg);
94543     }
94544     db->errCode = res.rc;  /* Assume 32-bit assignment is atomic */
94545     return res.rc;
94546   }
94547   sqlite3_free(res.zErrMsg);
94548   if( rc!=SQLITE_OK ){
94549     sqlite3_free_table(&res.azResult[1]);
94550     return rc;
94551   }
94552   if( res.nAlloc>res.nData ){
94553     char **azNew;
94554     azNew = sqlite3_realloc( res.azResult, sizeof(char*)*res.nData );
94555     if( azNew==0 ){
94556       sqlite3_free_table(&res.azResult[1]);
94557       db->errCode = SQLITE_NOMEM;
94558       return SQLITE_NOMEM;
94559     }
94560     res.azResult = azNew;
94561   }
94562   *pazResult = &res.azResult[1];
94563   if( pnColumn ) *pnColumn = res.nColumn;
94564   if( pnRow ) *pnRow = res.nRow;
94565   return rc;
94566 }
94567
94568 /*
94569 ** This routine frees the space the sqlite3_get_table() malloced.
94570 */
94571 SQLITE_API void sqlite3_free_table(
94572   char **azResult            /* Result returned from from sqlite3_get_table() */
94573 ){
94574   if( azResult ){
94575     int i, n;
94576     azResult--;
94577     assert( azResult!=0 );
94578     n = SQLITE_PTR_TO_INT(azResult[0]);
94579     for(i=1; i<n; i++){ if( azResult[i] ) sqlite3_free(azResult[i]); }
94580     sqlite3_free(azResult);
94581   }
94582 }
94583
94584 #endif /* SQLITE_OMIT_GET_TABLE */
94585
94586 /************** End of table.c ***********************************************/
94587 /************** Begin file trigger.c *****************************************/
94588 /*
94589 **
94590 ** The author disclaims copyright to this source code.  In place of
94591 ** a legal notice, here is a blessing:
94592 **
94593 **    May you do good and not evil.
94594 **    May you find forgiveness for yourself and forgive others.
94595 **    May you share freely, never taking more than you give.
94596 **
94597 *************************************************************************
94598 ** This file contains the implementation for TRIGGERs
94599 */
94600
94601 #ifndef SQLITE_OMIT_TRIGGER
94602 /*
94603 ** Delete a linked list of TriggerStep structures.
94604 */
94605 SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3 *db, TriggerStep *pTriggerStep){
94606   while( pTriggerStep ){
94607     TriggerStep * pTmp = pTriggerStep;
94608     pTriggerStep = pTriggerStep->pNext;
94609
94610     sqlite3ExprDelete(db, pTmp->pWhere);
94611     sqlite3ExprListDelete(db, pTmp->pExprList);
94612     sqlite3SelectDelete(db, pTmp->pSelect);
94613     sqlite3IdListDelete(db, pTmp->pIdList);
94614
94615     sqlite3DbFree(db, pTmp);
94616   }
94617 }
94618
94619 /*
94620 ** Given table pTab, return a list of all the triggers attached to 
94621 ** the table. The list is connected by Trigger.pNext pointers.
94622 **
94623 ** All of the triggers on pTab that are in the same database as pTab
94624 ** are already attached to pTab->pTrigger.  But there might be additional
94625 ** triggers on pTab in the TEMP schema.  This routine prepends all
94626 ** TEMP triggers on pTab to the beginning of the pTab->pTrigger list
94627 ** and returns the combined list.
94628 **
94629 ** To state it another way:  This routine returns a list of all triggers
94630 ** that fire off of pTab.  The list will include any TEMP triggers on
94631 ** pTab as well as the triggers lised in pTab->pTrigger.
94632 */
94633 SQLITE_PRIVATE Trigger *sqlite3TriggerList(Parse *pParse, Table *pTab){
94634   Schema * const pTmpSchema = pParse->db->aDb[1].pSchema;
94635   Trigger *pList = 0;                  /* List of triggers to return */
94636
94637   if( pParse->disableTriggers ){
94638     return 0;
94639   }
94640
94641   if( pTmpSchema!=pTab->pSchema ){
94642     HashElem *p;
94643     assert( sqlite3SchemaMutexHeld(pParse->db, 0, pTmpSchema) );
94644     for(p=sqliteHashFirst(&pTmpSchema->trigHash); p; p=sqliteHashNext(p)){
94645       Trigger *pTrig = (Trigger *)sqliteHashData(p);
94646       if( pTrig->pTabSchema==pTab->pSchema
94647        && 0==sqlite3StrICmp(pTrig->table, pTab->zName) 
94648       ){
94649         pTrig->pNext = (pList ? pList : pTab->pTrigger);
94650         pList = pTrig;
94651       }
94652     }
94653   }
94654
94655   return (pList ? pList : pTab->pTrigger);
94656 }
94657
94658 /*
94659 ** This is called by the parser when it sees a CREATE TRIGGER statement
94660 ** up to the point of the BEGIN before the trigger actions.  A Trigger
94661 ** structure is generated based on the information available and stored
94662 ** in pParse->pNewTrigger.  After the trigger actions have been parsed, the
94663 ** sqlite3FinishTrigger() function is called to complete the trigger
94664 ** construction process.
94665 */
94666 SQLITE_PRIVATE void sqlite3BeginTrigger(
94667   Parse *pParse,      /* The parse context of the CREATE TRIGGER statement */
94668   Token *pName1,      /* The name of the trigger */
94669   Token *pName2,      /* The name of the trigger */
94670   int tr_tm,          /* One of TK_BEFORE, TK_AFTER, TK_INSTEAD */
94671   int op,             /* One of TK_INSERT, TK_UPDATE, TK_DELETE */
94672   IdList *pColumns,   /* column list if this is an UPDATE OF trigger */
94673   SrcList *pTableName,/* The name of the table/view the trigger applies to */
94674   Expr *pWhen,        /* WHEN clause */
94675   int isTemp,         /* True if the TEMPORARY keyword is present */
94676   int noErr           /* Suppress errors if the trigger already exists */
94677 ){
94678   Trigger *pTrigger = 0;  /* The new trigger */
94679   Table *pTab;            /* Table that the trigger fires off of */
94680   char *zName = 0;        /* Name of the trigger */
94681   sqlite3 *db = pParse->db;  /* The database connection */
94682   int iDb;                /* The database to store the trigger in */
94683   Token *pName;           /* The unqualified db name */
94684   DbFixer sFix;           /* State vector for the DB fixer */
94685   int iTabDb;             /* Index of the database holding pTab */
94686
94687   assert( pName1!=0 );   /* pName1->z might be NULL, but not pName1 itself */
94688   assert( pName2!=0 );
94689   assert( op==TK_INSERT || op==TK_UPDATE || op==TK_DELETE );
94690   assert( op>0 && op<0xff );
94691   if( isTemp ){
94692     /* If TEMP was specified, then the trigger name may not be qualified. */
94693     if( pName2->n>0 ){
94694       sqlite3ErrorMsg(pParse, "temporary trigger may not have qualified name");
94695       goto trigger_cleanup;
94696     }
94697     iDb = 1;
94698     pName = pName1;
94699   }else{
94700     /* Figure out the db that the the trigger will be created in */
94701     iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
94702     if( iDb<0 ){
94703       goto trigger_cleanup;
94704     }
94705   }
94706
94707   /* If the trigger name was unqualified, and the table is a temp table,
94708   ** then set iDb to 1 to create the trigger in the temporary database.
94709   ** If sqlite3SrcListLookup() returns 0, indicating the table does not
94710   ** exist, the error is caught by the block below.
94711   */
94712   if( !pTableName || db->mallocFailed ){
94713     goto trigger_cleanup;
94714   }
94715   pTab = sqlite3SrcListLookup(pParse, pTableName);
94716   if( db->init.busy==0 && pName2->n==0 && pTab
94717         && pTab->pSchema==db->aDb[1].pSchema ){
94718     iDb = 1;
94719   }
94720
94721   /* Ensure the table name matches database name and that the table exists */
94722   if( db->mallocFailed ) goto trigger_cleanup;
94723   assert( pTableName->nSrc==1 );
94724   if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", pName) && 
94725       sqlite3FixSrcList(&sFix, pTableName) ){
94726     goto trigger_cleanup;
94727   }
94728   pTab = sqlite3SrcListLookup(pParse, pTableName);
94729   if( !pTab ){
94730     /* The table does not exist. */
94731     if( db->init.iDb==1 ){
94732       /* Ticket #3810.
94733       ** Normally, whenever a table is dropped, all associated triggers are
94734       ** dropped too.  But if a TEMP trigger is created on a non-TEMP table
94735       ** and the table is dropped by a different database connection, the
94736       ** trigger is not visible to the database connection that does the
94737       ** drop so the trigger cannot be dropped.  This results in an
94738       ** "orphaned trigger" - a trigger whose associated table is missing.
94739       */
94740       db->init.orphanTrigger = 1;
94741     }
94742     goto trigger_cleanup;
94743   }
94744   if( IsVirtual(pTab) ){
94745     sqlite3ErrorMsg(pParse, "cannot create triggers on virtual tables");
94746     goto trigger_cleanup;
94747   }
94748
94749   /* Check that the trigger name is not reserved and that no trigger of the
94750   ** specified name exists */
94751   zName = sqlite3NameFromToken(db, pName);
94752   if( !zName || SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
94753     goto trigger_cleanup;
94754   }
94755   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
94756   if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash),
94757                       zName, sqlite3Strlen30(zName)) ){
94758     if( !noErr ){
94759       sqlite3ErrorMsg(pParse, "trigger %T already exists", pName);
94760     }else{
94761       assert( !db->init.busy );
94762       sqlite3CodeVerifySchema(pParse, iDb);
94763     }
94764     goto trigger_cleanup;
94765   }
94766
94767   /* Do not create a trigger on a system table */
94768   if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){
94769     sqlite3ErrorMsg(pParse, "cannot create trigger on system table");
94770     pParse->nErr++;
94771     goto trigger_cleanup;
94772   }
94773
94774   /* INSTEAD of triggers are only for views and views only support INSTEAD
94775   ** of triggers.
94776   */
94777   if( pTab->pSelect && tr_tm!=TK_INSTEAD ){
94778     sqlite3ErrorMsg(pParse, "cannot create %s trigger on view: %S", 
94779         (tr_tm == TK_BEFORE)?"BEFORE":"AFTER", pTableName, 0);
94780     goto trigger_cleanup;
94781   }
94782   if( !pTab->pSelect && tr_tm==TK_INSTEAD ){
94783     sqlite3ErrorMsg(pParse, "cannot create INSTEAD OF"
94784         " trigger on table: %S", pTableName, 0);
94785     goto trigger_cleanup;
94786   }
94787   iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema);
94788
94789 #ifndef SQLITE_OMIT_AUTHORIZATION
94790   {
94791     int code = SQLITE_CREATE_TRIGGER;
94792     const char *zDb = db->aDb[iTabDb].zName;
94793     const char *zDbTrig = isTemp ? db->aDb[1].zName : zDb;
94794     if( iTabDb==1 || isTemp ) code = SQLITE_CREATE_TEMP_TRIGGER;
94795     if( sqlite3AuthCheck(pParse, code, zName, pTab->zName, zDbTrig) ){
94796       goto trigger_cleanup;
94797     }
94798     if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iTabDb),0,zDb)){
94799       goto trigger_cleanup;
94800     }
94801   }
94802 #endif
94803
94804   /* INSTEAD OF triggers can only appear on views and BEFORE triggers
94805   ** cannot appear on views.  So we might as well translate every
94806   ** INSTEAD OF trigger into a BEFORE trigger.  It simplifies code
94807   ** elsewhere.
94808   */
94809   if (tr_tm == TK_INSTEAD){
94810     tr_tm = TK_BEFORE;
94811   }
94812
94813   /* Build the Trigger object */
94814   pTrigger = (Trigger*)sqlite3DbMallocZero(db, sizeof(Trigger));
94815   if( pTrigger==0 ) goto trigger_cleanup;
94816   pTrigger->zName = zName;
94817   zName = 0;
94818   pTrigger->table = sqlite3DbStrDup(db, pTableName->a[0].zName);
94819   pTrigger->pSchema = db->aDb[iDb].pSchema;
94820   pTrigger->pTabSchema = pTab->pSchema;
94821   pTrigger->op = (u8)op;
94822   pTrigger->tr_tm = tr_tm==TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER;
94823   pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE);
94824   pTrigger->pColumns = sqlite3IdListDup(db, pColumns);
94825   assert( pParse->pNewTrigger==0 );
94826   pParse->pNewTrigger = pTrigger;
94827
94828 trigger_cleanup:
94829   sqlite3DbFree(db, zName);
94830   sqlite3SrcListDelete(db, pTableName);
94831   sqlite3IdListDelete(db, pColumns);
94832   sqlite3ExprDelete(db, pWhen);
94833   if( !pParse->pNewTrigger ){
94834     sqlite3DeleteTrigger(db, pTrigger);
94835   }else{
94836     assert( pParse->pNewTrigger==pTrigger );
94837   }
94838 }
94839
94840 /*
94841 ** This routine is called after all of the trigger actions have been parsed
94842 ** in order to complete the process of building the trigger.
94843 */
94844 SQLITE_PRIVATE void sqlite3FinishTrigger(
94845   Parse *pParse,          /* Parser context */
94846   TriggerStep *pStepList, /* The triggered program */
94847   Token *pAll             /* Token that describes the complete CREATE TRIGGER */
94848 ){
94849   Trigger *pTrig = pParse->pNewTrigger;   /* Trigger being finished */
94850   char *zName;                            /* Name of trigger */
94851   sqlite3 *db = pParse->db;               /* The database */
94852   DbFixer sFix;                           /* Fixer object */
94853   int iDb;                                /* Database containing the trigger */
94854   Token nameToken;                        /* Trigger name for error reporting */
94855
94856   pParse->pNewTrigger = 0;
94857   if( NEVER(pParse->nErr) || !pTrig ) goto triggerfinish_cleanup;
94858   zName = pTrig->zName;
94859   iDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema);
94860   pTrig->step_list = pStepList;
94861   while( pStepList ){
94862     pStepList->pTrig = pTrig;
94863     pStepList = pStepList->pNext;
94864   }
94865   nameToken.z = pTrig->zName;
94866   nameToken.n = sqlite3Strlen30(nameToken.z);
94867   if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", &nameToken) 
94868           && sqlite3FixTriggerStep(&sFix, pTrig->step_list) ){
94869     goto triggerfinish_cleanup;
94870   }
94871
94872   /* if we are not initializing,
94873   ** build the sqlite_master entry
94874   */
94875   if( !db->init.busy ){
94876     Vdbe *v;
94877     char *z;
94878
94879     /* Make an entry in the sqlite_master table */
94880     v = sqlite3GetVdbe(pParse);
94881     if( v==0 ) goto triggerfinish_cleanup;
94882     sqlite3BeginWriteOperation(pParse, 0, iDb);
94883     z = sqlite3DbStrNDup(db, (char*)pAll->z, pAll->n);
94884     sqlite3NestedParse(pParse,
94885        "INSERT INTO %Q.%s VALUES('trigger',%Q,%Q,0,'CREATE TRIGGER %q')",
94886        db->aDb[iDb].zName, SCHEMA_TABLE(iDb), zName,
94887        pTrig->table, z);
94888     sqlite3DbFree(db, z);
94889     sqlite3ChangeCookie(pParse, iDb);
94890     sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 0, 0, sqlite3MPrintf(
94891         db, "type='trigger' AND name='%q'", zName), P4_DYNAMIC
94892     );
94893   }
94894
94895   if( db->init.busy ){
94896     Trigger *pLink = pTrig;
94897     Hash *pHash = &db->aDb[iDb].pSchema->trigHash;
94898     assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
94899     pTrig = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), pTrig);
94900     if( pTrig ){
94901       db->mallocFailed = 1;
94902     }else if( pLink->pSchema==pLink->pTabSchema ){
94903       Table *pTab;
94904       int n = sqlite3Strlen30(pLink->table);
94905       pTab = sqlite3HashFind(&pLink->pTabSchema->tblHash, pLink->table, n);
94906       assert( pTab!=0 );
94907       pLink->pNext = pTab->pTrigger;
94908       pTab->pTrigger = pLink;
94909     }
94910   }
94911
94912 triggerfinish_cleanup:
94913   sqlite3DeleteTrigger(db, pTrig);
94914   assert( !pParse->pNewTrigger );
94915   sqlite3DeleteTriggerStep(db, pStepList);
94916 }
94917
94918 /*
94919 ** Turn a SELECT statement (that the pSelect parameter points to) into
94920 ** a trigger step.  Return a pointer to a TriggerStep structure.
94921 **
94922 ** The parser calls this routine when it finds a SELECT statement in
94923 ** body of a TRIGGER.  
94924 */
94925 SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3 *db, Select *pSelect){
94926   TriggerStep *pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep));
94927   if( pTriggerStep==0 ) {
94928     sqlite3SelectDelete(db, pSelect);
94929     return 0;
94930   }
94931   pTriggerStep->op = TK_SELECT;
94932   pTriggerStep->pSelect = pSelect;
94933   pTriggerStep->orconf = OE_Default;
94934   return pTriggerStep;
94935 }
94936
94937 /*
94938 ** Allocate space to hold a new trigger step.  The allocated space
94939 ** holds both the TriggerStep object and the TriggerStep.target.z string.
94940 **
94941 ** If an OOM error occurs, NULL is returned and db->mallocFailed is set.
94942 */
94943 static TriggerStep *triggerStepAllocate(
94944   sqlite3 *db,                /* Database connection */
94945   u8 op,                      /* Trigger opcode */
94946   Token *pName                /* The target name */
94947 ){
94948   TriggerStep *pTriggerStep;
94949
94950   pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep) + pName->n);
94951   if( pTriggerStep ){
94952     char *z = (char*)&pTriggerStep[1];
94953     memcpy(z, pName->z, pName->n);
94954     pTriggerStep->target.z = z;
94955     pTriggerStep->target.n = pName->n;
94956     pTriggerStep->op = op;
94957   }
94958   return pTriggerStep;
94959 }
94960
94961 /*
94962 ** Build a trigger step out of an INSERT statement.  Return a pointer
94963 ** to the new trigger step.
94964 **
94965 ** The parser calls this routine when it sees an INSERT inside the
94966 ** body of a trigger.
94967 */
94968 SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep(
94969   sqlite3 *db,        /* The database connection */
94970   Token *pTableName,  /* Name of the table into which we insert */
94971   IdList *pColumn,    /* List of columns in pTableName to insert into */
94972   ExprList *pEList,   /* The VALUE clause: a list of values to be inserted */
94973   Select *pSelect,    /* A SELECT statement that supplies values */
94974   u8 orconf           /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */
94975 ){
94976   TriggerStep *pTriggerStep;
94977
94978   assert(pEList == 0 || pSelect == 0);
94979   assert(pEList != 0 || pSelect != 0 || db->mallocFailed);
94980
94981   pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName);
94982   if( pTriggerStep ){
94983     pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
94984     pTriggerStep->pIdList = pColumn;
94985     pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE);
94986     pTriggerStep->orconf = orconf;
94987   }else{
94988     sqlite3IdListDelete(db, pColumn);
94989   }
94990   sqlite3ExprListDelete(db, pEList);
94991   sqlite3SelectDelete(db, pSelect);
94992
94993   return pTriggerStep;
94994 }
94995
94996 /*
94997 ** Construct a trigger step that implements an UPDATE statement and return
94998 ** a pointer to that trigger step.  The parser calls this routine when it
94999 ** sees an UPDATE statement inside the body of a CREATE TRIGGER.
95000 */
95001 SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(
95002   sqlite3 *db,         /* The database connection */
95003   Token *pTableName,   /* Name of the table to be updated */
95004   ExprList *pEList,    /* The SET clause: list of column and new values */
95005   Expr *pWhere,        /* The WHERE clause */
95006   u8 orconf            /* The conflict algorithm. (OE_Abort, OE_Ignore, etc) */
95007 ){
95008   TriggerStep *pTriggerStep;
95009
95010   pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName);
95011   if( pTriggerStep ){
95012     pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE);
95013     pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
95014     pTriggerStep->orconf = orconf;
95015   }
95016   sqlite3ExprListDelete(db, pEList);
95017   sqlite3ExprDelete(db, pWhere);
95018   return pTriggerStep;
95019 }
95020
95021 /*
95022 ** Construct a trigger step that implements a DELETE statement and return
95023 ** a pointer to that trigger step.  The parser calls this routine when it
95024 ** sees a DELETE statement inside the body of a CREATE TRIGGER.
95025 */
95026 SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(
95027   sqlite3 *db,            /* Database connection */
95028   Token *pTableName,      /* The table from which rows are deleted */
95029   Expr *pWhere            /* The WHERE clause */
95030 ){
95031   TriggerStep *pTriggerStep;
95032
95033   pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName);
95034   if( pTriggerStep ){
95035     pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
95036     pTriggerStep->orconf = OE_Default;
95037   }
95038   sqlite3ExprDelete(db, pWhere);
95039   return pTriggerStep;
95040 }
95041
95042 /* 
95043 ** Recursively delete a Trigger structure
95044 */
95045 SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3 *db, Trigger *pTrigger){
95046   if( pTrigger==0 ) return;
95047   sqlite3DeleteTriggerStep(db, pTrigger->step_list);
95048   sqlite3DbFree(db, pTrigger->zName);
95049   sqlite3DbFree(db, pTrigger->table);
95050   sqlite3ExprDelete(db, pTrigger->pWhen);
95051   sqlite3IdListDelete(db, pTrigger->pColumns);
95052   sqlite3DbFree(db, pTrigger);
95053 }
95054
95055 /*
95056 ** This function is called to drop a trigger from the database schema. 
95057 **
95058 ** This may be called directly from the parser and therefore identifies
95059 ** the trigger by name.  The sqlite3DropTriggerPtr() routine does the
95060 ** same job as this routine except it takes a pointer to the trigger
95061 ** instead of the trigger name.
95062 **/
95063 SQLITE_PRIVATE void sqlite3DropTrigger(Parse *pParse, SrcList *pName, int noErr){
95064   Trigger *pTrigger = 0;
95065   int i;
95066   const char *zDb;
95067   const char *zName;
95068   int nName;
95069   sqlite3 *db = pParse->db;
95070
95071   if( db->mallocFailed ) goto drop_trigger_cleanup;
95072   if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
95073     goto drop_trigger_cleanup;
95074   }
95075
95076   assert( pName->nSrc==1 );
95077   zDb = pName->a[0].zDatabase;
95078   zName = pName->a[0].zName;
95079   nName = sqlite3Strlen30(zName);
95080   assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) );
95081   for(i=OMIT_TEMPDB; i<db->nDb; i++){
95082     int j = (i<2) ? i^1 : i;  /* Search TEMP before MAIN */
95083     if( zDb && sqlite3StrICmp(db->aDb[j].zName, zDb) ) continue;
95084     assert( sqlite3SchemaMutexHeld(db, j, 0) );
95085     pTrigger = sqlite3HashFind(&(db->aDb[j].pSchema->trigHash), zName, nName);
95086     if( pTrigger ) break;
95087   }
95088   if( !pTrigger ){
95089     if( !noErr ){
95090       sqlite3ErrorMsg(pParse, "no such trigger: %S", pName, 0);
95091     }else{
95092       sqlite3CodeVerifyNamedSchema(pParse, zDb);
95093     }
95094     pParse->checkSchema = 1;
95095     goto drop_trigger_cleanup;
95096   }
95097   sqlite3DropTriggerPtr(pParse, pTrigger);
95098
95099 drop_trigger_cleanup:
95100   sqlite3SrcListDelete(db, pName);
95101 }
95102
95103 /*
95104 ** Return a pointer to the Table structure for the table that a trigger
95105 ** is set on.
95106 */
95107 static Table *tableOfTrigger(Trigger *pTrigger){
95108   int n = sqlite3Strlen30(pTrigger->table);
95109   return sqlite3HashFind(&pTrigger->pTabSchema->tblHash, pTrigger->table, n);
95110 }
95111
95112
95113 /*
95114 ** Drop a trigger given a pointer to that trigger. 
95115 */
95116 SQLITE_PRIVATE void sqlite3DropTriggerPtr(Parse *pParse, Trigger *pTrigger){
95117   Table   *pTable;
95118   Vdbe *v;
95119   sqlite3 *db = pParse->db;
95120   int iDb;
95121
95122   iDb = sqlite3SchemaToIndex(pParse->db, pTrigger->pSchema);
95123   assert( iDb>=0 && iDb<db->nDb );
95124   pTable = tableOfTrigger(pTrigger);
95125   assert( pTable );
95126   assert( pTable->pSchema==pTrigger->pSchema || iDb==1 );
95127 #ifndef SQLITE_OMIT_AUTHORIZATION
95128   {
95129     int code = SQLITE_DROP_TRIGGER;
95130     const char *zDb = db->aDb[iDb].zName;
95131     const char *zTab = SCHEMA_TABLE(iDb);
95132     if( iDb==1 ) code = SQLITE_DROP_TEMP_TRIGGER;
95133     if( sqlite3AuthCheck(pParse, code, pTrigger->zName, pTable->zName, zDb) ||
95134       sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
95135       return;
95136     }
95137   }
95138 #endif
95139
95140   /* Generate code to destroy the database record of the trigger.
95141   */
95142   assert( pTable!=0 );
95143   if( (v = sqlite3GetVdbe(pParse))!=0 ){
95144     int base;
95145     static const VdbeOpList dropTrigger[] = {
95146       { OP_Rewind,     0, ADDR(9),  0},
95147       { OP_String8,    0, 1,        0}, /* 1 */
95148       { OP_Column,     0, 1,        2},
95149       { OP_Ne,         2, ADDR(8),  1},
95150       { OP_String8,    0, 1,        0}, /* 4: "trigger" */
95151       { OP_Column,     0, 0,        2},
95152       { OP_Ne,         2, ADDR(8),  1},
95153       { OP_Delete,     0, 0,        0},
95154       { OP_Next,       0, ADDR(1),  0}, /* 8 */
95155     };
95156
95157     sqlite3BeginWriteOperation(pParse, 0, iDb);
95158     sqlite3OpenMasterTable(pParse, iDb);
95159     base = sqlite3VdbeAddOpList(v,  ArraySize(dropTrigger), dropTrigger);
95160     sqlite3VdbeChangeP4(v, base+1, pTrigger->zName, P4_TRANSIENT);
95161     sqlite3VdbeChangeP4(v, base+4, "trigger", P4_STATIC);
95162     sqlite3ChangeCookie(pParse, iDb);
95163     sqlite3VdbeAddOp2(v, OP_Close, 0, 0);
95164     sqlite3VdbeAddOp4(v, OP_DropTrigger, iDb, 0, 0, pTrigger->zName, 0);
95165     if( pParse->nMem<3 ){
95166       pParse->nMem = 3;
95167     }
95168   }
95169 }
95170
95171 /*
95172 ** Remove a trigger from the hash tables of the sqlite* pointer.
95173 */
95174 SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const char *zName){
95175   Trigger *pTrigger;
95176   Hash *pHash;
95177
95178   assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
95179   pHash = &(db->aDb[iDb].pSchema->trigHash);
95180   pTrigger = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), 0);
95181   if( ALWAYS(pTrigger) ){
95182     if( pTrigger->pSchema==pTrigger->pTabSchema ){
95183       Table *pTab = tableOfTrigger(pTrigger);
95184       Trigger **pp;
95185       for(pp=&pTab->pTrigger; *pp!=pTrigger; pp=&((*pp)->pNext));
95186       *pp = (*pp)->pNext;
95187     }
95188     sqlite3DeleteTrigger(db, pTrigger);
95189     db->flags |= SQLITE_InternChanges;
95190   }
95191 }
95192
95193 /*
95194 ** pEList is the SET clause of an UPDATE statement.  Each entry
95195 ** in pEList is of the format <id>=<expr>.  If any of the entries
95196 ** in pEList have an <id> which matches an identifier in pIdList,
95197 ** then return TRUE.  If pIdList==NULL, then it is considered a
95198 ** wildcard that matches anything.  Likewise if pEList==NULL then
95199 ** it matches anything so always return true.  Return false only
95200 ** if there is no match.
95201 */
95202 static int checkColumnOverlap(IdList *pIdList, ExprList *pEList){
95203   int e;
95204   if( pIdList==0 || NEVER(pEList==0) ) return 1;
95205   for(e=0; e<pEList->nExpr; e++){
95206     if( sqlite3IdListIndex(pIdList, pEList->a[e].zName)>=0 ) return 1;
95207   }
95208   return 0; 
95209 }
95210
95211 /*
95212 ** Return a list of all triggers on table pTab if there exists at least
95213 ** one trigger that must be fired when an operation of type 'op' is 
95214 ** performed on the table, and, if that operation is an UPDATE, if at
95215 ** least one of the columns in pChanges is being modified.
95216 */
95217 SQLITE_PRIVATE Trigger *sqlite3TriggersExist(
95218   Parse *pParse,          /* Parse context */
95219   Table *pTab,            /* The table the contains the triggers */
95220   int op,                 /* one of TK_DELETE, TK_INSERT, TK_UPDATE */
95221   ExprList *pChanges,     /* Columns that change in an UPDATE statement */
95222   int *pMask              /* OUT: Mask of TRIGGER_BEFORE|TRIGGER_AFTER */
95223 ){
95224   int mask = 0;
95225   Trigger *pList = 0;
95226   Trigger *p;
95227
95228   if( (pParse->db->flags & SQLITE_EnableTrigger)!=0 ){
95229     pList = sqlite3TriggerList(pParse, pTab);
95230   }
95231   assert( pList==0 || IsVirtual(pTab)==0 );
95232   for(p=pList; p; p=p->pNext){
95233     if( p->op==op && checkColumnOverlap(p->pColumns, pChanges) ){
95234       mask |= p->tr_tm;
95235     }
95236   }
95237   if( pMask ){
95238     *pMask = mask;
95239   }
95240   return (mask ? pList : 0);
95241 }
95242
95243 /*
95244 ** Convert the pStep->target token into a SrcList and return a pointer
95245 ** to that SrcList.
95246 **
95247 ** This routine adds a specific database name, if needed, to the target when
95248 ** forming the SrcList.  This prevents a trigger in one database from
95249 ** referring to a target in another database.  An exception is when the
95250 ** trigger is in TEMP in which case it can refer to any other database it
95251 ** wants.
95252 */
95253 static SrcList *targetSrcList(
95254   Parse *pParse,       /* The parsing context */
95255   TriggerStep *pStep   /* The trigger containing the target token */
95256 ){
95257   int iDb;             /* Index of the database to use */
95258   SrcList *pSrc;       /* SrcList to be returned */
95259
95260   pSrc = sqlite3SrcListAppend(pParse->db, 0, &pStep->target, 0);
95261   if( pSrc ){
95262     assert( pSrc->nSrc>0 );
95263     assert( pSrc->a!=0 );
95264     iDb = sqlite3SchemaToIndex(pParse->db, pStep->pTrig->pSchema);
95265     if( iDb==0 || iDb>=2 ){
95266       sqlite3 *db = pParse->db;
95267       assert( iDb<pParse->db->nDb );
95268       pSrc->a[pSrc->nSrc-1].zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zName);
95269     }
95270   }
95271   return pSrc;
95272 }
95273
95274 /*
95275 ** Generate VDBE code for the statements inside the body of a single 
95276 ** trigger.
95277 */
95278 static int codeTriggerProgram(
95279   Parse *pParse,            /* The parser context */
95280   TriggerStep *pStepList,   /* List of statements inside the trigger body */
95281   int orconf                /* Conflict algorithm. (OE_Abort, etc) */  
95282 ){
95283   TriggerStep *pStep;
95284   Vdbe *v = pParse->pVdbe;
95285   sqlite3 *db = pParse->db;
95286
95287   assert( pParse->pTriggerTab && pParse->pToplevel );
95288   assert( pStepList );
95289   assert( v!=0 );
95290   for(pStep=pStepList; pStep; pStep=pStep->pNext){
95291     /* Figure out the ON CONFLICT policy that will be used for this step
95292     ** of the trigger program. If the statement that caused this trigger
95293     ** to fire had an explicit ON CONFLICT, then use it. Otherwise, use
95294     ** the ON CONFLICT policy that was specified as part of the trigger
95295     ** step statement. Example:
95296     **
95297     **   CREATE TRIGGER AFTER INSERT ON t1 BEGIN;
95298     **     INSERT OR REPLACE INTO t2 VALUES(new.a, new.b);
95299     **   END;
95300     **
95301     **   INSERT INTO t1 ... ;            -- insert into t2 uses REPLACE policy
95302     **   INSERT OR IGNORE INTO t1 ... ;  -- insert into t2 uses IGNORE policy
95303     */
95304     pParse->eOrconf = (orconf==OE_Default)?pStep->orconf:(u8)orconf;
95305
95306     switch( pStep->op ){
95307       case TK_UPDATE: {
95308         sqlite3Update(pParse, 
95309           targetSrcList(pParse, pStep),
95310           sqlite3ExprListDup(db, pStep->pExprList, 0), 
95311           sqlite3ExprDup(db, pStep->pWhere, 0), 
95312           pParse->eOrconf
95313         );
95314         break;
95315       }
95316       case TK_INSERT: {
95317         sqlite3Insert(pParse, 
95318           targetSrcList(pParse, pStep),
95319           sqlite3ExprListDup(db, pStep->pExprList, 0), 
95320           sqlite3SelectDup(db, pStep->pSelect, 0), 
95321           sqlite3IdListDup(db, pStep->pIdList), 
95322           pParse->eOrconf
95323         );
95324         break;
95325       }
95326       case TK_DELETE: {
95327         sqlite3DeleteFrom(pParse, 
95328           targetSrcList(pParse, pStep),
95329           sqlite3ExprDup(db, pStep->pWhere, 0)
95330         );
95331         break;
95332       }
95333       default: assert( pStep->op==TK_SELECT ); {
95334         SelectDest sDest;
95335         Select *pSelect = sqlite3SelectDup(db, pStep->pSelect, 0);
95336         sqlite3SelectDestInit(&sDest, SRT_Discard, 0);
95337         sqlite3Select(pParse, pSelect, &sDest);
95338         sqlite3SelectDelete(db, pSelect);
95339         break;
95340       }
95341     } 
95342     if( pStep->op!=TK_SELECT ){
95343       sqlite3VdbeAddOp0(v, OP_ResetCount);
95344     }
95345   }
95346
95347   return 0;
95348 }
95349
95350 #ifdef SQLITE_DEBUG
95351 /*
95352 ** This function is used to add VdbeComment() annotations to a VDBE
95353 ** program. It is not used in production code, only for debugging.
95354 */
95355 static const char *onErrorText(int onError){
95356   switch( onError ){
95357     case OE_Abort:    return "abort";
95358     case OE_Rollback: return "rollback";
95359     case OE_Fail:     return "fail";
95360     case OE_Replace:  return "replace";
95361     case OE_Ignore:   return "ignore";
95362     case OE_Default:  return "default";
95363   }
95364   return "n/a";
95365 }
95366 #endif
95367
95368 /*
95369 ** Parse context structure pFrom has just been used to create a sub-vdbe
95370 ** (trigger program). If an error has occurred, transfer error information
95371 ** from pFrom to pTo.
95372 */
95373 static void transferParseError(Parse *pTo, Parse *pFrom){
95374   assert( pFrom->zErrMsg==0 || pFrom->nErr );
95375   assert( pTo->zErrMsg==0 || pTo->nErr );
95376   if( pTo->nErr==0 ){
95377     pTo->zErrMsg = pFrom->zErrMsg;
95378     pTo->nErr = pFrom->nErr;
95379   }else{
95380     sqlite3DbFree(pFrom->db, pFrom->zErrMsg);
95381   }
95382 }
95383
95384 /*
95385 ** Create and populate a new TriggerPrg object with a sub-program 
95386 ** implementing trigger pTrigger with ON CONFLICT policy orconf.
95387 */
95388 static TriggerPrg *codeRowTrigger(
95389   Parse *pParse,       /* Current parse context */
95390   Trigger *pTrigger,   /* Trigger to code */
95391   Table *pTab,         /* The table pTrigger is attached to */
95392   int orconf           /* ON CONFLICT policy to code trigger program with */
95393 ){
95394   Parse *pTop = sqlite3ParseToplevel(pParse);
95395   sqlite3 *db = pParse->db;   /* Database handle */
95396   TriggerPrg *pPrg;           /* Value to return */
95397   Expr *pWhen = 0;            /* Duplicate of trigger WHEN expression */
95398   Vdbe *v;                    /* Temporary VM */
95399   NameContext sNC;            /* Name context for sub-vdbe */
95400   SubProgram *pProgram = 0;   /* Sub-vdbe for trigger program */
95401   Parse *pSubParse;           /* Parse context for sub-vdbe */
95402   int iEndTrigger = 0;        /* Label to jump to if WHEN is false */
95403
95404   assert( pTrigger->zName==0 || pTab==tableOfTrigger(pTrigger) );
95405   assert( pTop->pVdbe );
95406
95407   /* Allocate the TriggerPrg and SubProgram objects. To ensure that they
95408   ** are freed if an error occurs, link them into the Parse.pTriggerPrg 
95409   ** list of the top-level Parse object sooner rather than later.  */
95410   pPrg = sqlite3DbMallocZero(db, sizeof(TriggerPrg));
95411   if( !pPrg ) return 0;
95412   pPrg->pNext = pTop->pTriggerPrg;
95413   pTop->pTriggerPrg = pPrg;
95414   pPrg->pProgram = pProgram = sqlite3DbMallocZero(db, sizeof(SubProgram));
95415   if( !pProgram ) return 0;
95416   sqlite3VdbeLinkSubProgram(pTop->pVdbe, pProgram);
95417   pPrg->pTrigger = pTrigger;
95418   pPrg->orconf = orconf;
95419   pPrg->aColmask[0] = 0xffffffff;
95420   pPrg->aColmask[1] = 0xffffffff;
95421
95422   /* Allocate and populate a new Parse context to use for coding the 
95423   ** trigger sub-program.  */
95424   pSubParse = sqlite3StackAllocZero(db, sizeof(Parse));
95425   if( !pSubParse ) return 0;
95426   memset(&sNC, 0, sizeof(sNC));
95427   sNC.pParse = pSubParse;
95428   pSubParse->db = db;
95429   pSubParse->pTriggerTab = pTab;
95430   pSubParse->pToplevel = pTop;
95431   pSubParse->zAuthContext = pTrigger->zName;
95432   pSubParse->eTriggerOp = pTrigger->op;
95433   pSubParse->nQueryLoop = pParse->nQueryLoop;
95434
95435   v = sqlite3GetVdbe(pSubParse);
95436   if( v ){
95437     VdbeComment((v, "Start: %s.%s (%s %s%s%s ON %s)", 
95438       pTrigger->zName, onErrorText(orconf),
95439       (pTrigger->tr_tm==TRIGGER_BEFORE ? "BEFORE" : "AFTER"),
95440         (pTrigger->op==TK_UPDATE ? "UPDATE" : ""),
95441         (pTrigger->op==TK_INSERT ? "INSERT" : ""),
95442         (pTrigger->op==TK_DELETE ? "DELETE" : ""),
95443       pTab->zName
95444     ));
95445 #ifndef SQLITE_OMIT_TRACE
95446     sqlite3VdbeChangeP4(v, -1, 
95447       sqlite3MPrintf(db, "-- TRIGGER %s", pTrigger->zName), P4_DYNAMIC
95448     );
95449 #endif
95450
95451     /* If one was specified, code the WHEN clause. If it evaluates to false
95452     ** (or NULL) the sub-vdbe is immediately halted by jumping to the 
95453     ** OP_Halt inserted at the end of the program.  */
95454     if( pTrigger->pWhen ){
95455       pWhen = sqlite3ExprDup(db, pTrigger->pWhen, 0);
95456       if( SQLITE_OK==sqlite3ResolveExprNames(&sNC, pWhen) 
95457        && db->mallocFailed==0 
95458       ){
95459         iEndTrigger = sqlite3VdbeMakeLabel(v);
95460         sqlite3ExprIfFalse(pSubParse, pWhen, iEndTrigger, SQLITE_JUMPIFNULL);
95461       }
95462       sqlite3ExprDelete(db, pWhen);
95463     }
95464
95465     /* Code the trigger program into the sub-vdbe. */
95466     codeTriggerProgram(pSubParse, pTrigger->step_list, orconf);
95467
95468     /* Insert an OP_Halt at the end of the sub-program. */
95469     if( iEndTrigger ){
95470       sqlite3VdbeResolveLabel(v, iEndTrigger);
95471     }
95472     sqlite3VdbeAddOp0(v, OP_Halt);
95473     VdbeComment((v, "End: %s.%s", pTrigger->zName, onErrorText(orconf)));
95474
95475     transferParseError(pParse, pSubParse);
95476     if( db->mallocFailed==0 ){
95477       pProgram->aOp = sqlite3VdbeTakeOpArray(v, &pProgram->nOp, &pTop->nMaxArg);
95478     }
95479     pProgram->nMem = pSubParse->nMem;
95480     pProgram->nCsr = pSubParse->nTab;
95481     pProgram->token = (void *)pTrigger;
95482     pPrg->aColmask[0] = pSubParse->oldmask;
95483     pPrg->aColmask[1] = pSubParse->newmask;
95484     sqlite3VdbeDelete(v);
95485   }
95486
95487   assert( !pSubParse->pAinc       && !pSubParse->pZombieTab );
95488   assert( !pSubParse->pTriggerPrg && !pSubParse->nMaxArg );
95489   sqlite3StackFree(db, pSubParse);
95490
95491   return pPrg;
95492 }
95493     
95494 /*
95495 ** Return a pointer to a TriggerPrg object containing the sub-program for
95496 ** trigger pTrigger with default ON CONFLICT algorithm orconf. If no such
95497 ** TriggerPrg object exists, a new object is allocated and populated before
95498 ** being returned.
95499 */
95500 static TriggerPrg *getRowTrigger(
95501   Parse *pParse,       /* Current parse context */
95502   Trigger *pTrigger,   /* Trigger to code */
95503   Table *pTab,         /* The table trigger pTrigger is attached to */
95504   int orconf           /* ON CONFLICT algorithm. */
95505 ){
95506   Parse *pRoot = sqlite3ParseToplevel(pParse);
95507   TriggerPrg *pPrg;
95508
95509   assert( pTrigger->zName==0 || pTab==tableOfTrigger(pTrigger) );
95510
95511   /* It may be that this trigger has already been coded (or is in the
95512   ** process of being coded). If this is the case, then an entry with
95513   ** a matching TriggerPrg.pTrigger field will be present somewhere
95514   ** in the Parse.pTriggerPrg list. Search for such an entry.  */
95515   for(pPrg=pRoot->pTriggerPrg; 
95516       pPrg && (pPrg->pTrigger!=pTrigger || pPrg->orconf!=orconf); 
95517       pPrg=pPrg->pNext
95518   );
95519
95520   /* If an existing TriggerPrg could not be located, create a new one. */
95521   if( !pPrg ){
95522     pPrg = codeRowTrigger(pParse, pTrigger, pTab, orconf);
95523   }
95524
95525   return pPrg;
95526 }
95527
95528 /*
95529 ** Generate code for the trigger program associated with trigger p on 
95530 ** table pTab. The reg, orconf and ignoreJump parameters passed to this
95531 ** function are the same as those described in the header function for
95532 ** sqlite3CodeRowTrigger()
95533 */
95534 SQLITE_PRIVATE void sqlite3CodeRowTriggerDirect(
95535   Parse *pParse,       /* Parse context */
95536   Trigger *p,          /* Trigger to code */
95537   Table *pTab,         /* The table to code triggers from */
95538   int reg,             /* Reg array containing OLD.* and NEW.* values */
95539   int orconf,          /* ON CONFLICT policy */
95540   int ignoreJump       /* Instruction to jump to for RAISE(IGNORE) */
95541 ){
95542   Vdbe *v = sqlite3GetVdbe(pParse); /* Main VM */
95543   TriggerPrg *pPrg;
95544   pPrg = getRowTrigger(pParse, p, pTab, orconf);
95545   assert( pPrg || pParse->nErr || pParse->db->mallocFailed );
95546
95547   /* Code the OP_Program opcode in the parent VDBE. P4 of the OP_Program 
95548   ** is a pointer to the sub-vdbe containing the trigger program.  */
95549   if( pPrg ){
95550     int bRecursive = (p->zName && 0==(pParse->db->flags&SQLITE_RecTriggers));
95551
95552     sqlite3VdbeAddOp3(v, OP_Program, reg, ignoreJump, ++pParse->nMem);
95553     sqlite3VdbeChangeP4(v, -1, (const char *)pPrg->pProgram, P4_SUBPROGRAM);
95554     VdbeComment(
95555         (v, "Call: %s.%s", (p->zName?p->zName:"fkey"), onErrorText(orconf)));
95556
95557     /* Set the P5 operand of the OP_Program instruction to non-zero if
95558     ** recursive invocation of this trigger program is disallowed. Recursive
95559     ** invocation is disallowed if (a) the sub-program is really a trigger,
95560     ** not a foreign key action, and (b) the flag to enable recursive triggers
95561     ** is clear.  */
95562     sqlite3VdbeChangeP5(v, (u8)bRecursive);
95563   }
95564 }
95565
95566 /*
95567 ** This is called to code the required FOR EACH ROW triggers for an operation
95568 ** on table pTab. The operation to code triggers for (INSERT, UPDATE or DELETE)
95569 ** is given by the op paramater. The tr_tm parameter determines whether the
95570 ** BEFORE or AFTER triggers are coded. If the operation is an UPDATE, then
95571 ** parameter pChanges is passed the list of columns being modified.
95572 **
95573 ** If there are no triggers that fire at the specified time for the specified
95574 ** operation on pTab, this function is a no-op.
95575 **
95576 ** The reg argument is the address of the first in an array of registers 
95577 ** that contain the values substituted for the new.* and old.* references
95578 ** in the trigger program. If N is the number of columns in table pTab
95579 ** (a copy of pTab->nCol), then registers are populated as follows:
95580 **
95581 **   Register       Contains
95582 **   ------------------------------------------------------
95583 **   reg+0          OLD.rowid
95584 **   reg+1          OLD.* value of left-most column of pTab
95585 **   ...            ...
95586 **   reg+N          OLD.* value of right-most column of pTab
95587 **   reg+N+1        NEW.rowid
95588 **   reg+N+2        OLD.* value of left-most column of pTab
95589 **   ...            ...
95590 **   reg+N+N+1      NEW.* value of right-most column of pTab
95591 **
95592 ** For ON DELETE triggers, the registers containing the NEW.* values will
95593 ** never be accessed by the trigger program, so they are not allocated or 
95594 ** populated by the caller (there is no data to populate them with anyway). 
95595 ** Similarly, for ON INSERT triggers the values stored in the OLD.* registers
95596 ** are never accessed, and so are not allocated by the caller. So, for an
95597 ** ON INSERT trigger, the value passed to this function as parameter reg
95598 ** is not a readable register, although registers (reg+N) through 
95599 ** (reg+N+N+1) are.
95600 **
95601 ** Parameter orconf is the default conflict resolution algorithm for the
95602 ** trigger program to use (REPLACE, IGNORE etc.). Parameter ignoreJump
95603 ** is the instruction that control should jump to if a trigger program
95604 ** raises an IGNORE exception.
95605 */
95606 SQLITE_PRIVATE void sqlite3CodeRowTrigger(
95607   Parse *pParse,       /* Parse context */
95608   Trigger *pTrigger,   /* List of triggers on table pTab */
95609   int op,              /* One of TK_UPDATE, TK_INSERT, TK_DELETE */
95610   ExprList *pChanges,  /* Changes list for any UPDATE OF triggers */
95611   int tr_tm,           /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
95612   Table *pTab,         /* The table to code triggers from */
95613   int reg,             /* The first in an array of registers (see above) */
95614   int orconf,          /* ON CONFLICT policy */
95615   int ignoreJump       /* Instruction to jump to for RAISE(IGNORE) */
95616 ){
95617   Trigger *p;          /* Used to iterate through pTrigger list */
95618
95619   assert( op==TK_UPDATE || op==TK_INSERT || op==TK_DELETE );
95620   assert( tr_tm==TRIGGER_BEFORE || tr_tm==TRIGGER_AFTER );
95621   assert( (op==TK_UPDATE)==(pChanges!=0) );
95622
95623   for(p=pTrigger; p; p=p->pNext){
95624
95625     /* Sanity checking:  The schema for the trigger and for the table are
95626     ** always defined.  The trigger must be in the same schema as the table
95627     ** or else it must be a TEMP trigger. */
95628     assert( p->pSchema!=0 );
95629     assert( p->pTabSchema!=0 );
95630     assert( p->pSchema==p->pTabSchema 
95631          || p->pSchema==pParse->db->aDb[1].pSchema );
95632
95633     /* Determine whether we should code this trigger */
95634     if( p->op==op 
95635      && p->tr_tm==tr_tm 
95636      && checkColumnOverlap(p->pColumns, pChanges)
95637     ){
95638       sqlite3CodeRowTriggerDirect(pParse, p, pTab, reg, orconf, ignoreJump);
95639     }
95640   }
95641 }
95642
95643 /*
95644 ** Triggers may access values stored in the old.* or new.* pseudo-table. 
95645 ** This function returns a 32-bit bitmask indicating which columns of the 
95646 ** old.* or new.* tables actually are used by triggers. This information 
95647 ** may be used by the caller, for example, to avoid having to load the entire
95648 ** old.* record into memory when executing an UPDATE or DELETE command.
95649 **
95650 ** Bit 0 of the returned mask is set if the left-most column of the
95651 ** table may be accessed using an [old|new].<col> reference. Bit 1 is set if
95652 ** the second leftmost column value is required, and so on. If there
95653 ** are more than 32 columns in the table, and at least one of the columns
95654 ** with an index greater than 32 may be accessed, 0xffffffff is returned.
95655 **
95656 ** It is not possible to determine if the old.rowid or new.rowid column is 
95657 ** accessed by triggers. The caller must always assume that it is.
95658 **
95659 ** Parameter isNew must be either 1 or 0. If it is 0, then the mask returned
95660 ** applies to the old.* table. If 1, the new.* table.
95661 **
95662 ** Parameter tr_tm must be a mask with one or both of the TRIGGER_BEFORE
95663 ** and TRIGGER_AFTER bits set. Values accessed by BEFORE triggers are only
95664 ** included in the returned mask if the TRIGGER_BEFORE bit is set in the
95665 ** tr_tm parameter. Similarly, values accessed by AFTER triggers are only
95666 ** included in the returned mask if the TRIGGER_AFTER bit is set in tr_tm.
95667 */
95668 SQLITE_PRIVATE u32 sqlite3TriggerColmask(
95669   Parse *pParse,       /* Parse context */
95670   Trigger *pTrigger,   /* List of triggers on table pTab */
95671   ExprList *pChanges,  /* Changes list for any UPDATE OF triggers */
95672   int isNew,           /* 1 for new.* ref mask, 0 for old.* ref mask */
95673   int tr_tm,           /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */
95674   Table *pTab,         /* The table to code triggers from */
95675   int orconf           /* Default ON CONFLICT policy for trigger steps */
95676 ){
95677   const int op = pChanges ? TK_UPDATE : TK_DELETE;
95678   u32 mask = 0;
95679   Trigger *p;
95680
95681   assert( isNew==1 || isNew==0 );
95682   for(p=pTrigger; p; p=p->pNext){
95683     if( p->op==op && (tr_tm&p->tr_tm)
95684      && checkColumnOverlap(p->pColumns,pChanges)
95685     ){
95686       TriggerPrg *pPrg;
95687       pPrg = getRowTrigger(pParse, p, pTab, orconf);
95688       if( pPrg ){
95689         mask |= pPrg->aColmask[isNew];
95690       }
95691     }
95692   }
95693
95694   return mask;
95695 }
95696
95697 #endif /* !defined(SQLITE_OMIT_TRIGGER) */
95698
95699 /************** End of trigger.c *********************************************/
95700 /************** Begin file update.c ******************************************/
95701 /*
95702 ** 2001 September 15
95703 **
95704 ** The author disclaims copyright to this source code.  In place of
95705 ** a legal notice, here is a blessing:
95706 **
95707 **    May you do good and not evil.
95708 **    May you find forgiveness for yourself and forgive others.
95709 **    May you share freely, never taking more than you give.
95710 **
95711 *************************************************************************
95712 ** This file contains C code routines that are called by the parser
95713 ** to handle UPDATE statements.
95714 */
95715
95716 #ifndef SQLITE_OMIT_VIRTUALTABLE
95717 /* Forward declaration */
95718 static void updateVirtualTable(
95719   Parse *pParse,       /* The parsing context */
95720   SrcList *pSrc,       /* The virtual table to be modified */
95721   Table *pTab,         /* The virtual table */
95722   ExprList *pChanges,  /* The columns to change in the UPDATE statement */
95723   Expr *pRowidExpr,    /* Expression used to recompute the rowid */
95724   int *aXRef,          /* Mapping from columns of pTab to entries in pChanges */
95725   Expr *pWhere         /* WHERE clause of the UPDATE statement */
95726 );
95727 #endif /* SQLITE_OMIT_VIRTUALTABLE */
95728
95729 /*
95730 ** The most recently coded instruction was an OP_Column to retrieve the
95731 ** i-th column of table pTab. This routine sets the P4 parameter of the 
95732 ** OP_Column to the default value, if any.
95733 **
95734 ** The default value of a column is specified by a DEFAULT clause in the 
95735 ** column definition. This was either supplied by the user when the table
95736 ** was created, or added later to the table definition by an ALTER TABLE
95737 ** command. If the latter, then the row-records in the table btree on disk
95738 ** may not contain a value for the column and the default value, taken
95739 ** from the P4 parameter of the OP_Column instruction, is returned instead.
95740 ** If the former, then all row-records are guaranteed to include a value
95741 ** for the column and the P4 value is not required.
95742 **
95743 ** Column definitions created by an ALTER TABLE command may only have 
95744 ** literal default values specified: a number, null or a string. (If a more
95745 ** complicated default expression value was provided, it is evaluated 
95746 ** when the ALTER TABLE is executed and one of the literal values written
95747 ** into the sqlite_master table.)
95748 **
95749 ** Therefore, the P4 parameter is only required if the default value for
95750 ** the column is a literal number, string or null. The sqlite3ValueFromExpr()
95751 ** function is capable of transforming these types of expressions into
95752 ** sqlite3_value objects.
95753 **
95754 ** If parameter iReg is not negative, code an OP_RealAffinity instruction
95755 ** on register iReg. This is used when an equivalent integer value is 
95756 ** stored in place of an 8-byte floating point value in order to save 
95757 ** space.
95758 */
95759 SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *v, Table *pTab, int i, int iReg){
95760   assert( pTab!=0 );
95761   if( !pTab->pSelect ){
95762     sqlite3_value *pValue;
95763     u8 enc = ENC(sqlite3VdbeDb(v));
95764     Column *pCol = &pTab->aCol[i];
95765     VdbeComment((v, "%s.%s", pTab->zName, pCol->zName));
95766     assert( i<pTab->nCol );
95767     sqlite3ValueFromExpr(sqlite3VdbeDb(v), pCol->pDflt, enc, 
95768                          pCol->affinity, &pValue);
95769     if( pValue ){
95770       sqlite3VdbeChangeP4(v, -1, (const char *)pValue, P4_MEM);
95771     }
95772 #ifndef SQLITE_OMIT_FLOATING_POINT
95773     if( iReg>=0 && pTab->aCol[i].affinity==SQLITE_AFF_REAL ){
95774       sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg);
95775     }
95776 #endif
95777   }
95778 }
95779
95780 /*
95781 ** Process an UPDATE statement.
95782 **
95783 **   UPDATE OR IGNORE table_wxyz SET a=b, c=d WHERE e<5 AND f NOT NULL;
95784 **          \_______/ \________/     \______/       \________________/
95785 *            onError   pTabList      pChanges             pWhere
95786 */
95787 SQLITE_PRIVATE void sqlite3Update(
95788   Parse *pParse,         /* The parser context */
95789   SrcList *pTabList,     /* The table in which we should change things */
95790   ExprList *pChanges,    /* Things to be changed */
95791   Expr *pWhere,          /* The WHERE clause.  May be null */
95792   int onError            /* How to handle constraint errors */
95793 ){
95794   int i, j;              /* Loop counters */
95795   Table *pTab;           /* The table to be updated */
95796   int addr = 0;          /* VDBE instruction address of the start of the loop */
95797   WhereInfo *pWInfo;     /* Information about the WHERE clause */
95798   Vdbe *v;               /* The virtual database engine */
95799   Index *pIdx;           /* For looping over indices */
95800   int nIdx;              /* Number of indices that need updating */
95801   int iCur;              /* VDBE Cursor number of pTab */
95802   sqlite3 *db;           /* The database structure */
95803   int *aRegIdx = 0;      /* One register assigned to each index to be updated */
95804   int *aXRef = 0;        /* aXRef[i] is the index in pChanges->a[] of the
95805                          ** an expression for the i-th column of the table.
95806                          ** aXRef[i]==-1 if the i-th column is not changed. */
95807   int chngRowid;         /* True if the record number is being changed */
95808   Expr *pRowidExpr = 0;  /* Expression defining the new record number */
95809   int openAll = 0;       /* True if all indices need to be opened */
95810   AuthContext sContext;  /* The authorization context */
95811   NameContext sNC;       /* The name-context to resolve expressions in */
95812   int iDb;               /* Database containing the table being updated */
95813   int okOnePass;         /* True for one-pass algorithm without the FIFO */
95814   int hasFK;             /* True if foreign key processing is required */
95815
95816 #ifndef SQLITE_OMIT_TRIGGER
95817   int isView;            /* True when updating a view (INSTEAD OF trigger) */
95818   Trigger *pTrigger;     /* List of triggers on pTab, if required */
95819   int tmask;             /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */
95820 #endif
95821   int newmask;           /* Mask of NEW.* columns accessed by BEFORE triggers */
95822
95823   /* Register Allocations */
95824   int regRowCount = 0;   /* A count of rows changed */
95825   int regOldRowid;       /* The old rowid */
95826   int regNewRowid;       /* The new rowid */
95827   int regNew;
95828   int regOld = 0;
95829   int regRowSet = 0;     /* Rowset of rows to be updated */
95830
95831   memset(&sContext, 0, sizeof(sContext));
95832   db = pParse->db;
95833   if( pParse->nErr || db->mallocFailed ){
95834     goto update_cleanup;
95835   }
95836   assert( pTabList->nSrc==1 );
95837
95838   /* Locate the table which we want to update. 
95839   */
95840   pTab = sqlite3SrcListLookup(pParse, pTabList);
95841   if( pTab==0 ) goto update_cleanup;
95842   iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
95843
95844   /* Figure out if we have any triggers and if the table being
95845   ** updated is a view.
95846   */
95847 #ifndef SQLITE_OMIT_TRIGGER
95848   pTrigger = sqlite3TriggersExist(pParse, pTab, TK_UPDATE, pChanges, &tmask);
95849   isView = pTab->pSelect!=0;
95850   assert( pTrigger || tmask==0 );
95851 #else
95852 # define pTrigger 0
95853 # define isView 0
95854 # define tmask 0
95855 #endif
95856 #ifdef SQLITE_OMIT_VIEW
95857 # undef isView
95858 # define isView 0
95859 #endif
95860
95861   if( sqlite3ViewGetColumnNames(pParse, pTab) ){
95862     goto update_cleanup;
95863   }
95864   if( sqlite3IsReadOnly(pParse, pTab, tmask) ){
95865     goto update_cleanup;
95866   }
95867   aXRef = sqlite3DbMallocRaw(db, sizeof(int) * pTab->nCol );
95868   if( aXRef==0 ) goto update_cleanup;
95869   for(i=0; i<pTab->nCol; i++) aXRef[i] = -1;
95870
95871   /* Allocate a cursors for the main database table and for all indices.
95872   ** The index cursors might not be used, but if they are used they
95873   ** need to occur right after the database cursor.  So go ahead and
95874   ** allocate enough space, just in case.
95875   */
95876   pTabList->a[0].iCursor = iCur = pParse->nTab++;
95877   for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
95878     pParse->nTab++;
95879   }
95880
95881   /* Initialize the name-context */
95882   memset(&sNC, 0, sizeof(sNC));
95883   sNC.pParse = pParse;
95884   sNC.pSrcList = pTabList;
95885
95886   /* Resolve the column names in all the expressions of the
95887   ** of the UPDATE statement.  Also find the column index
95888   ** for each column to be updated in the pChanges array.  For each
95889   ** column to be updated, make sure we have authorization to change
95890   ** that column.
95891   */
95892   chngRowid = 0;
95893   for(i=0; i<pChanges->nExpr; i++){
95894     if( sqlite3ResolveExprNames(&sNC, pChanges->a[i].pExpr) ){
95895       goto update_cleanup;
95896     }
95897     for(j=0; j<pTab->nCol; j++){
95898       if( sqlite3StrICmp(pTab->aCol[j].zName, pChanges->a[i].zName)==0 ){
95899         if( j==pTab->iPKey ){
95900           chngRowid = 1;
95901           pRowidExpr = pChanges->a[i].pExpr;
95902         }
95903         aXRef[j] = i;
95904         break;
95905       }
95906     }
95907     if( j>=pTab->nCol ){
95908       if( sqlite3IsRowid(pChanges->a[i].zName) ){
95909         chngRowid = 1;
95910         pRowidExpr = pChanges->a[i].pExpr;
95911       }else{
95912         sqlite3ErrorMsg(pParse, "no such column: %s", pChanges->a[i].zName);
95913         pParse->checkSchema = 1;
95914         goto update_cleanup;
95915       }
95916     }
95917 #ifndef SQLITE_OMIT_AUTHORIZATION
95918     {
95919       int rc;
95920       rc = sqlite3AuthCheck(pParse, SQLITE_UPDATE, pTab->zName,
95921                            pTab->aCol[j].zName, db->aDb[iDb].zName);
95922       if( rc==SQLITE_DENY ){
95923         goto update_cleanup;
95924       }else if( rc==SQLITE_IGNORE ){
95925         aXRef[j] = -1;
95926       }
95927     }
95928 #endif
95929   }
95930
95931   hasFK = sqlite3FkRequired(pParse, pTab, aXRef, chngRowid);
95932
95933   /* Allocate memory for the array aRegIdx[].  There is one entry in the
95934   ** array for each index associated with table being updated.  Fill in
95935   ** the value with a register number for indices that are to be used
95936   ** and with zero for unused indices.
95937   */
95938   for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){}
95939   if( nIdx>0 ){
95940     aRegIdx = sqlite3DbMallocRaw(db, sizeof(Index*) * nIdx );
95941     if( aRegIdx==0 ) goto update_cleanup;
95942   }
95943   for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
95944     int reg;
95945     if( chngRowid ){
95946       reg = ++pParse->nMem;
95947     }else{
95948       reg = 0;
95949       for(i=0; i<pIdx->nColumn; i++){
95950         if( aXRef[pIdx->aiColumn[i]]>=0 ){
95951           reg = ++pParse->nMem;
95952           break;
95953         }
95954       }
95955     }
95956     aRegIdx[j] = reg;
95957   }
95958
95959   /* Begin generating code. */
95960   v = sqlite3GetVdbe(pParse);
95961   if( v==0 ) goto update_cleanup;
95962   if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
95963   sqlite3BeginWriteOperation(pParse, 1, iDb);
95964
95965 #ifndef SQLITE_OMIT_VIRTUALTABLE
95966   /* Virtual tables must be handled separately */
95967   if( IsVirtual(pTab) ){
95968     updateVirtualTable(pParse, pTabList, pTab, pChanges, pRowidExpr, aXRef,
95969                        pWhere);
95970     pWhere = 0;
95971     pTabList = 0;
95972     goto update_cleanup;
95973   }
95974 #endif
95975
95976   /* Allocate required registers. */
95977   regOldRowid = regNewRowid = ++pParse->nMem;
95978   if( pTrigger || hasFK ){
95979     regOld = pParse->nMem + 1;
95980     pParse->nMem += pTab->nCol;
95981   }
95982   if( chngRowid || pTrigger || hasFK ){
95983     regNewRowid = ++pParse->nMem;
95984   }
95985   regNew = pParse->nMem + 1;
95986   pParse->nMem += pTab->nCol;
95987
95988   /* Start the view context. */
95989   if( isView ){
95990     sqlite3AuthContextPush(pParse, &sContext, pTab->zName);
95991   }
95992
95993   /* If we are trying to update a view, realize that view into
95994   ** a ephemeral table.
95995   */
95996 #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
95997   if( isView ){
95998     sqlite3MaterializeView(pParse, pTab, pWhere, iCur);
95999   }
96000 #endif
96001
96002   /* Resolve the column names in all the expressions in the
96003   ** WHERE clause.
96004   */
96005   if( sqlite3ResolveExprNames(&sNC, pWhere) ){
96006     goto update_cleanup;
96007   }
96008
96009   /* Begin the database scan
96010   */
96011   sqlite3VdbeAddOp2(v, OP_Null, 0, regOldRowid);
96012   pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere,0, WHERE_ONEPASS_DESIRED);
96013   if( pWInfo==0 ) goto update_cleanup;
96014   okOnePass = pWInfo->okOnePass;
96015
96016   /* Remember the rowid of every item to be updated.
96017   */
96018   sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regOldRowid);
96019   if( !okOnePass ){
96020     regRowSet = ++pParse->nMem;
96021     sqlite3VdbeAddOp2(v, OP_RowSetAdd, regRowSet, regOldRowid);
96022   }
96023
96024   /* End the database scan loop.
96025   */
96026   sqlite3WhereEnd(pWInfo);
96027
96028   /* Initialize the count of updated rows
96029   */
96030   if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab ){
96031     regRowCount = ++pParse->nMem;
96032     sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount);
96033   }
96034
96035   if( !isView ){
96036     /* 
96037     ** Open every index that needs updating.  Note that if any
96038     ** index could potentially invoke a REPLACE conflict resolution 
96039     ** action, then we need to open all indices because we might need
96040     ** to be deleting some records.
96041     */
96042     if( !okOnePass ) sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenWrite); 
96043     if( onError==OE_Replace ){
96044       openAll = 1;
96045     }else{
96046       openAll = 0;
96047       for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
96048         if( pIdx->onError==OE_Replace ){
96049           openAll = 1;
96050           break;
96051         }
96052       }
96053     }
96054     for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
96055       if( openAll || aRegIdx[i]>0 ){
96056         KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
96057         sqlite3VdbeAddOp4(v, OP_OpenWrite, iCur+i+1, pIdx->tnum, iDb,
96058                        (char*)pKey, P4_KEYINFO_HANDOFF);
96059         assert( pParse->nTab>iCur+i+1 );
96060       }
96061     }
96062   }
96063
96064   /* Top of the update loop */
96065   if( okOnePass ){
96066     int a1 = sqlite3VdbeAddOp1(v, OP_NotNull, regOldRowid);
96067     addr = sqlite3VdbeAddOp0(v, OP_Goto);
96068     sqlite3VdbeJumpHere(v, a1);
96069   }else{
96070     addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, regRowSet, 0, regOldRowid);
96071   }
96072
96073   /* Make cursor iCur point to the record that is being updated. If
96074   ** this record does not exist for some reason (deleted by a trigger,
96075   ** for example, then jump to the next iteration of the RowSet loop.  */
96076   sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid);
96077
96078   /* If the record number will change, set register regNewRowid to
96079   ** contain the new value. If the record number is not being modified,
96080   ** then regNewRowid is the same register as regOldRowid, which is
96081   ** already populated.  */
96082   assert( chngRowid || pTrigger || hasFK || regOldRowid==regNewRowid );
96083   if( chngRowid ){
96084     sqlite3ExprCode(pParse, pRowidExpr, regNewRowid);
96085     sqlite3VdbeAddOp1(v, OP_MustBeInt, regNewRowid);
96086   }
96087
96088   /* If there are triggers on this table, populate an array of registers 
96089   ** with the required old.* column data.  */
96090   if( hasFK || pTrigger ){
96091     u32 oldmask = (hasFK ? sqlite3FkOldmask(pParse, pTab) : 0);
96092     oldmask |= sqlite3TriggerColmask(pParse, 
96093         pTrigger, pChanges, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onError
96094     );
96095     for(i=0; i<pTab->nCol; i++){
96096       if( aXRef[i]<0 || oldmask==0xffffffff || (i<32 && (oldmask & (1<<i))) ){
96097         sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, i, regOld+i);
96098       }else{
96099         sqlite3VdbeAddOp2(v, OP_Null, 0, regOld+i);
96100       }
96101     }
96102     if( chngRowid==0 ){
96103       sqlite3VdbeAddOp2(v, OP_Copy, regOldRowid, regNewRowid);
96104     }
96105   }
96106
96107   /* Populate the array of registers beginning at regNew with the new
96108   ** row data. This array is used to check constaints, create the new
96109   ** table and index records, and as the values for any new.* references
96110   ** made by triggers.
96111   **
96112   ** If there are one or more BEFORE triggers, then do not populate the
96113   ** registers associated with columns that are (a) not modified by
96114   ** this UPDATE statement and (b) not accessed by new.* references. The
96115   ** values for registers not modified by the UPDATE must be reloaded from 
96116   ** the database after the BEFORE triggers are fired anyway (as the trigger 
96117   ** may have modified them). So not loading those that are not going to
96118   ** be used eliminates some redundant opcodes.
96119   */
96120   newmask = sqlite3TriggerColmask(
96121       pParse, pTrigger, pChanges, 1, TRIGGER_BEFORE, pTab, onError
96122   );
96123   for(i=0; i<pTab->nCol; i++){
96124     if( i==pTab->iPKey ){
96125       sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i);
96126     }else{
96127       j = aXRef[i];
96128       if( j>=0 ){
96129         sqlite3ExprCode(pParse, pChanges->a[j].pExpr, regNew+i);
96130       }else if( 0==(tmask&TRIGGER_BEFORE) || i>31 || (newmask&(1<<i)) ){
96131         /* This branch loads the value of a column that will not be changed 
96132         ** into a register. This is done if there are no BEFORE triggers, or
96133         ** if there are one or more BEFORE triggers that use this value via
96134         ** a new.* reference in a trigger program.
96135         */
96136         testcase( i==31 );
96137         testcase( i==32 );
96138         sqlite3VdbeAddOp3(v, OP_Column, iCur, i, regNew+i);
96139         sqlite3ColumnDefault(v, pTab, i, regNew+i);
96140       }
96141     }
96142   }
96143
96144   /* Fire any BEFORE UPDATE triggers. This happens before constraints are
96145   ** verified. One could argue that this is wrong.
96146   */
96147   if( tmask&TRIGGER_BEFORE ){
96148     sqlite3VdbeAddOp2(v, OP_Affinity, regNew, pTab->nCol);
96149     sqlite3TableAffinityStr(v, pTab);
96150     sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, 
96151         TRIGGER_BEFORE, pTab, regOldRowid, onError, addr);
96152
96153     /* The row-trigger may have deleted the row being updated. In this
96154     ** case, jump to the next row. No updates or AFTER triggers are 
96155     ** required. This behaviour - what happens when the row being updated
96156     ** is deleted or renamed by a BEFORE trigger - is left undefined in the
96157     ** documentation.
96158     */
96159     sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid);
96160
96161     /* If it did not delete it, the row-trigger may still have modified 
96162     ** some of the columns of the row being updated. Load the values for 
96163     ** all columns not modified by the update statement into their 
96164     ** registers in case this has happened.
96165     */
96166     for(i=0; i<pTab->nCol; i++){
96167       if( aXRef[i]<0 && i!=pTab->iPKey ){
96168         sqlite3VdbeAddOp3(v, OP_Column, iCur, i, regNew+i);
96169         sqlite3ColumnDefault(v, pTab, i, regNew+i);
96170       }
96171     }
96172   }
96173
96174   if( !isView ){
96175     int j1;                       /* Address of jump instruction */
96176
96177     /* Do constraint checks. */
96178     sqlite3GenerateConstraintChecks(pParse, pTab, iCur, regNewRowid,
96179         aRegIdx, (chngRowid?regOldRowid:0), 1, onError, addr, 0);
96180
96181     /* Do FK constraint checks. */
96182     if( hasFK ){
96183       sqlite3FkCheck(pParse, pTab, regOldRowid, 0);
96184     }
96185
96186     /* Delete the index entries associated with the current record.  */
96187     j1 = sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regOldRowid);
96188     sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, aRegIdx);
96189   
96190     /* If changing the record number, delete the old record.  */
96191     if( hasFK || chngRowid ){
96192       sqlite3VdbeAddOp2(v, OP_Delete, iCur, 0);
96193     }
96194     sqlite3VdbeJumpHere(v, j1);
96195
96196     if( hasFK ){
96197       sqlite3FkCheck(pParse, pTab, 0, regNewRowid);
96198     }
96199   
96200     /* Insert the new index entries and the new record. */
96201     sqlite3CompleteInsertion(pParse, pTab, iCur, regNewRowid, aRegIdx, 1, 0, 0);
96202
96203     /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to
96204     ** handle rows (possibly in other tables) that refer via a foreign key
96205     ** to the row just updated. */ 
96206     if( hasFK ){
96207       sqlite3FkActions(pParse, pTab, pChanges, regOldRowid);
96208     }
96209   }
96210
96211   /* Increment the row counter 
96212   */
96213   if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab){
96214     sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1);
96215   }
96216
96217   sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, 
96218       TRIGGER_AFTER, pTab, regOldRowid, onError, addr);
96219
96220   /* Repeat the above with the next record to be updated, until
96221   ** all record selected by the WHERE clause have been updated.
96222   */
96223   sqlite3VdbeAddOp2(v, OP_Goto, 0, addr);
96224   sqlite3VdbeJumpHere(v, addr);
96225
96226   /* Close all tables */
96227   for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
96228     if( openAll || aRegIdx[i]>0 ){
96229       sqlite3VdbeAddOp2(v, OP_Close, iCur+i+1, 0);
96230     }
96231   }
96232   sqlite3VdbeAddOp2(v, OP_Close, iCur, 0);
96233
96234   /* Update the sqlite_sequence table by storing the content of the
96235   ** maximum rowid counter values recorded while inserting into
96236   ** autoincrement tables.
96237   */
96238   if( pParse->nested==0 && pParse->pTriggerTab==0 ){
96239     sqlite3AutoincrementEnd(pParse);
96240   }
96241
96242   /*
96243   ** Return the number of rows that were changed. If this routine is 
96244   ** generating code because of a call to sqlite3NestedParse(), do not
96245   ** invoke the callback function.
96246   */
96247   if( (db->flags&SQLITE_CountRows) && !pParse->pTriggerTab && !pParse->nested ){
96248     sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);
96249     sqlite3VdbeSetNumCols(v, 1);
96250     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows updated", SQLITE_STATIC);
96251   }
96252
96253 update_cleanup:
96254   sqlite3AuthContextPop(&sContext);
96255   sqlite3DbFree(db, aRegIdx);
96256   sqlite3DbFree(db, aXRef);
96257   sqlite3SrcListDelete(db, pTabList);
96258   sqlite3ExprListDelete(db, pChanges);
96259   sqlite3ExprDelete(db, pWhere);
96260   return;
96261 }
96262 /* Make sure "isView" and other macros defined above are undefined. Otherwise
96263 ** thely may interfere with compilation of other functions in this file
96264 ** (or in another file, if this file becomes part of the amalgamation).  */
96265 #ifdef isView
96266  #undef isView
96267 #endif
96268 #ifdef pTrigger
96269  #undef pTrigger
96270 #endif
96271
96272 #ifndef SQLITE_OMIT_VIRTUALTABLE
96273 /*
96274 ** Generate code for an UPDATE of a virtual table.
96275 **
96276 ** The strategy is that we create an ephemerial table that contains
96277 ** for each row to be changed:
96278 **
96279 **   (A)  The original rowid of that row.
96280 **   (B)  The revised rowid for the row. (note1)
96281 **   (C)  The content of every column in the row.
96282 **
96283 ** Then we loop over this ephemeral table and for each row in
96284 ** the ephermeral table call VUpdate.
96285 **
96286 ** When finished, drop the ephemeral table.
96287 **
96288 ** (note1) Actually, if we know in advance that (A) is always the same
96289 ** as (B) we only store (A), then duplicate (A) when pulling
96290 ** it out of the ephemeral table before calling VUpdate.
96291 */
96292 static void updateVirtualTable(
96293   Parse *pParse,       /* The parsing context */
96294   SrcList *pSrc,       /* The virtual table to be modified */
96295   Table *pTab,         /* The virtual table */
96296   ExprList *pChanges,  /* The columns to change in the UPDATE statement */
96297   Expr *pRowid,        /* Expression used to recompute the rowid */
96298   int *aXRef,          /* Mapping from columns of pTab to entries in pChanges */
96299   Expr *pWhere         /* WHERE clause of the UPDATE statement */
96300 ){
96301   Vdbe *v = pParse->pVdbe;  /* Virtual machine under construction */
96302   ExprList *pEList = 0;     /* The result set of the SELECT statement */
96303   Select *pSelect = 0;      /* The SELECT statement */
96304   Expr *pExpr;              /* Temporary expression */
96305   int ephemTab;             /* Table holding the result of the SELECT */
96306   int i;                    /* Loop counter */
96307   int addr;                 /* Address of top of loop */
96308   int iReg;                 /* First register in set passed to OP_VUpdate */
96309   sqlite3 *db = pParse->db; /* Database connection */
96310   const char *pVTab = (const char*)sqlite3GetVTable(db, pTab);
96311   SelectDest dest;
96312
96313   /* Construct the SELECT statement that will find the new values for
96314   ** all updated rows. 
96315   */
96316   pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ID, "_rowid_"));
96317   if( pRowid ){
96318     pEList = sqlite3ExprListAppend(pParse, pEList,
96319                                    sqlite3ExprDup(db, pRowid, 0));
96320   }
96321   assert( pTab->iPKey<0 );
96322   for(i=0; i<pTab->nCol; i++){
96323     if( aXRef[i]>=0 ){
96324       pExpr = sqlite3ExprDup(db, pChanges->a[aXRef[i]].pExpr, 0);
96325     }else{
96326       pExpr = sqlite3Expr(db, TK_ID, pTab->aCol[i].zName);
96327     }
96328     pEList = sqlite3ExprListAppend(pParse, pEList, pExpr);
96329   }
96330   pSelect = sqlite3SelectNew(pParse, pEList, pSrc, pWhere, 0, 0, 0, 0, 0, 0);
96331   
96332   /* Create the ephemeral table into which the update results will
96333   ** be stored.
96334   */
96335   assert( v );
96336   ephemTab = pParse->nTab++;
96337   sqlite3VdbeAddOp2(v, OP_OpenEphemeral, ephemTab, pTab->nCol+1+(pRowid!=0));
96338   sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
96339
96340   /* fill the ephemeral table 
96341   */
96342   sqlite3SelectDestInit(&dest, SRT_Table, ephemTab);
96343   sqlite3Select(pParse, pSelect, &dest);
96344
96345   /* Generate code to scan the ephemeral table and call VUpdate. */
96346   iReg = ++pParse->nMem;
96347   pParse->nMem += pTab->nCol+1;
96348   addr = sqlite3VdbeAddOp2(v, OP_Rewind, ephemTab, 0);
96349   sqlite3VdbeAddOp3(v, OP_Column,  ephemTab, 0, iReg);
96350   sqlite3VdbeAddOp3(v, OP_Column, ephemTab, (pRowid?1:0), iReg+1);
96351   for(i=0; i<pTab->nCol; i++){
96352     sqlite3VdbeAddOp3(v, OP_Column, ephemTab, i+1+(pRowid!=0), iReg+2+i);
96353   }
96354   sqlite3VtabMakeWritable(pParse, pTab);
96355   sqlite3VdbeAddOp4(v, OP_VUpdate, 0, pTab->nCol+2, iReg, pVTab, P4_VTAB);
96356   sqlite3MayAbort(pParse);
96357   sqlite3VdbeAddOp2(v, OP_Next, ephemTab, addr+1);
96358   sqlite3VdbeJumpHere(v, addr);
96359   sqlite3VdbeAddOp2(v, OP_Close, ephemTab, 0);
96360
96361   /* Cleanup */
96362   sqlite3SelectDelete(db, pSelect);  
96363 }
96364 #endif /* SQLITE_OMIT_VIRTUALTABLE */
96365
96366 /************** End of update.c **********************************************/
96367 /************** Begin file vacuum.c ******************************************/
96368 /*
96369 ** 2003 April 6
96370 **
96371 ** The author disclaims copyright to this source code.  In place of
96372 ** a legal notice, here is a blessing:
96373 **
96374 **    May you do good and not evil.
96375 **    May you find forgiveness for yourself and forgive others.
96376 **    May you share freely, never taking more than you give.
96377 **
96378 *************************************************************************
96379 ** This file contains code used to implement the VACUUM command.
96380 **
96381 ** Most of the code in this file may be omitted by defining the
96382 ** SQLITE_OMIT_VACUUM macro.
96383 */
96384
96385 #if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH)
96386 /*
96387 ** Finalize a prepared statement.  If there was an error, store the
96388 ** text of the error message in *pzErrMsg.  Return the result code.
96389 */
96390 static int vacuumFinalize(sqlite3 *db, sqlite3_stmt *pStmt, char **pzErrMsg){
96391   int rc;
96392   rc = sqlite3VdbeFinalize((Vdbe*)pStmt);
96393   if( rc ){
96394     sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db));
96395   }
96396   return rc;
96397 }
96398
96399 /*
96400 ** Execute zSql on database db. Return an error code.
96401 */
96402 static int execSql(sqlite3 *db, char **pzErrMsg, const char *zSql){
96403   sqlite3_stmt *pStmt;
96404   VVA_ONLY( int rc; )
96405   if( !zSql ){
96406     return SQLITE_NOMEM;
96407   }
96408   if( SQLITE_OK!=sqlite3_prepare(db, zSql, -1, &pStmt, 0) ){
96409     sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db));
96410     return sqlite3_errcode(db);
96411   }
96412   VVA_ONLY( rc = ) sqlite3_step(pStmt);
96413   assert( rc!=SQLITE_ROW );
96414   return vacuumFinalize(db, pStmt, pzErrMsg);
96415 }
96416
96417 /*
96418 ** Execute zSql on database db. The statement returns exactly
96419 ** one column. Execute this as SQL on the same database.
96420 */
96421 static int execExecSql(sqlite3 *db, char **pzErrMsg, const char *zSql){
96422   sqlite3_stmt *pStmt;
96423   int rc;
96424
96425   rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
96426   if( rc!=SQLITE_OK ) return rc;
96427
96428   while( SQLITE_ROW==sqlite3_step(pStmt) ){
96429     rc = execSql(db, pzErrMsg, (char*)sqlite3_column_text(pStmt, 0));
96430     if( rc!=SQLITE_OK ){
96431       vacuumFinalize(db, pStmt, pzErrMsg);
96432       return rc;
96433     }
96434   }
96435
96436   return vacuumFinalize(db, pStmt, pzErrMsg);
96437 }
96438
96439 /*
96440 ** The non-standard VACUUM command is used to clean up the database,
96441 ** collapse free space, etc.  It is modelled after the VACUUM command
96442 ** in PostgreSQL.
96443 **
96444 ** In version 1.0.x of SQLite, the VACUUM command would call
96445 ** gdbm_reorganize() on all the database tables.  But beginning
96446 ** with 2.0.0, SQLite no longer uses GDBM so this command has
96447 ** become a no-op.
96448 */
96449 SQLITE_PRIVATE void sqlite3Vacuum(Parse *pParse){
96450   Vdbe *v = sqlite3GetVdbe(pParse);
96451   if( v ){
96452     sqlite3VdbeAddOp2(v, OP_Vacuum, 0, 0);
96453   }
96454   return;
96455 }
96456
96457 /*
96458 ** This routine implements the OP_Vacuum opcode of the VDBE.
96459 */
96460 SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
96461   int rc = SQLITE_OK;     /* Return code from service routines */
96462   Btree *pMain;           /* The database being vacuumed */
96463   Btree *pTemp;           /* The temporary database we vacuum into */
96464   char *zSql = 0;         /* SQL statements */
96465   int saved_flags;        /* Saved value of the db->flags */
96466   int saved_nChange;      /* Saved value of db->nChange */
96467   int saved_nTotalChange; /* Saved value of db->nTotalChange */
96468   void (*saved_xTrace)(void*,const char*);  /* Saved db->xTrace */
96469   Db *pDb = 0;            /* Database to detach at end of vacuum */
96470   int isMemDb;            /* True if vacuuming a :memory: database */
96471   int nRes;               /* Bytes of reserved space at the end of each page */
96472   int nDb;                /* Number of attached databases */
96473
96474   if( !db->autoCommit ){
96475     sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction");
96476     return SQLITE_ERROR;
96477   }
96478   if( db->activeVdbeCnt>1 ){
96479     sqlite3SetString(pzErrMsg, db,"cannot VACUUM - SQL statements in progress");
96480     return SQLITE_ERROR;
96481   }
96482
96483   /* Save the current value of the database flags so that it can be 
96484   ** restored before returning. Then set the writable-schema flag, and
96485   ** disable CHECK and foreign key constraints.  */
96486   saved_flags = db->flags;
96487   saved_nChange = db->nChange;
96488   saved_nTotalChange = db->nTotalChange;
96489   saved_xTrace = db->xTrace;
96490   db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks | SQLITE_PreferBuiltin;
96491   db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder);
96492   db->xTrace = 0;
96493
96494   pMain = db->aDb[0].pBt;
96495   isMemDb = sqlite3PagerIsMemdb(sqlite3BtreePager(pMain));
96496
96497   /* Attach the temporary database as 'vacuum_db'. The synchronous pragma
96498   ** can be set to 'off' for this file, as it is not recovered if a crash
96499   ** occurs anyway. The integrity of the database is maintained by a
96500   ** (possibly synchronous) transaction opened on the main database before
96501   ** sqlite3BtreeCopyFile() is called.
96502   **
96503   ** An optimisation would be to use a non-journaled pager.
96504   ** (Later:) I tried setting "PRAGMA vacuum_db.journal_mode=OFF" but
96505   ** that actually made the VACUUM run slower.  Very little journalling
96506   ** actually occurs when doing a vacuum since the vacuum_db is initially
96507   ** empty.  Only the journal header is written.  Apparently it takes more
96508   ** time to parse and run the PRAGMA to turn journalling off than it does
96509   ** to write the journal header file.
96510   */
96511   nDb = db->nDb;
96512   if( sqlite3TempInMemory(db) ){
96513     zSql = "ATTACH ':memory:' AS vacuum_db;";
96514   }else{
96515     zSql = "ATTACH '' AS vacuum_db;";
96516   }
96517   rc = execSql(db, pzErrMsg, zSql);
96518   if( db->nDb>nDb ){
96519     pDb = &db->aDb[db->nDb-1];
96520     assert( strcmp(pDb->zName,"vacuum_db")==0 );
96521   }
96522   if( rc!=SQLITE_OK ) goto end_of_vacuum;
96523   pTemp = db->aDb[db->nDb-1].pBt;
96524
96525   /* The call to execSql() to attach the temp database has left the file
96526   ** locked (as there was more than one active statement when the transaction
96527   ** to read the schema was concluded. Unlock it here so that this doesn't
96528   ** cause problems for the call to BtreeSetPageSize() below.  */
96529   sqlite3BtreeCommit(pTemp);
96530
96531   nRes = sqlite3BtreeGetReserve(pMain);
96532
96533   /* A VACUUM cannot change the pagesize of an encrypted database. */
96534 #ifdef SQLITE_HAS_CODEC
96535   if( db->nextPagesize ){
96536     extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*);
96537     int nKey;
96538     char *zKey;
96539     sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey);
96540     if( nKey ) db->nextPagesize = 0;
96541   }
96542 #endif
96543
96544   /* Do not attempt to change the page size for a WAL database */
96545   if( sqlite3PagerGetJournalMode(sqlite3BtreePager(pMain))
96546                                                ==PAGER_JOURNALMODE_WAL ){
96547     db->nextPagesize = 0;
96548   }
96549
96550   if( sqlite3BtreeSetPageSize(pTemp, sqlite3BtreeGetPageSize(pMain), nRes, 0)
96551    || (!isMemDb && sqlite3BtreeSetPageSize(pTemp, db->nextPagesize, nRes, 0))
96552    || NEVER(db->mallocFailed)
96553   ){
96554     rc = SQLITE_NOMEM;
96555     goto end_of_vacuum;
96556   }
96557   rc = execSql(db, pzErrMsg, "PRAGMA vacuum_db.synchronous=OFF");
96558   if( rc!=SQLITE_OK ){
96559     goto end_of_vacuum;
96560   }
96561
96562 #ifndef SQLITE_OMIT_AUTOVACUUM
96563   sqlite3BtreeSetAutoVacuum(pTemp, db->nextAutovac>=0 ? db->nextAutovac :
96564                                            sqlite3BtreeGetAutoVacuum(pMain));
96565 #endif
96566
96567   /* Begin a transaction */
96568   rc = execSql(db, pzErrMsg, "BEGIN EXCLUSIVE;");
96569   if( rc!=SQLITE_OK ) goto end_of_vacuum;
96570
96571   /* Query the schema of the main database. Create a mirror schema
96572   ** in the temporary database.
96573   */
96574   rc = execExecSql(db, pzErrMsg,
96575       "SELECT 'CREATE TABLE vacuum_db.' || substr(sql,14) "
96576       "  FROM sqlite_master WHERE type='table' AND name!='sqlite_sequence'"
96577       "   AND rootpage>0"
96578   );
96579   if( rc!=SQLITE_OK ) goto end_of_vacuum;
96580   rc = execExecSql(db, pzErrMsg,
96581       "SELECT 'CREATE INDEX vacuum_db.' || substr(sql,14)"
96582       "  FROM sqlite_master WHERE sql LIKE 'CREATE INDEX %' ");
96583   if( rc!=SQLITE_OK ) goto end_of_vacuum;
96584   rc = execExecSql(db, pzErrMsg,
96585       "SELECT 'CREATE UNIQUE INDEX vacuum_db.' || substr(sql,21) "
96586       "  FROM sqlite_master WHERE sql LIKE 'CREATE UNIQUE INDEX %'");
96587   if( rc!=SQLITE_OK ) goto end_of_vacuum;
96588
96589   /* Loop through the tables in the main database. For each, do
96590   ** an "INSERT INTO vacuum_db.xxx SELECT * FROM main.xxx;" to copy
96591   ** the contents to the temporary database.
96592   */
96593   rc = execExecSql(db, pzErrMsg,
96594       "SELECT 'INSERT INTO vacuum_db.' || quote(name) "
96595       "|| ' SELECT * FROM main.' || quote(name) || ';'"
96596       "FROM main.sqlite_master "
96597       "WHERE type = 'table' AND name!='sqlite_sequence' "
96598       "  AND rootpage>0"
96599   );
96600   if( rc!=SQLITE_OK ) goto end_of_vacuum;
96601
96602   /* Copy over the sequence table
96603   */
96604   rc = execExecSql(db, pzErrMsg,
96605       "SELECT 'DELETE FROM vacuum_db.' || quote(name) || ';' "
96606       "FROM vacuum_db.sqlite_master WHERE name='sqlite_sequence' "
96607   );
96608   if( rc!=SQLITE_OK ) goto end_of_vacuum;
96609   rc = execExecSql(db, pzErrMsg,
96610       "SELECT 'INSERT INTO vacuum_db.' || quote(name) "
96611       "|| ' SELECT * FROM main.' || quote(name) || ';' "
96612       "FROM vacuum_db.sqlite_master WHERE name=='sqlite_sequence';"
96613   );
96614   if( rc!=SQLITE_OK ) goto end_of_vacuum;
96615
96616
96617   /* Copy the triggers, views, and virtual tables from the main database
96618   ** over to the temporary database.  None of these objects has any
96619   ** associated storage, so all we have to do is copy their entries
96620   ** from the SQLITE_MASTER table.
96621   */
96622   rc = execSql(db, pzErrMsg,
96623       "INSERT INTO vacuum_db.sqlite_master "
96624       "  SELECT type, name, tbl_name, rootpage, sql"
96625       "    FROM main.sqlite_master"
96626       "   WHERE type='view' OR type='trigger'"
96627       "      OR (type='table' AND rootpage=0)"
96628   );
96629   if( rc ) goto end_of_vacuum;
96630
96631   /* At this point, unless the main db was completely empty, there is now a
96632   ** transaction open on the vacuum database, but not on the main database.
96633   ** Open a btree level transaction on the main database. This allows a
96634   ** call to sqlite3BtreeCopyFile(). The main database btree level
96635   ** transaction is then committed, so the SQL level never knows it was
96636   ** opened for writing. This way, the SQL transaction used to create the
96637   ** temporary database never needs to be committed.
96638   */
96639   {
96640     u32 meta;
96641     int i;
96642
96643     /* This array determines which meta meta values are preserved in the
96644     ** vacuum.  Even entries are the meta value number and odd entries
96645     ** are an increment to apply to the meta value after the vacuum.
96646     ** The increment is used to increase the schema cookie so that other
96647     ** connections to the same database will know to reread the schema.
96648     */
96649     static const unsigned char aCopy[] = {
96650        BTREE_SCHEMA_VERSION,     1,  /* Add one to the old schema cookie */
96651        BTREE_DEFAULT_CACHE_SIZE, 0,  /* Preserve the default page cache size */
96652        BTREE_TEXT_ENCODING,      0,  /* Preserve the text encoding */
96653        BTREE_USER_VERSION,       0,  /* Preserve the user version */
96654     };
96655
96656     assert( 1==sqlite3BtreeIsInTrans(pTemp) );
96657     assert( 1==sqlite3BtreeIsInTrans(pMain) );
96658
96659     /* Copy Btree meta values */
96660     for(i=0; i<ArraySize(aCopy); i+=2){
96661       /* GetMeta() and UpdateMeta() cannot fail in this context because
96662       ** we already have page 1 loaded into cache and marked dirty. */
96663       sqlite3BtreeGetMeta(pMain, aCopy[i], &meta);
96664       rc = sqlite3BtreeUpdateMeta(pTemp, aCopy[i], meta+aCopy[i+1]);
96665       if( NEVER(rc!=SQLITE_OK) ) goto end_of_vacuum;
96666     }
96667
96668     rc = sqlite3BtreeCopyFile(pMain, pTemp);
96669     if( rc!=SQLITE_OK ) goto end_of_vacuum;
96670     rc = sqlite3BtreeCommit(pTemp);
96671     if( rc!=SQLITE_OK ) goto end_of_vacuum;
96672 #ifndef SQLITE_OMIT_AUTOVACUUM
96673     sqlite3BtreeSetAutoVacuum(pMain, sqlite3BtreeGetAutoVacuum(pTemp));
96674 #endif
96675   }
96676
96677   assert( rc==SQLITE_OK );
96678   rc = sqlite3BtreeSetPageSize(pMain, sqlite3BtreeGetPageSize(pTemp), nRes,1);
96679
96680 end_of_vacuum:
96681   /* Restore the original value of db->flags */
96682   db->flags = saved_flags;
96683   db->nChange = saved_nChange;
96684   db->nTotalChange = saved_nTotalChange;
96685   db->xTrace = saved_xTrace;
96686   sqlite3BtreeSetPageSize(pMain, -1, -1, 1);
96687
96688   /* Currently there is an SQL level transaction open on the vacuum
96689   ** database. No locks are held on any other files (since the main file
96690   ** was committed at the btree level). So it safe to end the transaction
96691   ** by manually setting the autoCommit flag to true and detaching the
96692   ** vacuum database. The vacuum_db journal file is deleted when the pager
96693   ** is closed by the DETACH.
96694   */
96695   db->autoCommit = 1;
96696
96697   if( pDb ){
96698     sqlite3BtreeClose(pDb->pBt);
96699     pDb->pBt = 0;
96700     pDb->pSchema = 0;
96701   }
96702
96703   /* This both clears the schemas and reduces the size of the db->aDb[]
96704   ** array. */ 
96705   sqlite3ResetInternalSchema(db, -1);
96706
96707   return rc;
96708 }
96709
96710 #endif  /* SQLITE_OMIT_VACUUM && SQLITE_OMIT_ATTACH */
96711
96712 /************** End of vacuum.c **********************************************/
96713 /************** Begin file vtab.c ********************************************/
96714 /*
96715 ** 2006 June 10
96716 **
96717 ** The author disclaims copyright to this source code.  In place of
96718 ** a legal notice, here is a blessing:
96719 **
96720 **    May you do good and not evil.
96721 **    May you find forgiveness for yourself and forgive others.
96722 **    May you share freely, never taking more than you give.
96723 **
96724 *************************************************************************
96725 ** This file contains code used to help implement virtual tables.
96726 */
96727 #ifndef SQLITE_OMIT_VIRTUALTABLE
96728
96729 /*
96730 ** The actual function that does the work of creating a new module.
96731 ** This function implements the sqlite3_create_module() and
96732 ** sqlite3_create_module_v2() interfaces.
96733 */
96734 static int createModule(
96735   sqlite3 *db,                    /* Database in which module is registered */
96736   const char *zName,              /* Name assigned to this module */
96737   const sqlite3_module *pModule,  /* The definition of the module */
96738   void *pAux,                     /* Context pointer for xCreate/xConnect */
96739   void (*xDestroy)(void *)        /* Module destructor function */
96740 ){
96741   int rc, nName;
96742   Module *pMod;
96743
96744   sqlite3_mutex_enter(db->mutex);
96745   nName = sqlite3Strlen30(zName);
96746   pMod = (Module *)sqlite3DbMallocRaw(db, sizeof(Module) + nName + 1);
96747   if( pMod ){
96748     Module *pDel;
96749     char *zCopy = (char *)(&pMod[1]);
96750     memcpy(zCopy, zName, nName+1);
96751     pMod->zName = zCopy;
96752     pMod->pModule = pModule;
96753     pMod->pAux = pAux;
96754     pMod->xDestroy = xDestroy;
96755     pDel = (Module *)sqlite3HashInsert(&db->aModule, zCopy, nName, (void*)pMod);
96756     if( pDel && pDel->xDestroy ){
96757       pDel->xDestroy(pDel->pAux);
96758     }
96759     sqlite3DbFree(db, pDel);
96760     if( pDel==pMod ){
96761       db->mallocFailed = 1;
96762     }
96763     sqlite3ResetInternalSchema(db, -1);
96764   }else if( xDestroy ){
96765     xDestroy(pAux);
96766   }
96767   rc = sqlite3ApiExit(db, SQLITE_OK);
96768   sqlite3_mutex_leave(db->mutex);
96769   return rc;
96770 }
96771
96772
96773 /*
96774 ** External API function used to create a new virtual-table module.
96775 */
96776 SQLITE_API int sqlite3_create_module(
96777   sqlite3 *db,                    /* Database in which module is registered */
96778   const char *zName,              /* Name assigned to this module */
96779   const sqlite3_module *pModule,  /* The definition of the module */
96780   void *pAux                      /* Context pointer for xCreate/xConnect */
96781 ){
96782   return createModule(db, zName, pModule, pAux, 0);
96783 }
96784
96785 /*
96786 ** External API function used to create a new virtual-table module.
96787 */
96788 SQLITE_API int sqlite3_create_module_v2(
96789   sqlite3 *db,                    /* Database in which module is registered */
96790   const char *zName,              /* Name assigned to this module */
96791   const sqlite3_module *pModule,  /* The definition of the module */
96792   void *pAux,                     /* Context pointer for xCreate/xConnect */
96793   void (*xDestroy)(void *)        /* Module destructor function */
96794 ){
96795   return createModule(db, zName, pModule, pAux, xDestroy);
96796 }
96797
96798 /*
96799 ** Lock the virtual table so that it cannot be disconnected.
96800 ** Locks nest.  Every lock should have a corresponding unlock.
96801 ** If an unlock is omitted, resources leaks will occur.  
96802 **
96803 ** If a disconnect is attempted while a virtual table is locked,
96804 ** the disconnect is deferred until all locks have been removed.
96805 */
96806 SQLITE_PRIVATE void sqlite3VtabLock(VTable *pVTab){
96807   pVTab->nRef++;
96808 }
96809
96810
96811 /*
96812 ** pTab is a pointer to a Table structure representing a virtual-table.
96813 ** Return a pointer to the VTable object used by connection db to access 
96814 ** this virtual-table, if one has been created, or NULL otherwise.
96815 */
96816 SQLITE_PRIVATE VTable *sqlite3GetVTable(sqlite3 *db, Table *pTab){
96817   VTable *pVtab;
96818   assert( IsVirtual(pTab) );
96819   for(pVtab=pTab->pVTable; pVtab && pVtab->db!=db; pVtab=pVtab->pNext);
96820   return pVtab;
96821 }
96822
96823 /*
96824 ** Decrement the ref-count on a virtual table object. When the ref-count
96825 ** reaches zero, call the xDisconnect() method to delete the object.
96826 */
96827 SQLITE_PRIVATE void sqlite3VtabUnlock(VTable *pVTab){
96828   sqlite3 *db = pVTab->db;
96829
96830   assert( db );
96831   assert( pVTab->nRef>0 );
96832   assert( sqlite3SafetyCheckOk(db) );
96833
96834   pVTab->nRef--;
96835   if( pVTab->nRef==0 ){
96836     sqlite3_vtab *p = pVTab->pVtab;
96837     if( p ){
96838       p->pModule->xDisconnect(p);
96839     }
96840     sqlite3DbFree(db, pVTab);
96841   }
96842 }
96843
96844 /*
96845 ** Table p is a virtual table. This function moves all elements in the
96846 ** p->pVTable list to the sqlite3.pDisconnect lists of their associated
96847 ** database connections to be disconnected at the next opportunity. 
96848 ** Except, if argument db is not NULL, then the entry associated with
96849 ** connection db is left in the p->pVTable list.
96850 */
96851 static VTable *vtabDisconnectAll(sqlite3 *db, Table *p){
96852   VTable *pRet = 0;
96853   VTable *pVTable = p->pVTable;
96854   p->pVTable = 0;
96855
96856   /* Assert that the mutex (if any) associated with the BtShared database 
96857   ** that contains table p is held by the caller. See header comments 
96858   ** above function sqlite3VtabUnlockList() for an explanation of why
96859   ** this makes it safe to access the sqlite3.pDisconnect list of any
96860   ** database connection that may have an entry in the p->pVTable list.
96861   */
96862   assert( db==0 || sqlite3SchemaMutexHeld(db, 0, p->pSchema) );
96863
96864   while( pVTable ){
96865     sqlite3 *db2 = pVTable->db;
96866     VTable *pNext = pVTable->pNext;
96867     assert( db2 );
96868     if( db2==db ){
96869       pRet = pVTable;
96870       p->pVTable = pRet;
96871       pRet->pNext = 0;
96872     }else{
96873       pVTable->pNext = db2->pDisconnect;
96874       db2->pDisconnect = pVTable;
96875     }
96876     pVTable = pNext;
96877   }
96878
96879   assert( !db || pRet );
96880   return pRet;
96881 }
96882
96883
96884 /*
96885 ** Disconnect all the virtual table objects in the sqlite3.pDisconnect list.
96886 **
96887 ** This function may only be called when the mutexes associated with all
96888 ** shared b-tree databases opened using connection db are held by the 
96889 ** caller. This is done to protect the sqlite3.pDisconnect list. The
96890 ** sqlite3.pDisconnect list is accessed only as follows:
96891 **
96892 **   1) By this function. In this case, all BtShared mutexes and the mutex
96893 **      associated with the database handle itself must be held.
96894 **
96895 **   2) By function vtabDisconnectAll(), when it adds a VTable entry to
96896 **      the sqlite3.pDisconnect list. In this case either the BtShared mutex
96897 **      associated with the database the virtual table is stored in is held
96898 **      or, if the virtual table is stored in a non-sharable database, then
96899 **      the database handle mutex is held.
96900 **
96901 ** As a result, a sqlite3.pDisconnect cannot be accessed simultaneously 
96902 ** by multiple threads. It is thread-safe.
96903 */
96904 SQLITE_PRIVATE void sqlite3VtabUnlockList(sqlite3 *db){
96905   VTable *p = db->pDisconnect;
96906   db->pDisconnect = 0;
96907
96908   assert( sqlite3BtreeHoldsAllMutexes(db) );
96909   assert( sqlite3_mutex_held(db->mutex) );
96910
96911   if( p ){
96912     sqlite3ExpirePreparedStatements(db);
96913     do {
96914       VTable *pNext = p->pNext;
96915       sqlite3VtabUnlock(p);
96916       p = pNext;
96917     }while( p );
96918   }
96919 }
96920
96921 /*
96922 ** Clear any and all virtual-table information from the Table record.
96923 ** This routine is called, for example, just before deleting the Table
96924 ** record.
96925 **
96926 ** Since it is a virtual-table, the Table structure contains a pointer
96927 ** to the head of a linked list of VTable structures. Each VTable 
96928 ** structure is associated with a single sqlite3* user of the schema.
96929 ** The reference count of the VTable structure associated with database 
96930 ** connection db is decremented immediately (which may lead to the 
96931 ** structure being xDisconnected and free). Any other VTable structures
96932 ** in the list are moved to the sqlite3.pDisconnect list of the associated 
96933 ** database connection.
96934 */
96935 SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){
96936   if( !db || db->pnBytesFreed==0 ) vtabDisconnectAll(0, p);
96937   if( p->azModuleArg ){
96938     int i;
96939     for(i=0; i<p->nModuleArg; i++){
96940       sqlite3DbFree(db, p->azModuleArg[i]);
96941     }
96942     sqlite3DbFree(db, p->azModuleArg);
96943   }
96944 }
96945
96946 /*
96947 ** Add a new module argument to pTable->azModuleArg[].
96948 ** The string is not copied - the pointer is stored.  The
96949 ** string will be freed automatically when the table is
96950 ** deleted.
96951 */
96952 static void addModuleArgument(sqlite3 *db, Table *pTable, char *zArg){
96953   int i = pTable->nModuleArg++;
96954   int nBytes = sizeof(char *)*(1+pTable->nModuleArg);
96955   char **azModuleArg;
96956   azModuleArg = sqlite3DbRealloc(db, pTable->azModuleArg, nBytes);
96957   if( azModuleArg==0 ){
96958     int j;
96959     for(j=0; j<i; j++){
96960       sqlite3DbFree(db, pTable->azModuleArg[j]);
96961     }
96962     sqlite3DbFree(db, zArg);
96963     sqlite3DbFree(db, pTable->azModuleArg);
96964     pTable->nModuleArg = 0;
96965   }else{
96966     azModuleArg[i] = zArg;
96967     azModuleArg[i+1] = 0;
96968   }
96969   pTable->azModuleArg = azModuleArg;
96970 }
96971
96972 /*
96973 ** The parser calls this routine when it first sees a CREATE VIRTUAL TABLE
96974 ** statement.  The module name has been parsed, but the optional list
96975 ** of parameters that follow the module name are still pending.
96976 */
96977 SQLITE_PRIVATE void sqlite3VtabBeginParse(
96978   Parse *pParse,        /* Parsing context */
96979   Token *pName1,        /* Name of new table, or database name */
96980   Token *pName2,        /* Name of new table or NULL */
96981   Token *pModuleName    /* Name of the module for the virtual table */
96982 ){
96983   int iDb;              /* The database the table is being created in */
96984   Table *pTable;        /* The new virtual table */
96985   sqlite3 *db;          /* Database connection */
96986
96987   sqlite3StartTable(pParse, pName1, pName2, 0, 0, 1, 0);
96988   pTable = pParse->pNewTable;
96989   if( pTable==0 ) return;
96990   assert( 0==pTable->pIndex );
96991
96992   db = pParse->db;
96993   iDb = sqlite3SchemaToIndex(db, pTable->pSchema);
96994   assert( iDb>=0 );
96995
96996   pTable->tabFlags |= TF_Virtual;
96997   pTable->nModuleArg = 0;
96998   addModuleArgument(db, pTable, sqlite3NameFromToken(db, pModuleName));
96999   addModuleArgument(db, pTable, sqlite3DbStrDup(db, db->aDb[iDb].zName));
97000   addModuleArgument(db, pTable, sqlite3DbStrDup(db, pTable->zName));
97001   pParse->sNameToken.n = (int)(&pModuleName->z[pModuleName->n] - pName1->z);
97002
97003 #ifndef SQLITE_OMIT_AUTHORIZATION
97004   /* Creating a virtual table invokes the authorization callback twice.
97005   ** The first invocation, to obtain permission to INSERT a row into the
97006   ** sqlite_master table, has already been made by sqlite3StartTable().
97007   ** The second call, to obtain permission to create the table, is made now.
97008   */
97009   if( pTable->azModuleArg ){
97010     sqlite3AuthCheck(pParse, SQLITE_CREATE_VTABLE, pTable->zName, 
97011             pTable->azModuleArg[0], pParse->db->aDb[iDb].zName);
97012   }
97013 #endif
97014 }
97015
97016 /*
97017 ** This routine takes the module argument that has been accumulating
97018 ** in pParse->zArg[] and appends it to the list of arguments on the
97019 ** virtual table currently under construction in pParse->pTable.
97020 */
97021 static void addArgumentToVtab(Parse *pParse){
97022   if( pParse->sArg.z && ALWAYS(pParse->pNewTable) ){
97023     const char *z = (const char*)pParse->sArg.z;
97024     int n = pParse->sArg.n;
97025     sqlite3 *db = pParse->db;
97026     addModuleArgument(db, pParse->pNewTable, sqlite3DbStrNDup(db, z, n));
97027   }
97028 }
97029
97030 /*
97031 ** The parser calls this routine after the CREATE VIRTUAL TABLE statement
97032 ** has been completely parsed.
97033 */
97034 SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse *pParse, Token *pEnd){
97035   Table *pTab = pParse->pNewTable;  /* The table being constructed */
97036   sqlite3 *db = pParse->db;         /* The database connection */
97037
97038   if( pTab==0 ) return;
97039   addArgumentToVtab(pParse);
97040   pParse->sArg.z = 0;
97041   if( pTab->nModuleArg<1 ) return;
97042   
97043   /* If the CREATE VIRTUAL TABLE statement is being entered for the
97044   ** first time (in other words if the virtual table is actually being
97045   ** created now instead of just being read out of sqlite_master) then
97046   ** do additional initialization work and store the statement text
97047   ** in the sqlite_master table.
97048   */
97049   if( !db->init.busy ){
97050     char *zStmt;
97051     char *zWhere;
97052     int iDb;
97053     Vdbe *v;
97054
97055     /* Compute the complete text of the CREATE VIRTUAL TABLE statement */
97056     if( pEnd ){
97057       pParse->sNameToken.n = (int)(pEnd->z - pParse->sNameToken.z) + pEnd->n;
97058     }
97059     zStmt = sqlite3MPrintf(db, "CREATE VIRTUAL TABLE %T", &pParse->sNameToken);
97060
97061     /* A slot for the record has already been allocated in the 
97062     ** SQLITE_MASTER table.  We just need to update that slot with all
97063     ** the information we've collected.  
97064     **
97065     ** The VM register number pParse->regRowid holds the rowid of an
97066     ** entry in the sqlite_master table tht was created for this vtab
97067     ** by sqlite3StartTable().
97068     */
97069     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
97070     sqlite3NestedParse(pParse,
97071       "UPDATE %Q.%s "
97072          "SET type='table', name=%Q, tbl_name=%Q, rootpage=0, sql=%Q "
97073        "WHERE rowid=#%d",
97074       db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
97075       pTab->zName,
97076       pTab->zName,
97077       zStmt,
97078       pParse->regRowid
97079     );
97080     sqlite3DbFree(db, zStmt);
97081     v = sqlite3GetVdbe(pParse);
97082     sqlite3ChangeCookie(pParse, iDb);
97083
97084     sqlite3VdbeAddOp2(v, OP_Expire, 0, 0);
97085     zWhere = sqlite3MPrintf(db, "name='%q' AND type='table'", pTab->zName);
97086     sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 0, 0, zWhere, P4_DYNAMIC);
97087     sqlite3VdbeAddOp4(v, OP_VCreate, iDb, 0, 0, 
97088                          pTab->zName, sqlite3Strlen30(pTab->zName) + 1);
97089   }
97090
97091   /* If we are rereading the sqlite_master table create the in-memory
97092   ** record of the table. The xConnect() method is not called until
97093   ** the first time the virtual table is used in an SQL statement. This
97094   ** allows a schema that contains virtual tables to be loaded before
97095   ** the required virtual table implementations are registered.  */
97096   else {
97097     Table *pOld;
97098     Schema *pSchema = pTab->pSchema;
97099     const char *zName = pTab->zName;
97100     int nName = sqlite3Strlen30(zName);
97101     assert( sqlite3SchemaMutexHeld(db, 0, pSchema) );
97102     pOld = sqlite3HashInsert(&pSchema->tblHash, zName, nName, pTab);
97103     if( pOld ){
97104       db->mallocFailed = 1;
97105       assert( pTab==pOld );  /* Malloc must have failed inside HashInsert() */
97106       return;
97107     }
97108     pParse->pNewTable = 0;
97109   }
97110 }
97111
97112 /*
97113 ** The parser calls this routine when it sees the first token
97114 ** of an argument to the module name in a CREATE VIRTUAL TABLE statement.
97115 */
97116 SQLITE_PRIVATE void sqlite3VtabArgInit(Parse *pParse){
97117   addArgumentToVtab(pParse);
97118   pParse->sArg.z = 0;
97119   pParse->sArg.n = 0;
97120 }
97121
97122 /*
97123 ** The parser calls this routine for each token after the first token
97124 ** in an argument to the module name in a CREATE VIRTUAL TABLE statement.
97125 */
97126 SQLITE_PRIVATE void sqlite3VtabArgExtend(Parse *pParse, Token *p){
97127   Token *pArg = &pParse->sArg;
97128   if( pArg->z==0 ){
97129     pArg->z = p->z;
97130     pArg->n = p->n;
97131   }else{
97132     assert(pArg->z < p->z);
97133     pArg->n = (int)(&p->z[p->n] - pArg->z);
97134   }
97135 }
97136
97137 /*
97138 ** Invoke a virtual table constructor (either xCreate or xConnect). The
97139 ** pointer to the function to invoke is passed as the fourth parameter
97140 ** to this procedure.
97141 */
97142 static int vtabCallConstructor(
97143   sqlite3 *db, 
97144   Table *pTab,
97145   Module *pMod,
97146   int (*xConstruct)(sqlite3*,void*,int,const char*const*,sqlite3_vtab**,char**),
97147   char **pzErr
97148 ){
97149   VTable *pVTable;
97150   int rc;
97151   const char *const*azArg = (const char *const*)pTab->azModuleArg;
97152   int nArg = pTab->nModuleArg;
97153   char *zErr = 0;
97154   char *zModuleName = sqlite3MPrintf(db, "%s", pTab->zName);
97155
97156   if( !zModuleName ){
97157     return SQLITE_NOMEM;
97158   }
97159
97160   pVTable = sqlite3DbMallocZero(db, sizeof(VTable));
97161   if( !pVTable ){
97162     sqlite3DbFree(db, zModuleName);
97163     return SQLITE_NOMEM;
97164   }
97165   pVTable->db = db;
97166   pVTable->pMod = pMod;
97167
97168   assert( !db->pVTab );
97169   assert( xConstruct );
97170   db->pVTab = pTab;
97171
97172   /* Invoke the virtual table constructor */
97173   rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVTable->pVtab, &zErr);
97174   if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
97175
97176   if( SQLITE_OK!=rc ){
97177     if( zErr==0 ){
97178       *pzErr = sqlite3MPrintf(db, "vtable constructor failed: %s", zModuleName);
97179     }else {
97180       *pzErr = sqlite3MPrintf(db, "%s", zErr);
97181       sqlite3_free(zErr);
97182     }
97183     sqlite3DbFree(db, pVTable);
97184   }else if( ALWAYS(pVTable->pVtab) ){
97185     /* Justification of ALWAYS():  A correct vtab constructor must allocate
97186     ** the sqlite3_vtab object if successful.  */
97187     pVTable->pVtab->pModule = pMod->pModule;
97188     pVTable->nRef = 1;
97189     if( db->pVTab ){
97190       const char *zFormat = "vtable constructor did not declare schema: %s";
97191       *pzErr = sqlite3MPrintf(db, zFormat, pTab->zName);
97192       sqlite3VtabUnlock(pVTable);
97193       rc = SQLITE_ERROR;
97194     }else{
97195       int iCol;
97196       /* If everything went according to plan, link the new VTable structure
97197       ** into the linked list headed by pTab->pVTable. Then loop through the 
97198       ** columns of the table to see if any of them contain the token "hidden".
97199       ** If so, set the Column.isHidden flag and remove the token from
97200       ** the type string.  */
97201       pVTable->pNext = pTab->pVTable;
97202       pTab->pVTable = pVTable;
97203
97204       for(iCol=0; iCol<pTab->nCol; iCol++){
97205         char *zType = pTab->aCol[iCol].zType;
97206         int nType;
97207         int i = 0;
97208         if( !zType ) continue;
97209         nType = sqlite3Strlen30(zType);
97210         if( sqlite3StrNICmp("hidden", zType, 6)||(zType[6] && zType[6]!=' ') ){
97211           for(i=0; i<nType; i++){
97212             if( (0==sqlite3StrNICmp(" hidden", &zType[i], 7))
97213              && (zType[i+7]=='\0' || zType[i+7]==' ')
97214             ){
97215               i++;
97216               break;
97217             }
97218           }
97219         }
97220         if( i<nType ){
97221           int j;
97222           int nDel = 6 + (zType[i+6] ? 1 : 0);
97223           for(j=i; (j+nDel)<=nType; j++){
97224             zType[j] = zType[j+nDel];
97225           }
97226           if( zType[i]=='\0' && i>0 ){
97227             assert(zType[i-1]==' ');
97228             zType[i-1] = '\0';
97229           }
97230           pTab->aCol[iCol].isHidden = 1;
97231         }
97232       }
97233     }
97234   }
97235
97236   sqlite3DbFree(db, zModuleName);
97237   db->pVTab = 0;
97238   return rc;
97239 }
97240
97241 /*
97242 ** This function is invoked by the parser to call the xConnect() method
97243 ** of the virtual table pTab. If an error occurs, an error code is returned 
97244 ** and an error left in pParse.
97245 **
97246 ** This call is a no-op if table pTab is not a virtual table.
97247 */
97248 SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse *pParse, Table *pTab){
97249   sqlite3 *db = pParse->db;
97250   const char *zMod;
97251   Module *pMod;
97252   int rc;
97253
97254   assert( pTab );
97255   if( (pTab->tabFlags & TF_Virtual)==0 || sqlite3GetVTable(db, pTab) ){
97256     return SQLITE_OK;
97257   }
97258
97259   /* Locate the required virtual table module */
97260   zMod = pTab->azModuleArg[0];
97261   pMod = (Module*)sqlite3HashFind(&db->aModule, zMod, sqlite3Strlen30(zMod));
97262
97263   if( !pMod ){
97264     const char *zModule = pTab->azModuleArg[0];
97265     sqlite3ErrorMsg(pParse, "no such module: %s", zModule);
97266     rc = SQLITE_ERROR;
97267   }else{
97268     char *zErr = 0;
97269     rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xConnect, &zErr);
97270     if( rc!=SQLITE_OK ){
97271       sqlite3ErrorMsg(pParse, "%s", zErr);
97272     }
97273     sqlite3DbFree(db, zErr);
97274   }
97275
97276   return rc;
97277 }
97278
97279 /*
97280 ** Add the virtual table pVTab to the array sqlite3.aVTrans[].
97281 */
97282 static int addToVTrans(sqlite3 *db, VTable *pVTab){
97283   const int ARRAY_INCR = 5;
97284
97285   /* Grow the sqlite3.aVTrans array if required */
97286   if( (db->nVTrans%ARRAY_INCR)==0 ){
97287     VTable **aVTrans;
97288     int nBytes = sizeof(sqlite3_vtab *) * (db->nVTrans + ARRAY_INCR);
97289     aVTrans = sqlite3DbRealloc(db, (void *)db->aVTrans, nBytes);
97290     if( !aVTrans ){
97291       return SQLITE_NOMEM;
97292     }
97293     memset(&aVTrans[db->nVTrans], 0, sizeof(sqlite3_vtab *)*ARRAY_INCR);
97294     db->aVTrans = aVTrans;
97295   }
97296
97297   /* Add pVtab to the end of sqlite3.aVTrans */
97298   db->aVTrans[db->nVTrans++] = pVTab;
97299   sqlite3VtabLock(pVTab);
97300   return SQLITE_OK;
97301 }
97302
97303 /*
97304 ** This function is invoked by the vdbe to call the xCreate method
97305 ** of the virtual table named zTab in database iDb. 
97306 **
97307 ** If an error occurs, *pzErr is set to point an an English language
97308 ** description of the error and an SQLITE_XXX error code is returned.
97309 ** In this case the caller must call sqlite3DbFree(db, ) on *pzErr.
97310 */
97311 SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab, char **pzErr){
97312   int rc = SQLITE_OK;
97313   Table *pTab;
97314   Module *pMod;
97315   const char *zMod;
97316
97317   pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName);
97318   assert( pTab && (pTab->tabFlags & TF_Virtual)!=0 && !pTab->pVTable );
97319
97320   /* Locate the required virtual table module */
97321   zMod = pTab->azModuleArg[0];
97322   pMod = (Module*)sqlite3HashFind(&db->aModule, zMod, sqlite3Strlen30(zMod));
97323
97324   /* If the module has been registered and includes a Create method, 
97325   ** invoke it now. If the module has not been registered, return an 
97326   ** error. Otherwise, do nothing.
97327   */
97328   if( !pMod ){
97329     *pzErr = sqlite3MPrintf(db, "no such module: %s", zMod);
97330     rc = SQLITE_ERROR;
97331   }else{
97332     rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xCreate, pzErr);
97333   }
97334
97335   /* Justification of ALWAYS():  The xConstructor method is required to
97336   ** create a valid sqlite3_vtab if it returns SQLITE_OK. */
97337   if( rc==SQLITE_OK && ALWAYS(sqlite3GetVTable(db, pTab)) ){
97338       rc = addToVTrans(db, sqlite3GetVTable(db, pTab));
97339   }
97340
97341   return rc;
97342 }
97343
97344 /*
97345 ** This function is used to set the schema of a virtual table.  It is only
97346 ** valid to call this function from within the xCreate() or xConnect() of a
97347 ** virtual table module.
97348 */
97349 SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
97350   Parse *pParse;
97351
97352   int rc = SQLITE_OK;
97353   Table *pTab;
97354   char *zErr = 0;
97355
97356   sqlite3_mutex_enter(db->mutex);
97357   pTab = db->pVTab;
97358   if( !pTab ){
97359     sqlite3Error(db, SQLITE_MISUSE, 0);
97360     sqlite3_mutex_leave(db->mutex);
97361     return SQLITE_MISUSE_BKPT;
97362   }
97363   assert( (pTab->tabFlags & TF_Virtual)!=0 );
97364
97365   pParse = sqlite3StackAllocZero(db, sizeof(*pParse));
97366   if( pParse==0 ){
97367     rc = SQLITE_NOMEM;
97368   }else{
97369     pParse->declareVtab = 1;
97370     pParse->db = db;
97371     pParse->nQueryLoop = 1;
97372   
97373     if( SQLITE_OK==sqlite3RunParser(pParse, zCreateTable, &zErr) 
97374      && pParse->pNewTable
97375      && !db->mallocFailed
97376      && !pParse->pNewTable->pSelect
97377      && (pParse->pNewTable->tabFlags & TF_Virtual)==0
97378     ){
97379       if( !pTab->aCol ){
97380         pTab->aCol = pParse->pNewTable->aCol;
97381         pTab->nCol = pParse->pNewTable->nCol;
97382         pParse->pNewTable->nCol = 0;
97383         pParse->pNewTable->aCol = 0;
97384       }
97385       db->pVTab = 0;
97386     }else{
97387       sqlite3Error(db, SQLITE_ERROR, (zErr ? "%s" : 0), zErr);
97388       sqlite3DbFree(db, zErr);
97389       rc = SQLITE_ERROR;
97390     }
97391     pParse->declareVtab = 0;
97392   
97393     if( pParse->pVdbe ){
97394       sqlite3VdbeFinalize(pParse->pVdbe);
97395     }
97396     sqlite3DeleteTable(db, pParse->pNewTable);
97397     sqlite3StackFree(db, pParse);
97398   }
97399
97400   assert( (rc&0xff)==rc );
97401   rc = sqlite3ApiExit(db, rc);
97402   sqlite3_mutex_leave(db->mutex);
97403   return rc;
97404 }
97405
97406 /*
97407 ** This function is invoked by the vdbe to call the xDestroy method
97408 ** of the virtual table named zTab in database iDb. This occurs
97409 ** when a DROP TABLE is mentioned.
97410 **
97411 ** This call is a no-op if zTab is not a virtual table.
97412 */
97413 SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3 *db, int iDb, const char *zTab){
97414   int rc = SQLITE_OK;
97415   Table *pTab;
97416
97417   pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName);
97418   if( ALWAYS(pTab!=0 && pTab->pVTable!=0) ){
97419     VTable *p = vtabDisconnectAll(db, pTab);
97420
97421     assert( rc==SQLITE_OK );
97422     rc = p->pMod->pModule->xDestroy(p->pVtab);
97423
97424     /* Remove the sqlite3_vtab* from the aVTrans[] array, if applicable */
97425     if( rc==SQLITE_OK ){
97426       assert( pTab->pVTable==p && p->pNext==0 );
97427       p->pVtab = 0;
97428       pTab->pVTable = 0;
97429       sqlite3VtabUnlock(p);
97430     }
97431   }
97432
97433   return rc;
97434 }
97435
97436 /*
97437 ** This function invokes either the xRollback or xCommit method
97438 ** of each of the virtual tables in the sqlite3.aVTrans array. The method
97439 ** called is identified by the second argument, "offset", which is
97440 ** the offset of the method to call in the sqlite3_module structure.
97441 **
97442 ** The array is cleared after invoking the callbacks. 
97443 */
97444 static void callFinaliser(sqlite3 *db, int offset){
97445   int i;
97446   if( db->aVTrans ){
97447     for(i=0; i<db->nVTrans; i++){
97448       VTable *pVTab = db->aVTrans[i];
97449       sqlite3_vtab *p = pVTab->pVtab;
97450       if( p ){
97451         int (*x)(sqlite3_vtab *);
97452         x = *(int (**)(sqlite3_vtab *))((char *)p->pModule + offset);
97453         if( x ) x(p);
97454       }
97455       sqlite3VtabUnlock(pVTab);
97456     }
97457     sqlite3DbFree(db, db->aVTrans);
97458     db->nVTrans = 0;
97459     db->aVTrans = 0;
97460   }
97461 }
97462
97463 /*
97464 ** Invoke the xSync method of all virtual tables in the sqlite3.aVTrans
97465 ** array. Return the error code for the first error that occurs, or
97466 ** SQLITE_OK if all xSync operations are successful.
97467 **
97468 ** Set *pzErrmsg to point to a buffer that should be released using 
97469 ** sqlite3DbFree() containing an error message, if one is available.
97470 */
97471 SQLITE_PRIVATE int sqlite3VtabSync(sqlite3 *db, char **pzErrmsg){
97472   int i;
97473   int rc = SQLITE_OK;
97474   VTable **aVTrans = db->aVTrans;
97475
97476   db->aVTrans = 0;
97477   for(i=0; rc==SQLITE_OK && i<db->nVTrans; i++){
97478     int (*x)(sqlite3_vtab *);
97479     sqlite3_vtab *pVtab = aVTrans[i]->pVtab;
97480     if( pVtab && (x = pVtab->pModule->xSync)!=0 ){
97481       rc = x(pVtab);
97482       sqlite3DbFree(db, *pzErrmsg);
97483       *pzErrmsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
97484       sqlite3_free(pVtab->zErrMsg);
97485     }
97486   }
97487   db->aVTrans = aVTrans;
97488   return rc;
97489 }
97490
97491 /*
97492 ** Invoke the xRollback method of all virtual tables in the 
97493 ** sqlite3.aVTrans array. Then clear the array itself.
97494 */
97495 SQLITE_PRIVATE int sqlite3VtabRollback(sqlite3 *db){
97496   callFinaliser(db, offsetof(sqlite3_module,xRollback));
97497   return SQLITE_OK;
97498 }
97499
97500 /*
97501 ** Invoke the xCommit method of all virtual tables in the 
97502 ** sqlite3.aVTrans array. Then clear the array itself.
97503 */
97504 SQLITE_PRIVATE int sqlite3VtabCommit(sqlite3 *db){
97505   callFinaliser(db, offsetof(sqlite3_module,xCommit));
97506   return SQLITE_OK;
97507 }
97508
97509 /*
97510 ** If the virtual table pVtab supports the transaction interface
97511 ** (xBegin/xRollback/xCommit and optionally xSync) and a transaction is
97512 ** not currently open, invoke the xBegin method now.
97513 **
97514 ** If the xBegin call is successful, place the sqlite3_vtab pointer
97515 ** in the sqlite3.aVTrans array.
97516 */
97517 SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *db, VTable *pVTab){
97518   int rc = SQLITE_OK;
97519   const sqlite3_module *pModule;
97520
97521   /* Special case: If db->aVTrans is NULL and db->nVTrans is greater
97522   ** than zero, then this function is being called from within a
97523   ** virtual module xSync() callback. It is illegal to write to 
97524   ** virtual module tables in this case, so return SQLITE_LOCKED.
97525   */
97526   if( sqlite3VtabInSync(db) ){
97527     return SQLITE_LOCKED;
97528   }
97529   if( !pVTab ){
97530     return SQLITE_OK;
97531   } 
97532   pModule = pVTab->pVtab->pModule;
97533
97534   if( pModule->xBegin ){
97535     int i;
97536
97537
97538     /* If pVtab is already in the aVTrans array, return early */
97539     for(i=0; i<db->nVTrans; i++){
97540       if( db->aVTrans[i]==pVTab ){
97541         return SQLITE_OK;
97542       }
97543     }
97544
97545     /* Invoke the xBegin method */
97546     rc = pModule->xBegin(pVTab->pVtab);
97547     if( rc==SQLITE_OK ){
97548       rc = addToVTrans(db, pVTab);
97549     }
97550   }
97551   return rc;
97552 }
97553
97554 /*
97555 ** The first parameter (pDef) is a function implementation.  The
97556 ** second parameter (pExpr) is the first argument to this function.
97557 ** If pExpr is a column in a virtual table, then let the virtual
97558 ** table implementation have an opportunity to overload the function.
97559 **
97560 ** This routine is used to allow virtual table implementations to
97561 ** overload MATCH, LIKE, GLOB, and REGEXP operators.
97562 **
97563 ** Return either the pDef argument (indicating no change) or a 
97564 ** new FuncDef structure that is marked as ephemeral using the
97565 ** SQLITE_FUNC_EPHEM flag.
97566 */
97567 SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction(
97568   sqlite3 *db,    /* Database connection for reporting malloc problems */
97569   FuncDef *pDef,  /* Function to possibly overload */
97570   int nArg,       /* Number of arguments to the function */
97571   Expr *pExpr     /* First argument to the function */
97572 ){
97573   Table *pTab;
97574   sqlite3_vtab *pVtab;
97575   sqlite3_module *pMod;
97576   void (*xFunc)(sqlite3_context*,int,sqlite3_value**) = 0;
97577   void *pArg = 0;
97578   FuncDef *pNew;
97579   int rc = 0;
97580   char *zLowerName;
97581   unsigned char *z;
97582
97583
97584   /* Check to see the left operand is a column in a virtual table */
97585   if( NEVER(pExpr==0) ) return pDef;
97586   if( pExpr->op!=TK_COLUMN ) return pDef;
97587   pTab = pExpr->pTab;
97588   if( NEVER(pTab==0) ) return pDef;
97589   if( (pTab->tabFlags & TF_Virtual)==0 ) return pDef;
97590   pVtab = sqlite3GetVTable(db, pTab)->pVtab;
97591   assert( pVtab!=0 );
97592   assert( pVtab->pModule!=0 );
97593   pMod = (sqlite3_module *)pVtab->pModule;
97594   if( pMod->xFindFunction==0 ) return pDef;
97595  
97596   /* Call the xFindFunction method on the virtual table implementation
97597   ** to see if the implementation wants to overload this function 
97598   */
97599   zLowerName = sqlite3DbStrDup(db, pDef->zName);
97600   if( zLowerName ){
97601     for(z=(unsigned char*)zLowerName; *z; z++){
97602       *z = sqlite3UpperToLower[*z];
97603     }
97604     rc = pMod->xFindFunction(pVtab, nArg, zLowerName, &xFunc, &pArg);
97605     sqlite3DbFree(db, zLowerName);
97606   }
97607   if( rc==0 ){
97608     return pDef;
97609   }
97610
97611   /* Create a new ephemeral function definition for the overloaded
97612   ** function */
97613   pNew = sqlite3DbMallocZero(db, sizeof(*pNew)
97614                              + sqlite3Strlen30(pDef->zName) + 1);
97615   if( pNew==0 ){
97616     return pDef;
97617   }
97618   *pNew = *pDef;
97619   pNew->zName = (char *)&pNew[1];
97620   memcpy(pNew->zName, pDef->zName, sqlite3Strlen30(pDef->zName)+1);
97621   pNew->xFunc = xFunc;
97622   pNew->pUserData = pArg;
97623   pNew->flags |= SQLITE_FUNC_EPHEM;
97624   return pNew;
97625 }
97626
97627 /*
97628 ** Make sure virtual table pTab is contained in the pParse->apVirtualLock[]
97629 ** array so that an OP_VBegin will get generated for it.  Add pTab to the
97630 ** array if it is missing.  If pTab is already in the array, this routine
97631 ** is a no-op.
97632 */
97633 SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse *pParse, Table *pTab){
97634   Parse *pToplevel = sqlite3ParseToplevel(pParse);
97635   int i, n;
97636   Table **apVtabLock;
97637
97638   assert( IsVirtual(pTab) );
97639   for(i=0; i<pToplevel->nVtabLock; i++){
97640     if( pTab==pToplevel->apVtabLock[i] ) return;
97641   }
97642   n = (pToplevel->nVtabLock+1)*sizeof(pToplevel->apVtabLock[0]);
97643   apVtabLock = sqlite3_realloc(pToplevel->apVtabLock, n);
97644   if( apVtabLock ){
97645     pToplevel->apVtabLock = apVtabLock;
97646     pToplevel->apVtabLock[pToplevel->nVtabLock++] = pTab;
97647   }else{
97648     pToplevel->db->mallocFailed = 1;
97649   }
97650 }
97651
97652 #endif /* SQLITE_OMIT_VIRTUALTABLE */
97653
97654 /************** End of vtab.c ************************************************/
97655 /************** Begin file where.c *******************************************/
97656 /*
97657 ** 2001 September 15
97658 **
97659 ** The author disclaims copyright to this source code.  In place of
97660 ** a legal notice, here is a blessing:
97661 **
97662 **    May you do good and not evil.
97663 **    May you find forgiveness for yourself and forgive others.
97664 **    May you share freely, never taking more than you give.
97665 **
97666 *************************************************************************
97667 ** This module contains C code that generates VDBE code used to process
97668 ** the WHERE clause of SQL statements.  This module is responsible for
97669 ** generating the code that loops through a table looking for applicable
97670 ** rows.  Indices are selected and used to speed the search when doing
97671 ** so is applicable.  Because this module is responsible for selecting
97672 ** indices, you might also think of this module as the "query optimizer".
97673 */
97674
97675
97676 /*
97677 ** Trace output macros
97678 */
97679 #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
97680 SQLITE_PRIVATE int sqlite3WhereTrace = 0;
97681 #endif
97682 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
97683 # define WHERETRACE(X)  if(sqlite3WhereTrace) sqlite3DebugPrintf X
97684 #else
97685 # define WHERETRACE(X)
97686 #endif
97687
97688 /* Forward reference
97689 */
97690 typedef struct WhereClause WhereClause;
97691 typedef struct WhereMaskSet WhereMaskSet;
97692 typedef struct WhereOrInfo WhereOrInfo;
97693 typedef struct WhereAndInfo WhereAndInfo;
97694 typedef struct WhereCost WhereCost;
97695
97696 /*
97697 ** The query generator uses an array of instances of this structure to
97698 ** help it analyze the subexpressions of the WHERE clause.  Each WHERE
97699 ** clause subexpression is separated from the others by AND operators,
97700 ** usually, or sometimes subexpressions separated by OR.
97701 **
97702 ** All WhereTerms are collected into a single WhereClause structure.  
97703 ** The following identity holds:
97704 **
97705 **        WhereTerm.pWC->a[WhereTerm.idx] == WhereTerm
97706 **
97707 ** When a term is of the form:
97708 **
97709 **              X <op> <expr>
97710 **
97711 ** where X is a column name and <op> is one of certain operators,
97712 ** then WhereTerm.leftCursor and WhereTerm.u.leftColumn record the
97713 ** cursor number and column number for X.  WhereTerm.eOperator records
97714 ** the <op> using a bitmask encoding defined by WO_xxx below.  The
97715 ** use of a bitmask encoding for the operator allows us to search
97716 ** quickly for terms that match any of several different operators.
97717 **
97718 ** A WhereTerm might also be two or more subterms connected by OR:
97719 **
97720 **         (t1.X <op> <expr>) OR (t1.Y <op> <expr>) OR ....
97721 **
97722 ** In this second case, wtFlag as the TERM_ORINFO set and eOperator==WO_OR
97723 ** and the WhereTerm.u.pOrInfo field points to auxiliary information that
97724 ** is collected about the
97725 **
97726 ** If a term in the WHERE clause does not match either of the two previous
97727 ** categories, then eOperator==0.  The WhereTerm.pExpr field is still set
97728 ** to the original subexpression content and wtFlags is set up appropriately
97729 ** but no other fields in the WhereTerm object are meaningful.
97730 **
97731 ** When eOperator!=0, prereqRight and prereqAll record sets of cursor numbers,
97732 ** but they do so indirectly.  A single WhereMaskSet structure translates
97733 ** cursor number into bits and the translated bit is stored in the prereq
97734 ** fields.  The translation is used in order to maximize the number of
97735 ** bits that will fit in a Bitmask.  The VDBE cursor numbers might be
97736 ** spread out over the non-negative integers.  For example, the cursor
97737 ** numbers might be 3, 8, 9, 10, 20, 23, 41, and 45.  The WhereMaskSet
97738 ** translates these sparse cursor numbers into consecutive integers
97739 ** beginning with 0 in order to make the best possible use of the available
97740 ** bits in the Bitmask.  So, in the example above, the cursor numbers
97741 ** would be mapped into integers 0 through 7.
97742 **
97743 ** The number of terms in a join is limited by the number of bits
97744 ** in prereqRight and prereqAll.  The default is 64 bits, hence SQLite
97745 ** is only able to process joins with 64 or fewer tables.
97746 */
97747 typedef struct WhereTerm WhereTerm;
97748 struct WhereTerm {
97749   Expr *pExpr;            /* Pointer to the subexpression that is this term */
97750   int iParent;            /* Disable pWC->a[iParent] when this term disabled */
97751   int leftCursor;         /* Cursor number of X in "X <op> <expr>" */
97752   union {
97753     int leftColumn;         /* Column number of X in "X <op> <expr>" */
97754     WhereOrInfo *pOrInfo;   /* Extra information if eOperator==WO_OR */
97755     WhereAndInfo *pAndInfo; /* Extra information if eOperator==WO_AND */
97756   } u;
97757   u16 eOperator;          /* A WO_xx value describing <op> */
97758   u8 wtFlags;             /* TERM_xxx bit flags.  See below */
97759   u8 nChild;              /* Number of children that must disable us */
97760   WhereClause *pWC;       /* The clause this term is part of */
97761   Bitmask prereqRight;    /* Bitmask of tables used by pExpr->pRight */
97762   Bitmask prereqAll;      /* Bitmask of tables referenced by pExpr */
97763 };
97764
97765 /*
97766 ** Allowed values of WhereTerm.wtFlags
97767 */
97768 #define TERM_DYNAMIC    0x01   /* Need to call sqlite3ExprDelete(db, pExpr) */
97769 #define TERM_VIRTUAL    0x02   /* Added by the optimizer.  Do not code */
97770 #define TERM_CODED      0x04   /* This term is already coded */
97771 #define TERM_COPIED     0x08   /* Has a child */
97772 #define TERM_ORINFO     0x10   /* Need to free the WhereTerm.u.pOrInfo object */
97773 #define TERM_ANDINFO    0x20   /* Need to free the WhereTerm.u.pAndInfo obj */
97774 #define TERM_OR_OK      0x40   /* Used during OR-clause processing */
97775 #ifdef SQLITE_ENABLE_STAT2
97776 #  define TERM_VNULL    0x80   /* Manufactured x>NULL or x<=NULL term */
97777 #else
97778 #  define TERM_VNULL    0x00   /* Disabled if not using stat2 */
97779 #endif
97780
97781 /*
97782 ** An instance of the following structure holds all information about a
97783 ** WHERE clause.  Mostly this is a container for one or more WhereTerms.
97784 */
97785 struct WhereClause {
97786   Parse *pParse;           /* The parser context */
97787   WhereMaskSet *pMaskSet;  /* Mapping of table cursor numbers to bitmasks */
97788   Bitmask vmask;           /* Bitmask identifying virtual table cursors */
97789   u8 op;                   /* Split operator.  TK_AND or TK_OR */
97790   int nTerm;               /* Number of terms */
97791   int nSlot;               /* Number of entries in a[] */
97792   WhereTerm *a;            /* Each a[] describes a term of the WHERE cluase */
97793 #if defined(SQLITE_SMALL_STACK)
97794   WhereTerm aStatic[1];    /* Initial static space for a[] */
97795 #else
97796   WhereTerm aStatic[8];    /* Initial static space for a[] */
97797 #endif
97798 };
97799
97800 /*
97801 ** A WhereTerm with eOperator==WO_OR has its u.pOrInfo pointer set to
97802 ** a dynamically allocated instance of the following structure.
97803 */
97804 struct WhereOrInfo {
97805   WhereClause wc;          /* Decomposition into subterms */
97806   Bitmask indexable;       /* Bitmask of all indexable tables in the clause */
97807 };
97808
97809 /*
97810 ** A WhereTerm with eOperator==WO_AND has its u.pAndInfo pointer set to
97811 ** a dynamically allocated instance of the following structure.
97812 */
97813 struct WhereAndInfo {
97814   WhereClause wc;          /* The subexpression broken out */
97815 };
97816
97817 /*
97818 ** An instance of the following structure keeps track of a mapping
97819 ** between VDBE cursor numbers and bits of the bitmasks in WhereTerm.
97820 **
97821 ** The VDBE cursor numbers are small integers contained in 
97822 ** SrcList_item.iCursor and Expr.iTable fields.  For any given WHERE 
97823 ** clause, the cursor numbers might not begin with 0 and they might
97824 ** contain gaps in the numbering sequence.  But we want to make maximum
97825 ** use of the bits in our bitmasks.  This structure provides a mapping
97826 ** from the sparse cursor numbers into consecutive integers beginning
97827 ** with 0.
97828 **
97829 ** If WhereMaskSet.ix[A]==B it means that The A-th bit of a Bitmask
97830 ** corresponds VDBE cursor number B.  The A-th bit of a bitmask is 1<<A.
97831 **
97832 ** For example, if the WHERE clause expression used these VDBE
97833 ** cursors:  4, 5, 8, 29, 57, 73.  Then the  WhereMaskSet structure
97834 ** would map those cursor numbers into bits 0 through 5.
97835 **
97836 ** Note that the mapping is not necessarily ordered.  In the example
97837 ** above, the mapping might go like this:  4->3, 5->1, 8->2, 29->0,
97838 ** 57->5, 73->4.  Or one of 719 other combinations might be used. It
97839 ** does not really matter.  What is important is that sparse cursor
97840 ** numbers all get mapped into bit numbers that begin with 0 and contain
97841 ** no gaps.
97842 */
97843 struct WhereMaskSet {
97844   int n;                        /* Number of assigned cursor values */
97845   int ix[BMS];                  /* Cursor assigned to each bit */
97846 };
97847
97848 /*
97849 ** A WhereCost object records a lookup strategy and the estimated
97850 ** cost of pursuing that strategy.
97851 */
97852 struct WhereCost {
97853   WherePlan plan;    /* The lookup strategy */
97854   double rCost;      /* Overall cost of pursuing this search strategy */
97855   Bitmask used;      /* Bitmask of cursors used by this plan */
97856 };
97857
97858 /*
97859 ** Bitmasks for the operators that indices are able to exploit.  An
97860 ** OR-ed combination of these values can be used when searching for
97861 ** terms in the where clause.
97862 */
97863 #define WO_IN     0x001
97864 #define WO_EQ     0x002
97865 #define WO_LT     (WO_EQ<<(TK_LT-TK_EQ))
97866 #define WO_LE     (WO_EQ<<(TK_LE-TK_EQ))
97867 #define WO_GT     (WO_EQ<<(TK_GT-TK_EQ))
97868 #define WO_GE     (WO_EQ<<(TK_GE-TK_EQ))
97869 #define WO_MATCH  0x040
97870 #define WO_ISNULL 0x080
97871 #define WO_OR     0x100       /* Two or more OR-connected terms */
97872 #define WO_AND    0x200       /* Two or more AND-connected terms */
97873 #define WO_NOOP   0x800       /* This term does not restrict search space */
97874
97875 #define WO_ALL    0xfff       /* Mask of all possible WO_* values */
97876 #define WO_SINGLE 0x0ff       /* Mask of all non-compound WO_* values */
97877
97878 /*
97879 ** Value for wsFlags returned by bestIndex() and stored in
97880 ** WhereLevel.wsFlags.  These flags determine which search
97881 ** strategies are appropriate.
97882 **
97883 ** The least significant 12 bits is reserved as a mask for WO_ values above.
97884 ** The WhereLevel.wsFlags field is usually set to WO_IN|WO_EQ|WO_ISNULL.
97885 ** But if the table is the right table of a left join, WhereLevel.wsFlags
97886 ** is set to WO_IN|WO_EQ.  The WhereLevel.wsFlags field can then be used as
97887 ** the "op" parameter to findTerm when we are resolving equality constraints.
97888 ** ISNULL constraints will then not be used on the right table of a left
97889 ** join.  Tickets #2177 and #2189.
97890 */
97891 #define WHERE_ROWID_EQ     0x00001000  /* rowid=EXPR or rowid IN (...) */
97892 #define WHERE_ROWID_RANGE  0x00002000  /* rowid<EXPR and/or rowid>EXPR */
97893 #define WHERE_COLUMN_EQ    0x00010000  /* x=EXPR or x IN (...) or x IS NULL */
97894 #define WHERE_COLUMN_RANGE 0x00020000  /* x<EXPR and/or x>EXPR */
97895 #define WHERE_COLUMN_IN    0x00040000  /* x IN (...) */
97896 #define WHERE_COLUMN_NULL  0x00080000  /* x IS NULL */
97897 #define WHERE_INDEXED      0x000f0000  /* Anything that uses an index */
97898 #define WHERE_NOT_FULLSCAN 0x100f3000  /* Does not do a full table scan */
97899 #define WHERE_IN_ABLE      0x000f1000  /* Able to support an IN operator */
97900 #define WHERE_TOP_LIMIT    0x00100000  /* x<EXPR or x<=EXPR constraint */
97901 #define WHERE_BTM_LIMIT    0x00200000  /* x>EXPR or x>=EXPR constraint */
97902 #define WHERE_BOTH_LIMIT   0x00300000  /* Both x>EXPR and x<EXPR */
97903 #define WHERE_IDX_ONLY     0x00800000  /* Use index only - omit table */
97904 #define WHERE_ORDERBY      0x01000000  /* Output will appear in correct order */
97905 #define WHERE_REVERSE      0x02000000  /* Scan in reverse order */
97906 #define WHERE_UNIQUE       0x04000000  /* Selects no more than one row */
97907 #define WHERE_VIRTUALTABLE 0x08000000  /* Use virtual-table processing */
97908 #define WHERE_MULTI_OR     0x10000000  /* OR using multiple indices */
97909 #define WHERE_TEMP_INDEX   0x20000000  /* Uses an ephemeral index */
97910
97911 /*
97912 ** Initialize a preallocated WhereClause structure.
97913 */
97914 static void whereClauseInit(
97915   WhereClause *pWC,        /* The WhereClause to be initialized */
97916   Parse *pParse,           /* The parsing context */
97917   WhereMaskSet *pMaskSet   /* Mapping from table cursor numbers to bitmasks */
97918 ){
97919   pWC->pParse = pParse;
97920   pWC->pMaskSet = pMaskSet;
97921   pWC->nTerm = 0;
97922   pWC->nSlot = ArraySize(pWC->aStatic);
97923   pWC->a = pWC->aStatic;
97924   pWC->vmask = 0;
97925 }
97926
97927 /* Forward reference */
97928 static void whereClauseClear(WhereClause*);
97929
97930 /*
97931 ** Deallocate all memory associated with a WhereOrInfo object.
97932 */
97933 static void whereOrInfoDelete(sqlite3 *db, WhereOrInfo *p){
97934   whereClauseClear(&p->wc);
97935   sqlite3DbFree(db, p);
97936 }
97937
97938 /*
97939 ** Deallocate all memory associated with a WhereAndInfo object.
97940 */
97941 static void whereAndInfoDelete(sqlite3 *db, WhereAndInfo *p){
97942   whereClauseClear(&p->wc);
97943   sqlite3DbFree(db, p);
97944 }
97945
97946 /*
97947 ** Deallocate a WhereClause structure.  The WhereClause structure
97948 ** itself is not freed.  This routine is the inverse of whereClauseInit().
97949 */
97950 static void whereClauseClear(WhereClause *pWC){
97951   int i;
97952   WhereTerm *a;
97953   sqlite3 *db = pWC->pParse->db;
97954   for(i=pWC->nTerm-1, a=pWC->a; i>=0; i--, a++){
97955     if( a->wtFlags & TERM_DYNAMIC ){
97956       sqlite3ExprDelete(db, a->pExpr);
97957     }
97958     if( a->wtFlags & TERM_ORINFO ){
97959       whereOrInfoDelete(db, a->u.pOrInfo);
97960     }else if( a->wtFlags & TERM_ANDINFO ){
97961       whereAndInfoDelete(db, a->u.pAndInfo);
97962     }
97963   }
97964   if( pWC->a!=pWC->aStatic ){
97965     sqlite3DbFree(db, pWC->a);
97966   }
97967 }
97968
97969 /*
97970 ** Add a single new WhereTerm entry to the WhereClause object pWC.
97971 ** The new WhereTerm object is constructed from Expr p and with wtFlags.
97972 ** The index in pWC->a[] of the new WhereTerm is returned on success.
97973 ** 0 is returned if the new WhereTerm could not be added due to a memory
97974 ** allocation error.  The memory allocation failure will be recorded in
97975 ** the db->mallocFailed flag so that higher-level functions can detect it.
97976 **
97977 ** This routine will increase the size of the pWC->a[] array as necessary.
97978 **
97979 ** If the wtFlags argument includes TERM_DYNAMIC, then responsibility
97980 ** for freeing the expression p is assumed by the WhereClause object pWC.
97981 ** This is true even if this routine fails to allocate a new WhereTerm.
97982 **
97983 ** WARNING:  This routine might reallocate the space used to store
97984 ** WhereTerms.  All pointers to WhereTerms should be invalidated after
97985 ** calling this routine.  Such pointers may be reinitialized by referencing
97986 ** the pWC->a[] array.
97987 */
97988 static int whereClauseInsert(WhereClause *pWC, Expr *p, u8 wtFlags){
97989   WhereTerm *pTerm;
97990   int idx;
97991   testcase( wtFlags & TERM_VIRTUAL );  /* EV: R-00211-15100 */
97992   if( pWC->nTerm>=pWC->nSlot ){
97993     WhereTerm *pOld = pWC->a;
97994     sqlite3 *db = pWC->pParse->db;
97995     pWC->a = sqlite3DbMallocRaw(db, sizeof(pWC->a[0])*pWC->nSlot*2 );
97996     if( pWC->a==0 ){
97997       if( wtFlags & TERM_DYNAMIC ){
97998         sqlite3ExprDelete(db, p);
97999       }
98000       pWC->a = pOld;
98001       return 0;
98002     }
98003     memcpy(pWC->a, pOld, sizeof(pWC->a[0])*pWC->nTerm);
98004     if( pOld!=pWC->aStatic ){
98005       sqlite3DbFree(db, pOld);
98006     }
98007     pWC->nSlot = sqlite3DbMallocSize(db, pWC->a)/sizeof(pWC->a[0]);
98008   }
98009   pTerm = &pWC->a[idx = pWC->nTerm++];
98010   pTerm->pExpr = p;
98011   pTerm->wtFlags = wtFlags;
98012   pTerm->pWC = pWC;
98013   pTerm->iParent = -1;
98014   return idx;
98015 }
98016
98017 /*
98018 ** This routine identifies subexpressions in the WHERE clause where
98019 ** each subexpression is separated by the AND operator or some other
98020 ** operator specified in the op parameter.  The WhereClause structure
98021 ** is filled with pointers to subexpressions.  For example:
98022 **
98023 **    WHERE  a=='hello' AND coalesce(b,11)<10 AND (c+12!=d OR c==22)
98024 **           \________/     \_______________/     \________________/
98025 **            slot[0]            slot[1]               slot[2]
98026 **
98027 ** The original WHERE clause in pExpr is unaltered.  All this routine
98028 ** does is make slot[] entries point to substructure within pExpr.
98029 **
98030 ** In the previous sentence and in the diagram, "slot[]" refers to
98031 ** the WhereClause.a[] array.  The slot[] array grows as needed to contain
98032 ** all terms of the WHERE clause.
98033 */
98034 static void whereSplit(WhereClause *pWC, Expr *pExpr, int op){
98035   pWC->op = (u8)op;
98036   if( pExpr==0 ) return;
98037   if( pExpr->op!=op ){
98038     whereClauseInsert(pWC, pExpr, 0);
98039   }else{
98040     whereSplit(pWC, pExpr->pLeft, op);
98041     whereSplit(pWC, pExpr->pRight, op);
98042   }
98043 }
98044
98045 /*
98046 ** Initialize an expression mask set (a WhereMaskSet object)
98047 */
98048 #define initMaskSet(P)  memset(P, 0, sizeof(*P))
98049
98050 /*
98051 ** Return the bitmask for the given cursor number.  Return 0 if
98052 ** iCursor is not in the set.
98053 */
98054 static Bitmask getMask(WhereMaskSet *pMaskSet, int iCursor){
98055   int i;
98056   assert( pMaskSet->n<=(int)sizeof(Bitmask)*8 );
98057   for(i=0; i<pMaskSet->n; i++){
98058     if( pMaskSet->ix[i]==iCursor ){
98059       return ((Bitmask)1)<<i;
98060     }
98061   }
98062   return 0;
98063 }
98064
98065 /*
98066 ** Create a new mask for cursor iCursor.
98067 **
98068 ** There is one cursor per table in the FROM clause.  The number of
98069 ** tables in the FROM clause is limited by a test early in the
98070 ** sqlite3WhereBegin() routine.  So we know that the pMaskSet->ix[]
98071 ** array will never overflow.
98072 */
98073 static void createMask(WhereMaskSet *pMaskSet, int iCursor){
98074   assert( pMaskSet->n < ArraySize(pMaskSet->ix) );
98075   pMaskSet->ix[pMaskSet->n++] = iCursor;
98076 }
98077
98078 /*
98079 ** This routine walks (recursively) an expression tree and generates
98080 ** a bitmask indicating which tables are used in that expression
98081 ** tree.
98082 **
98083 ** In order for this routine to work, the calling function must have
98084 ** previously invoked sqlite3ResolveExprNames() on the expression.  See
98085 ** the header comment on that routine for additional information.
98086 ** The sqlite3ResolveExprNames() routines looks for column names and
98087 ** sets their opcodes to TK_COLUMN and their Expr.iTable fields to
98088 ** the VDBE cursor number of the table.  This routine just has to
98089 ** translate the cursor numbers into bitmask values and OR all
98090 ** the bitmasks together.
98091 */
98092 static Bitmask exprListTableUsage(WhereMaskSet*, ExprList*);
98093 static Bitmask exprSelectTableUsage(WhereMaskSet*, Select*);
98094 static Bitmask exprTableUsage(WhereMaskSet *pMaskSet, Expr *p){
98095   Bitmask mask = 0;
98096   if( p==0 ) return 0;
98097   if( p->op==TK_COLUMN ){
98098     mask = getMask(pMaskSet, p->iTable);
98099     return mask;
98100   }
98101   mask = exprTableUsage(pMaskSet, p->pRight);
98102   mask |= exprTableUsage(pMaskSet, p->pLeft);
98103   if( ExprHasProperty(p, EP_xIsSelect) ){
98104     mask |= exprSelectTableUsage(pMaskSet, p->x.pSelect);
98105   }else{
98106     mask |= exprListTableUsage(pMaskSet, p->x.pList);
98107   }
98108   return mask;
98109 }
98110 static Bitmask exprListTableUsage(WhereMaskSet *pMaskSet, ExprList *pList){
98111   int i;
98112   Bitmask mask = 0;
98113   if( pList ){
98114     for(i=0; i<pList->nExpr; i++){
98115       mask |= exprTableUsage(pMaskSet, pList->a[i].pExpr);
98116     }
98117   }
98118   return mask;
98119 }
98120 static Bitmask exprSelectTableUsage(WhereMaskSet *pMaskSet, Select *pS){
98121   Bitmask mask = 0;
98122   while( pS ){
98123     mask |= exprListTableUsage(pMaskSet, pS->pEList);
98124     mask |= exprListTableUsage(pMaskSet, pS->pGroupBy);
98125     mask |= exprListTableUsage(pMaskSet, pS->pOrderBy);
98126     mask |= exprTableUsage(pMaskSet, pS->pWhere);
98127     mask |= exprTableUsage(pMaskSet, pS->pHaving);
98128     pS = pS->pPrior;
98129   }
98130   return mask;
98131 }
98132
98133 /*
98134 ** Return TRUE if the given operator is one of the operators that is
98135 ** allowed for an indexable WHERE clause term.  The allowed operators are
98136 ** "=", "<", ">", "<=", ">=", and "IN".
98137 **
98138 ** IMPLEMENTATION-OF: R-59926-26393 To be usable by an index a term must be
98139 ** of one of the following forms: column = expression column > expression
98140 ** column >= expression column < expression column <= expression
98141 ** expression = column expression > column expression >= column
98142 ** expression < column expression <= column column IN
98143 ** (expression-list) column IN (subquery) column IS NULL
98144 */
98145 static int allowedOp(int op){
98146   assert( TK_GT>TK_EQ && TK_GT<TK_GE );
98147   assert( TK_LT>TK_EQ && TK_LT<TK_GE );
98148   assert( TK_LE>TK_EQ && TK_LE<TK_GE );
98149   assert( TK_GE==TK_EQ+4 );
98150   return op==TK_IN || (op>=TK_EQ && op<=TK_GE) || op==TK_ISNULL;
98151 }
98152
98153 /*
98154 ** Swap two objects of type TYPE.
98155 */
98156 #define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;}
98157
98158 /*
98159 ** Commute a comparison operator.  Expressions of the form "X op Y"
98160 ** are converted into "Y op X".
98161 **
98162 ** If a collation sequence is associated with either the left or right
98163 ** side of the comparison, it remains associated with the same side after
98164 ** the commutation. So "Y collate NOCASE op X" becomes 
98165 ** "X collate NOCASE op Y". This is because any collation sequence on
98166 ** the left hand side of a comparison overrides any collation sequence 
98167 ** attached to the right. For the same reason the EP_ExpCollate flag
98168 ** is not commuted.
98169 */
98170 static void exprCommute(Parse *pParse, Expr *pExpr){
98171   u16 expRight = (pExpr->pRight->flags & EP_ExpCollate);
98172   u16 expLeft = (pExpr->pLeft->flags & EP_ExpCollate);
98173   assert( allowedOp(pExpr->op) && pExpr->op!=TK_IN );
98174   pExpr->pRight->pColl = sqlite3ExprCollSeq(pParse, pExpr->pRight);
98175   pExpr->pLeft->pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
98176   SWAP(CollSeq*,pExpr->pRight->pColl,pExpr->pLeft->pColl);
98177   pExpr->pRight->flags = (pExpr->pRight->flags & ~EP_ExpCollate) | expLeft;
98178   pExpr->pLeft->flags = (pExpr->pLeft->flags & ~EP_ExpCollate) | expRight;
98179   SWAP(Expr*,pExpr->pRight,pExpr->pLeft);
98180   if( pExpr->op>=TK_GT ){
98181     assert( TK_LT==TK_GT+2 );
98182     assert( TK_GE==TK_LE+2 );
98183     assert( TK_GT>TK_EQ );
98184     assert( TK_GT<TK_LE );
98185     assert( pExpr->op>=TK_GT && pExpr->op<=TK_GE );
98186     pExpr->op = ((pExpr->op-TK_GT)^2)+TK_GT;
98187   }
98188 }
98189
98190 /*
98191 ** Translate from TK_xx operator to WO_xx bitmask.
98192 */
98193 static u16 operatorMask(int op){
98194   u16 c;
98195   assert( allowedOp(op) );
98196   if( op==TK_IN ){
98197     c = WO_IN;
98198   }else if( op==TK_ISNULL ){
98199     c = WO_ISNULL;
98200   }else{
98201     assert( (WO_EQ<<(op-TK_EQ)) < 0x7fff );
98202     c = (u16)(WO_EQ<<(op-TK_EQ));
98203   }
98204   assert( op!=TK_ISNULL || c==WO_ISNULL );
98205   assert( op!=TK_IN || c==WO_IN );
98206   assert( op!=TK_EQ || c==WO_EQ );
98207   assert( op!=TK_LT || c==WO_LT );
98208   assert( op!=TK_LE || c==WO_LE );
98209   assert( op!=TK_GT || c==WO_GT );
98210   assert( op!=TK_GE || c==WO_GE );
98211   return c;
98212 }
98213
98214 /*
98215 ** Search for a term in the WHERE clause that is of the form "X <op> <expr>"
98216 ** where X is a reference to the iColumn of table iCur and <op> is one of
98217 ** the WO_xx operator codes specified by the op parameter.
98218 ** Return a pointer to the term.  Return 0 if not found.
98219 */
98220 static WhereTerm *findTerm(
98221   WhereClause *pWC,     /* The WHERE clause to be searched */
98222   int iCur,             /* Cursor number of LHS */
98223   int iColumn,          /* Column number of LHS */
98224   Bitmask notReady,     /* RHS must not overlap with this mask */
98225   u32 op,               /* Mask of WO_xx values describing operator */
98226   Index *pIdx           /* Must be compatible with this index, if not NULL */
98227 ){
98228   WhereTerm *pTerm;
98229   int k;
98230   assert( iCur>=0 );
98231   op &= WO_ALL;
98232   for(pTerm=pWC->a, k=pWC->nTerm; k; k--, pTerm++){
98233     if( pTerm->leftCursor==iCur
98234        && (pTerm->prereqRight & notReady)==0
98235        && pTerm->u.leftColumn==iColumn
98236        && (pTerm->eOperator & op)!=0
98237     ){
98238       if( pIdx && pTerm->eOperator!=WO_ISNULL ){
98239         Expr *pX = pTerm->pExpr;
98240         CollSeq *pColl;
98241         char idxaff;
98242         int j;
98243         Parse *pParse = pWC->pParse;
98244
98245         idxaff = pIdx->pTable->aCol[iColumn].affinity;
98246         if( !sqlite3IndexAffinityOk(pX, idxaff) ) continue;
98247
98248         /* Figure out the collation sequence required from an index for
98249         ** it to be useful for optimising expression pX. Store this
98250         ** value in variable pColl.
98251         */
98252         assert(pX->pLeft);
98253         pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
98254         assert(pColl || pParse->nErr);
98255
98256         for(j=0; pIdx->aiColumn[j]!=iColumn; j++){
98257           if( NEVER(j>=pIdx->nColumn) ) return 0;
98258         }
98259         if( pColl && sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ) continue;
98260       }
98261       return pTerm;
98262     }
98263   }
98264   return 0;
98265 }
98266
98267 /* Forward reference */
98268 static void exprAnalyze(SrcList*, WhereClause*, int);
98269
98270 /*
98271 ** Call exprAnalyze on all terms in a WHERE clause.  
98272 **
98273 **
98274 */
98275 static void exprAnalyzeAll(
98276   SrcList *pTabList,       /* the FROM clause */
98277   WhereClause *pWC         /* the WHERE clause to be analyzed */
98278 ){
98279   int i;
98280   for(i=pWC->nTerm-1; i>=0; i--){
98281     exprAnalyze(pTabList, pWC, i);
98282   }
98283 }
98284
98285 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
98286 /*
98287 ** Check to see if the given expression is a LIKE or GLOB operator that
98288 ** can be optimized using inequality constraints.  Return TRUE if it is
98289 ** so and false if not.
98290 **
98291 ** In order for the operator to be optimizible, the RHS must be a string
98292 ** literal that does not begin with a wildcard.  
98293 */
98294 static int isLikeOrGlob(
98295   Parse *pParse,    /* Parsing and code generating context */
98296   Expr *pExpr,      /* Test this expression */
98297   Expr **ppPrefix,  /* Pointer to TK_STRING expression with pattern prefix */
98298   int *pisComplete, /* True if the only wildcard is % in the last character */
98299   int *pnoCase      /* True if uppercase is equivalent to lowercase */
98300 ){
98301   const char *z = 0;         /* String on RHS of LIKE operator */
98302   Expr *pRight, *pLeft;      /* Right and left size of LIKE operator */
98303   ExprList *pList;           /* List of operands to the LIKE operator */
98304   int c;                     /* One character in z[] */
98305   int cnt;                   /* Number of non-wildcard prefix characters */
98306   char wc[3];                /* Wildcard characters */
98307   sqlite3 *db = pParse->db;  /* Database connection */
98308   sqlite3_value *pVal = 0;
98309   int op;                    /* Opcode of pRight */
98310
98311   if( !sqlite3IsLikeFunction(db, pExpr, pnoCase, wc) ){
98312     return 0;
98313   }
98314 #ifdef SQLITE_EBCDIC
98315   if( *pnoCase ) return 0;
98316 #endif
98317   pList = pExpr->x.pList;
98318   pLeft = pList->a[1].pExpr;
98319   if( pLeft->op!=TK_COLUMN || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT ){
98320     /* IMP: R-02065-49465 The left-hand side of the LIKE or GLOB operator must
98321     ** be the name of an indexed column with TEXT affinity. */
98322     return 0;
98323   }
98324   assert( pLeft->iColumn!=(-1) ); /* Because IPK never has AFF_TEXT */
98325
98326   pRight = pList->a[0].pExpr;
98327   op = pRight->op;
98328   if( op==TK_REGISTER ){
98329     op = pRight->op2;
98330   }
98331   if( op==TK_VARIABLE ){
98332     Vdbe *pReprepare = pParse->pReprepare;
98333     int iCol = pRight->iColumn;
98334     pVal = sqlite3VdbeGetValue(pReprepare, iCol, SQLITE_AFF_NONE);
98335     if( pVal && sqlite3_value_type(pVal)==SQLITE_TEXT ){
98336       z = (char *)sqlite3_value_text(pVal);
98337     }
98338     sqlite3VdbeSetVarmask(pParse->pVdbe, iCol); /* IMP: R-23257-02778 */
98339     assert( pRight->op==TK_VARIABLE || pRight->op==TK_REGISTER );
98340   }else if( op==TK_STRING ){
98341     z = pRight->u.zToken;
98342   }
98343   if( z ){
98344     cnt = 0;
98345     while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){
98346       cnt++;
98347     }
98348     if( cnt!=0 && 255!=(u8)z[cnt-1] ){
98349       Expr *pPrefix;
98350       *pisComplete = c==wc[0] && z[cnt+1]==0;
98351       pPrefix = sqlite3Expr(db, TK_STRING, z);
98352       if( pPrefix ) pPrefix->u.zToken[cnt] = 0;
98353       *ppPrefix = pPrefix;
98354       if( op==TK_VARIABLE ){
98355         Vdbe *v = pParse->pVdbe;
98356         sqlite3VdbeSetVarmask(v, pRight->iColumn); /* IMP: R-23257-02778 */
98357         if( *pisComplete && pRight->u.zToken[1] ){
98358           /* If the rhs of the LIKE expression is a variable, and the current
98359           ** value of the variable means there is no need to invoke the LIKE
98360           ** function, then no OP_Variable will be added to the program.
98361           ** This causes problems for the sqlite3_bind_parameter_name()
98362           ** API. To workaround them, add a dummy OP_Variable here.
98363           */ 
98364           int r1 = sqlite3GetTempReg(pParse);
98365           sqlite3ExprCodeTarget(pParse, pRight, r1);
98366           sqlite3VdbeChangeP3(v, sqlite3VdbeCurrentAddr(v)-1, 0);
98367           sqlite3ReleaseTempReg(pParse, r1);
98368         }
98369       }
98370     }else{
98371       z = 0;
98372     }
98373   }
98374
98375   sqlite3ValueFree(pVal);
98376   return (z!=0);
98377 }
98378 #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
98379
98380
98381 #ifndef SQLITE_OMIT_VIRTUALTABLE
98382 /*
98383 ** Check to see if the given expression is of the form
98384 **
98385 **         column MATCH expr
98386 **
98387 ** If it is then return TRUE.  If not, return FALSE.
98388 */
98389 static int isMatchOfColumn(
98390   Expr *pExpr      /* Test this expression */
98391 ){
98392   ExprList *pList;
98393
98394   if( pExpr->op!=TK_FUNCTION ){
98395     return 0;
98396   }
98397   if( sqlite3StrICmp(pExpr->u.zToken,"match")!=0 ){
98398     return 0;
98399   }
98400   pList = pExpr->x.pList;
98401   if( pList->nExpr!=2 ){
98402     return 0;
98403   }
98404   if( pList->a[1].pExpr->op != TK_COLUMN ){
98405     return 0;
98406   }
98407   return 1;
98408 }
98409 #endif /* SQLITE_OMIT_VIRTUALTABLE */
98410
98411 /*
98412 ** If the pBase expression originated in the ON or USING clause of
98413 ** a join, then transfer the appropriate markings over to derived.
98414 */
98415 static void transferJoinMarkings(Expr *pDerived, Expr *pBase){
98416   pDerived->flags |= pBase->flags & EP_FromJoin;
98417   pDerived->iRightJoinTable = pBase->iRightJoinTable;
98418 }
98419
98420 #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
98421 /*
98422 ** Analyze a term that consists of two or more OR-connected
98423 ** subterms.  So in:
98424 **
98425 **     ... WHERE  (a=5) AND (b=7 OR c=9 OR d=13) AND (d=13)
98426 **                          ^^^^^^^^^^^^^^^^^^^^
98427 **
98428 ** This routine analyzes terms such as the middle term in the above example.
98429 ** A WhereOrTerm object is computed and attached to the term under
98430 ** analysis, regardless of the outcome of the analysis.  Hence:
98431 **
98432 **     WhereTerm.wtFlags   |=  TERM_ORINFO
98433 **     WhereTerm.u.pOrInfo  =  a dynamically allocated WhereOrTerm object
98434 **
98435 ** The term being analyzed must have two or more of OR-connected subterms.
98436 ** A single subterm might be a set of AND-connected sub-subterms.
98437 ** Examples of terms under analysis:
98438 **
98439 **     (A)     t1.x=t2.y OR t1.x=t2.z OR t1.y=15 OR t1.z=t3.a+5
98440 **     (B)     x=expr1 OR expr2=x OR x=expr3
98441 **     (C)     t1.x=t2.y OR (t1.x=t2.z AND t1.y=15)
98442 **     (D)     x=expr1 OR (y>11 AND y<22 AND z LIKE '*hello*')
98443 **     (E)     (p.a=1 AND q.b=2 AND r.c=3) OR (p.x=4 AND q.y=5 AND r.z=6)
98444 **
98445 ** CASE 1:
98446 **
98447 ** If all subterms are of the form T.C=expr for some single column of C
98448 ** a single table T (as shown in example B above) then create a new virtual
98449 ** term that is an equivalent IN expression.  In other words, if the term
98450 ** being analyzed is:
98451 **
98452 **      x = expr1  OR  expr2 = x  OR  x = expr3
98453 **
98454 ** then create a new virtual term like this:
98455 **
98456 **      x IN (expr1,expr2,expr3)
98457 **
98458 ** CASE 2:
98459 **
98460 ** If all subterms are indexable by a single table T, then set
98461 **
98462 **     WhereTerm.eOperator              =  WO_OR
98463 **     WhereTerm.u.pOrInfo->indexable  |=  the cursor number for table T
98464 **
98465 ** A subterm is "indexable" if it is of the form
98466 ** "T.C <op> <expr>" where C is any column of table T and 
98467 ** <op> is one of "=", "<", "<=", ">", ">=", "IS NULL", or "IN".
98468 ** A subterm is also indexable if it is an AND of two or more
98469 ** subsubterms at least one of which is indexable.  Indexable AND 
98470 ** subterms have their eOperator set to WO_AND and they have
98471 ** u.pAndInfo set to a dynamically allocated WhereAndTerm object.
98472 **
98473 ** From another point of view, "indexable" means that the subterm could
98474 ** potentially be used with an index if an appropriate index exists.
98475 ** This analysis does not consider whether or not the index exists; that
98476 ** is something the bestIndex() routine will determine.  This analysis
98477 ** only looks at whether subterms appropriate for indexing exist.
98478 **
98479 ** All examples A through E above all satisfy case 2.  But if a term
98480 ** also statisfies case 1 (such as B) we know that the optimizer will
98481 ** always prefer case 1, so in that case we pretend that case 2 is not
98482 ** satisfied.
98483 **
98484 ** It might be the case that multiple tables are indexable.  For example,
98485 ** (E) above is indexable on tables P, Q, and R.
98486 **
98487 ** Terms that satisfy case 2 are candidates for lookup by using
98488 ** separate indices to find rowids for each subterm and composing
98489 ** the union of all rowids using a RowSet object.  This is similar
98490 ** to "bitmap indices" in other database engines.
98491 **
98492 ** OTHERWISE:
98493 **
98494 ** If neither case 1 nor case 2 apply, then leave the eOperator set to
98495 ** zero.  This term is not useful for search.
98496 */
98497 static void exprAnalyzeOrTerm(
98498   SrcList *pSrc,            /* the FROM clause */
98499   WhereClause *pWC,         /* the complete WHERE clause */
98500   int idxTerm               /* Index of the OR-term to be analyzed */
98501 ){
98502   Parse *pParse = pWC->pParse;            /* Parser context */
98503   sqlite3 *db = pParse->db;               /* Database connection */
98504   WhereTerm *pTerm = &pWC->a[idxTerm];    /* The term to be analyzed */
98505   Expr *pExpr = pTerm->pExpr;             /* The expression of the term */
98506   WhereMaskSet *pMaskSet = pWC->pMaskSet; /* Table use masks */
98507   int i;                                  /* Loop counters */
98508   WhereClause *pOrWc;       /* Breakup of pTerm into subterms */
98509   WhereTerm *pOrTerm;       /* A Sub-term within the pOrWc */
98510   WhereOrInfo *pOrInfo;     /* Additional information associated with pTerm */
98511   Bitmask chngToIN;         /* Tables that might satisfy case 1 */
98512   Bitmask indexable;        /* Tables that are indexable, satisfying case 2 */
98513
98514   /*
98515   ** Break the OR clause into its separate subterms.  The subterms are
98516   ** stored in a WhereClause structure containing within the WhereOrInfo
98517   ** object that is attached to the original OR clause term.
98518   */
98519   assert( (pTerm->wtFlags & (TERM_DYNAMIC|TERM_ORINFO|TERM_ANDINFO))==0 );
98520   assert( pExpr->op==TK_OR );
98521   pTerm->u.pOrInfo = pOrInfo = sqlite3DbMallocZero(db, sizeof(*pOrInfo));
98522   if( pOrInfo==0 ) return;
98523   pTerm->wtFlags |= TERM_ORINFO;
98524   pOrWc = &pOrInfo->wc;
98525   whereClauseInit(pOrWc, pWC->pParse, pMaskSet);
98526   whereSplit(pOrWc, pExpr, TK_OR);
98527   exprAnalyzeAll(pSrc, pOrWc);
98528   if( db->mallocFailed ) return;
98529   assert( pOrWc->nTerm>=2 );
98530
98531   /*
98532   ** Compute the set of tables that might satisfy cases 1 or 2.
98533   */
98534   indexable = ~(Bitmask)0;
98535   chngToIN = ~(pWC->vmask);
98536   for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0 && indexable; i--, pOrTerm++){
98537     if( (pOrTerm->eOperator & WO_SINGLE)==0 ){
98538       WhereAndInfo *pAndInfo;
98539       assert( pOrTerm->eOperator==0 );
98540       assert( (pOrTerm->wtFlags & (TERM_ANDINFO|TERM_ORINFO))==0 );
98541       chngToIN = 0;
98542       pAndInfo = sqlite3DbMallocRaw(db, sizeof(*pAndInfo));
98543       if( pAndInfo ){
98544         WhereClause *pAndWC;
98545         WhereTerm *pAndTerm;
98546         int j;
98547         Bitmask b = 0;
98548         pOrTerm->u.pAndInfo = pAndInfo;
98549         pOrTerm->wtFlags |= TERM_ANDINFO;
98550         pOrTerm->eOperator = WO_AND;
98551         pAndWC = &pAndInfo->wc;
98552         whereClauseInit(pAndWC, pWC->pParse, pMaskSet);
98553         whereSplit(pAndWC, pOrTerm->pExpr, TK_AND);
98554         exprAnalyzeAll(pSrc, pAndWC);
98555         testcase( db->mallocFailed );
98556         if( !db->mallocFailed ){
98557           for(j=0, pAndTerm=pAndWC->a; j<pAndWC->nTerm; j++, pAndTerm++){
98558             assert( pAndTerm->pExpr );
98559             if( allowedOp(pAndTerm->pExpr->op) ){
98560               b |= getMask(pMaskSet, pAndTerm->leftCursor);
98561             }
98562           }
98563         }
98564         indexable &= b;
98565       }
98566     }else if( pOrTerm->wtFlags & TERM_COPIED ){
98567       /* Skip this term for now.  We revisit it when we process the
98568       ** corresponding TERM_VIRTUAL term */
98569     }else{
98570       Bitmask b;
98571       b = getMask(pMaskSet, pOrTerm->leftCursor);
98572       if( pOrTerm->wtFlags & TERM_VIRTUAL ){
98573         WhereTerm *pOther = &pOrWc->a[pOrTerm->iParent];
98574         b |= getMask(pMaskSet, pOther->leftCursor);
98575       }
98576       indexable &= b;
98577       if( pOrTerm->eOperator!=WO_EQ ){
98578         chngToIN = 0;
98579       }else{
98580         chngToIN &= b;
98581       }
98582     }
98583   }
98584
98585   /*
98586   ** Record the set of tables that satisfy case 2.  The set might be
98587   ** empty.
98588   */
98589   pOrInfo->indexable = indexable;
98590   pTerm->eOperator = indexable==0 ? 0 : WO_OR;
98591
98592   /*
98593   ** chngToIN holds a set of tables that *might* satisfy case 1.  But
98594   ** we have to do some additional checking to see if case 1 really
98595   ** is satisfied.
98596   **
98597   ** chngToIN will hold either 0, 1, or 2 bits.  The 0-bit case means
98598   ** that there is no possibility of transforming the OR clause into an
98599   ** IN operator because one or more terms in the OR clause contain
98600   ** something other than == on a column in the single table.  The 1-bit
98601   ** case means that every term of the OR clause is of the form
98602   ** "table.column=expr" for some single table.  The one bit that is set
98603   ** will correspond to the common table.  We still need to check to make
98604   ** sure the same column is used on all terms.  The 2-bit case is when
98605   ** the all terms are of the form "table1.column=table2.column".  It
98606   ** might be possible to form an IN operator with either table1.column
98607   ** or table2.column as the LHS if either is common to every term of
98608   ** the OR clause.
98609   **
98610   ** Note that terms of the form "table.column1=table.column2" (the
98611   ** same table on both sizes of the ==) cannot be optimized.
98612   */
98613   if( chngToIN ){
98614     int okToChngToIN = 0;     /* True if the conversion to IN is valid */
98615     int iColumn = -1;         /* Column index on lhs of IN operator */
98616     int iCursor = -1;         /* Table cursor common to all terms */
98617     int j = 0;                /* Loop counter */
98618
98619     /* Search for a table and column that appears on one side or the
98620     ** other of the == operator in every subterm.  That table and column
98621     ** will be recorded in iCursor and iColumn.  There might not be any
98622     ** such table and column.  Set okToChngToIN if an appropriate table
98623     ** and column is found but leave okToChngToIN false if not found.
98624     */
98625     for(j=0; j<2 && !okToChngToIN; j++){
98626       pOrTerm = pOrWc->a;
98627       for(i=pOrWc->nTerm-1; i>=0; i--, pOrTerm++){
98628         assert( pOrTerm->eOperator==WO_EQ );
98629         pOrTerm->wtFlags &= ~TERM_OR_OK;
98630         if( pOrTerm->leftCursor==iCursor ){
98631           /* This is the 2-bit case and we are on the second iteration and
98632           ** current term is from the first iteration.  So skip this term. */
98633           assert( j==1 );
98634           continue;
98635         }
98636         if( (chngToIN & getMask(pMaskSet, pOrTerm->leftCursor))==0 ){
98637           /* This term must be of the form t1.a==t2.b where t2 is in the
98638           ** chngToIN set but t1 is not.  This term will be either preceeded
98639           ** or follwed by an inverted copy (t2.b==t1.a).  Skip this term 
98640           ** and use its inversion. */
98641           testcase( pOrTerm->wtFlags & TERM_COPIED );
98642           testcase( pOrTerm->wtFlags & TERM_VIRTUAL );
98643           assert( pOrTerm->wtFlags & (TERM_COPIED|TERM_VIRTUAL) );
98644           continue;
98645         }
98646         iColumn = pOrTerm->u.leftColumn;
98647         iCursor = pOrTerm->leftCursor;
98648         break;
98649       }
98650       if( i<0 ){
98651         /* No candidate table+column was found.  This can only occur
98652         ** on the second iteration */
98653         assert( j==1 );
98654         assert( (chngToIN&(chngToIN-1))==0 );
98655         assert( chngToIN==getMask(pMaskSet, iCursor) );
98656         break;
98657       }
98658       testcase( j==1 );
98659
98660       /* We have found a candidate table and column.  Check to see if that
98661       ** table and column is common to every term in the OR clause */
98662       okToChngToIN = 1;
98663       for(; i>=0 && okToChngToIN; i--, pOrTerm++){
98664         assert( pOrTerm->eOperator==WO_EQ );
98665         if( pOrTerm->leftCursor!=iCursor ){
98666           pOrTerm->wtFlags &= ~TERM_OR_OK;
98667         }else if( pOrTerm->u.leftColumn!=iColumn ){
98668           okToChngToIN = 0;
98669         }else{
98670           int affLeft, affRight;
98671           /* If the right-hand side is also a column, then the affinities
98672           ** of both right and left sides must be such that no type
98673           ** conversions are required on the right.  (Ticket #2249)
98674           */
98675           affRight = sqlite3ExprAffinity(pOrTerm->pExpr->pRight);
98676           affLeft = sqlite3ExprAffinity(pOrTerm->pExpr->pLeft);
98677           if( affRight!=0 && affRight!=affLeft ){
98678             okToChngToIN = 0;
98679           }else{
98680             pOrTerm->wtFlags |= TERM_OR_OK;
98681           }
98682         }
98683       }
98684     }
98685
98686     /* At this point, okToChngToIN is true if original pTerm satisfies
98687     ** case 1.  In that case, construct a new virtual term that is 
98688     ** pTerm converted into an IN operator.
98689     **
98690     ** EV: R-00211-15100
98691     */
98692     if( okToChngToIN ){
98693       Expr *pDup;            /* A transient duplicate expression */
98694       ExprList *pList = 0;   /* The RHS of the IN operator */
98695       Expr *pLeft = 0;       /* The LHS of the IN operator */
98696       Expr *pNew;            /* The complete IN operator */
98697
98698       for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0; i--, pOrTerm++){
98699         if( (pOrTerm->wtFlags & TERM_OR_OK)==0 ) continue;
98700         assert( pOrTerm->eOperator==WO_EQ );
98701         assert( pOrTerm->leftCursor==iCursor );
98702         assert( pOrTerm->u.leftColumn==iColumn );
98703         pDup = sqlite3ExprDup(db, pOrTerm->pExpr->pRight, 0);
98704         pList = sqlite3ExprListAppend(pWC->pParse, pList, pDup);
98705         pLeft = pOrTerm->pExpr->pLeft;
98706       }
98707       assert( pLeft!=0 );
98708       pDup = sqlite3ExprDup(db, pLeft, 0);
98709       pNew = sqlite3PExpr(pParse, TK_IN, pDup, 0, 0);
98710       if( pNew ){
98711         int idxNew;
98712         transferJoinMarkings(pNew, pExpr);
98713         assert( !ExprHasProperty(pNew, EP_xIsSelect) );
98714         pNew->x.pList = pList;
98715         idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC);
98716         testcase( idxNew==0 );
98717         exprAnalyze(pSrc, pWC, idxNew);
98718         pTerm = &pWC->a[idxTerm];
98719         pWC->a[idxNew].iParent = idxTerm;
98720         pTerm->nChild = 1;
98721       }else{
98722         sqlite3ExprListDelete(db, pList);
98723       }
98724       pTerm->eOperator = WO_NOOP;  /* case 1 trumps case 2 */
98725     }
98726   }
98727 }
98728 #endif /* !SQLITE_OMIT_OR_OPTIMIZATION && !SQLITE_OMIT_SUBQUERY */
98729
98730
98731 /*
98732 ** The input to this routine is an WhereTerm structure with only the
98733 ** "pExpr" field filled in.  The job of this routine is to analyze the
98734 ** subexpression and populate all the other fields of the WhereTerm
98735 ** structure.
98736 **
98737 ** If the expression is of the form "<expr> <op> X" it gets commuted
98738 ** to the standard form of "X <op> <expr>".
98739 **
98740 ** If the expression is of the form "X <op> Y" where both X and Y are
98741 ** columns, then the original expression is unchanged and a new virtual
98742 ** term of the form "Y <op> X" is added to the WHERE clause and
98743 ** analyzed separately.  The original term is marked with TERM_COPIED
98744 ** and the new term is marked with TERM_DYNAMIC (because it's pExpr
98745 ** needs to be freed with the WhereClause) and TERM_VIRTUAL (because it
98746 ** is a commuted copy of a prior term.)  The original term has nChild=1
98747 ** and the copy has idxParent set to the index of the original term.
98748 */
98749 static void exprAnalyze(
98750   SrcList *pSrc,            /* the FROM clause */
98751   WhereClause *pWC,         /* the WHERE clause */
98752   int idxTerm               /* Index of the term to be analyzed */
98753 ){
98754   WhereTerm *pTerm;                /* The term to be analyzed */
98755   WhereMaskSet *pMaskSet;          /* Set of table index masks */
98756   Expr *pExpr;                     /* The expression to be analyzed */
98757   Bitmask prereqLeft;              /* Prerequesites of the pExpr->pLeft */
98758   Bitmask prereqAll;               /* Prerequesites of pExpr */
98759   Bitmask extraRight = 0;          /* Extra dependencies on LEFT JOIN */
98760   Expr *pStr1 = 0;                 /* RHS of LIKE/GLOB operator */
98761   int isComplete = 0;              /* RHS of LIKE/GLOB ends with wildcard */
98762   int noCase = 0;                  /* LIKE/GLOB distinguishes case */
98763   int op;                          /* Top-level operator.  pExpr->op */
98764   Parse *pParse = pWC->pParse;     /* Parsing context */
98765   sqlite3 *db = pParse->db;        /* Database connection */
98766
98767   if( db->mallocFailed ){
98768     return;
98769   }
98770   pTerm = &pWC->a[idxTerm];
98771   pMaskSet = pWC->pMaskSet;
98772   pExpr = pTerm->pExpr;
98773   prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft);
98774   op = pExpr->op;
98775   if( op==TK_IN ){
98776     assert( pExpr->pRight==0 );
98777     if( ExprHasProperty(pExpr, EP_xIsSelect) ){
98778       pTerm->prereqRight = exprSelectTableUsage(pMaskSet, pExpr->x.pSelect);
98779     }else{
98780       pTerm->prereqRight = exprListTableUsage(pMaskSet, pExpr->x.pList);
98781     }
98782   }else if( op==TK_ISNULL ){
98783     pTerm->prereqRight = 0;
98784   }else{
98785     pTerm->prereqRight = exprTableUsage(pMaskSet, pExpr->pRight);
98786   }
98787   prereqAll = exprTableUsage(pMaskSet, pExpr);
98788   if( ExprHasProperty(pExpr, EP_FromJoin) ){
98789     Bitmask x = getMask(pMaskSet, pExpr->iRightJoinTable);
98790     prereqAll |= x;
98791     extraRight = x-1;  /* ON clause terms may not be used with an index
98792                        ** on left table of a LEFT JOIN.  Ticket #3015 */
98793   }
98794   pTerm->prereqAll = prereqAll;
98795   pTerm->leftCursor = -1;
98796   pTerm->iParent = -1;
98797   pTerm->eOperator = 0;
98798   if( allowedOp(op) && (pTerm->prereqRight & prereqLeft)==0 ){
98799     Expr *pLeft = pExpr->pLeft;
98800     Expr *pRight = pExpr->pRight;
98801     if( pLeft->op==TK_COLUMN ){
98802       pTerm->leftCursor = pLeft->iTable;
98803       pTerm->u.leftColumn = pLeft->iColumn;
98804       pTerm->eOperator = operatorMask(op);
98805     }
98806     if( pRight && pRight->op==TK_COLUMN ){
98807       WhereTerm *pNew;
98808       Expr *pDup;
98809       if( pTerm->leftCursor>=0 ){
98810         int idxNew;
98811         pDup = sqlite3ExprDup(db, pExpr, 0);
98812         if( db->mallocFailed ){
98813           sqlite3ExprDelete(db, pDup);
98814           return;
98815         }
98816         idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC);
98817         if( idxNew==0 ) return;
98818         pNew = &pWC->a[idxNew];
98819         pNew->iParent = idxTerm;
98820         pTerm = &pWC->a[idxTerm];
98821         pTerm->nChild = 1;
98822         pTerm->wtFlags |= TERM_COPIED;
98823       }else{
98824         pDup = pExpr;
98825         pNew = pTerm;
98826       }
98827       exprCommute(pParse, pDup);
98828       pLeft = pDup->pLeft;
98829       pNew->leftCursor = pLeft->iTable;
98830       pNew->u.leftColumn = pLeft->iColumn;
98831       testcase( (prereqLeft | extraRight) != prereqLeft );
98832       pNew->prereqRight = prereqLeft | extraRight;
98833       pNew->prereqAll = prereqAll;
98834       pNew->eOperator = operatorMask(pDup->op);
98835     }
98836   }
98837
98838 #ifndef SQLITE_OMIT_BETWEEN_OPTIMIZATION
98839   /* If a term is the BETWEEN operator, create two new virtual terms
98840   ** that define the range that the BETWEEN implements.  For example:
98841   **
98842   **      a BETWEEN b AND c
98843   **
98844   ** is converted into:
98845   **
98846   **      (a BETWEEN b AND c) AND (a>=b) AND (a<=c)
98847   **
98848   ** The two new terms are added onto the end of the WhereClause object.
98849   ** The new terms are "dynamic" and are children of the original BETWEEN
98850   ** term.  That means that if the BETWEEN term is coded, the children are
98851   ** skipped.  Or, if the children are satisfied by an index, the original
98852   ** BETWEEN term is skipped.
98853   */
98854   else if( pExpr->op==TK_BETWEEN && pWC->op==TK_AND ){
98855     ExprList *pList = pExpr->x.pList;
98856     int i;
98857     static const u8 ops[] = {TK_GE, TK_LE};
98858     assert( pList!=0 );
98859     assert( pList->nExpr==2 );
98860     for(i=0; i<2; i++){
98861       Expr *pNewExpr;
98862       int idxNew;
98863       pNewExpr = sqlite3PExpr(pParse, ops[i], 
98864                              sqlite3ExprDup(db, pExpr->pLeft, 0),
98865                              sqlite3ExprDup(db, pList->a[i].pExpr, 0), 0);
98866       idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
98867       testcase( idxNew==0 );
98868       exprAnalyze(pSrc, pWC, idxNew);
98869       pTerm = &pWC->a[idxTerm];
98870       pWC->a[idxNew].iParent = idxTerm;
98871     }
98872     pTerm->nChild = 2;
98873   }
98874 #endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */
98875
98876 #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
98877   /* Analyze a term that is composed of two or more subterms connected by
98878   ** an OR operator.
98879   */
98880   else if( pExpr->op==TK_OR ){
98881     assert( pWC->op==TK_AND );
98882     exprAnalyzeOrTerm(pSrc, pWC, idxTerm);
98883     pTerm = &pWC->a[idxTerm];
98884   }
98885 #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
98886
98887 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
98888   /* Add constraints to reduce the search space on a LIKE or GLOB
98889   ** operator.
98890   **
98891   ** A like pattern of the form "x LIKE 'abc%'" is changed into constraints
98892   **
98893   **          x>='abc' AND x<'abd' AND x LIKE 'abc%'
98894   **
98895   ** The last character of the prefix "abc" is incremented to form the
98896   ** termination condition "abd".
98897   */
98898   if( pWC->op==TK_AND 
98899    && isLikeOrGlob(pParse, pExpr, &pStr1, &isComplete, &noCase)
98900   ){
98901     Expr *pLeft;       /* LHS of LIKE/GLOB operator */
98902     Expr *pStr2;       /* Copy of pStr1 - RHS of LIKE/GLOB operator */
98903     Expr *pNewExpr1;
98904     Expr *pNewExpr2;
98905     int idxNew1;
98906     int idxNew2;
98907     CollSeq *pColl;    /* Collating sequence to use */
98908
98909     pLeft = pExpr->x.pList->a[1].pExpr;
98910     pStr2 = sqlite3ExprDup(db, pStr1, 0);
98911     if( !db->mallocFailed ){
98912       u8 c, *pC;       /* Last character before the first wildcard */
98913       pC = (u8*)&pStr2->u.zToken[sqlite3Strlen30(pStr2->u.zToken)-1];
98914       c = *pC;
98915       if( noCase ){
98916         /* The point is to increment the last character before the first
98917         ** wildcard.  But if we increment '@', that will push it into the
98918         ** alphabetic range where case conversions will mess up the 
98919         ** inequality.  To avoid this, make sure to also run the full
98920         ** LIKE on all candidate expressions by clearing the isComplete flag
98921         */
98922         if( c=='A'-1 ) isComplete = 0;   /* EV: R-64339-08207 */
98923
98924
98925         c = sqlite3UpperToLower[c];
98926       }
98927       *pC = c + 1;
98928     }
98929     pColl = sqlite3FindCollSeq(db, SQLITE_UTF8, noCase ? "NOCASE" : "BINARY",0);
98930     pNewExpr1 = sqlite3PExpr(pParse, TK_GE, 
98931                      sqlite3ExprSetColl(sqlite3ExprDup(db,pLeft,0), pColl),
98932                      pStr1, 0);
98933     idxNew1 = whereClauseInsert(pWC, pNewExpr1, TERM_VIRTUAL|TERM_DYNAMIC);
98934     testcase( idxNew1==0 );
98935     exprAnalyze(pSrc, pWC, idxNew1);
98936     pNewExpr2 = sqlite3PExpr(pParse, TK_LT,
98937                      sqlite3ExprSetColl(sqlite3ExprDup(db,pLeft,0), pColl),
98938                      pStr2, 0);
98939     idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC);
98940     testcase( idxNew2==0 );
98941     exprAnalyze(pSrc, pWC, idxNew2);
98942     pTerm = &pWC->a[idxTerm];
98943     if( isComplete ){
98944       pWC->a[idxNew1].iParent = idxTerm;
98945       pWC->a[idxNew2].iParent = idxTerm;
98946       pTerm->nChild = 2;
98947     }
98948   }
98949 #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
98950
98951 #ifndef SQLITE_OMIT_VIRTUALTABLE
98952   /* Add a WO_MATCH auxiliary term to the constraint set if the
98953   ** current expression is of the form:  column MATCH expr.
98954   ** This information is used by the xBestIndex methods of
98955   ** virtual tables.  The native query optimizer does not attempt
98956   ** to do anything with MATCH functions.
98957   */
98958   if( isMatchOfColumn(pExpr) ){
98959     int idxNew;
98960     Expr *pRight, *pLeft;
98961     WhereTerm *pNewTerm;
98962     Bitmask prereqColumn, prereqExpr;
98963
98964     pRight = pExpr->x.pList->a[0].pExpr;
98965     pLeft = pExpr->x.pList->a[1].pExpr;
98966     prereqExpr = exprTableUsage(pMaskSet, pRight);
98967     prereqColumn = exprTableUsage(pMaskSet, pLeft);
98968     if( (prereqExpr & prereqColumn)==0 ){
98969       Expr *pNewExpr;
98970       pNewExpr = sqlite3PExpr(pParse, TK_MATCH, 
98971                               0, sqlite3ExprDup(db, pRight, 0), 0);
98972       idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
98973       testcase( idxNew==0 );
98974       pNewTerm = &pWC->a[idxNew];
98975       pNewTerm->prereqRight = prereqExpr;
98976       pNewTerm->leftCursor = pLeft->iTable;
98977       pNewTerm->u.leftColumn = pLeft->iColumn;
98978       pNewTerm->eOperator = WO_MATCH;
98979       pNewTerm->iParent = idxTerm;
98980       pTerm = &pWC->a[idxTerm];
98981       pTerm->nChild = 1;
98982       pTerm->wtFlags |= TERM_COPIED;
98983       pNewTerm->prereqAll = pTerm->prereqAll;
98984     }
98985   }
98986 #endif /* SQLITE_OMIT_VIRTUALTABLE */
98987
98988 #ifdef SQLITE_ENABLE_STAT2
98989   /* When sqlite_stat2 histogram data is available an operator of the
98990   ** form "x IS NOT NULL" can sometimes be evaluated more efficiently
98991   ** as "x>NULL" if x is not an INTEGER PRIMARY KEY.  So construct a
98992   ** virtual term of that form.
98993   **
98994   ** Note that the virtual term must be tagged with TERM_VNULL.  This
98995   ** TERM_VNULL tag will suppress the not-null check at the beginning
98996   ** of the loop.  Without the TERM_VNULL flag, the not-null check at
98997   ** the start of the loop will prevent any results from being returned.
98998   */
98999   if( pExpr->op==TK_NOTNULL
99000    && pExpr->pLeft->op==TK_COLUMN
99001    && pExpr->pLeft->iColumn>=0
99002   ){
99003     Expr *pNewExpr;
99004     Expr *pLeft = pExpr->pLeft;
99005     int idxNew;
99006     WhereTerm *pNewTerm;
99007
99008     pNewExpr = sqlite3PExpr(pParse, TK_GT,
99009                             sqlite3ExprDup(db, pLeft, 0),
99010                             sqlite3PExpr(pParse, TK_NULL, 0, 0, 0), 0);
99011
99012     idxNew = whereClauseInsert(pWC, pNewExpr,
99013                               TERM_VIRTUAL|TERM_DYNAMIC|TERM_VNULL);
99014     if( idxNew ){
99015       pNewTerm = &pWC->a[idxNew];
99016       pNewTerm->prereqRight = 0;
99017       pNewTerm->leftCursor = pLeft->iTable;
99018       pNewTerm->u.leftColumn = pLeft->iColumn;
99019       pNewTerm->eOperator = WO_GT;
99020       pNewTerm->iParent = idxTerm;
99021       pTerm = &pWC->a[idxTerm];
99022       pTerm->nChild = 1;
99023       pTerm->wtFlags |= TERM_COPIED;
99024       pNewTerm->prereqAll = pTerm->prereqAll;
99025     }
99026   }
99027 #endif /* SQLITE_ENABLE_STAT2 */
99028
99029   /* Prevent ON clause terms of a LEFT JOIN from being used to drive
99030   ** an index for tables to the left of the join.
99031   */
99032   pTerm->prereqRight |= extraRight;
99033 }
99034
99035 /*
99036 ** Return TRUE if any of the expressions in pList->a[iFirst...] contain
99037 ** a reference to any table other than the iBase table.
99038 */
99039 static int referencesOtherTables(
99040   ExprList *pList,          /* Search expressions in ths list */
99041   WhereMaskSet *pMaskSet,   /* Mapping from tables to bitmaps */
99042   int iFirst,               /* Be searching with the iFirst-th expression */
99043   int iBase                 /* Ignore references to this table */
99044 ){
99045   Bitmask allowed = ~getMask(pMaskSet, iBase);
99046   while( iFirst<pList->nExpr ){
99047     if( (exprTableUsage(pMaskSet, pList->a[iFirst++].pExpr)&allowed)!=0 ){
99048       return 1;
99049     }
99050   }
99051   return 0;
99052 }
99053
99054
99055 /*
99056 ** This routine decides if pIdx can be used to satisfy the ORDER BY
99057 ** clause.  If it can, it returns 1.  If pIdx cannot satisfy the
99058 ** ORDER BY clause, this routine returns 0.
99059 **
99060 ** pOrderBy is an ORDER BY clause from a SELECT statement.  pTab is the
99061 ** left-most table in the FROM clause of that same SELECT statement and
99062 ** the table has a cursor number of "base".  pIdx is an index on pTab.
99063 **
99064 ** nEqCol is the number of columns of pIdx that are used as equality
99065 ** constraints.  Any of these columns may be missing from the ORDER BY
99066 ** clause and the match can still be a success.
99067 **
99068 ** All terms of the ORDER BY that match against the index must be either
99069 ** ASC or DESC.  (Terms of the ORDER BY clause past the end of a UNIQUE
99070 ** index do not need to satisfy this constraint.)  The *pbRev value is
99071 ** set to 1 if the ORDER BY clause is all DESC and it is set to 0 if
99072 ** the ORDER BY clause is all ASC.
99073 */
99074 static int isSortingIndex(
99075   Parse *pParse,          /* Parsing context */
99076   WhereMaskSet *pMaskSet, /* Mapping from table cursor numbers to bitmaps */
99077   Index *pIdx,            /* The index we are testing */
99078   int base,               /* Cursor number for the table to be sorted */
99079   ExprList *pOrderBy,     /* The ORDER BY clause */
99080   int nEqCol,             /* Number of index columns with == constraints */
99081   int wsFlags,            /* Index usages flags */
99082   int *pbRev              /* Set to 1 if ORDER BY is DESC */
99083 ){
99084   int i, j;                       /* Loop counters */
99085   int sortOrder = 0;              /* XOR of index and ORDER BY sort direction */
99086   int nTerm;                      /* Number of ORDER BY terms */
99087   struct ExprList_item *pTerm;    /* A term of the ORDER BY clause */
99088   sqlite3 *db = pParse->db;
99089
99090   assert( pOrderBy!=0 );
99091   nTerm = pOrderBy->nExpr;
99092   assert( nTerm>0 );
99093
99094   /* Argument pIdx must either point to a 'real' named index structure, 
99095   ** or an index structure allocated on the stack by bestBtreeIndex() to
99096   ** represent the rowid index that is part of every table.  */
99097   assert( pIdx->zName || (pIdx->nColumn==1 && pIdx->aiColumn[0]==-1) );
99098
99099   /* Match terms of the ORDER BY clause against columns of
99100   ** the index.
99101   **
99102   ** Note that indices have pIdx->nColumn regular columns plus
99103   ** one additional column containing the rowid.  The rowid column
99104   ** of the index is also allowed to match against the ORDER BY
99105   ** clause.
99106   */
99107   for(i=j=0, pTerm=pOrderBy->a; j<nTerm && i<=pIdx->nColumn; i++){
99108     Expr *pExpr;       /* The expression of the ORDER BY pTerm */
99109     CollSeq *pColl;    /* The collating sequence of pExpr */
99110     int termSortOrder; /* Sort order for this term */
99111     int iColumn;       /* The i-th column of the index.  -1 for rowid */
99112     int iSortOrder;    /* 1 for DESC, 0 for ASC on the i-th index term */
99113     const char *zColl; /* Name of the collating sequence for i-th index term */
99114
99115     pExpr = pTerm->pExpr;
99116     if( pExpr->op!=TK_COLUMN || pExpr->iTable!=base ){
99117       /* Can not use an index sort on anything that is not a column in the
99118       ** left-most table of the FROM clause */
99119       break;
99120     }
99121     pColl = sqlite3ExprCollSeq(pParse, pExpr);
99122     if( !pColl ){
99123       pColl = db->pDfltColl;
99124     }
99125     if( pIdx->zName && i<pIdx->nColumn ){
99126       iColumn = pIdx->aiColumn[i];
99127       if( iColumn==pIdx->pTable->iPKey ){
99128         iColumn = -1;
99129       }
99130       iSortOrder = pIdx->aSortOrder[i];
99131       zColl = pIdx->azColl[i];
99132     }else{
99133       iColumn = -1;
99134       iSortOrder = 0;
99135       zColl = pColl->zName;
99136     }
99137     if( pExpr->iColumn!=iColumn || sqlite3StrICmp(pColl->zName, zColl) ){
99138       /* Term j of the ORDER BY clause does not match column i of the index */
99139       if( i<nEqCol ){
99140         /* If an index column that is constrained by == fails to match an
99141         ** ORDER BY term, that is OK.  Just ignore that column of the index
99142         */
99143         continue;
99144       }else if( i==pIdx->nColumn ){
99145         /* Index column i is the rowid.  All other terms match. */
99146         break;
99147       }else{
99148         /* If an index column fails to match and is not constrained by ==
99149         ** then the index cannot satisfy the ORDER BY constraint.
99150         */
99151         return 0;
99152       }
99153     }
99154     assert( pIdx->aSortOrder!=0 || iColumn==-1 );
99155     assert( pTerm->sortOrder==0 || pTerm->sortOrder==1 );
99156     assert( iSortOrder==0 || iSortOrder==1 );
99157     termSortOrder = iSortOrder ^ pTerm->sortOrder;
99158     if( i>nEqCol ){
99159       if( termSortOrder!=sortOrder ){
99160         /* Indices can only be used if all ORDER BY terms past the
99161         ** equality constraints are all either DESC or ASC. */
99162         return 0;
99163       }
99164     }else{
99165       sortOrder = termSortOrder;
99166     }
99167     j++;
99168     pTerm++;
99169     if( iColumn<0 && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){
99170       /* If the indexed column is the primary key and everything matches
99171       ** so far and none of the ORDER BY terms to the right reference other
99172       ** tables in the join, then we are assured that the index can be used 
99173       ** to sort because the primary key is unique and so none of the other
99174       ** columns will make any difference
99175       */
99176       j = nTerm;
99177     }
99178   }
99179
99180   *pbRev = sortOrder!=0;
99181   if( j>=nTerm ){
99182     /* All terms of the ORDER BY clause are covered by this index so
99183     ** this index can be used for sorting. */
99184     return 1;
99185   }
99186   if( pIdx->onError!=OE_None && i==pIdx->nColumn
99187       && (wsFlags & WHERE_COLUMN_NULL)==0
99188       && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){
99189     /* All terms of this index match some prefix of the ORDER BY clause
99190     ** and the index is UNIQUE and no terms on the tail of the ORDER BY
99191     ** clause reference other tables in a join.  If this is all true then
99192     ** the order by clause is superfluous.  Not that if the matching
99193     ** condition is IS NULL then the result is not necessarily unique
99194     ** even on a UNIQUE index, so disallow those cases. */
99195     return 1;
99196   }
99197   return 0;
99198 }
99199
99200 /*
99201 ** Prepare a crude estimate of the logarithm of the input value.
99202 ** The results need not be exact.  This is only used for estimating
99203 ** the total cost of performing operations with O(logN) or O(NlogN)
99204 ** complexity.  Because N is just a guess, it is no great tragedy if
99205 ** logN is a little off.
99206 */
99207 static double estLog(double N){
99208   double logN = 1;
99209   double x = 10;
99210   while( N>x ){
99211     logN += 1;
99212     x *= 10;
99213   }
99214   return logN;
99215 }
99216
99217 /*
99218 ** Two routines for printing the content of an sqlite3_index_info
99219 ** structure.  Used for testing and debugging only.  If neither
99220 ** SQLITE_TEST or SQLITE_DEBUG are defined, then these routines
99221 ** are no-ops.
99222 */
99223 #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_DEBUG)
99224 static void TRACE_IDX_INPUTS(sqlite3_index_info *p){
99225   int i;
99226   if( !sqlite3WhereTrace ) return;
99227   for(i=0; i<p->nConstraint; i++){
99228     sqlite3DebugPrintf("  constraint[%d]: col=%d termid=%d op=%d usabled=%d\n",
99229        i,
99230        p->aConstraint[i].iColumn,
99231        p->aConstraint[i].iTermOffset,
99232        p->aConstraint[i].op,
99233        p->aConstraint[i].usable);
99234   }
99235   for(i=0; i<p->nOrderBy; i++){
99236     sqlite3DebugPrintf("  orderby[%d]: col=%d desc=%d\n",
99237        i,
99238        p->aOrderBy[i].iColumn,
99239        p->aOrderBy[i].desc);
99240   }
99241 }
99242 static void TRACE_IDX_OUTPUTS(sqlite3_index_info *p){
99243   int i;
99244   if( !sqlite3WhereTrace ) return;
99245   for(i=0; i<p->nConstraint; i++){
99246     sqlite3DebugPrintf("  usage[%d]: argvIdx=%d omit=%d\n",
99247        i,
99248        p->aConstraintUsage[i].argvIndex,
99249        p->aConstraintUsage[i].omit);
99250   }
99251   sqlite3DebugPrintf("  idxNum=%d\n", p->idxNum);
99252   sqlite3DebugPrintf("  idxStr=%s\n", p->idxStr);
99253   sqlite3DebugPrintf("  orderByConsumed=%d\n", p->orderByConsumed);
99254   sqlite3DebugPrintf("  estimatedCost=%g\n", p->estimatedCost);
99255 }
99256 #else
99257 #define TRACE_IDX_INPUTS(A)
99258 #define TRACE_IDX_OUTPUTS(A)
99259 #endif
99260
99261 /* 
99262 ** Required because bestIndex() is called by bestOrClauseIndex() 
99263 */
99264 static void bestIndex(
99265     Parse*, WhereClause*, struct SrcList_item*,
99266     Bitmask, Bitmask, ExprList*, WhereCost*);
99267
99268 /*
99269 ** This routine attempts to find an scanning strategy that can be used 
99270 ** to optimize an 'OR' expression that is part of a WHERE clause. 
99271 **
99272 ** The table associated with FROM clause term pSrc may be either a
99273 ** regular B-Tree table or a virtual table.
99274 */
99275 static void bestOrClauseIndex(
99276   Parse *pParse,              /* The parsing context */
99277   WhereClause *pWC,           /* The WHERE clause */
99278   struct SrcList_item *pSrc,  /* The FROM clause term to search */
99279   Bitmask notReady,           /* Mask of cursors not available for indexing */
99280   Bitmask notValid,           /* Cursors not available for any purpose */
99281   ExprList *pOrderBy,         /* The ORDER BY clause */
99282   WhereCost *pCost            /* Lowest cost query plan */
99283 ){
99284 #ifndef SQLITE_OMIT_OR_OPTIMIZATION
99285   const int iCur = pSrc->iCursor;   /* The cursor of the table to be accessed */
99286   const Bitmask maskSrc = getMask(pWC->pMaskSet, iCur);  /* Bitmask for pSrc */
99287   WhereTerm * const pWCEnd = &pWC->a[pWC->nTerm];        /* End of pWC->a[] */
99288   WhereTerm *pTerm;                 /* A single term of the WHERE clause */
99289
99290   /* No OR-clause optimization allowed if the INDEXED BY or NOT INDEXED clauses
99291   ** are used */
99292   if( pSrc->notIndexed || pSrc->pIndex!=0 ){
99293     return;
99294   }
99295
99296   /* Search the WHERE clause terms for a usable WO_OR term. */
99297   for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
99298     if( pTerm->eOperator==WO_OR 
99299      && ((pTerm->prereqAll & ~maskSrc) & notReady)==0
99300      && (pTerm->u.pOrInfo->indexable & maskSrc)!=0 
99301     ){
99302       WhereClause * const pOrWC = &pTerm->u.pOrInfo->wc;
99303       WhereTerm * const pOrWCEnd = &pOrWC->a[pOrWC->nTerm];
99304       WhereTerm *pOrTerm;
99305       int flags = WHERE_MULTI_OR;
99306       double rTotal = 0;
99307       double nRow = 0;
99308       Bitmask used = 0;
99309
99310       for(pOrTerm=pOrWC->a; pOrTerm<pOrWCEnd; pOrTerm++){
99311         WhereCost sTermCost;
99312         WHERETRACE(("... Multi-index OR testing for term %d of %d....\n", 
99313           (pOrTerm - pOrWC->a), (pTerm - pWC->a)
99314         ));
99315         if( pOrTerm->eOperator==WO_AND ){
99316           WhereClause *pAndWC = &pOrTerm->u.pAndInfo->wc;
99317           bestIndex(pParse, pAndWC, pSrc, notReady, notValid, 0, &sTermCost);
99318         }else if( pOrTerm->leftCursor==iCur ){
99319           WhereClause tempWC;
99320           tempWC.pParse = pWC->pParse;
99321           tempWC.pMaskSet = pWC->pMaskSet;
99322           tempWC.op = TK_AND;
99323           tempWC.a = pOrTerm;
99324           tempWC.nTerm = 1;
99325           bestIndex(pParse, &tempWC, pSrc, notReady, notValid, 0, &sTermCost);
99326         }else{
99327           continue;
99328         }
99329         rTotal += sTermCost.rCost;
99330         nRow += sTermCost.plan.nRow;
99331         used |= sTermCost.used;
99332         if( rTotal>=pCost->rCost ) break;
99333       }
99334
99335       /* If there is an ORDER BY clause, increase the scan cost to account 
99336       ** for the cost of the sort. */
99337       if( pOrderBy!=0 ){
99338         WHERETRACE(("... sorting increases OR cost %.9g to %.9g\n",
99339                     rTotal, rTotal+nRow*estLog(nRow)));
99340         rTotal += nRow*estLog(nRow);
99341       }
99342
99343       /* If the cost of scanning using this OR term for optimization is
99344       ** less than the current cost stored in pCost, replace the contents
99345       ** of pCost. */
99346       WHERETRACE(("... multi-index OR cost=%.9g nrow=%.9g\n", rTotal, nRow));
99347       if( rTotal<pCost->rCost ){
99348         pCost->rCost = rTotal;
99349         pCost->used = used;
99350         pCost->plan.nRow = nRow;
99351         pCost->plan.wsFlags = flags;
99352         pCost->plan.u.pTerm = pTerm;
99353       }
99354     }
99355   }
99356 #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
99357 }
99358
99359 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
99360 /*
99361 ** Return TRUE if the WHERE clause term pTerm is of a form where it
99362 ** could be used with an index to access pSrc, assuming an appropriate
99363 ** index existed.
99364 */
99365 static int termCanDriveIndex(
99366   WhereTerm *pTerm,              /* WHERE clause term to check */
99367   struct SrcList_item *pSrc,     /* Table we are trying to access */
99368   Bitmask notReady               /* Tables in outer loops of the join */
99369 ){
99370   char aff;
99371   if( pTerm->leftCursor!=pSrc->iCursor ) return 0;
99372   if( pTerm->eOperator!=WO_EQ ) return 0;
99373   if( (pTerm->prereqRight & notReady)!=0 ) return 0;
99374   aff = pSrc->pTab->aCol[pTerm->u.leftColumn].affinity;
99375   if( !sqlite3IndexAffinityOk(pTerm->pExpr, aff) ) return 0;
99376   return 1;
99377 }
99378 #endif
99379
99380 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
99381 /*
99382 ** If the query plan for pSrc specified in pCost is a full table scan
99383 ** and indexing is allows (if there is no NOT INDEXED clause) and it
99384 ** possible to construct a transient index that would perform better
99385 ** than a full table scan even when the cost of constructing the index
99386 ** is taken into account, then alter the query plan to use the
99387 ** transient index.
99388 */
99389 static void bestAutomaticIndex(
99390   Parse *pParse,              /* The parsing context */
99391   WhereClause *pWC,           /* The WHERE clause */
99392   struct SrcList_item *pSrc,  /* The FROM clause term to search */
99393   Bitmask notReady,           /* Mask of cursors that are not available */
99394   WhereCost *pCost            /* Lowest cost query plan */
99395 ){
99396   double nTableRow;           /* Rows in the input table */
99397   double logN;                /* log(nTableRow) */
99398   double costTempIdx;         /* per-query cost of the transient index */
99399   WhereTerm *pTerm;           /* A single term of the WHERE clause */
99400   WhereTerm *pWCEnd;          /* End of pWC->a[] */
99401   Table *pTable;              /* Table tht might be indexed */
99402
99403   if( (pParse->db->flags & SQLITE_AutoIndex)==0 ){
99404     /* Automatic indices are disabled at run-time */
99405     return;
99406   }
99407   if( (pCost->plan.wsFlags & WHERE_NOT_FULLSCAN)!=0 ){
99408     /* We already have some kind of index in use for this query. */
99409     return;
99410   }
99411   if( pSrc->notIndexed ){
99412     /* The NOT INDEXED clause appears in the SQL. */
99413     return;
99414   }
99415
99416   assert( pParse->nQueryLoop >= (double)1 );
99417   pTable = pSrc->pTab;
99418   nTableRow = pTable->nRowEst;
99419   logN = estLog(nTableRow);
99420   costTempIdx = 2*logN*(nTableRow/pParse->nQueryLoop + 1);
99421   if( costTempIdx>=pCost->rCost ){
99422     /* The cost of creating the transient table would be greater than
99423     ** doing the full table scan */
99424     return;
99425   }
99426
99427   /* Search for any equality comparison term */
99428   pWCEnd = &pWC->a[pWC->nTerm];
99429   for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
99430     if( termCanDriveIndex(pTerm, pSrc, notReady) ){
99431       WHERETRACE(("auto-index reduces cost from %.1f to %.1f\n",
99432                     pCost->rCost, costTempIdx));
99433       pCost->rCost = costTempIdx;
99434       pCost->plan.nRow = logN + 1;
99435       pCost->plan.wsFlags = WHERE_TEMP_INDEX;
99436       pCost->used = pTerm->prereqRight;
99437       break;
99438     }
99439   }
99440 }
99441 #else
99442 # define bestAutomaticIndex(A,B,C,D,E)  /* no-op */
99443 #endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
99444
99445
99446 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
99447 /*
99448 ** Generate code to construct the Index object for an automatic index
99449 ** and to set up the WhereLevel object pLevel so that the code generator
99450 ** makes use of the automatic index.
99451 */
99452 static void constructAutomaticIndex(
99453   Parse *pParse,              /* The parsing context */
99454   WhereClause *pWC,           /* The WHERE clause */
99455   struct SrcList_item *pSrc,  /* The FROM clause term to get the next index */
99456   Bitmask notReady,           /* Mask of cursors that are not available */
99457   WhereLevel *pLevel          /* Write new index here */
99458 ){
99459   int nColumn;                /* Number of columns in the constructed index */
99460   WhereTerm *pTerm;           /* A single term of the WHERE clause */
99461   WhereTerm *pWCEnd;          /* End of pWC->a[] */
99462   int nByte;                  /* Byte of memory needed for pIdx */
99463   Index *pIdx;                /* Object describing the transient index */
99464   Vdbe *v;                    /* Prepared statement under construction */
99465   int regIsInit;              /* Register set by initialization */
99466   int addrInit;               /* Address of the initialization bypass jump */
99467   Table *pTable;              /* The table being indexed */
99468   KeyInfo *pKeyinfo;          /* Key information for the index */   
99469   int addrTop;                /* Top of the index fill loop */
99470   int regRecord;              /* Register holding an index record */
99471   int n;                      /* Column counter */
99472   int i;                      /* Loop counter */
99473   int mxBitCol;               /* Maximum column in pSrc->colUsed */
99474   CollSeq *pColl;             /* Collating sequence to on a column */
99475   Bitmask idxCols;            /* Bitmap of columns used for indexing */
99476   Bitmask extraCols;          /* Bitmap of additional columns */
99477
99478   /* Generate code to skip over the creation and initialization of the
99479   ** transient index on 2nd and subsequent iterations of the loop. */
99480   v = pParse->pVdbe;
99481   assert( v!=0 );
99482   regIsInit = ++pParse->nMem;
99483   addrInit = sqlite3VdbeAddOp1(v, OP_If, regIsInit);
99484   sqlite3VdbeAddOp2(v, OP_Integer, 1, regIsInit);
99485
99486   /* Count the number of columns that will be added to the index
99487   ** and used to match WHERE clause constraints */
99488   nColumn = 0;
99489   pTable = pSrc->pTab;
99490   pWCEnd = &pWC->a[pWC->nTerm];
99491   idxCols = 0;
99492   for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
99493     if( termCanDriveIndex(pTerm, pSrc, notReady) ){
99494       int iCol = pTerm->u.leftColumn;
99495       Bitmask cMask = iCol>=BMS ? ((Bitmask)1)<<(BMS-1) : ((Bitmask)1)<<iCol;
99496       testcase( iCol==BMS );
99497       testcase( iCol==BMS-1 );
99498       if( (idxCols & cMask)==0 ){
99499         nColumn++;
99500         idxCols |= cMask;
99501       }
99502     }
99503   }
99504   assert( nColumn>0 );
99505   pLevel->plan.nEq = nColumn;
99506
99507   /* Count the number of additional columns needed to create a
99508   ** covering index.  A "covering index" is an index that contains all
99509   ** columns that are needed by the query.  With a covering index, the
99510   ** original table never needs to be accessed.  Automatic indices must
99511   ** be a covering index because the index will not be updated if the
99512   ** original table changes and the index and table cannot both be used
99513   ** if they go out of sync.
99514   */
99515   extraCols = pSrc->colUsed & (~idxCols | (((Bitmask)1)<<(BMS-1)));
99516   mxBitCol = (pTable->nCol >= BMS-1) ? BMS-1 : pTable->nCol;
99517   testcase( pTable->nCol==BMS-1 );
99518   testcase( pTable->nCol==BMS-2 );
99519   for(i=0; i<mxBitCol; i++){
99520     if( extraCols & (((Bitmask)1)<<i) ) nColumn++;
99521   }
99522   if( pSrc->colUsed & (((Bitmask)1)<<(BMS-1)) ){
99523     nColumn += pTable->nCol - BMS + 1;
99524   }
99525   pLevel->plan.wsFlags |= WHERE_COLUMN_EQ | WHERE_IDX_ONLY | WO_EQ;
99526
99527   /* Construct the Index object to describe this index */
99528   nByte = sizeof(Index);
99529   nByte += nColumn*sizeof(int);     /* Index.aiColumn */
99530   nByte += nColumn*sizeof(char*);   /* Index.azColl */
99531   nByte += nColumn;                 /* Index.aSortOrder */
99532   pIdx = sqlite3DbMallocZero(pParse->db, nByte);
99533   if( pIdx==0 ) return;
99534   pLevel->plan.u.pIdx = pIdx;
99535   pIdx->azColl = (char**)&pIdx[1];
99536   pIdx->aiColumn = (int*)&pIdx->azColl[nColumn];
99537   pIdx->aSortOrder = (u8*)&pIdx->aiColumn[nColumn];
99538   pIdx->zName = "auto-index";
99539   pIdx->nColumn = nColumn;
99540   pIdx->pTable = pTable;
99541   n = 0;
99542   idxCols = 0;
99543   for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
99544     if( termCanDriveIndex(pTerm, pSrc, notReady) ){
99545       int iCol = pTerm->u.leftColumn;
99546       Bitmask cMask = iCol>=BMS ? ((Bitmask)1)<<(BMS-1) : ((Bitmask)1)<<iCol;
99547       if( (idxCols & cMask)==0 ){
99548         Expr *pX = pTerm->pExpr;
99549         idxCols |= cMask;
99550         pIdx->aiColumn[n] = pTerm->u.leftColumn;
99551         pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
99552         pIdx->azColl[n] = ALWAYS(pColl) ? pColl->zName : "BINARY";
99553         n++;
99554       }
99555     }
99556   }
99557   assert( (u32)n==pLevel->plan.nEq );
99558
99559   /* Add additional columns needed to make the automatic index into
99560   ** a covering index */
99561   for(i=0; i<mxBitCol; i++){
99562     if( extraCols & (((Bitmask)1)<<i) ){
99563       pIdx->aiColumn[n] = i;
99564       pIdx->azColl[n] = "BINARY";
99565       n++;
99566     }
99567   }
99568   if( pSrc->colUsed & (((Bitmask)1)<<(BMS-1)) ){
99569     for(i=BMS-1; i<pTable->nCol; i++){
99570       pIdx->aiColumn[n] = i;
99571       pIdx->azColl[n] = "BINARY";
99572       n++;
99573     }
99574   }
99575   assert( n==nColumn );
99576
99577   /* Create the automatic index */
99578   pKeyinfo = sqlite3IndexKeyinfo(pParse, pIdx);
99579   assert( pLevel->iIdxCur>=0 );
99580   sqlite3VdbeAddOp4(v, OP_OpenAutoindex, pLevel->iIdxCur, nColumn+1, 0,
99581                     (char*)pKeyinfo, P4_KEYINFO_HANDOFF);
99582   VdbeComment((v, "for %s", pTable->zName));
99583
99584   /* Fill the automatic index with content */
99585   addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur);
99586   regRecord = sqlite3GetTempReg(pParse);
99587   sqlite3GenerateIndexKey(pParse, pIdx, pLevel->iTabCur, regRecord, 1);
99588   sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord);
99589   sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
99590   sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1);
99591   sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX);
99592   sqlite3VdbeJumpHere(v, addrTop);
99593   sqlite3ReleaseTempReg(pParse, regRecord);
99594   
99595   /* Jump here when skipping the initialization */
99596   sqlite3VdbeJumpHere(v, addrInit);
99597 }
99598 #endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
99599
99600 #ifndef SQLITE_OMIT_VIRTUALTABLE
99601 /*
99602 ** Allocate and populate an sqlite3_index_info structure. It is the 
99603 ** responsibility of the caller to eventually release the structure
99604 ** by passing the pointer returned by this function to sqlite3_free().
99605 */
99606 static sqlite3_index_info *allocateIndexInfo(
99607   Parse *pParse, 
99608   WhereClause *pWC,
99609   struct SrcList_item *pSrc,
99610   ExprList *pOrderBy
99611 ){
99612   int i, j;
99613   int nTerm;
99614   struct sqlite3_index_constraint *pIdxCons;
99615   struct sqlite3_index_orderby *pIdxOrderBy;
99616   struct sqlite3_index_constraint_usage *pUsage;
99617   WhereTerm *pTerm;
99618   int nOrderBy;
99619   sqlite3_index_info *pIdxInfo;
99620
99621   WHERETRACE(("Recomputing index info for %s...\n", pSrc->pTab->zName));
99622
99623   /* Count the number of possible WHERE clause constraints referring
99624   ** to this virtual table */
99625   for(i=nTerm=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
99626     if( pTerm->leftCursor != pSrc->iCursor ) continue;
99627     assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
99628     testcase( pTerm->eOperator==WO_IN );
99629     testcase( pTerm->eOperator==WO_ISNULL );
99630     if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
99631     nTerm++;
99632   }
99633
99634   /* If the ORDER BY clause contains only columns in the current 
99635   ** virtual table then allocate space for the aOrderBy part of
99636   ** the sqlite3_index_info structure.
99637   */
99638   nOrderBy = 0;
99639   if( pOrderBy ){
99640     for(i=0; i<pOrderBy->nExpr; i++){
99641       Expr *pExpr = pOrderBy->a[i].pExpr;
99642       if( pExpr->op!=TK_COLUMN || pExpr->iTable!=pSrc->iCursor ) break;
99643     }
99644     if( i==pOrderBy->nExpr ){
99645       nOrderBy = pOrderBy->nExpr;
99646     }
99647   }
99648
99649   /* Allocate the sqlite3_index_info structure
99650   */
99651   pIdxInfo = sqlite3DbMallocZero(pParse->db, sizeof(*pIdxInfo)
99652                            + (sizeof(*pIdxCons) + sizeof(*pUsage))*nTerm
99653                            + sizeof(*pIdxOrderBy)*nOrderBy );
99654   if( pIdxInfo==0 ){
99655     sqlite3ErrorMsg(pParse, "out of memory");
99656     /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
99657     return 0;
99658   }
99659
99660   /* Initialize the structure.  The sqlite3_index_info structure contains
99661   ** many fields that are declared "const" to prevent xBestIndex from
99662   ** changing them.  We have to do some funky casting in order to
99663   ** initialize those fields.
99664   */
99665   pIdxCons = (struct sqlite3_index_constraint*)&pIdxInfo[1];
99666   pIdxOrderBy = (struct sqlite3_index_orderby*)&pIdxCons[nTerm];
99667   pUsage = (struct sqlite3_index_constraint_usage*)&pIdxOrderBy[nOrderBy];
99668   *(int*)&pIdxInfo->nConstraint = nTerm;
99669   *(int*)&pIdxInfo->nOrderBy = nOrderBy;
99670   *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint = pIdxCons;
99671   *(struct sqlite3_index_orderby**)&pIdxInfo->aOrderBy = pIdxOrderBy;
99672   *(struct sqlite3_index_constraint_usage**)&pIdxInfo->aConstraintUsage =
99673                                                                    pUsage;
99674
99675   for(i=j=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
99676     if( pTerm->leftCursor != pSrc->iCursor ) continue;
99677     assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
99678     testcase( pTerm->eOperator==WO_IN );
99679     testcase( pTerm->eOperator==WO_ISNULL );
99680     if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
99681     pIdxCons[j].iColumn = pTerm->u.leftColumn;
99682     pIdxCons[j].iTermOffset = i;
99683     pIdxCons[j].op = (u8)pTerm->eOperator;
99684     /* The direct assignment in the previous line is possible only because
99685     ** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical.  The
99686     ** following asserts verify this fact. */
99687     assert( WO_EQ==SQLITE_INDEX_CONSTRAINT_EQ );
99688     assert( WO_LT==SQLITE_INDEX_CONSTRAINT_LT );
99689     assert( WO_LE==SQLITE_INDEX_CONSTRAINT_LE );
99690     assert( WO_GT==SQLITE_INDEX_CONSTRAINT_GT );
99691     assert( WO_GE==SQLITE_INDEX_CONSTRAINT_GE );
99692     assert( WO_MATCH==SQLITE_INDEX_CONSTRAINT_MATCH );
99693     assert( pTerm->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_MATCH) );
99694     j++;
99695   }
99696   for(i=0; i<nOrderBy; i++){
99697     Expr *pExpr = pOrderBy->a[i].pExpr;
99698     pIdxOrderBy[i].iColumn = pExpr->iColumn;
99699     pIdxOrderBy[i].desc = pOrderBy->a[i].sortOrder;
99700   }
99701
99702   return pIdxInfo;
99703 }
99704
99705 /*
99706 ** The table object reference passed as the second argument to this function
99707 ** must represent a virtual table. This function invokes the xBestIndex()
99708 ** method of the virtual table with the sqlite3_index_info pointer passed
99709 ** as the argument.
99710 **
99711 ** If an error occurs, pParse is populated with an error message and a
99712 ** non-zero value is returned. Otherwise, 0 is returned and the output
99713 ** part of the sqlite3_index_info structure is left populated.
99714 **
99715 ** Whether or not an error is returned, it is the responsibility of the
99716 ** caller to eventually free p->idxStr if p->needToFreeIdxStr indicates
99717 ** that this is required.
99718 */
99719 static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){
99720   sqlite3_vtab *pVtab = sqlite3GetVTable(pParse->db, pTab)->pVtab;
99721   int i;
99722   int rc;
99723
99724   WHERETRACE(("xBestIndex for %s\n", pTab->zName));
99725   TRACE_IDX_INPUTS(p);
99726   rc = pVtab->pModule->xBestIndex(pVtab, p);
99727   TRACE_IDX_OUTPUTS(p);
99728
99729   if( rc!=SQLITE_OK ){
99730     if( rc==SQLITE_NOMEM ){
99731       pParse->db->mallocFailed = 1;
99732     }else if( !pVtab->zErrMsg ){
99733       sqlite3ErrorMsg(pParse, "%s", sqlite3ErrStr(rc));
99734     }else{
99735       sqlite3ErrorMsg(pParse, "%s", pVtab->zErrMsg);
99736     }
99737   }
99738   sqlite3_free(pVtab->zErrMsg);
99739   pVtab->zErrMsg = 0;
99740
99741   for(i=0; i<p->nConstraint; i++){
99742     if( !p->aConstraint[i].usable && p->aConstraintUsage[i].argvIndex>0 ){
99743       sqlite3ErrorMsg(pParse, 
99744           "table %s: xBestIndex returned an invalid plan", pTab->zName);
99745     }
99746   }
99747
99748   return pParse->nErr;
99749 }
99750
99751
99752 /*
99753 ** Compute the best index for a virtual table.
99754 **
99755 ** The best index is computed by the xBestIndex method of the virtual
99756 ** table module.  This routine is really just a wrapper that sets up
99757 ** the sqlite3_index_info structure that is used to communicate with
99758 ** xBestIndex.
99759 **
99760 ** In a join, this routine might be called multiple times for the
99761 ** same virtual table.  The sqlite3_index_info structure is created
99762 ** and initialized on the first invocation and reused on all subsequent
99763 ** invocations.  The sqlite3_index_info structure is also used when
99764 ** code is generated to access the virtual table.  The whereInfoDelete() 
99765 ** routine takes care of freeing the sqlite3_index_info structure after
99766 ** everybody has finished with it.
99767 */
99768 static void bestVirtualIndex(
99769   Parse *pParse,                  /* The parsing context */
99770   WhereClause *pWC,               /* The WHERE clause */
99771   struct SrcList_item *pSrc,      /* The FROM clause term to search */
99772   Bitmask notReady,               /* Mask of cursors not available for index */
99773   Bitmask notValid,               /* Cursors not valid for any purpose */
99774   ExprList *pOrderBy,             /* The order by clause */
99775   WhereCost *pCost,               /* Lowest cost query plan */
99776   sqlite3_index_info **ppIdxInfo  /* Index information passed to xBestIndex */
99777 ){
99778   Table *pTab = pSrc->pTab;
99779   sqlite3_index_info *pIdxInfo;
99780   struct sqlite3_index_constraint *pIdxCons;
99781   struct sqlite3_index_constraint_usage *pUsage;
99782   WhereTerm *pTerm;
99783   int i, j;
99784   int nOrderBy;
99785   double rCost;
99786
99787   /* Make sure wsFlags is initialized to some sane value. Otherwise, if the 
99788   ** malloc in allocateIndexInfo() fails and this function returns leaving
99789   ** wsFlags in an uninitialized state, the caller may behave unpredictably.
99790   */
99791   memset(pCost, 0, sizeof(*pCost));
99792   pCost->plan.wsFlags = WHERE_VIRTUALTABLE;
99793
99794   /* If the sqlite3_index_info structure has not been previously
99795   ** allocated and initialized, then allocate and initialize it now.
99796   */
99797   pIdxInfo = *ppIdxInfo;
99798   if( pIdxInfo==0 ){
99799     *ppIdxInfo = pIdxInfo = allocateIndexInfo(pParse, pWC, pSrc, pOrderBy);
99800   }
99801   if( pIdxInfo==0 ){
99802     return;
99803   }
99804
99805   /* At this point, the sqlite3_index_info structure that pIdxInfo points
99806   ** to will have been initialized, either during the current invocation or
99807   ** during some prior invocation.  Now we just have to customize the
99808   ** details of pIdxInfo for the current invocation and pass it to
99809   ** xBestIndex.
99810   */
99811
99812   /* The module name must be defined. Also, by this point there must
99813   ** be a pointer to an sqlite3_vtab structure. Otherwise
99814   ** sqlite3ViewGetColumnNames() would have picked up the error. 
99815   */
99816   assert( pTab->azModuleArg && pTab->azModuleArg[0] );
99817   assert( sqlite3GetVTable(pParse->db, pTab) );
99818
99819   /* Set the aConstraint[].usable fields and initialize all 
99820   ** output variables to zero.
99821   **
99822   ** aConstraint[].usable is true for constraints where the right-hand
99823   ** side contains only references to tables to the left of the current
99824   ** table.  In other words, if the constraint is of the form:
99825   **
99826   **           column = expr
99827   **
99828   ** and we are evaluating a join, then the constraint on column is 
99829   ** only valid if all tables referenced in expr occur to the left
99830   ** of the table containing column.
99831   **
99832   ** The aConstraints[] array contains entries for all constraints
99833   ** on the current table.  That way we only have to compute it once
99834   ** even though we might try to pick the best index multiple times.
99835   ** For each attempt at picking an index, the order of tables in the
99836   ** join might be different so we have to recompute the usable flag
99837   ** each time.
99838   */
99839   pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint;
99840   pUsage = pIdxInfo->aConstraintUsage;
99841   for(i=0; i<pIdxInfo->nConstraint; i++, pIdxCons++){
99842     j = pIdxCons->iTermOffset;
99843     pTerm = &pWC->a[j];
99844     pIdxCons->usable = (pTerm->prereqRight&notReady) ? 0 : 1;
99845   }
99846   memset(pUsage, 0, sizeof(pUsage[0])*pIdxInfo->nConstraint);
99847   if( pIdxInfo->needToFreeIdxStr ){
99848     sqlite3_free(pIdxInfo->idxStr);
99849   }
99850   pIdxInfo->idxStr = 0;
99851   pIdxInfo->idxNum = 0;
99852   pIdxInfo->needToFreeIdxStr = 0;
99853   pIdxInfo->orderByConsumed = 0;
99854   /* ((double)2) In case of SQLITE_OMIT_FLOATING_POINT... */
99855   pIdxInfo->estimatedCost = SQLITE_BIG_DBL / ((double)2);
99856   nOrderBy = pIdxInfo->nOrderBy;
99857   if( !pOrderBy ){
99858     pIdxInfo->nOrderBy = 0;
99859   }
99860
99861   if( vtabBestIndex(pParse, pTab, pIdxInfo) ){
99862     return;
99863   }
99864
99865   pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint;
99866   for(i=0; i<pIdxInfo->nConstraint; i++){
99867     if( pUsage[i].argvIndex>0 ){
99868       pCost->used |= pWC->a[pIdxCons[i].iTermOffset].prereqRight;
99869     }
99870   }
99871
99872   /* If there is an ORDER BY clause, and the selected virtual table index
99873   ** does not satisfy it, increase the cost of the scan accordingly. This
99874   ** matches the processing for non-virtual tables in bestBtreeIndex().
99875   */
99876   rCost = pIdxInfo->estimatedCost;
99877   if( pOrderBy && pIdxInfo->orderByConsumed==0 ){
99878     rCost += estLog(rCost)*rCost;
99879   }
99880
99881   /* The cost is not allowed to be larger than SQLITE_BIG_DBL (the
99882   ** inital value of lowestCost in this loop. If it is, then the
99883   ** (cost<lowestCost) test below will never be true.
99884   ** 
99885   ** Use "(double)2" instead of "2.0" in case OMIT_FLOATING_POINT 
99886   ** is defined.
99887   */
99888   if( (SQLITE_BIG_DBL/((double)2))<rCost ){
99889     pCost->rCost = (SQLITE_BIG_DBL/((double)2));
99890   }else{
99891     pCost->rCost = rCost;
99892   }
99893   pCost->plan.u.pVtabIdx = pIdxInfo;
99894   if( pIdxInfo->orderByConsumed ){
99895     pCost->plan.wsFlags |= WHERE_ORDERBY;
99896   }
99897   pCost->plan.nEq = 0;
99898   pIdxInfo->nOrderBy = nOrderBy;
99899
99900   /* Try to find a more efficient access pattern by using multiple indexes
99901   ** to optimize an OR expression within the WHERE clause. 
99902   */
99903   bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
99904 }
99905 #endif /* SQLITE_OMIT_VIRTUALTABLE */
99906
99907 /*
99908 ** Argument pIdx is a pointer to an index structure that has an array of
99909 ** SQLITE_INDEX_SAMPLES evenly spaced samples of the first indexed column
99910 ** stored in Index.aSample. These samples divide the domain of values stored
99911 ** the index into (SQLITE_INDEX_SAMPLES+1) regions.
99912 ** Region 0 contains all values less than the first sample value. Region
99913 ** 1 contains values between the first and second samples.  Region 2 contains
99914 ** values between samples 2 and 3.  And so on.  Region SQLITE_INDEX_SAMPLES
99915 ** contains values larger than the last sample.
99916 **
99917 ** If the index contains many duplicates of a single value, then it is
99918 ** possible that two or more adjacent samples can hold the same value.
99919 ** When that is the case, the smallest possible region code is returned
99920 ** when roundUp is false and the largest possible region code is returned
99921 ** when roundUp is true.
99922 **
99923 ** If successful, this function determines which of the regions value 
99924 ** pVal lies in, sets *piRegion to the region index (a value between 0
99925 ** and SQLITE_INDEX_SAMPLES+1, inclusive) and returns SQLITE_OK.
99926 ** Or, if an OOM occurs while converting text values between encodings,
99927 ** SQLITE_NOMEM is returned and *piRegion is undefined.
99928 */
99929 #ifdef SQLITE_ENABLE_STAT2
99930 static int whereRangeRegion(
99931   Parse *pParse,              /* Database connection */
99932   Index *pIdx,                /* Index to consider domain of */
99933   sqlite3_value *pVal,        /* Value to consider */
99934   int roundUp,                /* Return largest valid region if true */
99935   int *piRegion               /* OUT: Region of domain in which value lies */
99936 ){
99937   assert( roundUp==0 || roundUp==1 );
99938   if( ALWAYS(pVal) ){
99939     IndexSample *aSample = pIdx->aSample;
99940     int i = 0;
99941     int eType = sqlite3_value_type(pVal);
99942
99943     if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){
99944       double r = sqlite3_value_double(pVal);
99945       for(i=0; i<SQLITE_INDEX_SAMPLES; i++){
99946         if( aSample[i].eType==SQLITE_NULL ) continue;
99947         if( aSample[i].eType>=SQLITE_TEXT ) break;
99948         if( roundUp ){
99949           if( aSample[i].u.r>r ) break;
99950         }else{
99951           if( aSample[i].u.r>=r ) break;
99952         }
99953       }
99954     }else if( eType==SQLITE_NULL ){
99955       i = 0;
99956       if( roundUp ){
99957         while( i<SQLITE_INDEX_SAMPLES && aSample[i].eType==SQLITE_NULL ) i++;
99958       }
99959     }else{ 
99960       sqlite3 *db = pParse->db;
99961       CollSeq *pColl;
99962       const u8 *z;
99963       int n;
99964
99965       /* pVal comes from sqlite3ValueFromExpr() so the type cannot be NULL */
99966       assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB );
99967
99968       if( eType==SQLITE_BLOB ){
99969         z = (const u8 *)sqlite3_value_blob(pVal);
99970         pColl = db->pDfltColl;
99971         assert( pColl->enc==SQLITE_UTF8 );
99972       }else{
99973         pColl = sqlite3GetCollSeq(db, SQLITE_UTF8, 0, *pIdx->azColl);
99974         if( pColl==0 ){
99975           sqlite3ErrorMsg(pParse, "no such collation sequence: %s",
99976                           *pIdx->azColl);
99977           return SQLITE_ERROR;
99978         }
99979         z = (const u8 *)sqlite3ValueText(pVal, pColl->enc);
99980         if( !z ){
99981           return SQLITE_NOMEM;
99982         }
99983         assert( z && pColl && pColl->xCmp );
99984       }
99985       n = sqlite3ValueBytes(pVal, pColl->enc);
99986
99987       for(i=0; i<SQLITE_INDEX_SAMPLES; i++){
99988         int c;
99989         int eSampletype = aSample[i].eType;
99990         if( eSampletype==SQLITE_NULL || eSampletype<eType ) continue;
99991         if( (eSampletype!=eType) ) break;
99992 #ifndef SQLITE_OMIT_UTF16
99993         if( pColl->enc!=SQLITE_UTF8 ){
99994           int nSample;
99995           char *zSample = sqlite3Utf8to16(
99996               db, pColl->enc, aSample[i].u.z, aSample[i].nByte, &nSample
99997           );
99998           if( !zSample ){
99999             assert( db->mallocFailed );
100000             return SQLITE_NOMEM;
100001           }
100002           c = pColl->xCmp(pColl->pUser, nSample, zSample, n, z);
100003           sqlite3DbFree(db, zSample);
100004         }else
100005 #endif
100006         {
100007           c = pColl->xCmp(pColl->pUser, aSample[i].nByte, aSample[i].u.z, n, z);
100008         }
100009         if( c-roundUp>=0 ) break;
100010       }
100011     }
100012
100013     assert( i>=0 && i<=SQLITE_INDEX_SAMPLES );
100014     *piRegion = i;
100015   }
100016   return SQLITE_OK;
100017 }
100018 #endif   /* #ifdef SQLITE_ENABLE_STAT2 */
100019
100020 /*
100021 ** If expression pExpr represents a literal value, set *pp to point to
100022 ** an sqlite3_value structure containing the same value, with affinity
100023 ** aff applied to it, before returning. It is the responsibility of the 
100024 ** caller to eventually release this structure by passing it to 
100025 ** sqlite3ValueFree().
100026 **
100027 ** If the current parse is a recompile (sqlite3Reprepare()) and pExpr
100028 ** is an SQL variable that currently has a non-NULL value bound to it,
100029 ** create an sqlite3_value structure containing this value, again with
100030 ** affinity aff applied to it, instead.
100031 **
100032 ** If neither of the above apply, set *pp to NULL.
100033 **
100034 ** If an error occurs, return an error code. Otherwise, SQLITE_OK.
100035 */
100036 #ifdef SQLITE_ENABLE_STAT2
100037 static int valueFromExpr(
100038   Parse *pParse, 
100039   Expr *pExpr, 
100040   u8 aff, 
100041   sqlite3_value **pp
100042 ){
100043   if( pExpr->op==TK_VARIABLE
100044    || (pExpr->op==TK_REGISTER && pExpr->op2==TK_VARIABLE)
100045   ){
100046     int iVar = pExpr->iColumn;
100047     sqlite3VdbeSetVarmask(pParse->pVdbe, iVar); /* IMP: R-23257-02778 */
100048     *pp = sqlite3VdbeGetValue(pParse->pReprepare, iVar, aff);
100049     return SQLITE_OK;
100050   }
100051   return sqlite3ValueFromExpr(pParse->db, pExpr, SQLITE_UTF8, aff, pp);
100052 }
100053 #endif
100054
100055 /*
100056 ** This function is used to estimate the number of rows that will be visited
100057 ** by scanning an index for a range of values. The range may have an upper
100058 ** bound, a lower bound, or both. The WHERE clause terms that set the upper
100059 ** and lower bounds are represented by pLower and pUpper respectively. For
100060 ** example, assuming that index p is on t1(a):
100061 **
100062 **   ... FROM t1 WHERE a > ? AND a < ? ...
100063 **                    |_____|   |_____|
100064 **                       |         |
100065 **                     pLower    pUpper
100066 **
100067 ** If either of the upper or lower bound is not present, then NULL is passed in
100068 ** place of the corresponding WhereTerm.
100069 **
100070 ** The nEq parameter is passed the index of the index column subject to the
100071 ** range constraint. Or, equivalently, the number of equality constraints
100072 ** optimized by the proposed index scan. For example, assuming index p is
100073 ** on t1(a, b), and the SQL query is:
100074 **
100075 **   ... FROM t1 WHERE a = ? AND b > ? AND b < ? ...
100076 **
100077 ** then nEq should be passed the value 1 (as the range restricted column,
100078 ** b, is the second left-most column of the index). Or, if the query is:
100079 **
100080 **   ... FROM t1 WHERE a > ? AND a < ? ...
100081 **
100082 ** then nEq should be passed 0.
100083 **
100084 ** The returned value is an integer between 1 and 100, inclusive. A return
100085 ** value of 1 indicates that the proposed range scan is expected to visit
100086 ** approximately 1/100th (1%) of the rows selected by the nEq equality
100087 ** constraints (if any). A return value of 100 indicates that it is expected
100088 ** that the range scan will visit every row (100%) selected by the equality
100089 ** constraints.
100090 **
100091 ** In the absence of sqlite_stat2 ANALYZE data, each range inequality
100092 ** reduces the search space by 3/4ths.  Hence a single constraint (x>?)
100093 ** results in a return of 25 and a range constraint (x>? AND x<?) results
100094 ** in a return of 6.
100095 */
100096 static int whereRangeScanEst(
100097   Parse *pParse,       /* Parsing & code generating context */
100098   Index *p,            /* The index containing the range-compared column; "x" */
100099   int nEq,             /* index into p->aCol[] of the range-compared column */
100100   WhereTerm *pLower,   /* Lower bound on the range. ex: "x>123" Might be NULL */
100101   WhereTerm *pUpper,   /* Upper bound on the range. ex: "x<455" Might be NULL */
100102   int *piEst           /* OUT: Return value */
100103 ){
100104   int rc = SQLITE_OK;
100105
100106 #ifdef SQLITE_ENABLE_STAT2
100107
100108   if( nEq==0 && p->aSample ){
100109     sqlite3_value *pLowerVal = 0;
100110     sqlite3_value *pUpperVal = 0;
100111     int iEst;
100112     int iLower = 0;
100113     int iUpper = SQLITE_INDEX_SAMPLES;
100114     int roundUpUpper = 0;
100115     int roundUpLower = 0;
100116     u8 aff = p->pTable->aCol[p->aiColumn[0]].affinity;
100117
100118     if( pLower ){
100119       Expr *pExpr = pLower->pExpr->pRight;
100120       rc = valueFromExpr(pParse, pExpr, aff, &pLowerVal);
100121       assert( pLower->eOperator==WO_GT || pLower->eOperator==WO_GE );
100122       roundUpLower = (pLower->eOperator==WO_GT) ?1:0;
100123     }
100124     if( rc==SQLITE_OK && pUpper ){
100125       Expr *pExpr = pUpper->pExpr->pRight;
100126       rc = valueFromExpr(pParse, pExpr, aff, &pUpperVal);
100127       assert( pUpper->eOperator==WO_LT || pUpper->eOperator==WO_LE );
100128       roundUpUpper = (pUpper->eOperator==WO_LE) ?1:0;
100129     }
100130
100131     if( rc!=SQLITE_OK || (pLowerVal==0 && pUpperVal==0) ){
100132       sqlite3ValueFree(pLowerVal);
100133       sqlite3ValueFree(pUpperVal);
100134       goto range_est_fallback;
100135     }else if( pLowerVal==0 ){
100136       rc = whereRangeRegion(pParse, p, pUpperVal, roundUpUpper, &iUpper);
100137       if( pLower ) iLower = iUpper/2;
100138     }else if( pUpperVal==0 ){
100139       rc = whereRangeRegion(pParse, p, pLowerVal, roundUpLower, &iLower);
100140       if( pUpper ) iUpper = (iLower + SQLITE_INDEX_SAMPLES + 1)/2;
100141     }else{
100142       rc = whereRangeRegion(pParse, p, pUpperVal, roundUpUpper, &iUpper);
100143       if( rc==SQLITE_OK ){
100144         rc = whereRangeRegion(pParse, p, pLowerVal, roundUpLower, &iLower);
100145       }
100146     }
100147     WHERETRACE(("range scan regions: %d..%d\n", iLower, iUpper));
100148
100149     iEst = iUpper - iLower;
100150     testcase( iEst==SQLITE_INDEX_SAMPLES );
100151     assert( iEst<=SQLITE_INDEX_SAMPLES );
100152     if( iEst<1 ){
100153       *piEst = 50/SQLITE_INDEX_SAMPLES;
100154     }else{
100155       *piEst = (iEst*100)/SQLITE_INDEX_SAMPLES;
100156     }
100157     sqlite3ValueFree(pLowerVal);
100158     sqlite3ValueFree(pUpperVal);
100159     return rc;
100160   }
100161 range_est_fallback:
100162 #else
100163   UNUSED_PARAMETER(pParse);
100164   UNUSED_PARAMETER(p);
100165   UNUSED_PARAMETER(nEq);
100166 #endif
100167   assert( pLower || pUpper );
100168   *piEst = 100;
100169   if( pLower && (pLower->wtFlags & TERM_VNULL)==0 ) *piEst /= 4;
100170   if( pUpper ) *piEst /= 4;
100171   return rc;
100172 }
100173
100174 #ifdef SQLITE_ENABLE_STAT2
100175 /*
100176 ** Estimate the number of rows that will be returned based on
100177 ** an equality constraint x=VALUE and where that VALUE occurs in
100178 ** the histogram data.  This only works when x is the left-most
100179 ** column of an index and sqlite_stat2 histogram data is available
100180 ** for that index.  When pExpr==NULL that means the constraint is
100181 ** "x IS NULL" instead of "x=VALUE".
100182 **
100183 ** Write the estimated row count into *pnRow and return SQLITE_OK. 
100184 ** If unable to make an estimate, leave *pnRow unchanged and return
100185 ** non-zero.
100186 **
100187 ** This routine can fail if it is unable to load a collating sequence
100188 ** required for string comparison, or if unable to allocate memory
100189 ** for a UTF conversion required for comparison.  The error is stored
100190 ** in the pParse structure.
100191 */
100192 static int whereEqualScanEst(
100193   Parse *pParse,       /* Parsing & code generating context */
100194   Index *p,            /* The index whose left-most column is pTerm */
100195   Expr *pExpr,         /* Expression for VALUE in the x=VALUE constraint */
100196   double *pnRow        /* Write the revised row estimate here */
100197 ){
100198   sqlite3_value *pRhs = 0;  /* VALUE on right-hand side of pTerm */
100199   int iLower, iUpper;       /* Range of histogram regions containing pRhs */
100200   u8 aff;                   /* Column affinity */
100201   int rc;                   /* Subfunction return code */
100202   double nRowEst;           /* New estimate of the number of rows */
100203
100204   assert( p->aSample!=0 );
100205   aff = p->pTable->aCol[p->aiColumn[0]].affinity;
100206   if( pExpr ){
100207     rc = valueFromExpr(pParse, pExpr, aff, &pRhs);
100208     if( rc ) goto whereEqualScanEst_cancel;
100209   }else{
100210     pRhs = sqlite3ValueNew(pParse->db);
100211   }
100212   if( pRhs==0 ) return SQLITE_NOTFOUND;
100213   rc = whereRangeRegion(pParse, p, pRhs, 0, &iLower);
100214   if( rc ) goto whereEqualScanEst_cancel;
100215   rc = whereRangeRegion(pParse, p, pRhs, 1, &iUpper);
100216   if( rc ) goto whereEqualScanEst_cancel;
100217   WHERETRACE(("equality scan regions: %d..%d\n", iLower, iUpper));
100218   if( iLower>=iUpper ){
100219     nRowEst = p->aiRowEst[0]/(SQLITE_INDEX_SAMPLES*2);
100220     if( nRowEst<*pnRow ) *pnRow = nRowEst;
100221   }else{
100222     nRowEst = (iUpper-iLower)*p->aiRowEst[0]/SQLITE_INDEX_SAMPLES;
100223     *pnRow = nRowEst;
100224   }
100225
100226 whereEqualScanEst_cancel:
100227   sqlite3ValueFree(pRhs);
100228   return rc;
100229 }
100230 #endif /* defined(SQLITE_ENABLE_STAT2) */
100231
100232 #ifdef SQLITE_ENABLE_STAT2
100233 /*
100234 ** Estimate the number of rows that will be returned based on
100235 ** an IN constraint where the right-hand side of the IN operator
100236 ** is a list of values.  Example:
100237 **
100238 **        WHERE x IN (1,2,3,4)
100239 **
100240 ** Write the estimated row count into *pnRow and return SQLITE_OK. 
100241 ** If unable to make an estimate, leave *pnRow unchanged and return
100242 ** non-zero.
100243 **
100244 ** This routine can fail if it is unable to load a collating sequence
100245 ** required for string comparison, or if unable to allocate memory
100246 ** for a UTF conversion required for comparison.  The error is stored
100247 ** in the pParse structure.
100248 */
100249 static int whereInScanEst(
100250   Parse *pParse,       /* Parsing & code generating context */
100251   Index *p,            /* The index whose left-most column is pTerm */
100252   ExprList *pList,     /* The value list on the RHS of "x IN (v1,v2,v3,...)" */
100253   double *pnRow        /* Write the revised row estimate here */
100254 ){
100255   sqlite3_value *pVal = 0;  /* One value from list */
100256   int iLower, iUpper;       /* Range of histogram regions containing pRhs */
100257   u8 aff;                   /* Column affinity */
100258   int rc = SQLITE_OK;       /* Subfunction return code */
100259   double nRowEst;           /* New estimate of the number of rows */
100260   int nSpan = 0;            /* Number of histogram regions spanned */
100261   int nSingle = 0;          /* Histogram regions hit by a single value */
100262   int nNotFound = 0;        /* Count of values that are not constants */
100263   int i;                               /* Loop counter */
100264   u8 aSpan[SQLITE_INDEX_SAMPLES+1];    /* Histogram regions that are spanned */
100265   u8 aSingle[SQLITE_INDEX_SAMPLES+1];  /* Histogram regions hit once */
100266
100267   assert( p->aSample!=0 );
100268   aff = p->pTable->aCol[p->aiColumn[0]].affinity;
100269   memset(aSpan, 0, sizeof(aSpan));
100270   memset(aSingle, 0, sizeof(aSingle));
100271   for(i=0; i<pList->nExpr; i++){
100272     sqlite3ValueFree(pVal);
100273     rc = valueFromExpr(pParse, pList->a[i].pExpr, aff, &pVal);
100274     if( rc ) break;
100275     if( pVal==0 || sqlite3_value_type(pVal)==SQLITE_NULL ){
100276       nNotFound++;
100277       continue;
100278     }
100279     rc = whereRangeRegion(pParse, p, pVal, 0, &iLower);
100280     if( rc ) break;
100281     rc = whereRangeRegion(pParse, p, pVal, 1, &iUpper);
100282     if( rc ) break;
100283     if( iLower>=iUpper ){
100284       aSingle[iLower] = 1;
100285     }else{
100286       assert( iLower>=0 && iUpper<=SQLITE_INDEX_SAMPLES );
100287       while( iLower<iUpper ) aSpan[iLower++] = 1;
100288     }
100289   }
100290   if( rc==SQLITE_OK ){
100291     for(i=nSpan=0; i<=SQLITE_INDEX_SAMPLES; i++){
100292       if( aSpan[i] ){
100293         nSpan++;
100294       }else if( aSingle[i] ){
100295         nSingle++;
100296       }
100297     }
100298     nRowEst = (nSpan*2+nSingle)*p->aiRowEst[0]/(2*SQLITE_INDEX_SAMPLES)
100299                + nNotFound*p->aiRowEst[1];
100300     if( nRowEst > p->aiRowEst[0] ) nRowEst = p->aiRowEst[0];
100301     *pnRow = nRowEst;
100302     WHERETRACE(("IN row estimate: nSpan=%d, nSingle=%d, nNotFound=%d, est=%g\n",
100303                  nSpan, nSingle, nNotFound, nRowEst));
100304   }
100305   sqlite3ValueFree(pVal);
100306   return rc;
100307 }
100308 #endif /* defined(SQLITE_ENABLE_STAT2) */
100309
100310
100311 /*
100312 ** Find the best query plan for accessing a particular table.  Write the
100313 ** best query plan and its cost into the WhereCost object supplied as the
100314 ** last parameter.
100315 **
100316 ** The lowest cost plan wins.  The cost is an estimate of the amount of
100317 ** CPU and disk I/O needed to process the requested result.
100318 ** Factors that influence cost include:
100319 **
100320 **    *  The estimated number of rows that will be retrieved.  (The
100321 **       fewer the better.)
100322 **
100323 **    *  Whether or not sorting must occur.
100324 **
100325 **    *  Whether or not there must be separate lookups in the
100326 **       index and in the main table.
100327 **
100328 ** If there was an INDEXED BY clause (pSrc->pIndex) attached to the table in
100329 ** the SQL statement, then this function only considers plans using the 
100330 ** named index. If no such plan is found, then the returned cost is
100331 ** SQLITE_BIG_DBL. If a plan is found that uses the named index, 
100332 ** then the cost is calculated in the usual way.
100333 **
100334 ** If a NOT INDEXED clause (pSrc->notIndexed!=0) was attached to the table 
100335 ** in the SELECT statement, then no indexes are considered. However, the 
100336 ** selected plan may still take advantage of the built-in rowid primary key
100337 ** index.
100338 */
100339 static void bestBtreeIndex(
100340   Parse *pParse,              /* The parsing context */
100341   WhereClause *pWC,           /* The WHERE clause */
100342   struct SrcList_item *pSrc,  /* The FROM clause term to search */
100343   Bitmask notReady,           /* Mask of cursors not available for indexing */
100344   Bitmask notValid,           /* Cursors not available for any purpose */
100345   ExprList *pOrderBy,         /* The ORDER BY clause */
100346   WhereCost *pCost            /* Lowest cost query plan */
100347 ){
100348   int iCur = pSrc->iCursor;   /* The cursor of the table to be accessed */
100349   Index *pProbe;              /* An index we are evaluating */
100350   Index *pIdx;                /* Copy of pProbe, or zero for IPK index */
100351   int eqTermMask;             /* Current mask of valid equality operators */
100352   int idxEqTermMask;          /* Index mask of valid equality operators */
100353   Index sPk;                  /* A fake index object for the primary key */
100354   unsigned int aiRowEstPk[2]; /* The aiRowEst[] value for the sPk index */
100355   int aiColumnPk = -1;        /* The aColumn[] value for the sPk index */
100356   int wsFlagMask;             /* Allowed flags in pCost->plan.wsFlag */
100357
100358   /* Initialize the cost to a worst-case value */
100359   memset(pCost, 0, sizeof(*pCost));
100360   pCost->rCost = SQLITE_BIG_DBL;
100361
100362   /* If the pSrc table is the right table of a LEFT JOIN then we may not
100363   ** use an index to satisfy IS NULL constraints on that table.  This is
100364   ** because columns might end up being NULL if the table does not match -
100365   ** a circumstance which the index cannot help us discover.  Ticket #2177.
100366   */
100367   if( pSrc->jointype & JT_LEFT ){
100368     idxEqTermMask = WO_EQ|WO_IN;
100369   }else{
100370     idxEqTermMask = WO_EQ|WO_IN|WO_ISNULL;
100371   }
100372
100373   if( pSrc->pIndex ){
100374     /* An INDEXED BY clause specifies a particular index to use */
100375     pIdx = pProbe = pSrc->pIndex;
100376     wsFlagMask = ~(WHERE_ROWID_EQ|WHERE_ROWID_RANGE);
100377     eqTermMask = idxEqTermMask;
100378   }else{
100379     /* There is no INDEXED BY clause.  Create a fake Index object in local
100380     ** variable sPk to represent the rowid primary key index.  Make this
100381     ** fake index the first in a chain of Index objects with all of the real
100382     ** indices to follow */
100383     Index *pFirst;                  /* First of real indices on the table */
100384     memset(&sPk, 0, sizeof(Index));
100385     sPk.nColumn = 1;
100386     sPk.aiColumn = &aiColumnPk;
100387     sPk.aiRowEst = aiRowEstPk;
100388     sPk.onError = OE_Replace;
100389     sPk.pTable = pSrc->pTab;
100390     aiRowEstPk[0] = pSrc->pTab->nRowEst;
100391     aiRowEstPk[1] = 1;
100392     pFirst = pSrc->pTab->pIndex;
100393     if( pSrc->notIndexed==0 ){
100394       /* The real indices of the table are only considered if the
100395       ** NOT INDEXED qualifier is omitted from the FROM clause */
100396       sPk.pNext = pFirst;
100397     }
100398     pProbe = &sPk;
100399     wsFlagMask = ~(
100400         WHERE_COLUMN_IN|WHERE_COLUMN_EQ|WHERE_COLUMN_NULL|WHERE_COLUMN_RANGE
100401     );
100402     eqTermMask = WO_EQ|WO_IN;
100403     pIdx = 0;
100404   }
100405
100406   /* Loop over all indices looking for the best one to use
100407   */
100408   for(; pProbe; pIdx=pProbe=pProbe->pNext){
100409     const unsigned int * const aiRowEst = pProbe->aiRowEst;
100410     double cost;                /* Cost of using pProbe */
100411     double nRow;                /* Estimated number of rows in result set */
100412     double log10N;              /* base-10 logarithm of nRow (inexact) */
100413     int rev;                    /* True to scan in reverse order */
100414     int wsFlags = 0;
100415     Bitmask used = 0;
100416
100417     /* The following variables are populated based on the properties of
100418     ** index being evaluated. They are then used to determine the expected
100419     ** cost and number of rows returned.
100420     **
100421     **  nEq: 
100422     **    Number of equality terms that can be implemented using the index.
100423     **    In other words, the number of initial fields in the index that
100424     **    are used in == or IN or NOT NULL constraints of the WHERE clause.
100425     **
100426     **  nInMul:  
100427     **    The "in-multiplier". This is an estimate of how many seek operations 
100428     **    SQLite must perform on the index in question. For example, if the 
100429     **    WHERE clause is:
100430     **
100431     **      WHERE a IN (1, 2, 3) AND b IN (4, 5, 6)
100432     **
100433     **    SQLite must perform 9 lookups on an index on (a, b), so nInMul is 
100434     **    set to 9. Given the same schema and either of the following WHERE 
100435     **    clauses:
100436     **
100437     **      WHERE a =  1
100438     **      WHERE a >= 2
100439     **
100440     **    nInMul is set to 1.
100441     **
100442     **    If there exists a WHERE term of the form "x IN (SELECT ...)", then 
100443     **    the sub-select is assumed to return 25 rows for the purposes of 
100444     **    determining nInMul.
100445     **
100446     **  bInEst:  
100447     **    Set to true if there was at least one "x IN (SELECT ...)" term used 
100448     **    in determining the value of nInMul.  Note that the RHS of the
100449     **    IN operator must be a SELECT, not a value list, for this variable
100450     **    to be true.
100451     **
100452     **  estBound:
100453     **    An estimate on the amount of the table that must be searched.  A
100454     **    value of 100 means the entire table is searched.  Range constraints
100455     **    might reduce this to a value less than 100 to indicate that only
100456     **    a fraction of the table needs searching.  In the absence of
100457     **    sqlite_stat2 ANALYZE data, a single inequality reduces the search
100458     **    space to 1/4rd its original size.  So an x>? constraint reduces
100459     **    estBound to 25.  Two constraints (x>? AND x<?) reduce estBound to 6.
100460     **
100461     **  bSort:   
100462     **    Boolean. True if there is an ORDER BY clause that will require an 
100463     **    external sort (i.e. scanning the index being evaluated will not 
100464     **    correctly order records).
100465     **
100466     **  bLookup: 
100467     **    Boolean. True if a table lookup is required for each index entry
100468     **    visited.  In other words, true if this is not a covering index.
100469     **    This is always false for the rowid primary key index of a table.
100470     **    For other indexes, it is true unless all the columns of the table
100471     **    used by the SELECT statement are present in the index (such an
100472     **    index is sometimes described as a covering index).
100473     **    For example, given the index on (a, b), the second of the following 
100474     **    two queries requires table b-tree lookups in order to find the value
100475     **    of column c, but the first does not because columns a and b are
100476     **    both available in the index.
100477     **
100478     **             SELECT a, b    FROM tbl WHERE a = 1;
100479     **             SELECT a, b, c FROM tbl WHERE a = 1;
100480     */
100481     int nEq;                      /* Number of == or IN terms matching index */
100482     int bInEst = 0;               /* True if "x IN (SELECT...)" seen */
100483     int nInMul = 1;               /* Number of distinct equalities to lookup */
100484     int estBound = 100;           /* Estimated reduction in search space */
100485     int nBound = 0;               /* Number of range constraints seen */
100486     int bSort = 0;                /* True if external sort required */
100487     int bLookup = 0;              /* True if not a covering index */
100488     WhereTerm *pTerm;             /* A single term of the WHERE clause */
100489 #ifdef SQLITE_ENABLE_STAT2
100490     WhereTerm *pFirstTerm = 0;    /* First term matching the index */
100491 #endif
100492
100493     /* Determine the values of nEq and nInMul */
100494     for(nEq=0; nEq<pProbe->nColumn; nEq++){
100495       int j = pProbe->aiColumn[nEq];
100496       pTerm = findTerm(pWC, iCur, j, notReady, eqTermMask, pIdx);
100497       if( pTerm==0 ) break;
100498       wsFlags |= (WHERE_COLUMN_EQ|WHERE_ROWID_EQ);
100499       if( pTerm->eOperator & WO_IN ){
100500         Expr *pExpr = pTerm->pExpr;
100501         wsFlags |= WHERE_COLUMN_IN;
100502         if( ExprHasProperty(pExpr, EP_xIsSelect) ){
100503           /* "x IN (SELECT ...)":  Assume the SELECT returns 25 rows */
100504           nInMul *= 25;
100505           bInEst = 1;
100506         }else if( ALWAYS(pExpr->x.pList && pExpr->x.pList->nExpr) ){
100507           /* "x IN (value, value, ...)" */
100508           nInMul *= pExpr->x.pList->nExpr;
100509         }
100510       }else if( pTerm->eOperator & WO_ISNULL ){
100511         wsFlags |= WHERE_COLUMN_NULL;
100512       }
100513 #ifdef SQLITE_ENABLE_STAT2
100514       if( nEq==0 && pProbe->aSample ) pFirstTerm = pTerm;
100515 #endif
100516       used |= pTerm->prereqRight;
100517     }
100518
100519     /* Determine the value of estBound. */
100520     if( nEq<pProbe->nColumn && pProbe->bUnordered==0 ){
100521       int j = pProbe->aiColumn[nEq];
100522       if( findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE|WO_GT|WO_GE, pIdx) ){
100523         WhereTerm *pTop = findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE, pIdx);
100524         WhereTerm *pBtm = findTerm(pWC, iCur, j, notReady, WO_GT|WO_GE, pIdx);
100525         whereRangeScanEst(pParse, pProbe, nEq, pBtm, pTop, &estBound);
100526         if( pTop ){
100527           nBound = 1;
100528           wsFlags |= WHERE_TOP_LIMIT;
100529           used |= pTop->prereqRight;
100530         }
100531         if( pBtm ){
100532           nBound++;
100533           wsFlags |= WHERE_BTM_LIMIT;
100534           used |= pBtm->prereqRight;
100535         }
100536         wsFlags |= (WHERE_COLUMN_RANGE|WHERE_ROWID_RANGE);
100537       }
100538     }else if( pProbe->onError!=OE_None ){
100539       testcase( wsFlags & WHERE_COLUMN_IN );
100540       testcase( wsFlags & WHERE_COLUMN_NULL );
100541       if( (wsFlags & (WHERE_COLUMN_IN|WHERE_COLUMN_NULL))==0 ){
100542         wsFlags |= WHERE_UNIQUE;
100543       }
100544     }
100545
100546     /* If there is an ORDER BY clause and the index being considered will
100547     ** naturally scan rows in the required order, set the appropriate flags
100548     ** in wsFlags. Otherwise, if there is an ORDER BY clause but the index
100549     ** will scan rows in a different order, set the bSort variable.  */
100550     if( pOrderBy ){
100551       if( (wsFlags & WHERE_COLUMN_IN)==0
100552         && pProbe->bUnordered==0
100553         && isSortingIndex(pParse, pWC->pMaskSet, pProbe, iCur, pOrderBy,
100554                           nEq, wsFlags, &rev)
100555       ){
100556         wsFlags |= WHERE_ROWID_RANGE|WHERE_COLUMN_RANGE|WHERE_ORDERBY;
100557         wsFlags |= (rev ? WHERE_REVERSE : 0);
100558       }else{
100559         bSort = 1;
100560       }
100561     }
100562
100563     /* If currently calculating the cost of using an index (not the IPK
100564     ** index), determine if all required column data may be obtained without 
100565     ** using the main table (i.e. if the index is a covering
100566     ** index for this query). If it is, set the WHERE_IDX_ONLY flag in
100567     ** wsFlags. Otherwise, set the bLookup variable to true.  */
100568     if( pIdx && wsFlags ){
100569       Bitmask m = pSrc->colUsed;
100570       int j;
100571       for(j=0; j<pIdx->nColumn; j++){
100572         int x = pIdx->aiColumn[j];
100573         if( x<BMS-1 ){
100574           m &= ~(((Bitmask)1)<<x);
100575         }
100576       }
100577       if( m==0 ){
100578         wsFlags |= WHERE_IDX_ONLY;
100579       }else{
100580         bLookup = 1;
100581       }
100582     }
100583
100584     /*
100585     ** Estimate the number of rows of output.  For an "x IN (SELECT...)"
100586     ** constraint, do not let the estimate exceed half the rows in the table.
100587     */
100588     nRow = (double)(aiRowEst[nEq] * nInMul);
100589     if( bInEst && nRow*2>aiRowEst[0] ){
100590       nRow = aiRowEst[0]/2;
100591       nInMul = (int)(nRow / aiRowEst[nEq]);
100592     }
100593
100594 #ifdef SQLITE_ENABLE_STAT2
100595     /* If the constraint is of the form x=VALUE and histogram
100596     ** data is available for column x, then it might be possible
100597     ** to get a better estimate on the number of rows based on
100598     ** VALUE and how common that value is according to the histogram.
100599     */
100600     if( nRow>(double)1 && nEq==1 && pFirstTerm!=0 ){
100601       if( pFirstTerm->eOperator & (WO_EQ|WO_ISNULL) ){
100602         testcase( pFirstTerm->eOperator==WO_EQ );
100603         testcase( pFirstTerm->eOperator==WO_ISNULL );
100604         whereEqualScanEst(pParse, pProbe, pFirstTerm->pExpr->pRight, &nRow);
100605       }else if( pFirstTerm->eOperator==WO_IN && bInEst==0 ){
100606         whereInScanEst(pParse, pProbe, pFirstTerm->pExpr->x.pList, &nRow);
100607       }
100608     }
100609 #endif /* SQLITE_ENABLE_STAT2 */
100610
100611     /* Adjust the number of output rows and downward to reflect rows
100612     ** that are excluded by range constraints.
100613     */
100614     nRow = (nRow * (double)estBound) / (double)100;
100615     if( nRow<1 ) nRow = 1;
100616
100617     /* Experiments run on real SQLite databases show that the time needed
100618     ** to do a binary search to locate a row in a table or index is roughly
100619     ** log10(N) times the time to move from one row to the next row within
100620     ** a table or index.  The actual times can vary, with the size of
100621     ** records being an important factor.  Both moves and searches are
100622     ** slower with larger records, presumably because fewer records fit
100623     ** on one page and hence more pages have to be fetched.
100624     **
100625     ** The ANALYZE command and the sqlite_stat1 and sqlite_stat2 tables do
100626     ** not give us data on the relative sizes of table and index records.
100627     ** So this computation assumes table records are about twice as big
100628     ** as index records
100629     */
100630     if( (wsFlags & WHERE_NOT_FULLSCAN)==0 ){
100631       /* The cost of a full table scan is a number of move operations equal
100632       ** to the number of rows in the table.
100633       **
100634       ** We add an additional 4x penalty to full table scans.  This causes
100635       ** the cost function to err on the side of choosing an index over
100636       ** choosing a full scan.  This 4x full-scan penalty is an arguable
100637       ** decision and one which we expect to revisit in the future.  But
100638       ** it seems to be working well enough at the moment.
100639       */
100640       cost = aiRowEst[0]*4;
100641     }else{
100642       log10N = estLog(aiRowEst[0]);
100643       cost = nRow;
100644       if( pIdx ){
100645         if( bLookup ){
100646           /* For an index lookup followed by a table lookup:
100647           **    nInMul index searches to find the start of each index range
100648           **  + nRow steps through the index
100649           **  + nRow table searches to lookup the table entry using the rowid
100650           */
100651           cost += (nInMul + nRow)*log10N;
100652         }else{
100653           /* For a covering index:
100654           **     nInMul index searches to find the initial entry 
100655           **   + nRow steps through the index
100656           */
100657           cost += nInMul*log10N;
100658         }
100659       }else{
100660         /* For a rowid primary key lookup:
100661         **    nInMult table searches to find the initial entry for each range
100662         **  + nRow steps through the table
100663         */
100664         cost += nInMul*log10N;
100665       }
100666     }
100667
100668     /* Add in the estimated cost of sorting the result.  Actual experimental
100669     ** measurements of sorting performance in SQLite show that sorting time
100670     ** adds C*N*log10(N) to the cost, where N is the number of rows to be 
100671     ** sorted and C is a factor between 1.95 and 4.3.  We will split the
100672     ** difference and select C of 3.0.
100673     */
100674     if( bSort ){
100675       cost += nRow*estLog(nRow)*3;
100676     }
100677
100678     /**** Cost of using this index has now been computed ****/
100679
100680     /* If there are additional constraints on this table that cannot
100681     ** be used with the current index, but which might lower the number
100682     ** of output rows, adjust the nRow value accordingly.  This only 
100683     ** matters if the current index is the least costly, so do not bother
100684     ** with this step if we already know this index will not be chosen.
100685     ** Also, never reduce the output row count below 2 using this step.
100686     **
100687     ** It is critical that the notValid mask be used here instead of
100688     ** the notReady mask.  When computing an "optimal" index, the notReady
100689     ** mask will only have one bit set - the bit for the current table.
100690     ** The notValid mask, on the other hand, always has all bits set for
100691     ** tables that are not in outer loops.  If notReady is used here instead
100692     ** of notValid, then a optimal index that depends on inner joins loops
100693     ** might be selected even when there exists an optimal index that has
100694     ** no such dependency.
100695     */
100696     if( nRow>2 && cost<=pCost->rCost ){
100697       int k;                       /* Loop counter */
100698       int nSkipEq = nEq;           /* Number of == constraints to skip */
100699       int nSkipRange = nBound;     /* Number of < constraints to skip */
100700       Bitmask thisTab;             /* Bitmap for pSrc */
100701
100702       thisTab = getMask(pWC->pMaskSet, iCur);
100703       for(pTerm=pWC->a, k=pWC->nTerm; nRow>2 && k; k--, pTerm++){
100704         if( pTerm->wtFlags & TERM_VIRTUAL ) continue;
100705         if( (pTerm->prereqAll & notValid)!=thisTab ) continue;
100706         if( pTerm->eOperator & (WO_EQ|WO_IN|WO_ISNULL) ){
100707           if( nSkipEq ){
100708             /* Ignore the first nEq equality matches since the index
100709             ** has already accounted for these */
100710             nSkipEq--;
100711           }else{
100712             /* Assume each additional equality match reduces the result
100713             ** set size by a factor of 10 */
100714             nRow /= 10;
100715           }
100716         }else if( pTerm->eOperator & (WO_LT|WO_LE|WO_GT|WO_GE) ){
100717           if( nSkipRange ){
100718             /* Ignore the first nSkipRange range constraints since the index
100719             ** has already accounted for these */
100720             nSkipRange--;
100721           }else{
100722             /* Assume each additional range constraint reduces the result
100723             ** set size by a factor of 3.  Indexed range constraints reduce
100724             ** the search space by a larger factor: 4.  We make indexed range
100725             ** more selective intentionally because of the subjective 
100726             ** observation that indexed range constraints really are more
100727             ** selective in practice, on average. */
100728             nRow /= 3;
100729           }
100730         }else if( pTerm->eOperator!=WO_NOOP ){
100731           /* Any other expression lowers the output row count by half */
100732           nRow /= 2;
100733         }
100734       }
100735       if( nRow<2 ) nRow = 2;
100736     }
100737
100738
100739     WHERETRACE((
100740       "%s(%s): nEq=%d nInMul=%d estBound=%d bSort=%d bLookup=%d wsFlags=0x%x\n"
100741       "         notReady=0x%llx log10N=%.1f nRow=%.1f cost=%.1f used=0x%llx\n",
100742       pSrc->pTab->zName, (pIdx ? pIdx->zName : "ipk"), 
100743       nEq, nInMul, estBound, bSort, bLookup, wsFlags,
100744       notReady, log10N, nRow, cost, used
100745     ));
100746
100747     /* If this index is the best we have seen so far, then record this
100748     ** index and its cost in the pCost structure.
100749     */
100750     if( (!pIdx || wsFlags)
100751      && (cost<pCost->rCost || (cost<=pCost->rCost && nRow<pCost->plan.nRow))
100752     ){
100753       pCost->rCost = cost;
100754       pCost->used = used;
100755       pCost->plan.nRow = nRow;
100756       pCost->plan.wsFlags = (wsFlags&wsFlagMask);
100757       pCost->plan.nEq = nEq;
100758       pCost->plan.u.pIdx = pIdx;
100759     }
100760
100761     /* If there was an INDEXED BY clause, then only that one index is
100762     ** considered. */
100763     if( pSrc->pIndex ) break;
100764
100765     /* Reset masks for the next index in the loop */
100766     wsFlagMask = ~(WHERE_ROWID_EQ|WHERE_ROWID_RANGE);
100767     eqTermMask = idxEqTermMask;
100768   }
100769
100770   /* If there is no ORDER BY clause and the SQLITE_ReverseOrder flag
100771   ** is set, then reverse the order that the index will be scanned
100772   ** in. This is used for application testing, to help find cases
100773   ** where application behaviour depends on the (undefined) order that
100774   ** SQLite outputs rows in in the absence of an ORDER BY clause.  */
100775   if( !pOrderBy && pParse->db->flags & SQLITE_ReverseOrder ){
100776     pCost->plan.wsFlags |= WHERE_REVERSE;
100777   }
100778
100779   assert( pOrderBy || (pCost->plan.wsFlags&WHERE_ORDERBY)==0 );
100780   assert( pCost->plan.u.pIdx==0 || (pCost->plan.wsFlags&WHERE_ROWID_EQ)==0 );
100781   assert( pSrc->pIndex==0 
100782        || pCost->plan.u.pIdx==0 
100783        || pCost->plan.u.pIdx==pSrc->pIndex 
100784   );
100785
100786   WHERETRACE(("best index is: %s\n", 
100787     ((pCost->plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ? "none" : 
100788          pCost->plan.u.pIdx ? pCost->plan.u.pIdx->zName : "ipk")
100789   ));
100790   
100791   bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
100792   bestAutomaticIndex(pParse, pWC, pSrc, notReady, pCost);
100793   pCost->plan.wsFlags |= eqTermMask;
100794 }
100795
100796 /*
100797 ** Find the query plan for accessing table pSrc->pTab. Write the
100798 ** best query plan and its cost into the WhereCost object supplied 
100799 ** as the last parameter. This function may calculate the cost of
100800 ** both real and virtual table scans.
100801 */
100802 static void bestIndex(
100803   Parse *pParse,              /* The parsing context */
100804   WhereClause *pWC,           /* The WHERE clause */
100805   struct SrcList_item *pSrc,  /* The FROM clause term to search */
100806   Bitmask notReady,           /* Mask of cursors not available for indexing */
100807   Bitmask notValid,           /* Cursors not available for any purpose */
100808   ExprList *pOrderBy,         /* The ORDER BY clause */
100809   WhereCost *pCost            /* Lowest cost query plan */
100810 ){
100811 #ifndef SQLITE_OMIT_VIRTUALTABLE
100812   if( IsVirtual(pSrc->pTab) ){
100813     sqlite3_index_info *p = 0;
100814     bestVirtualIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost,&p);
100815     if( p->needToFreeIdxStr ){
100816       sqlite3_free(p->idxStr);
100817     }
100818     sqlite3DbFree(pParse->db, p);
100819   }else
100820 #endif
100821   {
100822     bestBtreeIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
100823   }
100824 }
100825
100826 /*
100827 ** Disable a term in the WHERE clause.  Except, do not disable the term
100828 ** if it controls a LEFT OUTER JOIN and it did not originate in the ON
100829 ** or USING clause of that join.
100830 **
100831 ** Consider the term t2.z='ok' in the following queries:
100832 **
100833 **   (1)  SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x WHERE t2.z='ok'
100834 **   (2)  SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x AND t2.z='ok'
100835 **   (3)  SELECT * FROM t1, t2 WHERE t1.a=t2.x AND t2.z='ok'
100836 **
100837 ** The t2.z='ok' is disabled in the in (2) because it originates
100838 ** in the ON clause.  The term is disabled in (3) because it is not part
100839 ** of a LEFT OUTER JOIN.  In (1), the term is not disabled.
100840 **
100841 ** IMPLEMENTATION-OF: R-24597-58655 No tests are done for terms that are
100842 ** completely satisfied by indices.
100843 **
100844 ** Disabling a term causes that term to not be tested in the inner loop
100845 ** of the join.  Disabling is an optimization.  When terms are satisfied
100846 ** by indices, we disable them to prevent redundant tests in the inner
100847 ** loop.  We would get the correct results if nothing were ever disabled,
100848 ** but joins might run a little slower.  The trick is to disable as much
100849 ** as we can without disabling too much.  If we disabled in (1), we'd get
100850 ** the wrong answer.  See ticket #813.
100851 */
100852 static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){
100853   if( pTerm
100854       && (pTerm->wtFlags & TERM_CODED)==0
100855       && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin))
100856   ){
100857     pTerm->wtFlags |= TERM_CODED;
100858     if( pTerm->iParent>=0 ){
100859       WhereTerm *pOther = &pTerm->pWC->a[pTerm->iParent];
100860       if( (--pOther->nChild)==0 ){
100861         disableTerm(pLevel, pOther);
100862       }
100863     }
100864   }
100865 }
100866
100867 /*
100868 ** Code an OP_Affinity opcode to apply the column affinity string zAff
100869 ** to the n registers starting at base. 
100870 **
100871 ** As an optimization, SQLITE_AFF_NONE entries (which are no-ops) at the
100872 ** beginning and end of zAff are ignored.  If all entries in zAff are
100873 ** SQLITE_AFF_NONE, then no code gets generated.
100874 **
100875 ** This routine makes its own copy of zAff so that the caller is free
100876 ** to modify zAff after this routine returns.
100877 */
100878 static void codeApplyAffinity(Parse *pParse, int base, int n, char *zAff){
100879   Vdbe *v = pParse->pVdbe;
100880   if( zAff==0 ){
100881     assert( pParse->db->mallocFailed );
100882     return;
100883   }
100884   assert( v!=0 );
100885
100886   /* Adjust base and n to skip over SQLITE_AFF_NONE entries at the beginning
100887   ** and end of the affinity string.
100888   */
100889   while( n>0 && zAff[0]==SQLITE_AFF_NONE ){
100890     n--;
100891     base++;
100892     zAff++;
100893   }
100894   while( n>1 && zAff[n-1]==SQLITE_AFF_NONE ){
100895     n--;
100896   }
100897
100898   /* Code the OP_Affinity opcode if there is anything left to do. */
100899   if( n>0 ){
100900     sqlite3VdbeAddOp2(v, OP_Affinity, base, n);
100901     sqlite3VdbeChangeP4(v, -1, zAff, n);
100902     sqlite3ExprCacheAffinityChange(pParse, base, n);
100903   }
100904 }
100905
100906
100907 /*
100908 ** Generate code for a single equality term of the WHERE clause.  An equality
100909 ** term can be either X=expr or X IN (...).   pTerm is the term to be 
100910 ** coded.
100911 **
100912 ** The current value for the constraint is left in register iReg.
100913 **
100914 ** For a constraint of the form X=expr, the expression is evaluated and its
100915 ** result is left on the stack.  For constraints of the form X IN (...)
100916 ** this routine sets up a loop that will iterate over all values of X.
100917 */
100918 static int codeEqualityTerm(
100919   Parse *pParse,      /* The parsing context */
100920   WhereTerm *pTerm,   /* The term of the WHERE clause to be coded */
100921   WhereLevel *pLevel, /* When level of the FROM clause we are working on */
100922   int iTarget         /* Attempt to leave results in this register */
100923 ){
100924   Expr *pX = pTerm->pExpr;
100925   Vdbe *v = pParse->pVdbe;
100926   int iReg;                  /* Register holding results */
100927
100928   assert( iTarget>0 );
100929   if( pX->op==TK_EQ ){
100930     iReg = sqlite3ExprCodeTarget(pParse, pX->pRight, iTarget);
100931   }else if( pX->op==TK_ISNULL ){
100932     iReg = iTarget;
100933     sqlite3VdbeAddOp2(v, OP_Null, 0, iReg);
100934 #ifndef SQLITE_OMIT_SUBQUERY
100935   }else{
100936     int eType;
100937     int iTab;
100938     struct InLoop *pIn;
100939
100940     assert( pX->op==TK_IN );
100941     iReg = iTarget;
100942     eType = sqlite3FindInIndex(pParse, pX, 0);
100943     iTab = pX->iTable;
100944     sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0);
100945     assert( pLevel->plan.wsFlags & WHERE_IN_ABLE );
100946     if( pLevel->u.in.nIn==0 ){
100947       pLevel->addrNxt = sqlite3VdbeMakeLabel(v);
100948     }
100949     pLevel->u.in.nIn++;
100950     pLevel->u.in.aInLoop =
100951        sqlite3DbReallocOrFree(pParse->db, pLevel->u.in.aInLoop,
100952                               sizeof(pLevel->u.in.aInLoop[0])*pLevel->u.in.nIn);
100953     pIn = pLevel->u.in.aInLoop;
100954     if( pIn ){
100955       pIn += pLevel->u.in.nIn - 1;
100956       pIn->iCur = iTab;
100957       if( eType==IN_INDEX_ROWID ){
100958         pIn->addrInTop = sqlite3VdbeAddOp2(v, OP_Rowid, iTab, iReg);
100959       }else{
100960         pIn->addrInTop = sqlite3VdbeAddOp3(v, OP_Column, iTab, 0, iReg);
100961       }
100962       sqlite3VdbeAddOp1(v, OP_IsNull, iReg);
100963     }else{
100964       pLevel->u.in.nIn = 0;
100965     }
100966 #endif
100967   }
100968   disableTerm(pLevel, pTerm);
100969   return iReg;
100970 }
100971
100972 /*
100973 ** Generate code that will evaluate all == and IN constraints for an
100974 ** index.
100975 **
100976 ** For example, consider table t1(a,b,c,d,e,f) with index i1(a,b,c).
100977 ** Suppose the WHERE clause is this:  a==5 AND b IN (1,2,3) AND c>5 AND c<10
100978 ** The index has as many as three equality constraints, but in this
100979 ** example, the third "c" value is an inequality.  So only two 
100980 ** constraints are coded.  This routine will generate code to evaluate
100981 ** a==5 and b IN (1,2,3).  The current values for a and b will be stored
100982 ** in consecutive registers and the index of the first register is returned.
100983 **
100984 ** In the example above nEq==2.  But this subroutine works for any value
100985 ** of nEq including 0.  If nEq==0, this routine is nearly a no-op.
100986 ** The only thing it does is allocate the pLevel->iMem memory cell and
100987 ** compute the affinity string.
100988 **
100989 ** This routine always allocates at least one memory cell and returns
100990 ** the index of that memory cell. The code that
100991 ** calls this routine will use that memory cell to store the termination
100992 ** key value of the loop.  If one or more IN operators appear, then
100993 ** this routine allocates an additional nEq memory cells for internal
100994 ** use.
100995 **
100996 ** Before returning, *pzAff is set to point to a buffer containing a
100997 ** copy of the column affinity string of the index allocated using
100998 ** sqlite3DbMalloc(). Except, entries in the copy of the string associated
100999 ** with equality constraints that use NONE affinity are set to
101000 ** SQLITE_AFF_NONE. This is to deal with SQL such as the following:
101001 **
101002 **   CREATE TABLE t1(a TEXT PRIMARY KEY, b);
101003 **   SELECT ... FROM t1 AS t2, t1 WHERE t1.a = t2.b;
101004 **
101005 ** In the example above, the index on t1(a) has TEXT affinity. But since
101006 ** the right hand side of the equality constraint (t2.b) has NONE affinity,
101007 ** no conversion should be attempted before using a t2.b value as part of
101008 ** a key to search the index. Hence the first byte in the returned affinity
101009 ** string in this example would be set to SQLITE_AFF_NONE.
101010 */
101011 static int codeAllEqualityTerms(
101012   Parse *pParse,        /* Parsing context */
101013   WhereLevel *pLevel,   /* Which nested loop of the FROM we are coding */
101014   WhereClause *pWC,     /* The WHERE clause */
101015   Bitmask notReady,     /* Which parts of FROM have not yet been coded */
101016   int nExtraReg,        /* Number of extra registers to allocate */
101017   char **pzAff          /* OUT: Set to point to affinity string */
101018 ){
101019   int nEq = pLevel->plan.nEq;   /* The number of == or IN constraints to code */
101020   Vdbe *v = pParse->pVdbe;      /* The vm under construction */
101021   Index *pIdx;                  /* The index being used for this loop */
101022   int iCur = pLevel->iTabCur;   /* The cursor of the table */
101023   WhereTerm *pTerm;             /* A single constraint term */
101024   int j;                        /* Loop counter */
101025   int regBase;                  /* Base register */
101026   int nReg;                     /* Number of registers to allocate */
101027   char *zAff;                   /* Affinity string to return */
101028
101029   /* This module is only called on query plans that use an index. */
101030   assert( pLevel->plan.wsFlags & WHERE_INDEXED );
101031   pIdx = pLevel->plan.u.pIdx;
101032
101033   /* Figure out how many memory cells we will need then allocate them.
101034   */
101035   regBase = pParse->nMem + 1;
101036   nReg = pLevel->plan.nEq + nExtraReg;
101037   pParse->nMem += nReg;
101038
101039   zAff = sqlite3DbStrDup(pParse->db, sqlite3IndexAffinityStr(v, pIdx));
101040   if( !zAff ){
101041     pParse->db->mallocFailed = 1;
101042   }
101043
101044   /* Evaluate the equality constraints
101045   */
101046   assert( pIdx->nColumn>=nEq );
101047   for(j=0; j<nEq; j++){
101048     int r1;
101049     int k = pIdx->aiColumn[j];
101050     pTerm = findTerm(pWC, iCur, k, notReady, pLevel->plan.wsFlags, pIdx);
101051     if( NEVER(pTerm==0) ) break;
101052     /* The following true for indices with redundant columns. 
101053     ** Ex: CREATE INDEX i1 ON t1(a,b,a); SELECT * FROM t1 WHERE a=0 AND b=0; */
101054     testcase( (pTerm->wtFlags & TERM_CODED)!=0 );
101055     testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
101056     r1 = codeEqualityTerm(pParse, pTerm, pLevel, regBase+j);
101057     if( r1!=regBase+j ){
101058       if( nReg==1 ){
101059         sqlite3ReleaseTempReg(pParse, regBase);
101060         regBase = r1;
101061       }else{
101062         sqlite3VdbeAddOp2(v, OP_SCopy, r1, regBase+j);
101063       }
101064     }
101065     testcase( pTerm->eOperator & WO_ISNULL );
101066     testcase( pTerm->eOperator & WO_IN );
101067     if( (pTerm->eOperator & (WO_ISNULL|WO_IN))==0 ){
101068       Expr *pRight = pTerm->pExpr->pRight;
101069       sqlite3ExprCodeIsNullJump(v, pRight, regBase+j, pLevel->addrBrk);
101070       if( zAff ){
101071         if( sqlite3CompareAffinity(pRight, zAff[j])==SQLITE_AFF_NONE ){
101072           zAff[j] = SQLITE_AFF_NONE;
101073         }
101074         if( sqlite3ExprNeedsNoAffinityChange(pRight, zAff[j]) ){
101075           zAff[j] = SQLITE_AFF_NONE;
101076         }
101077       }
101078     }
101079   }
101080   *pzAff = zAff;
101081   return regBase;
101082 }
101083
101084 #ifndef SQLITE_OMIT_EXPLAIN
101085 /*
101086 ** This routine is a helper for explainIndexRange() below
101087 **
101088 ** pStr holds the text of an expression that we are building up one term
101089 ** at a time.  This routine adds a new term to the end of the expression.
101090 ** Terms are separated by AND so add the "AND" text for second and subsequent
101091 ** terms only.
101092 */
101093 static void explainAppendTerm(
101094   StrAccum *pStr,             /* The text expression being built */
101095   int iTerm,                  /* Index of this term.  First is zero */
101096   const char *zColumn,        /* Name of the column */
101097   const char *zOp             /* Name of the operator */
101098 ){
101099   if( iTerm ) sqlite3StrAccumAppend(pStr, " AND ", 5);
101100   sqlite3StrAccumAppend(pStr, zColumn, -1);
101101   sqlite3StrAccumAppend(pStr, zOp, 1);
101102   sqlite3StrAccumAppend(pStr, "?", 1);
101103 }
101104
101105 /*
101106 ** Argument pLevel describes a strategy for scanning table pTab. This 
101107 ** function returns a pointer to a string buffer containing a description
101108 ** of the subset of table rows scanned by the strategy in the form of an
101109 ** SQL expression. Or, if all rows are scanned, NULL is returned.
101110 **
101111 ** For example, if the query:
101112 **
101113 **   SELECT * FROM t1 WHERE a=1 AND b>2;
101114 **
101115 ** is run and there is an index on (a, b), then this function returns a
101116 ** string similar to:
101117 **
101118 **   "a=? AND b>?"
101119 **
101120 ** The returned pointer points to memory obtained from sqlite3DbMalloc().
101121 ** It is the responsibility of the caller to free the buffer when it is
101122 ** no longer required.
101123 */
101124 static char *explainIndexRange(sqlite3 *db, WhereLevel *pLevel, Table *pTab){
101125   WherePlan *pPlan = &pLevel->plan;
101126   Index *pIndex = pPlan->u.pIdx;
101127   int nEq = pPlan->nEq;
101128   int i, j;
101129   Column *aCol = pTab->aCol;
101130   int *aiColumn = pIndex->aiColumn;
101131   StrAccum txt;
101132
101133   if( nEq==0 && (pPlan->wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ){
101134     return 0;
101135   }
101136   sqlite3StrAccumInit(&txt, 0, 0, SQLITE_MAX_LENGTH);
101137   txt.db = db;
101138   sqlite3StrAccumAppend(&txt, " (", 2);
101139   for(i=0; i<nEq; i++){
101140     explainAppendTerm(&txt, i, aCol[aiColumn[i]].zName, "=");
101141   }
101142
101143   j = i;
101144   if( pPlan->wsFlags&WHERE_BTM_LIMIT ){
101145     explainAppendTerm(&txt, i++, aCol[aiColumn[j]].zName, ">");
101146   }
101147   if( pPlan->wsFlags&WHERE_TOP_LIMIT ){
101148     explainAppendTerm(&txt, i, aCol[aiColumn[j]].zName, "<");
101149   }
101150   sqlite3StrAccumAppend(&txt, ")", 1);
101151   return sqlite3StrAccumFinish(&txt);
101152 }
101153
101154 /*
101155 ** This function is a no-op unless currently processing an EXPLAIN QUERY PLAN
101156 ** command. If the query being compiled is an EXPLAIN QUERY PLAN, a single
101157 ** record is added to the output to describe the table scan strategy in 
101158 ** pLevel.
101159 */
101160 static void explainOneScan(
101161   Parse *pParse,                  /* Parse context */
101162   SrcList *pTabList,              /* Table list this loop refers to */
101163   WhereLevel *pLevel,             /* Scan to write OP_Explain opcode for */
101164   int iLevel,                     /* Value for "level" column of output */
101165   int iFrom,                      /* Value for "from" column of output */
101166   u16 wctrlFlags                  /* Flags passed to sqlite3WhereBegin() */
101167 ){
101168   if( pParse->explain==2 ){
101169     u32 flags = pLevel->plan.wsFlags;
101170     struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
101171     Vdbe *v = pParse->pVdbe;      /* VM being constructed */
101172     sqlite3 *db = pParse->db;     /* Database handle */
101173     char *zMsg;                   /* Text to add to EQP output */
101174     sqlite3_int64 nRow;           /* Expected number of rows visited by scan */
101175     int iId = pParse->iSelectId;  /* Select id (left-most output column) */
101176     int isSearch;                 /* True for a SEARCH. False for SCAN. */
101177
101178     if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return;
101179
101180     isSearch = (pLevel->plan.nEq>0)
101181              || (flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0
101182              || (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX));
101183
101184     zMsg = sqlite3MPrintf(db, "%s", isSearch?"SEARCH":"SCAN");
101185     if( pItem->pSelect ){
101186       zMsg = sqlite3MAppendf(db, zMsg, "%s SUBQUERY %d", zMsg,pItem->iSelectId);
101187     }else{
101188       zMsg = sqlite3MAppendf(db, zMsg, "%s TABLE %s", zMsg, pItem->zName);
101189     }
101190
101191     if( pItem->zAlias ){
101192       zMsg = sqlite3MAppendf(db, zMsg, "%s AS %s", zMsg, pItem->zAlias);
101193     }
101194     if( (flags & WHERE_INDEXED)!=0 ){
101195       char *zWhere = explainIndexRange(db, pLevel, pItem->pTab);
101196       zMsg = sqlite3MAppendf(db, zMsg, "%s USING %s%sINDEX%s%s%s", zMsg, 
101197           ((flags & WHERE_TEMP_INDEX)?"AUTOMATIC ":""),
101198           ((flags & WHERE_IDX_ONLY)?"COVERING ":""),
101199           ((flags & WHERE_TEMP_INDEX)?"":" "),
101200           ((flags & WHERE_TEMP_INDEX)?"": pLevel->plan.u.pIdx->zName),
101201           zWhere
101202       );
101203       sqlite3DbFree(db, zWhere);
101204     }else if( flags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
101205       zMsg = sqlite3MAppendf(db, zMsg, "%s USING INTEGER PRIMARY KEY", zMsg);
101206
101207       if( flags&WHERE_ROWID_EQ ){
101208         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid=?)", zMsg);
101209       }else if( (flags&WHERE_BOTH_LIMIT)==WHERE_BOTH_LIMIT ){
101210         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>? AND rowid<?)", zMsg);
101211       }else if( flags&WHERE_BTM_LIMIT ){
101212         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>?)", zMsg);
101213       }else if( flags&WHERE_TOP_LIMIT ){
101214         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid<?)", zMsg);
101215       }
101216     }
101217 #ifndef SQLITE_OMIT_VIRTUALTABLE
101218     else if( (flags & WHERE_VIRTUALTABLE)!=0 ){
101219       sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx;
101220       zMsg = sqlite3MAppendf(db, zMsg, "%s VIRTUAL TABLE INDEX %d:%s", zMsg,
101221                   pVtabIdx->idxNum, pVtabIdx->idxStr);
101222     }
101223 #endif
101224     if( wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX) ){
101225       testcase( wctrlFlags & WHERE_ORDERBY_MIN );
101226       nRow = 1;
101227     }else{
101228       nRow = (sqlite3_int64)pLevel->plan.nRow;
101229     }
101230     zMsg = sqlite3MAppendf(db, zMsg, "%s (~%lld rows)", zMsg, nRow);
101231     sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg, P4_DYNAMIC);
101232   }
101233 }
101234 #else
101235 # define explainOneScan(u,v,w,x,y,z)
101236 #endif /* SQLITE_OMIT_EXPLAIN */
101237
101238
101239 /*
101240 ** Generate code for the start of the iLevel-th loop in the WHERE clause
101241 ** implementation described by pWInfo.
101242 */
101243 static Bitmask codeOneLoopStart(
101244   WhereInfo *pWInfo,   /* Complete information about the WHERE clause */
101245   int iLevel,          /* Which level of pWInfo->a[] should be coded */
101246   u16 wctrlFlags,      /* One of the WHERE_* flags defined in sqliteInt.h */
101247   Bitmask notReady     /* Which tables are currently available */
101248 ){
101249   int j, k;            /* Loop counters */
101250   int iCur;            /* The VDBE cursor for the table */
101251   int addrNxt;         /* Where to jump to continue with the next IN case */
101252   int omitTable;       /* True if we use the index only */
101253   int bRev;            /* True if we need to scan in reverse order */
101254   WhereLevel *pLevel;  /* The where level to be coded */
101255   WhereClause *pWC;    /* Decomposition of the entire WHERE clause */
101256   WhereTerm *pTerm;               /* A WHERE clause term */
101257   Parse *pParse;                  /* Parsing context */
101258   Vdbe *v;                        /* The prepared stmt under constructions */
101259   struct SrcList_item *pTabItem;  /* FROM clause term being coded */
101260   int addrBrk;                    /* Jump here to break out of the loop */
101261   int addrCont;                   /* Jump here to continue with next cycle */
101262   int iRowidReg = 0;        /* Rowid is stored in this register, if not zero */
101263   int iReleaseReg = 0;      /* Temp register to free before returning */
101264
101265   pParse = pWInfo->pParse;
101266   v = pParse->pVdbe;
101267   pWC = pWInfo->pWC;
101268   pLevel = &pWInfo->a[iLevel];
101269   pTabItem = &pWInfo->pTabList->a[pLevel->iFrom];
101270   iCur = pTabItem->iCursor;
101271   bRev = (pLevel->plan.wsFlags & WHERE_REVERSE)!=0;
101272   omitTable = (pLevel->plan.wsFlags & WHERE_IDX_ONLY)!=0 
101273            && (wctrlFlags & WHERE_FORCE_TABLE)==0;
101274
101275   /* Create labels for the "break" and "continue" instructions
101276   ** for the current loop.  Jump to addrBrk to break out of a loop.
101277   ** Jump to cont to go immediately to the next iteration of the
101278   ** loop.
101279   **
101280   ** When there is an IN operator, we also have a "addrNxt" label that
101281   ** means to continue with the next IN value combination.  When
101282   ** there are no IN operators in the constraints, the "addrNxt" label
101283   ** is the same as "addrBrk".
101284   */
101285   addrBrk = pLevel->addrBrk = pLevel->addrNxt = sqlite3VdbeMakeLabel(v);
101286   addrCont = pLevel->addrCont = sqlite3VdbeMakeLabel(v);
101287
101288   /* If this is the right table of a LEFT OUTER JOIN, allocate and
101289   ** initialize a memory cell that records if this table matches any
101290   ** row of the left table of the join.
101291   */
101292   if( pLevel->iFrom>0 && (pTabItem[0].jointype & JT_LEFT)!=0 ){
101293     pLevel->iLeftJoin = ++pParse->nMem;
101294     sqlite3VdbeAddOp2(v, OP_Integer, 0, pLevel->iLeftJoin);
101295     VdbeComment((v, "init LEFT JOIN no-match flag"));
101296   }
101297
101298 #ifndef SQLITE_OMIT_VIRTUALTABLE
101299   if(  (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){
101300     /* Case 0:  The table is a virtual-table.  Use the VFilter and VNext
101301     **          to access the data.
101302     */
101303     int iReg;   /* P3 Value for OP_VFilter */
101304     sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx;
101305     int nConstraint = pVtabIdx->nConstraint;
101306     struct sqlite3_index_constraint_usage *aUsage =
101307                                                 pVtabIdx->aConstraintUsage;
101308     const struct sqlite3_index_constraint *aConstraint =
101309                                                 pVtabIdx->aConstraint;
101310
101311     sqlite3ExprCachePush(pParse);
101312     iReg = sqlite3GetTempRange(pParse, nConstraint+2);
101313     for(j=1; j<=nConstraint; j++){
101314       for(k=0; k<nConstraint; k++){
101315         if( aUsage[k].argvIndex==j ){
101316           int iTerm = aConstraint[k].iTermOffset;
101317           sqlite3ExprCode(pParse, pWC->a[iTerm].pExpr->pRight, iReg+j+1);
101318           break;
101319         }
101320       }
101321       if( k==nConstraint ) break;
101322     }
101323     sqlite3VdbeAddOp2(v, OP_Integer, pVtabIdx->idxNum, iReg);
101324     sqlite3VdbeAddOp2(v, OP_Integer, j-1, iReg+1);
101325     sqlite3VdbeAddOp4(v, OP_VFilter, iCur, addrBrk, iReg, pVtabIdx->idxStr,
101326                       pVtabIdx->needToFreeIdxStr ? P4_MPRINTF : P4_STATIC);
101327     pVtabIdx->needToFreeIdxStr = 0;
101328     for(j=0; j<nConstraint; j++){
101329       if( aUsage[j].omit ){
101330         int iTerm = aConstraint[j].iTermOffset;
101331         disableTerm(pLevel, &pWC->a[iTerm]);
101332       }
101333     }
101334     pLevel->op = OP_VNext;
101335     pLevel->p1 = iCur;
101336     pLevel->p2 = sqlite3VdbeCurrentAddr(v);
101337     sqlite3ReleaseTempRange(pParse, iReg, nConstraint+2);
101338     sqlite3ExprCachePop(pParse, 1);
101339   }else
101340 #endif /* SQLITE_OMIT_VIRTUALTABLE */
101341
101342   if( pLevel->plan.wsFlags & WHERE_ROWID_EQ ){
101343     /* Case 1:  We can directly reference a single row using an
101344     **          equality comparison against the ROWID field.  Or
101345     **          we reference multiple rows using a "rowid IN (...)"
101346     **          construct.
101347     */
101348     iReleaseReg = sqlite3GetTempReg(pParse);
101349     pTerm = findTerm(pWC, iCur, -1, notReady, WO_EQ|WO_IN, 0);
101350     assert( pTerm!=0 );
101351     assert( pTerm->pExpr!=0 );
101352     assert( pTerm->leftCursor==iCur );
101353     assert( omitTable==0 );
101354     testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
101355     iRowidReg = codeEqualityTerm(pParse, pTerm, pLevel, iReleaseReg);
101356     addrNxt = pLevel->addrNxt;
101357     sqlite3VdbeAddOp2(v, OP_MustBeInt, iRowidReg, addrNxt);
101358     sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addrNxt, iRowidReg);
101359     sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
101360     VdbeComment((v, "pk"));
101361     pLevel->op = OP_Noop;
101362   }else if( pLevel->plan.wsFlags & WHERE_ROWID_RANGE ){
101363     /* Case 2:  We have an inequality comparison against the ROWID field.
101364     */
101365     int testOp = OP_Noop;
101366     int start;
101367     int memEndValue = 0;
101368     WhereTerm *pStart, *pEnd;
101369
101370     assert( omitTable==0 );
101371     pStart = findTerm(pWC, iCur, -1, notReady, WO_GT|WO_GE, 0);
101372     pEnd = findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE, 0);
101373     if( bRev ){
101374       pTerm = pStart;
101375       pStart = pEnd;
101376       pEnd = pTerm;
101377     }
101378     if( pStart ){
101379       Expr *pX;             /* The expression that defines the start bound */
101380       int r1, rTemp;        /* Registers for holding the start boundary */
101381
101382       /* The following constant maps TK_xx codes into corresponding 
101383       ** seek opcodes.  It depends on a particular ordering of TK_xx
101384       */
101385       const u8 aMoveOp[] = {
101386            /* TK_GT */  OP_SeekGt,
101387            /* TK_LE */  OP_SeekLe,
101388            /* TK_LT */  OP_SeekLt,
101389            /* TK_GE */  OP_SeekGe
101390       };
101391       assert( TK_LE==TK_GT+1 );      /* Make sure the ordering.. */
101392       assert( TK_LT==TK_GT+2 );      /*  ... of the TK_xx values... */
101393       assert( TK_GE==TK_GT+3 );      /*  ... is correcct. */
101394
101395       testcase( pStart->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
101396       pX = pStart->pExpr;
101397       assert( pX!=0 );
101398       assert( pStart->leftCursor==iCur );
101399       r1 = sqlite3ExprCodeTemp(pParse, pX->pRight, &rTemp);
101400       sqlite3VdbeAddOp3(v, aMoveOp[pX->op-TK_GT], iCur, addrBrk, r1);
101401       VdbeComment((v, "pk"));
101402       sqlite3ExprCacheAffinityChange(pParse, r1, 1);
101403       sqlite3ReleaseTempReg(pParse, rTemp);
101404       disableTerm(pLevel, pStart);
101405     }else{
101406       sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, addrBrk);
101407     }
101408     if( pEnd ){
101409       Expr *pX;
101410       pX = pEnd->pExpr;
101411       assert( pX!=0 );
101412       assert( pEnd->leftCursor==iCur );
101413       testcase( pEnd->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
101414       memEndValue = ++pParse->nMem;
101415       sqlite3ExprCode(pParse, pX->pRight, memEndValue);
101416       if( pX->op==TK_LT || pX->op==TK_GT ){
101417         testOp = bRev ? OP_Le : OP_Ge;
101418       }else{
101419         testOp = bRev ? OP_Lt : OP_Gt;
101420       }
101421       disableTerm(pLevel, pEnd);
101422     }
101423     start = sqlite3VdbeCurrentAddr(v);
101424     pLevel->op = bRev ? OP_Prev : OP_Next;
101425     pLevel->p1 = iCur;
101426     pLevel->p2 = start;
101427     if( pStart==0 && pEnd==0 ){
101428       pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
101429     }else{
101430       assert( pLevel->p5==0 );
101431     }
101432     if( testOp!=OP_Noop ){
101433       iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse);
101434       sqlite3VdbeAddOp2(v, OP_Rowid, iCur, iRowidReg);
101435       sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
101436       sqlite3VdbeAddOp3(v, testOp, memEndValue, addrBrk, iRowidReg);
101437       sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC | SQLITE_JUMPIFNULL);
101438     }
101439   }else if( pLevel->plan.wsFlags & (WHERE_COLUMN_RANGE|WHERE_COLUMN_EQ) ){
101440     /* Case 3: A scan using an index.
101441     **
101442     **         The WHERE clause may contain zero or more equality 
101443     **         terms ("==" or "IN" operators) that refer to the N
101444     **         left-most columns of the index. It may also contain
101445     **         inequality constraints (>, <, >= or <=) on the indexed
101446     **         column that immediately follows the N equalities. Only 
101447     **         the right-most column can be an inequality - the rest must
101448     **         use the "==" and "IN" operators. For example, if the 
101449     **         index is on (x,y,z), then the following clauses are all 
101450     **         optimized:
101451     **
101452     **            x=5
101453     **            x=5 AND y=10
101454     **            x=5 AND y<10
101455     **            x=5 AND y>5 AND y<10
101456     **            x=5 AND y=5 AND z<=10
101457     **
101458     **         The z<10 term of the following cannot be used, only
101459     **         the x=5 term:
101460     **
101461     **            x=5 AND z<10
101462     **
101463     **         N may be zero if there are inequality constraints.
101464     **         If there are no inequality constraints, then N is at
101465     **         least one.
101466     **
101467     **         This case is also used when there are no WHERE clause
101468     **         constraints but an index is selected anyway, in order
101469     **         to force the output order to conform to an ORDER BY.
101470     */  
101471     static const u8 aStartOp[] = {
101472       0,
101473       0,
101474       OP_Rewind,           /* 2: (!start_constraints && startEq &&  !bRev) */
101475       OP_Last,             /* 3: (!start_constraints && startEq &&   bRev) */
101476       OP_SeekGt,           /* 4: (start_constraints  && !startEq && !bRev) */
101477       OP_SeekLt,           /* 5: (start_constraints  && !startEq &&  bRev) */
101478       OP_SeekGe,           /* 6: (start_constraints  &&  startEq && !bRev) */
101479       OP_SeekLe            /* 7: (start_constraints  &&  startEq &&  bRev) */
101480     };
101481     static const u8 aEndOp[] = {
101482       OP_Noop,             /* 0: (!end_constraints) */
101483       OP_IdxGE,            /* 1: (end_constraints && !bRev) */
101484       OP_IdxLT             /* 2: (end_constraints && bRev) */
101485     };
101486     int nEq = pLevel->plan.nEq;  /* Number of == or IN terms */
101487     int isMinQuery = 0;          /* If this is an optimized SELECT min(x).. */
101488     int regBase;                 /* Base register holding constraint values */
101489     int r1;                      /* Temp register */
101490     WhereTerm *pRangeStart = 0;  /* Inequality constraint at range start */
101491     WhereTerm *pRangeEnd = 0;    /* Inequality constraint at range end */
101492     int startEq;                 /* True if range start uses ==, >= or <= */
101493     int endEq;                   /* True if range end uses ==, >= or <= */
101494     int start_constraints;       /* Start of range is constrained */
101495     int nConstraint;             /* Number of constraint terms */
101496     Index *pIdx;                 /* The index we will be using */
101497     int iIdxCur;                 /* The VDBE cursor for the index */
101498     int nExtraReg = 0;           /* Number of extra registers needed */
101499     int op;                      /* Instruction opcode */
101500     char *zStartAff;             /* Affinity for start of range constraint */
101501     char *zEndAff;               /* Affinity for end of range constraint */
101502
101503     pIdx = pLevel->plan.u.pIdx;
101504     iIdxCur = pLevel->iIdxCur;
101505     k = pIdx->aiColumn[nEq];     /* Column for inequality constraints */
101506
101507     /* If this loop satisfies a sort order (pOrderBy) request that 
101508     ** was passed to this function to implement a "SELECT min(x) ..." 
101509     ** query, then the caller will only allow the loop to run for
101510     ** a single iteration. This means that the first row returned
101511     ** should not have a NULL value stored in 'x'. If column 'x' is
101512     ** the first one after the nEq equality constraints in the index,
101513     ** this requires some special handling.
101514     */
101515     if( (wctrlFlags&WHERE_ORDERBY_MIN)!=0
101516      && (pLevel->plan.wsFlags&WHERE_ORDERBY)
101517      && (pIdx->nColumn>nEq)
101518     ){
101519       /* assert( pOrderBy->nExpr==1 ); */
101520       /* assert( pOrderBy->a[0].pExpr->iColumn==pIdx->aiColumn[nEq] ); */
101521       isMinQuery = 1;
101522       nExtraReg = 1;
101523     }
101524
101525     /* Find any inequality constraint terms for the start and end 
101526     ** of the range. 
101527     */
101528     if( pLevel->plan.wsFlags & WHERE_TOP_LIMIT ){
101529       pRangeEnd = findTerm(pWC, iCur, k, notReady, (WO_LT|WO_LE), pIdx);
101530       nExtraReg = 1;
101531     }
101532     if( pLevel->plan.wsFlags & WHERE_BTM_LIMIT ){
101533       pRangeStart = findTerm(pWC, iCur, k, notReady, (WO_GT|WO_GE), pIdx);
101534       nExtraReg = 1;
101535     }
101536
101537     /* Generate code to evaluate all constraint terms using == or IN
101538     ** and store the values of those terms in an array of registers
101539     ** starting at regBase.
101540     */
101541     regBase = codeAllEqualityTerms(
101542         pParse, pLevel, pWC, notReady, nExtraReg, &zStartAff
101543     );
101544     zEndAff = sqlite3DbStrDup(pParse->db, zStartAff);
101545     addrNxt = pLevel->addrNxt;
101546
101547     /* If we are doing a reverse order scan on an ascending index, or
101548     ** a forward order scan on a descending index, interchange the 
101549     ** start and end terms (pRangeStart and pRangeEnd).
101550     */
101551     if( nEq<pIdx->nColumn && bRev==(pIdx->aSortOrder[nEq]==SQLITE_SO_ASC) ){
101552       SWAP(WhereTerm *, pRangeEnd, pRangeStart);
101553     }
101554
101555     testcase( pRangeStart && pRangeStart->eOperator & WO_LE );
101556     testcase( pRangeStart && pRangeStart->eOperator & WO_GE );
101557     testcase( pRangeEnd && pRangeEnd->eOperator & WO_LE );
101558     testcase( pRangeEnd && pRangeEnd->eOperator & WO_GE );
101559     startEq = !pRangeStart || pRangeStart->eOperator & (WO_LE|WO_GE);
101560     endEq =   !pRangeEnd || pRangeEnd->eOperator & (WO_LE|WO_GE);
101561     start_constraints = pRangeStart || nEq>0;
101562
101563     /* Seek the index cursor to the start of the range. */
101564     nConstraint = nEq;
101565     if( pRangeStart ){
101566       Expr *pRight = pRangeStart->pExpr->pRight;
101567       sqlite3ExprCode(pParse, pRight, regBase+nEq);
101568       if( (pRangeStart->wtFlags & TERM_VNULL)==0 ){
101569         sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt);
101570       }
101571       if( zStartAff ){
101572         if( sqlite3CompareAffinity(pRight, zStartAff[nEq])==SQLITE_AFF_NONE){
101573           /* Since the comparison is to be performed with no conversions
101574           ** applied to the operands, set the affinity to apply to pRight to 
101575           ** SQLITE_AFF_NONE.  */
101576           zStartAff[nEq] = SQLITE_AFF_NONE;
101577         }
101578         if( sqlite3ExprNeedsNoAffinityChange(pRight, zStartAff[nEq]) ){
101579           zStartAff[nEq] = SQLITE_AFF_NONE;
101580         }
101581       }  
101582       nConstraint++;
101583       testcase( pRangeStart->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
101584     }else if( isMinQuery ){
101585       sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
101586       nConstraint++;
101587       startEq = 0;
101588       start_constraints = 1;
101589     }
101590     codeApplyAffinity(pParse, regBase, nConstraint, zStartAff);
101591     op = aStartOp[(start_constraints<<2) + (startEq<<1) + bRev];
101592     assert( op!=0 );
101593     testcase( op==OP_Rewind );
101594     testcase( op==OP_Last );
101595     testcase( op==OP_SeekGt );
101596     testcase( op==OP_SeekGe );
101597     testcase( op==OP_SeekLe );
101598     testcase( op==OP_SeekLt );
101599     sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint);
101600
101601     /* Load the value for the inequality constraint at the end of the
101602     ** range (if any).
101603     */
101604     nConstraint = nEq;
101605     if( pRangeEnd ){
101606       Expr *pRight = pRangeEnd->pExpr->pRight;
101607       sqlite3ExprCacheRemove(pParse, regBase+nEq, 1);
101608       sqlite3ExprCode(pParse, pRight, regBase+nEq);
101609       if( (pRangeEnd->wtFlags & TERM_VNULL)==0 ){
101610         sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt);
101611       }
101612       if( zEndAff ){
101613         if( sqlite3CompareAffinity(pRight, zEndAff[nEq])==SQLITE_AFF_NONE){
101614           /* Since the comparison is to be performed with no conversions
101615           ** applied to the operands, set the affinity to apply to pRight to 
101616           ** SQLITE_AFF_NONE.  */
101617           zEndAff[nEq] = SQLITE_AFF_NONE;
101618         }
101619         if( sqlite3ExprNeedsNoAffinityChange(pRight, zEndAff[nEq]) ){
101620           zEndAff[nEq] = SQLITE_AFF_NONE;
101621         }
101622       }  
101623       codeApplyAffinity(pParse, regBase, nEq+1, zEndAff);
101624       nConstraint++;
101625       testcase( pRangeEnd->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
101626     }
101627     sqlite3DbFree(pParse->db, zStartAff);
101628     sqlite3DbFree(pParse->db, zEndAff);
101629
101630     /* Top of the loop body */
101631     pLevel->p2 = sqlite3VdbeCurrentAddr(v);
101632
101633     /* Check if the index cursor is past the end of the range. */
101634     op = aEndOp[(pRangeEnd || nEq) * (1 + bRev)];
101635     testcase( op==OP_Noop );
101636     testcase( op==OP_IdxGE );
101637     testcase( op==OP_IdxLT );
101638     if( op!=OP_Noop ){
101639       sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint);
101640       sqlite3VdbeChangeP5(v, endEq!=bRev ?1:0);
101641     }
101642
101643     /* If there are inequality constraints, check that the value
101644     ** of the table column that the inequality contrains is not NULL.
101645     ** If it is, jump to the next iteration of the loop.
101646     */
101647     r1 = sqlite3GetTempReg(pParse);
101648     testcase( pLevel->plan.wsFlags & WHERE_BTM_LIMIT );
101649     testcase( pLevel->plan.wsFlags & WHERE_TOP_LIMIT );
101650     if( (pLevel->plan.wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0 ){
101651       sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, nEq, r1);
101652       sqlite3VdbeAddOp2(v, OP_IsNull, r1, addrCont);
101653     }
101654     sqlite3ReleaseTempReg(pParse, r1);
101655
101656     /* Seek the table cursor, if required */
101657     disableTerm(pLevel, pRangeStart);
101658     disableTerm(pLevel, pRangeEnd);
101659     if( !omitTable ){
101660       iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse);
101661       sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, iRowidReg);
101662       sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
101663       sqlite3VdbeAddOp2(v, OP_Seek, iCur, iRowidReg);  /* Deferred seek */
101664     }
101665
101666     /* Record the instruction used to terminate the loop. Disable 
101667     ** WHERE clause terms made redundant by the index range scan.
101668     */
101669     if( pLevel->plan.wsFlags & WHERE_UNIQUE ){
101670       pLevel->op = OP_Noop;
101671     }else if( bRev ){
101672       pLevel->op = OP_Prev;
101673     }else{
101674       pLevel->op = OP_Next;
101675     }
101676     pLevel->p1 = iIdxCur;
101677   }else
101678
101679 #ifndef SQLITE_OMIT_OR_OPTIMIZATION
101680   if( pLevel->plan.wsFlags & WHERE_MULTI_OR ){
101681     /* Case 4:  Two or more separately indexed terms connected by OR
101682     **
101683     ** Example:
101684     **
101685     **   CREATE TABLE t1(a,b,c,d);
101686     **   CREATE INDEX i1 ON t1(a);
101687     **   CREATE INDEX i2 ON t1(b);
101688     **   CREATE INDEX i3 ON t1(c);
101689     **
101690     **   SELECT * FROM t1 WHERE a=5 OR b=7 OR (c=11 AND d=13)
101691     **
101692     ** In the example, there are three indexed terms connected by OR.
101693     ** The top of the loop looks like this:
101694     **
101695     **          Null       1                # Zero the rowset in reg 1
101696     **
101697     ** Then, for each indexed term, the following. The arguments to
101698     ** RowSetTest are such that the rowid of the current row is inserted
101699     ** into the RowSet. If it is already present, control skips the
101700     ** Gosub opcode and jumps straight to the code generated by WhereEnd().
101701     **
101702     **        sqlite3WhereBegin(<term>)
101703     **          RowSetTest                  # Insert rowid into rowset
101704     **          Gosub      2 A
101705     **        sqlite3WhereEnd()
101706     **
101707     ** Following the above, code to terminate the loop. Label A, the target
101708     ** of the Gosub above, jumps to the instruction right after the Goto.
101709     **
101710     **          Null       1                # Zero the rowset in reg 1
101711     **          Goto       B                # The loop is finished.
101712     **
101713     **       A: <loop body>                 # Return data, whatever.
101714     **
101715     **          Return     2                # Jump back to the Gosub
101716     **
101717     **       B: <after the loop>
101718     **
101719     */
101720     WhereClause *pOrWc;    /* The OR-clause broken out into subterms */
101721     SrcList *pOrTab;       /* Shortened table list or OR-clause generation */
101722
101723     int regReturn = ++pParse->nMem;           /* Register used with OP_Gosub */
101724     int regRowset = 0;                        /* Register for RowSet object */
101725     int regRowid = 0;                         /* Register holding rowid */
101726     int iLoopBody = sqlite3VdbeMakeLabel(v);  /* Start of loop body */
101727     int iRetInit;                             /* Address of regReturn init */
101728     int untestedTerms = 0;             /* Some terms not completely tested */
101729     int ii;
101730    
101731     pTerm = pLevel->plan.u.pTerm;
101732     assert( pTerm!=0 );
101733     assert( pTerm->eOperator==WO_OR );
101734     assert( (pTerm->wtFlags & TERM_ORINFO)!=0 );
101735     pOrWc = &pTerm->u.pOrInfo->wc;
101736     pLevel->op = OP_Return;
101737     pLevel->p1 = regReturn;
101738
101739     /* Set up a new SrcList ni pOrTab containing the table being scanned
101740     ** by this loop in the a[0] slot and all notReady tables in a[1..] slots.
101741     ** This becomes the SrcList in the recursive call to sqlite3WhereBegin().
101742     */
101743     if( pWInfo->nLevel>1 ){
101744       int nNotReady;                 /* The number of notReady tables */
101745       struct SrcList_item *origSrc;     /* Original list of tables */
101746       nNotReady = pWInfo->nLevel - iLevel - 1;
101747       pOrTab = sqlite3StackAllocRaw(pParse->db,
101748                             sizeof(*pOrTab)+ nNotReady*sizeof(pOrTab->a[0]));
101749       if( pOrTab==0 ) return notReady;
101750       pOrTab->nAlloc = (i16)(nNotReady + 1);
101751       pOrTab->nSrc = pOrTab->nAlloc;
101752       memcpy(pOrTab->a, pTabItem, sizeof(*pTabItem));
101753       origSrc = pWInfo->pTabList->a;
101754       for(k=1; k<=nNotReady; k++){
101755         memcpy(&pOrTab->a[k], &origSrc[pLevel[k].iFrom], sizeof(pOrTab->a[k]));
101756       }
101757     }else{
101758       pOrTab = pWInfo->pTabList;
101759     }
101760
101761     /* Initialize the rowset register to contain NULL. An SQL NULL is 
101762     ** equivalent to an empty rowset.
101763     **
101764     ** Also initialize regReturn to contain the address of the instruction 
101765     ** immediately following the OP_Return at the bottom of the loop. This
101766     ** is required in a few obscure LEFT JOIN cases where control jumps
101767     ** over the top of the loop into the body of it. In this case the 
101768     ** correct response for the end-of-loop code (the OP_Return) is to 
101769     ** fall through to the next instruction, just as an OP_Next does if
101770     ** called on an uninitialized cursor.
101771     */
101772     if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){
101773       regRowset = ++pParse->nMem;
101774       regRowid = ++pParse->nMem;
101775       sqlite3VdbeAddOp2(v, OP_Null, 0, regRowset);
101776     }
101777     iRetInit = sqlite3VdbeAddOp2(v, OP_Integer, 0, regReturn);
101778
101779     for(ii=0; ii<pOrWc->nTerm; ii++){
101780       WhereTerm *pOrTerm = &pOrWc->a[ii];
101781       if( pOrTerm->leftCursor==iCur || pOrTerm->eOperator==WO_AND ){
101782         WhereInfo *pSubWInfo;          /* Info for single OR-term scan */
101783         /* Loop through table entries that match term pOrTerm. */
101784         pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrTerm->pExpr, 0,
101785                         WHERE_OMIT_OPEN | WHERE_OMIT_CLOSE |
101786                         WHERE_FORCE_TABLE | WHERE_ONETABLE_ONLY);
101787         if( pSubWInfo ){
101788           explainOneScan(
101789               pParse, pOrTab, &pSubWInfo->a[0], iLevel, pLevel->iFrom, 0
101790           );
101791           if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){
101792             int iSet = ((ii==pOrWc->nTerm-1)?-1:ii);
101793             int r;
101794             r = sqlite3ExprCodeGetColumn(pParse, pTabItem->pTab, -1, iCur, 
101795                                          regRowid);
101796             sqlite3VdbeAddOp4Int(v, OP_RowSetTest, regRowset,
101797                                  sqlite3VdbeCurrentAddr(v)+2, r, iSet);
101798           }
101799           sqlite3VdbeAddOp2(v, OP_Gosub, regReturn, iLoopBody);
101800
101801           /* The pSubWInfo->untestedTerms flag means that this OR term
101802           ** contained one or more AND term from a notReady table.  The
101803           ** terms from the notReady table could not be tested and will
101804           ** need to be tested later.
101805           */
101806           if( pSubWInfo->untestedTerms ) untestedTerms = 1;
101807
101808           /* Finish the loop through table entries that match term pOrTerm. */
101809           sqlite3WhereEnd(pSubWInfo);
101810         }
101811       }
101812     }
101813     sqlite3VdbeChangeP1(v, iRetInit, sqlite3VdbeCurrentAddr(v));
101814     sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrBrk);
101815     sqlite3VdbeResolveLabel(v, iLoopBody);
101816
101817     if( pWInfo->nLevel>1 ) sqlite3StackFree(pParse->db, pOrTab);
101818     if( !untestedTerms ) disableTerm(pLevel, pTerm);
101819   }else
101820 #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
101821
101822   {
101823     /* Case 5:  There is no usable index.  We must do a complete
101824     **          scan of the entire table.
101825     */
101826     static const u8 aStep[] = { OP_Next, OP_Prev };
101827     static const u8 aStart[] = { OP_Rewind, OP_Last };
101828     assert( bRev==0 || bRev==1 );
101829     assert( omitTable==0 );
101830     pLevel->op = aStep[bRev];
101831     pLevel->p1 = iCur;
101832     pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrBrk);
101833     pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
101834   }
101835   notReady &= ~getMask(pWC->pMaskSet, iCur);
101836
101837   /* Insert code to test every subexpression that can be completely
101838   ** computed using the current set of tables.
101839   **
101840   ** IMPLEMENTATION-OF: R-49525-50935 Terms that cannot be satisfied through
101841   ** the use of indices become tests that are evaluated against each row of
101842   ** the relevant input tables.
101843   */
101844   for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){
101845     Expr *pE;
101846     testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* IMP: R-30575-11662 */
101847     testcase( pTerm->wtFlags & TERM_CODED );
101848     if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue;
101849     if( (pTerm->prereqAll & notReady)!=0 ){
101850       testcase( pWInfo->untestedTerms==0
101851                && (pWInfo->wctrlFlags & WHERE_ONETABLE_ONLY)!=0 );
101852       pWInfo->untestedTerms = 1;
101853       continue;
101854     }
101855     pE = pTerm->pExpr;
101856     assert( pE!=0 );
101857     if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){
101858       continue;
101859     }
101860     sqlite3ExprIfFalse(pParse, pE, addrCont, SQLITE_JUMPIFNULL);
101861     pTerm->wtFlags |= TERM_CODED;
101862   }
101863
101864   /* For a LEFT OUTER JOIN, generate code that will record the fact that
101865   ** at least one row of the right table has matched the left table.  
101866   */
101867   if( pLevel->iLeftJoin ){
101868     pLevel->addrFirst = sqlite3VdbeCurrentAddr(v);
101869     sqlite3VdbeAddOp2(v, OP_Integer, 1, pLevel->iLeftJoin);
101870     VdbeComment((v, "record LEFT JOIN hit"));
101871     sqlite3ExprCacheClear(pParse);
101872     for(pTerm=pWC->a, j=0; j<pWC->nTerm; j++, pTerm++){
101873       testcase( pTerm->wtFlags & TERM_VIRTUAL );  /* IMP: R-30575-11662 */
101874       testcase( pTerm->wtFlags & TERM_CODED );
101875       if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue;
101876       if( (pTerm->prereqAll & notReady)!=0 ){
101877         assert( pWInfo->untestedTerms );
101878         continue;
101879       }
101880       assert( pTerm->pExpr );
101881       sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL);
101882       pTerm->wtFlags |= TERM_CODED;
101883     }
101884   }
101885   sqlite3ReleaseTempReg(pParse, iReleaseReg);
101886
101887   return notReady;
101888 }
101889
101890 #if defined(SQLITE_TEST)
101891 /*
101892 ** The following variable holds a text description of query plan generated
101893 ** by the most recent call to sqlite3WhereBegin().  Each call to WhereBegin
101894 ** overwrites the previous.  This information is used for testing and
101895 ** analysis only.
101896 */
101897 SQLITE_API char sqlite3_query_plan[BMS*2*40];  /* Text of the join */
101898 static int nQPlan = 0;              /* Next free slow in _query_plan[] */
101899
101900 #endif /* SQLITE_TEST */
101901
101902
101903 /*
101904 ** Free a WhereInfo structure
101905 */
101906 static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){
101907   if( ALWAYS(pWInfo) ){
101908     int i;
101909     for(i=0; i<pWInfo->nLevel; i++){
101910       sqlite3_index_info *pInfo = pWInfo->a[i].pIdxInfo;
101911       if( pInfo ){
101912         /* assert( pInfo->needToFreeIdxStr==0 || db->mallocFailed ); */
101913         if( pInfo->needToFreeIdxStr ){
101914           sqlite3_free(pInfo->idxStr);
101915         }
101916         sqlite3DbFree(db, pInfo);
101917       }
101918       if( pWInfo->a[i].plan.wsFlags & WHERE_TEMP_INDEX ){
101919         Index *pIdx = pWInfo->a[i].plan.u.pIdx;
101920         if( pIdx ){
101921           sqlite3DbFree(db, pIdx->zColAff);
101922           sqlite3DbFree(db, pIdx);
101923         }
101924       }
101925     }
101926     whereClauseClear(pWInfo->pWC);
101927     sqlite3DbFree(db, pWInfo);
101928   }
101929 }
101930
101931
101932 /*
101933 ** Generate the beginning of the loop used for WHERE clause processing.
101934 ** The return value is a pointer to an opaque structure that contains
101935 ** information needed to terminate the loop.  Later, the calling routine
101936 ** should invoke sqlite3WhereEnd() with the return value of this function
101937 ** in order to complete the WHERE clause processing.
101938 **
101939 ** If an error occurs, this routine returns NULL.
101940 **
101941 ** The basic idea is to do a nested loop, one loop for each table in
101942 ** the FROM clause of a select.  (INSERT and UPDATE statements are the
101943 ** same as a SELECT with only a single table in the FROM clause.)  For
101944 ** example, if the SQL is this:
101945 **
101946 **       SELECT * FROM t1, t2, t3 WHERE ...;
101947 **
101948 ** Then the code generated is conceptually like the following:
101949 **
101950 **      foreach row1 in t1 do       \    Code generated
101951 **        foreach row2 in t2 do      |-- by sqlite3WhereBegin()
101952 **          foreach row3 in t3 do   /
101953 **            ...
101954 **          end                     \    Code generated
101955 **        end                        |-- by sqlite3WhereEnd()
101956 **      end                         /
101957 **
101958 ** Note that the loops might not be nested in the order in which they
101959 ** appear in the FROM clause if a different order is better able to make
101960 ** use of indices.  Note also that when the IN operator appears in
101961 ** the WHERE clause, it might result in additional nested loops for
101962 ** scanning through all values on the right-hand side of the IN.
101963 **
101964 ** There are Btree cursors associated with each table.  t1 uses cursor
101965 ** number pTabList->a[0].iCursor.  t2 uses the cursor pTabList->a[1].iCursor.
101966 ** And so forth.  This routine generates code to open those VDBE cursors
101967 ** and sqlite3WhereEnd() generates the code to close them.
101968 **
101969 ** The code that sqlite3WhereBegin() generates leaves the cursors named
101970 ** in pTabList pointing at their appropriate entries.  The [...] code
101971 ** can use OP_Column and OP_Rowid opcodes on these cursors to extract
101972 ** data from the various tables of the loop.
101973 **
101974 ** If the WHERE clause is empty, the foreach loops must each scan their
101975 ** entire tables.  Thus a three-way join is an O(N^3) operation.  But if
101976 ** the tables have indices and there are terms in the WHERE clause that
101977 ** refer to those indices, a complete table scan can be avoided and the
101978 ** code will run much faster.  Most of the work of this routine is checking
101979 ** to see if there are indices that can be used to speed up the loop.
101980 **
101981 ** Terms of the WHERE clause are also used to limit which rows actually
101982 ** make it to the "..." in the middle of the loop.  After each "foreach",
101983 ** terms of the WHERE clause that use only terms in that loop and outer
101984 ** loops are evaluated and if false a jump is made around all subsequent
101985 ** inner loops (or around the "..." if the test occurs within the inner-
101986 ** most loop)
101987 **
101988 ** OUTER JOINS
101989 **
101990 ** An outer join of tables t1 and t2 is conceptally coded as follows:
101991 **
101992 **    foreach row1 in t1 do
101993 **      flag = 0
101994 **      foreach row2 in t2 do
101995 **        start:
101996 **          ...
101997 **          flag = 1
101998 **      end
101999 **      if flag==0 then
102000 **        move the row2 cursor to a null row
102001 **        goto start
102002 **      fi
102003 **    end
102004 **
102005 ** ORDER BY CLAUSE PROCESSING
102006 **
102007 ** *ppOrderBy is a pointer to the ORDER BY clause of a SELECT statement,
102008 ** if there is one.  If there is no ORDER BY clause or if this routine
102009 ** is called from an UPDATE or DELETE statement, then ppOrderBy is NULL.
102010 **
102011 ** If an index can be used so that the natural output order of the table
102012 ** scan is correct for the ORDER BY clause, then that index is used and
102013 ** *ppOrderBy is set to NULL.  This is an optimization that prevents an
102014 ** unnecessary sort of the result set if an index appropriate for the
102015 ** ORDER BY clause already exists.
102016 **
102017 ** If the where clause loops cannot be arranged to provide the correct
102018 ** output order, then the *ppOrderBy is unchanged.
102019 */
102020 SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
102021   Parse *pParse,        /* The parser context */
102022   SrcList *pTabList,    /* A list of all tables to be scanned */
102023   Expr *pWhere,         /* The WHERE clause */
102024   ExprList **ppOrderBy, /* An ORDER BY clause, or NULL */
102025   u16 wctrlFlags        /* One of the WHERE_* flags defined in sqliteInt.h */
102026 ){
102027   int i;                     /* Loop counter */
102028   int nByteWInfo;            /* Num. bytes allocated for WhereInfo struct */
102029   int nTabList;              /* Number of elements in pTabList */
102030   WhereInfo *pWInfo;         /* Will become the return value of this function */
102031   Vdbe *v = pParse->pVdbe;   /* The virtual database engine */
102032   Bitmask notReady;          /* Cursors that are not yet positioned */
102033   WhereMaskSet *pMaskSet;    /* The expression mask set */
102034   WhereClause *pWC;               /* Decomposition of the WHERE clause */
102035   struct SrcList_item *pTabItem;  /* A single entry from pTabList */
102036   WhereLevel *pLevel;             /* A single level in the pWInfo list */
102037   int iFrom;                      /* First unused FROM clause element */
102038   int andFlags;              /* AND-ed combination of all pWC->a[].wtFlags */
102039   sqlite3 *db;               /* Database connection */
102040
102041   /* The number of tables in the FROM clause is limited by the number of
102042   ** bits in a Bitmask 
102043   */
102044   testcase( pTabList->nSrc==BMS );
102045   if( pTabList->nSrc>BMS ){
102046     sqlite3ErrorMsg(pParse, "at most %d tables in a join", BMS);
102047     return 0;
102048   }
102049
102050   /* This function normally generates a nested loop for all tables in 
102051   ** pTabList.  But if the WHERE_ONETABLE_ONLY flag is set, then we should
102052   ** only generate code for the first table in pTabList and assume that
102053   ** any cursors associated with subsequent tables are uninitialized.
102054   */
102055   nTabList = (wctrlFlags & WHERE_ONETABLE_ONLY) ? 1 : pTabList->nSrc;
102056
102057   /* Allocate and initialize the WhereInfo structure that will become the
102058   ** return value. A single allocation is used to store the WhereInfo
102059   ** struct, the contents of WhereInfo.a[], the WhereClause structure
102060   ** and the WhereMaskSet structure. Since WhereClause contains an 8-byte
102061   ** field (type Bitmask) it must be aligned on an 8-byte boundary on
102062   ** some architectures. Hence the ROUND8() below.
102063   */
102064   db = pParse->db;
102065   nByteWInfo = ROUND8(sizeof(WhereInfo)+(nTabList-1)*sizeof(WhereLevel));
102066   pWInfo = sqlite3DbMallocZero(db, 
102067       nByteWInfo + 
102068       sizeof(WhereClause) +
102069       sizeof(WhereMaskSet)
102070   );
102071   if( db->mallocFailed ){
102072     sqlite3DbFree(db, pWInfo);
102073     pWInfo = 0;
102074     goto whereBeginError;
102075   }
102076   pWInfo->nLevel = nTabList;
102077   pWInfo->pParse = pParse;
102078   pWInfo->pTabList = pTabList;
102079   pWInfo->iBreak = sqlite3VdbeMakeLabel(v);
102080   pWInfo->pWC = pWC = (WhereClause *)&((u8 *)pWInfo)[nByteWInfo];
102081   pWInfo->wctrlFlags = wctrlFlags;
102082   pWInfo->savedNQueryLoop = pParse->nQueryLoop;
102083   pMaskSet = (WhereMaskSet*)&pWC[1];
102084
102085   /* Split the WHERE clause into separate subexpressions where each
102086   ** subexpression is separated by an AND operator.
102087   */
102088   initMaskSet(pMaskSet);
102089   whereClauseInit(pWC, pParse, pMaskSet);
102090   sqlite3ExprCodeConstants(pParse, pWhere);
102091   whereSplit(pWC, pWhere, TK_AND);   /* IMP: R-15842-53296 */
102092     
102093   /* Special case: a WHERE clause that is constant.  Evaluate the
102094   ** expression and either jump over all of the code or fall thru.
102095   */
102096   if( pWhere && (nTabList==0 || sqlite3ExprIsConstantNotJoin(pWhere)) ){
102097     sqlite3ExprIfFalse(pParse, pWhere, pWInfo->iBreak, SQLITE_JUMPIFNULL);
102098     pWhere = 0;
102099   }
102100
102101   /* Assign a bit from the bitmask to every term in the FROM clause.
102102   **
102103   ** When assigning bitmask values to FROM clause cursors, it must be
102104   ** the case that if X is the bitmask for the N-th FROM clause term then
102105   ** the bitmask for all FROM clause terms to the left of the N-th term
102106   ** is (X-1).   An expression from the ON clause of a LEFT JOIN can use
102107   ** its Expr.iRightJoinTable value to find the bitmask of the right table
102108   ** of the join.  Subtracting one from the right table bitmask gives a
102109   ** bitmask for all tables to the left of the join.  Knowing the bitmask
102110   ** for all tables to the left of a left join is important.  Ticket #3015.
102111   **
102112   ** Configure the WhereClause.vmask variable so that bits that correspond
102113   ** to virtual table cursors are set. This is used to selectively disable 
102114   ** the OR-to-IN transformation in exprAnalyzeOrTerm(). It is not helpful 
102115   ** with virtual tables.
102116   **
102117   ** Note that bitmasks are created for all pTabList->nSrc tables in
102118   ** pTabList, not just the first nTabList tables.  nTabList is normally
102119   ** equal to pTabList->nSrc but might be shortened to 1 if the
102120   ** WHERE_ONETABLE_ONLY flag is set.
102121   */
102122   assert( pWC->vmask==0 && pMaskSet->n==0 );
102123   for(i=0; i<pTabList->nSrc; i++){
102124     createMask(pMaskSet, pTabList->a[i].iCursor);
102125 #ifndef SQLITE_OMIT_VIRTUALTABLE
102126     if( ALWAYS(pTabList->a[i].pTab) && IsVirtual(pTabList->a[i].pTab) ){
102127       pWC->vmask |= ((Bitmask)1 << i);
102128     }
102129 #endif
102130   }
102131 #ifndef NDEBUG
102132   {
102133     Bitmask toTheLeft = 0;
102134     for(i=0; i<pTabList->nSrc; i++){
102135       Bitmask m = getMask(pMaskSet, pTabList->a[i].iCursor);
102136       assert( (m-1)==toTheLeft );
102137       toTheLeft |= m;
102138     }
102139   }
102140 #endif
102141
102142   /* Analyze all of the subexpressions.  Note that exprAnalyze() might
102143   ** add new virtual terms onto the end of the WHERE clause.  We do not
102144   ** want to analyze these virtual terms, so start analyzing at the end
102145   ** and work forward so that the added virtual terms are never processed.
102146   */
102147   exprAnalyzeAll(pTabList, pWC);
102148   if( db->mallocFailed ){
102149     goto whereBeginError;
102150   }
102151
102152   /* Chose the best index to use for each table in the FROM clause.
102153   **
102154   ** This loop fills in the following fields:
102155   **
102156   **   pWInfo->a[].pIdx      The index to use for this level of the loop.
102157   **   pWInfo->a[].wsFlags   WHERE_xxx flags associated with pIdx
102158   **   pWInfo->a[].nEq       The number of == and IN constraints
102159   **   pWInfo->a[].iFrom     Which term of the FROM clause is being coded
102160   **   pWInfo->a[].iTabCur   The VDBE cursor for the database table
102161   **   pWInfo->a[].iIdxCur   The VDBE cursor for the index
102162   **   pWInfo->a[].pTerm     When wsFlags==WO_OR, the OR-clause term
102163   **
102164   ** This loop also figures out the nesting order of tables in the FROM
102165   ** clause.
102166   */
102167   notReady = ~(Bitmask)0;
102168   andFlags = ~0;
102169   WHERETRACE(("*** Optimizer Start ***\n"));
102170   for(i=iFrom=0, pLevel=pWInfo->a; i<nTabList; i++, pLevel++){
102171     WhereCost bestPlan;         /* Most efficient plan seen so far */
102172     Index *pIdx;                /* Index for FROM table at pTabItem */
102173     int j;                      /* For looping over FROM tables */
102174     int bestJ = -1;             /* The value of j */
102175     Bitmask m;                  /* Bitmask value for j or bestJ */
102176     int isOptimal;              /* Iterator for optimal/non-optimal search */
102177     int nUnconstrained;         /* Number tables without INDEXED BY */
102178     Bitmask notIndexed;         /* Mask of tables that cannot use an index */
102179
102180     memset(&bestPlan, 0, sizeof(bestPlan));
102181     bestPlan.rCost = SQLITE_BIG_DBL;
102182     WHERETRACE(("*** Begin search for loop %d ***\n", i));
102183
102184     /* Loop through the remaining entries in the FROM clause to find the
102185     ** next nested loop. The loop tests all FROM clause entries
102186     ** either once or twice. 
102187     **
102188     ** The first test is always performed if there are two or more entries
102189     ** remaining and never performed if there is only one FROM clause entry
102190     ** to choose from.  The first test looks for an "optimal" scan.  In
102191     ** this context an optimal scan is one that uses the same strategy
102192     ** for the given FROM clause entry as would be selected if the entry
102193     ** were used as the innermost nested loop.  In other words, a table
102194     ** is chosen such that the cost of running that table cannot be reduced
102195     ** by waiting for other tables to run first.  This "optimal" test works
102196     ** by first assuming that the FROM clause is on the inner loop and finding
102197     ** its query plan, then checking to see if that query plan uses any
102198     ** other FROM clause terms that are notReady.  If no notReady terms are
102199     ** used then the "optimal" query plan works.
102200     **
102201     ** Note that the WhereCost.nRow parameter for an optimal scan might
102202     ** not be as small as it would be if the table really were the innermost
102203     ** join.  The nRow value can be reduced by WHERE clause constraints
102204     ** that do not use indices.  But this nRow reduction only happens if the
102205     ** table really is the innermost join.  
102206     **
102207     ** The second loop iteration is only performed if no optimal scan
102208     ** strategies were found by the first iteration. This second iteration
102209     ** is used to search for the lowest cost scan overall.
102210     **
102211     ** Previous versions of SQLite performed only the second iteration -
102212     ** the next outermost loop was always that with the lowest overall
102213     ** cost. However, this meant that SQLite could select the wrong plan
102214     ** for scripts such as the following:
102215     **   
102216     **   CREATE TABLE t1(a, b); 
102217     **   CREATE TABLE t2(c, d);
102218     **   SELECT * FROM t2, t1 WHERE t2.rowid = t1.a;
102219     **
102220     ** The best strategy is to iterate through table t1 first. However it
102221     ** is not possible to determine this with a simple greedy algorithm.
102222     ** Since the cost of a linear scan through table t2 is the same 
102223     ** as the cost of a linear scan through table t1, a simple greedy 
102224     ** algorithm may choose to use t2 for the outer loop, which is a much
102225     ** costlier approach.
102226     */
102227     nUnconstrained = 0;
102228     notIndexed = 0;
102229     for(isOptimal=(iFrom<nTabList-1); isOptimal>=0 && bestJ<0; isOptimal--){
102230       Bitmask mask;             /* Mask of tables not yet ready */
102231       for(j=iFrom, pTabItem=&pTabList->a[j]; j<nTabList; j++, pTabItem++){
102232         int doNotReorder;    /* True if this table should not be reordered */
102233         WhereCost sCost;     /* Cost information from best[Virtual]Index() */
102234         ExprList *pOrderBy;  /* ORDER BY clause for index to optimize */
102235   
102236         doNotReorder =  (pTabItem->jointype & (JT_LEFT|JT_CROSS))!=0;
102237         if( j!=iFrom && doNotReorder ) break;
102238         m = getMask(pMaskSet, pTabItem->iCursor);
102239         if( (m & notReady)==0 ){
102240           if( j==iFrom ) iFrom++;
102241           continue;
102242         }
102243         mask = (isOptimal ? m : notReady);
102244         pOrderBy = ((i==0 && ppOrderBy )?*ppOrderBy:0);
102245         if( pTabItem->pIndex==0 ) nUnconstrained++;
102246   
102247         WHERETRACE(("=== trying table %d with isOptimal=%d ===\n",
102248                     j, isOptimal));
102249         assert( pTabItem->pTab );
102250 #ifndef SQLITE_OMIT_VIRTUALTABLE
102251         if( IsVirtual(pTabItem->pTab) ){
102252           sqlite3_index_info **pp = &pWInfo->a[j].pIdxInfo;
102253           bestVirtualIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy,
102254                            &sCost, pp);
102255         }else 
102256 #endif
102257         {
102258           bestBtreeIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy,
102259                          &sCost);
102260         }
102261         assert( isOptimal || (sCost.used&notReady)==0 );
102262
102263         /* If an INDEXED BY clause is present, then the plan must use that
102264         ** index if it uses any index at all */
102265         assert( pTabItem->pIndex==0 
102266                   || (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0
102267                   || sCost.plan.u.pIdx==pTabItem->pIndex );
102268
102269         if( isOptimal && (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ){
102270           notIndexed |= m;
102271         }
102272
102273         /* Conditions under which this table becomes the best so far:
102274         **
102275         **   (1) The table must not depend on other tables that have not
102276         **       yet run.
102277         **
102278         **   (2) A full-table-scan plan cannot supercede indexed plan unless
102279         **       the full-table-scan is an "optimal" plan as defined above.
102280         **
102281         **   (3) All tables have an INDEXED BY clause or this table lacks an
102282         **       INDEXED BY clause or this table uses the specific
102283         **       index specified by its INDEXED BY clause.  This rule ensures
102284         **       that a best-so-far is always selected even if an impossible
102285         **       combination of INDEXED BY clauses are given.  The error
102286         **       will be detected and relayed back to the application later.
102287         **       The NEVER() comes about because rule (2) above prevents
102288         **       An indexable full-table-scan from reaching rule (3).
102289         **
102290         **   (4) The plan cost must be lower than prior plans or else the
102291         **       cost must be the same and the number of rows must be lower.
102292         */
102293         if( (sCost.used&notReady)==0                       /* (1) */
102294             && (bestJ<0 || (notIndexed&m)!=0               /* (2) */
102295                 || (bestPlan.plan.wsFlags & WHERE_NOT_FULLSCAN)==0
102296                 || (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0)
102297             && (nUnconstrained==0 || pTabItem->pIndex==0   /* (3) */
102298                 || NEVER((sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0))
102299             && (bestJ<0 || sCost.rCost<bestPlan.rCost      /* (4) */
102300                 || (sCost.rCost<=bestPlan.rCost 
102301                  && sCost.plan.nRow<bestPlan.plan.nRow))
102302         ){
102303           WHERETRACE(("=== table %d is best so far"
102304                       " with cost=%g and nRow=%g\n",
102305                       j, sCost.rCost, sCost.plan.nRow));
102306           bestPlan = sCost;
102307           bestJ = j;
102308         }
102309         if( doNotReorder ) break;
102310       }
102311     }
102312     assert( bestJ>=0 );
102313     assert( notReady & getMask(pMaskSet, pTabList->a[bestJ].iCursor) );
102314     WHERETRACE(("*** Optimizer selects table %d for loop %d"
102315                 " with cost=%g and nRow=%g\n",
102316                 bestJ, pLevel-pWInfo->a, bestPlan.rCost, bestPlan.plan.nRow));
102317     if( (bestPlan.plan.wsFlags & WHERE_ORDERBY)!=0 ){
102318       *ppOrderBy = 0;
102319     }
102320     andFlags &= bestPlan.plan.wsFlags;
102321     pLevel->plan = bestPlan.plan;
102322     testcase( bestPlan.plan.wsFlags & WHERE_INDEXED );
102323     testcase( bestPlan.plan.wsFlags & WHERE_TEMP_INDEX );
102324     if( bestPlan.plan.wsFlags & (WHERE_INDEXED|WHERE_TEMP_INDEX) ){
102325       pLevel->iIdxCur = pParse->nTab++;
102326     }else{
102327       pLevel->iIdxCur = -1;
102328     }
102329     notReady &= ~getMask(pMaskSet, pTabList->a[bestJ].iCursor);
102330     pLevel->iFrom = (u8)bestJ;
102331     if( bestPlan.plan.nRow>=(double)1 ){
102332       pParse->nQueryLoop *= bestPlan.plan.nRow;
102333     }
102334
102335     /* Check that if the table scanned by this loop iteration had an
102336     ** INDEXED BY clause attached to it, that the named index is being
102337     ** used for the scan. If not, then query compilation has failed.
102338     ** Return an error.
102339     */
102340     pIdx = pTabList->a[bestJ].pIndex;
102341     if( pIdx ){
102342       if( (bestPlan.plan.wsFlags & WHERE_INDEXED)==0 ){
102343         sqlite3ErrorMsg(pParse, "cannot use index: %s", pIdx->zName);
102344         goto whereBeginError;
102345       }else{
102346         /* If an INDEXED BY clause is used, the bestIndex() function is
102347         ** guaranteed to find the index specified in the INDEXED BY clause
102348         ** if it find an index at all. */
102349         assert( bestPlan.plan.u.pIdx==pIdx );
102350       }
102351     }
102352   }
102353   WHERETRACE(("*** Optimizer Finished ***\n"));
102354   if( pParse->nErr || db->mallocFailed ){
102355     goto whereBeginError;
102356   }
102357
102358   /* If the total query only selects a single row, then the ORDER BY
102359   ** clause is irrelevant.
102360   */
102361   if( (andFlags & WHERE_UNIQUE)!=0 && ppOrderBy ){
102362     *ppOrderBy = 0;
102363   }
102364
102365   /* If the caller is an UPDATE or DELETE statement that is requesting
102366   ** to use a one-pass algorithm, determine if this is appropriate.
102367   ** The one-pass algorithm only works if the WHERE clause constraints
102368   ** the statement to update a single row.
102369   */
102370   assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 );
102371   if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 && (andFlags & WHERE_UNIQUE)!=0 ){
102372     pWInfo->okOnePass = 1;
102373     pWInfo->a[0].plan.wsFlags &= ~WHERE_IDX_ONLY;
102374   }
102375
102376   /* Open all tables in the pTabList and any indices selected for
102377   ** searching those tables.
102378   */
102379   sqlite3CodeVerifySchema(pParse, -1); /* Insert the cookie verifier Goto */
102380   notReady = ~(Bitmask)0;
102381   pWInfo->nRowOut = (double)1;
102382   for(i=0, pLevel=pWInfo->a; i<nTabList; i++, pLevel++){
102383     Table *pTab;     /* Table to open */
102384     int iDb;         /* Index of database containing table/index */
102385
102386     pTabItem = &pTabList->a[pLevel->iFrom];
102387     pTab = pTabItem->pTab;
102388     pLevel->iTabCur = pTabItem->iCursor;
102389     pWInfo->nRowOut *= pLevel->plan.nRow;
102390     iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
102391     if( (pTab->tabFlags & TF_Ephemeral)!=0 || pTab->pSelect ){
102392       /* Do nothing */
102393     }else
102394 #ifndef SQLITE_OMIT_VIRTUALTABLE
102395     if( (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){
102396       const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);
102397       int iCur = pTabItem->iCursor;
102398       sqlite3VdbeAddOp4(v, OP_VOpen, iCur, 0, 0, pVTab, P4_VTAB);
102399     }else
102400 #endif
102401     if( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0
102402          && (wctrlFlags & WHERE_OMIT_OPEN)==0 ){
102403       int op = pWInfo->okOnePass ? OP_OpenWrite : OP_OpenRead;
102404       sqlite3OpenTable(pParse, pTabItem->iCursor, iDb, pTab, op);
102405       testcase( pTab->nCol==BMS-1 );
102406       testcase( pTab->nCol==BMS );
102407       if( !pWInfo->okOnePass && pTab->nCol<BMS ){
102408         Bitmask b = pTabItem->colUsed;
102409         int n = 0;
102410         for(; b; b=b>>1, n++){}
102411         sqlite3VdbeChangeP4(v, sqlite3VdbeCurrentAddr(v)-1, 
102412                             SQLITE_INT_TO_PTR(n), P4_INT32);
102413         assert( n<=pTab->nCol );
102414       }
102415     }else{
102416       sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
102417     }
102418 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
102419     if( (pLevel->plan.wsFlags & WHERE_TEMP_INDEX)!=0 ){
102420       constructAutomaticIndex(pParse, pWC, pTabItem, notReady, pLevel);
102421     }else
102422 #endif
102423     if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){
102424       Index *pIx = pLevel->plan.u.pIdx;
102425       KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIx);
102426       int iIdxCur = pLevel->iIdxCur;
102427       assert( pIx->pSchema==pTab->pSchema );
102428       assert( iIdxCur>=0 );
102429       sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIx->tnum, iDb,
102430                         (char*)pKey, P4_KEYINFO_HANDOFF);
102431       VdbeComment((v, "%s", pIx->zName));
102432     }
102433     sqlite3CodeVerifySchema(pParse, iDb);
102434     notReady &= ~getMask(pWC->pMaskSet, pTabItem->iCursor);
102435   }
102436   pWInfo->iTop = sqlite3VdbeCurrentAddr(v);
102437   if( db->mallocFailed ) goto whereBeginError;
102438
102439   /* Generate the code to do the search.  Each iteration of the for
102440   ** loop below generates code for a single nested loop of the VM
102441   ** program.
102442   */
102443   notReady = ~(Bitmask)0;
102444   for(i=0; i<nTabList; i++){
102445     pLevel = &pWInfo->a[i];
102446     explainOneScan(pParse, pTabList, pLevel, i, pLevel->iFrom, wctrlFlags);
102447     notReady = codeOneLoopStart(pWInfo, i, wctrlFlags, notReady);
102448     pWInfo->iContinue = pLevel->addrCont;
102449   }
102450
102451 #ifdef SQLITE_TEST  /* For testing and debugging use only */
102452   /* Record in the query plan information about the current table
102453   ** and the index used to access it (if any).  If the table itself
102454   ** is not used, its name is just '{}'.  If no index is used
102455   ** the index is listed as "{}".  If the primary key is used the
102456   ** index name is '*'.
102457   */
102458   for(i=0; i<nTabList; i++){
102459     char *z;
102460     int n;
102461     pLevel = &pWInfo->a[i];
102462     pTabItem = &pTabList->a[pLevel->iFrom];
102463     z = pTabItem->zAlias;
102464     if( z==0 ) z = pTabItem->pTab->zName;
102465     n = sqlite3Strlen30(z);
102466     if( n+nQPlan < sizeof(sqlite3_query_plan)-10 ){
102467       if( pLevel->plan.wsFlags & WHERE_IDX_ONLY ){
102468         memcpy(&sqlite3_query_plan[nQPlan], "{}", 2);
102469         nQPlan += 2;
102470       }else{
102471         memcpy(&sqlite3_query_plan[nQPlan], z, n);
102472         nQPlan += n;
102473       }
102474       sqlite3_query_plan[nQPlan++] = ' ';
102475     }
102476     testcase( pLevel->plan.wsFlags & WHERE_ROWID_EQ );
102477     testcase( pLevel->plan.wsFlags & WHERE_ROWID_RANGE );
102478     if( pLevel->plan.wsFlags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
102479       memcpy(&sqlite3_query_plan[nQPlan], "* ", 2);
102480       nQPlan += 2;
102481     }else if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){
102482       n = sqlite3Strlen30(pLevel->plan.u.pIdx->zName);
102483       if( n+nQPlan < sizeof(sqlite3_query_plan)-2 ){
102484         memcpy(&sqlite3_query_plan[nQPlan], pLevel->plan.u.pIdx->zName, n);
102485         nQPlan += n;
102486         sqlite3_query_plan[nQPlan++] = ' ';
102487       }
102488     }else{
102489       memcpy(&sqlite3_query_plan[nQPlan], "{} ", 3);
102490       nQPlan += 3;
102491     }
102492   }
102493   while( nQPlan>0 && sqlite3_query_plan[nQPlan-1]==' ' ){
102494     sqlite3_query_plan[--nQPlan] = 0;
102495   }
102496   sqlite3_query_plan[nQPlan] = 0;
102497   nQPlan = 0;
102498 #endif /* SQLITE_TEST // Testing and debugging use only */
102499
102500   /* Record the continuation address in the WhereInfo structure.  Then
102501   ** clean up and return.
102502   */
102503   return pWInfo;
102504
102505   /* Jump here if malloc fails */
102506 whereBeginError:
102507   if( pWInfo ){
102508     pParse->nQueryLoop = pWInfo->savedNQueryLoop;
102509     whereInfoFree(db, pWInfo);
102510   }
102511   return 0;
102512 }
102513
102514 /*
102515 ** Generate the end of the WHERE loop.  See comments on 
102516 ** sqlite3WhereBegin() for additional information.
102517 */
102518 SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
102519   Parse *pParse = pWInfo->pParse;
102520   Vdbe *v = pParse->pVdbe;
102521   int i;
102522   WhereLevel *pLevel;
102523   SrcList *pTabList = pWInfo->pTabList;
102524   sqlite3 *db = pParse->db;
102525
102526   /* Generate loop termination code.
102527   */
102528   sqlite3ExprCacheClear(pParse);
102529   for(i=pWInfo->nLevel-1; i>=0; i--){
102530     pLevel = &pWInfo->a[i];
102531     sqlite3VdbeResolveLabel(v, pLevel->addrCont);
102532     if( pLevel->op!=OP_Noop ){
102533       sqlite3VdbeAddOp2(v, pLevel->op, pLevel->p1, pLevel->p2);
102534       sqlite3VdbeChangeP5(v, pLevel->p5);
102535     }
102536     if( pLevel->plan.wsFlags & WHERE_IN_ABLE && pLevel->u.in.nIn>0 ){
102537       struct InLoop *pIn;
102538       int j;
102539       sqlite3VdbeResolveLabel(v, pLevel->addrNxt);
102540       for(j=pLevel->u.in.nIn, pIn=&pLevel->u.in.aInLoop[j-1]; j>0; j--, pIn--){
102541         sqlite3VdbeJumpHere(v, pIn->addrInTop+1);
102542         sqlite3VdbeAddOp2(v, OP_Next, pIn->iCur, pIn->addrInTop);
102543         sqlite3VdbeJumpHere(v, pIn->addrInTop-1);
102544       }
102545       sqlite3DbFree(db, pLevel->u.in.aInLoop);
102546     }
102547     sqlite3VdbeResolveLabel(v, pLevel->addrBrk);
102548     if( pLevel->iLeftJoin ){
102549       int addr;
102550       addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin);
102551       assert( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0
102552            || (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 );
102553       if( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0 ){
102554         sqlite3VdbeAddOp1(v, OP_NullRow, pTabList->a[i].iCursor);
102555       }
102556       if( pLevel->iIdxCur>=0 ){
102557         sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur);
102558       }
102559       if( pLevel->op==OP_Return ){
102560         sqlite3VdbeAddOp2(v, OP_Gosub, pLevel->p1, pLevel->addrFirst);
102561       }else{
102562         sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrFirst);
102563       }
102564       sqlite3VdbeJumpHere(v, addr);
102565     }
102566   }
102567
102568   /* The "break" point is here, just past the end of the outer loop.
102569   ** Set it.
102570   */
102571   sqlite3VdbeResolveLabel(v, pWInfo->iBreak);
102572
102573   /* Close all of the cursors that were opened by sqlite3WhereBegin.
102574   */
102575   assert( pWInfo->nLevel==1 || pWInfo->nLevel==pTabList->nSrc );
102576   for(i=0, pLevel=pWInfo->a; i<pWInfo->nLevel; i++, pLevel++){
102577     struct SrcList_item *pTabItem = &pTabList->a[pLevel->iFrom];
102578     Table *pTab = pTabItem->pTab;
102579     assert( pTab!=0 );
102580     if( (pTab->tabFlags & TF_Ephemeral)==0
102581      && pTab->pSelect==0
102582      && (pWInfo->wctrlFlags & WHERE_OMIT_CLOSE)==0
102583     ){
102584       int ws = pLevel->plan.wsFlags;
102585       if( !pWInfo->okOnePass && (ws & WHERE_IDX_ONLY)==0 ){
102586         sqlite3VdbeAddOp1(v, OP_Close, pTabItem->iCursor);
102587       }
102588       if( (ws & WHERE_INDEXED)!=0 && (ws & WHERE_TEMP_INDEX)==0 ){
102589         sqlite3VdbeAddOp1(v, OP_Close, pLevel->iIdxCur);
102590       }
102591     }
102592
102593     /* If this scan uses an index, make code substitutions to read data
102594     ** from the index in preference to the table. Sometimes, this means
102595     ** the table need never be read from. This is a performance boost,
102596     ** as the vdbe level waits until the table is read before actually
102597     ** seeking the table cursor to the record corresponding to the current
102598     ** position in the index.
102599     ** 
102600     ** Calls to the code generator in between sqlite3WhereBegin and
102601     ** sqlite3WhereEnd will have created code that references the table
102602     ** directly.  This loop scans all that code looking for opcodes
102603     ** that reference the table and converts them into opcodes that
102604     ** reference the index.
102605     */
102606     if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 && !db->mallocFailed){
102607       int k, j, last;
102608       VdbeOp *pOp;
102609       Index *pIdx = pLevel->plan.u.pIdx;
102610
102611       assert( pIdx!=0 );
102612       pOp = sqlite3VdbeGetOp(v, pWInfo->iTop);
102613       last = sqlite3VdbeCurrentAddr(v);
102614       for(k=pWInfo->iTop; k<last; k++, pOp++){
102615         if( pOp->p1!=pLevel->iTabCur ) continue;
102616         if( pOp->opcode==OP_Column ){
102617           for(j=0; j<pIdx->nColumn; j++){
102618             if( pOp->p2==pIdx->aiColumn[j] ){
102619               pOp->p2 = j;
102620               pOp->p1 = pLevel->iIdxCur;
102621               break;
102622             }
102623           }
102624           assert( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0
102625                || j<pIdx->nColumn );
102626         }else if( pOp->opcode==OP_Rowid ){
102627           pOp->p1 = pLevel->iIdxCur;
102628           pOp->opcode = OP_IdxRowid;
102629         }
102630       }
102631     }
102632   }
102633
102634   /* Final cleanup
102635   */
102636   pParse->nQueryLoop = pWInfo->savedNQueryLoop;
102637   whereInfoFree(db, pWInfo);
102638   return;
102639 }
102640
102641 /************** End of where.c ***********************************************/
102642 /************** Begin file parse.c *******************************************/
102643 /* Driver template for the LEMON parser generator.
102644 ** The author disclaims copyright to this source code.
102645 **
102646 ** This version of "lempar.c" is modified, slightly, for use by SQLite.
102647 ** The only modifications are the addition of a couple of NEVER()
102648 ** macros to disable tests that are needed in the case of a general
102649 ** LALR(1) grammar but which are always false in the
102650 ** specific grammar used by SQLite.
102651 */
102652 /* First off, code is included that follows the "include" declaration
102653 ** in the input grammar file. */
102654
102655
102656 /*
102657 ** Disable all error recovery processing in the parser push-down
102658 ** automaton.
102659 */
102660 #define YYNOERRORRECOVERY 1
102661
102662 /*
102663 ** Make yytestcase() the same as testcase()
102664 */
102665 #define yytestcase(X) testcase(X)
102666
102667 /*
102668 ** An instance of this structure holds information about the
102669 ** LIMIT clause of a SELECT statement.
102670 */
102671 struct LimitVal {
102672   Expr *pLimit;    /* The LIMIT expression.  NULL if there is no limit */
102673   Expr *pOffset;   /* The OFFSET expression.  NULL if there is none */
102674 };
102675
102676 /*
102677 ** An instance of this structure is used to store the LIKE,
102678 ** GLOB, NOT LIKE, and NOT GLOB operators.
102679 */
102680 struct LikeOp {
102681   Token eOperator;  /* "like" or "glob" or "regexp" */
102682   int not;         /* True if the NOT keyword is present */
102683 };
102684
102685 /*
102686 ** An instance of the following structure describes the event of a
102687 ** TRIGGER.  "a" is the event type, one of TK_UPDATE, TK_INSERT,
102688 ** TK_DELETE, or TK_INSTEAD.  If the event is of the form
102689 **
102690 **      UPDATE ON (a,b,c)
102691 **
102692 ** Then the "b" IdList records the list "a,b,c".
102693 */
102694 struct TrigEvent { int a; IdList * b; };
102695
102696 /*
102697 ** An instance of this structure holds the ATTACH key and the key type.
102698 */
102699 struct AttachKey { int type;  Token key; };
102700
102701
102702   /* This is a utility routine used to set the ExprSpan.zStart and
102703   ** ExprSpan.zEnd values of pOut so that the span covers the complete
102704   ** range of text beginning with pStart and going to the end of pEnd.
102705   */
102706   static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){
102707     pOut->zStart = pStart->z;
102708     pOut->zEnd = &pEnd->z[pEnd->n];
102709   }
102710
102711   /* Construct a new Expr object from a single identifier.  Use the
102712   ** new Expr to populate pOut.  Set the span of pOut to be the identifier
102713   ** that created the expression.
102714   */
102715   static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token *pValue){
102716     pOut->pExpr = sqlite3PExpr(pParse, op, 0, 0, pValue);
102717     pOut->zStart = pValue->z;
102718     pOut->zEnd = &pValue->z[pValue->n];
102719   }
102720
102721   /* This routine constructs a binary expression node out of two ExprSpan
102722   ** objects and uses the result to populate a new ExprSpan object.
102723   */
102724   static void spanBinaryExpr(
102725     ExprSpan *pOut,     /* Write the result here */
102726     Parse *pParse,      /* The parsing context.  Errors accumulate here */
102727     int op,             /* The binary operation */
102728     ExprSpan *pLeft,    /* The left operand */
102729     ExprSpan *pRight    /* The right operand */
102730   ){
102731     pOut->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr, 0);
102732     pOut->zStart = pLeft->zStart;
102733     pOut->zEnd = pRight->zEnd;
102734   }
102735
102736   /* Construct an expression node for a unary postfix operator
102737   */
102738   static void spanUnaryPostfix(
102739     ExprSpan *pOut,        /* Write the new expression node here */
102740     Parse *pParse,         /* Parsing context to record errors */
102741     int op,                /* The operator */
102742     ExprSpan *pOperand,    /* The operand */
102743     Token *pPostOp         /* The operand token for setting the span */
102744   ){
102745     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
102746     pOut->zStart = pOperand->zStart;
102747     pOut->zEnd = &pPostOp->z[pPostOp->n];
102748   }                           
102749
102750   /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
102751   ** unary TK_ISNULL or TK_NOTNULL expression. */
102752   static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
102753     sqlite3 *db = pParse->db;
102754     if( db->mallocFailed==0 && pY->op==TK_NULL ){
102755       pA->op = (u8)op;
102756       sqlite3ExprDelete(db, pA->pRight);
102757       pA->pRight = 0;
102758     }
102759   }
102760
102761   /* Construct an expression node for a unary prefix operator
102762   */
102763   static void spanUnaryPrefix(
102764     ExprSpan *pOut,        /* Write the new expression node here */
102765     Parse *pParse,         /* Parsing context to record errors */
102766     int op,                /* The operator */
102767     ExprSpan *pOperand,    /* The operand */
102768     Token *pPreOp         /* The operand token for setting the span */
102769   ){
102770     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
102771     pOut->zStart = pPreOp->z;
102772     pOut->zEnd = pOperand->zEnd;
102773   }
102774 /* Next is all token values, in a form suitable for use by makeheaders.
102775 ** This section will be null unless lemon is run with the -m switch.
102776 */
102777 /* 
102778 ** These constants (all generated automatically by the parser generator)
102779 ** specify the various kinds of tokens (terminals) that the parser
102780 ** understands. 
102781 **
102782 ** Each symbol here is a terminal symbol in the grammar.
102783 */
102784 /* Make sure the INTERFACE macro is defined.
102785 */
102786 #ifndef INTERFACE
102787 # define INTERFACE 1
102788 #endif
102789 /* The next thing included is series of defines which control
102790 ** various aspects of the generated parser.
102791 **    YYCODETYPE         is the data type used for storing terminal
102792 **                       and nonterminal numbers.  "unsigned char" is
102793 **                       used if there are fewer than 250 terminals
102794 **                       and nonterminals.  "int" is used otherwise.
102795 **    YYNOCODE           is a number of type YYCODETYPE which corresponds
102796 **                       to no legal terminal or nonterminal number.  This
102797 **                       number is used to fill in empty slots of the hash 
102798 **                       table.
102799 **    YYFALLBACK         If defined, this indicates that one or more tokens
102800 **                       have fall-back values which should be used if the
102801 **                       original value of the token will not parse.
102802 **    YYACTIONTYPE       is the data type used for storing terminal
102803 **                       and nonterminal numbers.  "unsigned char" is
102804 **                       used if there are fewer than 250 rules and
102805 **                       states combined.  "int" is used otherwise.
102806 **    sqlite3ParserTOKENTYPE     is the data type used for minor tokens given 
102807 **                       directly to the parser from the tokenizer.
102808 **    YYMINORTYPE        is the data type used for all minor tokens.
102809 **                       This is typically a union of many types, one of
102810 **                       which is sqlite3ParserTOKENTYPE.  The entry in the union
102811 **                       for base tokens is called "yy0".
102812 **    YYSTACKDEPTH       is the maximum depth of the parser's stack.  If
102813 **                       zero the stack is dynamically sized using realloc()
102814 **    sqlite3ParserARG_SDECL     A static variable declaration for the %extra_argument
102815 **    sqlite3ParserARG_PDECL     A parameter declaration for the %extra_argument
102816 **    sqlite3ParserARG_STORE     Code to store %extra_argument into yypParser
102817 **    sqlite3ParserARG_FETCH     Code to extract %extra_argument from yypParser
102818 **    YYNSTATE           the combined number of states.
102819 **    YYNRULE            the number of rules in the grammar
102820 **    YYERRORSYMBOL      is the code number of the error symbol.  If not
102821 **                       defined, then do no error processing.
102822 */
102823 #define YYCODETYPE unsigned char
102824 #define YYNOCODE 253
102825 #define YYACTIONTYPE unsigned short int
102826 #define YYWILDCARD 67
102827 #define sqlite3ParserTOKENTYPE Token
102828 typedef union {
102829   int yyinit;
102830   sqlite3ParserTOKENTYPE yy0;
102831   int yy4;
102832   struct TrigEvent yy90;
102833   ExprSpan yy118;
102834   TriggerStep* yy203;
102835   u8 yy210;
102836   struct {int value; int mask;} yy215;
102837   SrcList* yy259;
102838   struct LimitVal yy292;
102839   Expr* yy314;
102840   ExprList* yy322;
102841   struct LikeOp yy342;
102842   IdList* yy384;
102843   Select* yy387;
102844 } YYMINORTYPE;
102845 #ifndef YYSTACKDEPTH
102846 #define YYSTACKDEPTH 100
102847 #endif
102848 #define sqlite3ParserARG_SDECL Parse *pParse;
102849 #define sqlite3ParserARG_PDECL ,Parse *pParse
102850 #define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse
102851 #define sqlite3ParserARG_STORE yypParser->pParse = pParse
102852 #define YYNSTATE 630
102853 #define YYNRULE 329
102854 #define YYFALLBACK 1
102855 #define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)
102856 #define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)
102857 #define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)
102858
102859 /* The yyzerominor constant is used to initialize instances of
102860 ** YYMINORTYPE objects to zero. */
102861 static const YYMINORTYPE yyzerominor = { 0 };
102862
102863 /* Define the yytestcase() macro to be a no-op if is not already defined
102864 ** otherwise.
102865 **
102866 ** Applications can choose to define yytestcase() in the %include section
102867 ** to a macro that can assist in verifying code coverage.  For production
102868 ** code the yytestcase() macro should be turned off.  But it is useful
102869 ** for testing.
102870 */
102871 #ifndef yytestcase
102872 # define yytestcase(X)
102873 #endif
102874
102875
102876 /* Next are the tables used to determine what action to take based on the
102877 ** current state and lookahead token.  These tables are used to implement
102878 ** functions that take a state number and lookahead value and return an
102879 ** action integer.  
102880 **
102881 ** Suppose the action integer is N.  Then the action is determined as
102882 ** follows
102883 **
102884 **   0 <= N < YYNSTATE                  Shift N.  That is, push the lookahead
102885 **                                      token onto the stack and goto state N.
102886 **
102887 **   YYNSTATE <= N < YYNSTATE+YYNRULE   Reduce by rule N-YYNSTATE.
102888 **
102889 **   N == YYNSTATE+YYNRULE              A syntax error has occurred.
102890 **
102891 **   N == YYNSTATE+YYNRULE+1            The parser accepts its input.
102892 **
102893 **   N == YYNSTATE+YYNRULE+2            No such action.  Denotes unused
102894 **                                      slots in the yy_action[] table.
102895 **
102896 ** The action table is constructed as a single large table named yy_action[].
102897 ** Given state S and lookahead X, the action is computed as
102898 **
102899 **      yy_action[ yy_shift_ofst[S] + X ]
102900 **
102901 ** If the index value yy_shift_ofst[S]+X is out of range or if the value
102902 ** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
102903 ** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
102904 ** and that yy_default[S] should be used instead.  
102905 **
102906 ** The formula above is for computing the action when the lookahead is
102907 ** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
102908 ** a reduce action) then the yy_reduce_ofst[] array is used in place of
102909 ** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
102910 ** YY_SHIFT_USE_DFLT.
102911 **
102912 ** The following are the tables generated in this section:
102913 **
102914 **  yy_action[]        A single table containing all actions.
102915 **  yy_lookahead[]     A table containing the lookahead for each entry in
102916 **                     yy_action.  Used to detect hash collisions.
102917 **  yy_shift_ofst[]    For each state, the offset into yy_action for
102918 **                     shifting terminals.
102919 **  yy_reduce_ofst[]   For each state, the offset into yy_action for
102920 **                     shifting non-terminals after a reduce.
102921 **  yy_default[]       Default action for each state.
102922 */
102923 #define YY_ACTTAB_COUNT (1557)
102924 static const YYACTIONTYPE yy_action[] = {
102925  /*     0 */   313,  960,  186,  419,    2,  172,  627,  597,   55,   55,
102926  /*    10 */    55,   55,   48,   53,   53,   53,   53,   52,   52,   51,
102927  /*    20 */    51,   51,   50,  238,  302,  283,  623,  622,  516,  515,
102928  /*    30 */   590,  584,   55,   55,   55,   55,  282,   53,   53,   53,
102929  /*    40 */    53,   52,   52,   51,   51,   51,   50,  238,    6,   56,
102930  /*    50 */    57,   47,  582,  581,  583,  583,   54,   54,   55,   55,
102931  /*    60 */    55,   55,  608,   53,   53,   53,   53,   52,   52,   51,
102932  /*    70 */    51,   51,   50,  238,  313,  597,  409,  330,  579,  579,
102933  /*    80 */    32,   53,   53,   53,   53,   52,   52,   51,   51,   51,
102934  /*    90 */    50,  238,  330,  217,  620,  619,  166,  411,  624,  382,
102935  /*   100 */   379,  378,    7,  491,  590,  584,  200,  199,  198,   58,
102936  /*   110 */   377,  300,  414,  621,  481,   66,  623,  622,  621,  580,
102937  /*   120 */   254,  601,   94,   56,   57,   47,  582,  581,  583,  583,
102938  /*   130 */    54,   54,   55,   55,   55,   55,  671,   53,   53,   53,
102939  /*   140 */    53,   52,   52,   51,   51,   51,   50,  238,  313,  532,
102940  /*   150 */   226,  506,  507,  133,  177,  139,  284,  385,  279,  384,
102941  /*   160 */   169,  197,  342,  398,  251,  226,  253,  275,  388,  167,
102942  /*   170 */   139,  284,  385,  279,  384,  169,  570,  236,  590,  584,
102943  /*   180 */   672,  240,  275,  157,  620,  619,  554,  437,   51,   51,
102944  /*   190 */    51,   50,  238,  343,  439,  553,  438,   56,   57,   47,
102945  /*   200 */   582,  581,  583,  583,   54,   54,   55,   55,   55,   55,
102946  /*   210 */   465,   53,   53,   53,   53,   52,   52,   51,   51,   51,
102947  /*   220 */    50,  238,  313,  390,   52,   52,   51,   51,   51,   50,
102948  /*   230 */   238,  391,  166,  491,  566,  382,  379,  378,  409,  440,
102949  /*   240 */   579,  579,  252,  440,  607,   66,  377,  513,  621,   49,
102950  /*   250 */    46,  147,  590,  584,  621,   16,  466,  189,  621,  441,
102951  /*   260 */   442,  673,  526,  441,  340,  577,  595,   64,  194,  482,
102952  /*   270 */   434,   56,   57,   47,  582,  581,  583,  583,   54,   54,
102953  /*   280 */    55,   55,   55,   55,   30,   53,   53,   53,   53,   52,
102954  /*   290 */    52,   51,   51,   51,   50,  238,  313,  593,  593,  593,
102955  /*   300 */   387,  578,  606,  493,  259,  351,  258,  411,    1,  623,
102956  /*   310 */   622,  496,  623,  622,   65,  240,  623,  622,  597,  443,
102957  /*   320 */   237,  239,  414,  341,  237,  602,  590,  584,   18,  603,
102958  /*   330 */   166,  601,   87,  382,  379,  378,   67,  623,  622,   38,
102959  /*   340 */   623,  622,  176,  270,  377,   56,   57,   47,  582,  581,
102960  /*   350 */   583,  583,   54,   54,   55,   55,   55,   55,  175,   53,
102961  /*   360 */    53,   53,   53,   52,   52,   51,   51,   51,   50,  238,
102962  /*   370 */   313,  396,  233,  411,  531,  565,  317,  620,  619,   44,
102963  /*   380 */   620,  619,  240,  206,  620,  619,  597,  266,  414,  268,
102964  /*   390 */   409,  597,  579,  579,  352,  184,  505,  601,   73,  533,
102965  /*   400 */   590,  584,  466,  548,  190,  620,  619,  576,  620,  619,
102966  /*   410 */   547,  383,  551,   35,  332,  575,  574,  600,  504,   56,
102967  /*   420 */    57,   47,  582,  581,  583,  583,   54,   54,   55,   55,
102968  /*   430 */    55,   55,  567,   53,   53,   53,   53,   52,   52,   51,
102969  /*   440 */    51,   51,   50,  238,  313,  411,  561,  561,  528,  364,
102970  /*   450 */   259,  351,  258,  183,  361,  549,  524,  374,  411,  597,
102971  /*   460 */   414,  240,  560,  560,  409,  604,  579,  579,  328,  601,
102972  /*   470 */    93,  623,  622,  414,  590,  584,  237,  564,  559,  559,
102973  /*   480 */   520,  402,  601,   87,  409,  210,  579,  579,  168,  421,
102974  /*   490 */   950,  519,  950,   56,   57,   47,  582,  581,  583,  583,
102975  /*   500 */    54,   54,   55,   55,   55,   55,  192,   53,   53,   53,
102976  /*   510 */    53,   52,   52,   51,   51,   51,   50,  238,  313,  600,
102977  /*   520 */   293,  563,  511,  234,  357,  146,  475,  475,  367,  411,
102978  /*   530 */   562,  411,  358,  542,  425,  171,  411,  215,  144,  620,
102979  /*   540 */   619,  544,  318,  353,  414,  203,  414,  275,  590,  584,
102980  /*   550 */   549,  414,  174,  601,   94,  601,   79,  558,  471,   61,
102981  /*   560 */   601,   79,  421,  949,  350,  949,   34,   56,   57,   47,
102982  /*   570 */   582,  581,  583,  583,   54,   54,   55,   55,   55,   55,
102983  /*   580 */   535,   53,   53,   53,   53,   52,   52,   51,   51,   51,
102984  /*   590 */    50,  238,  313,  307,  424,  394,  272,   49,   46,  147,
102985  /*   600 */   349,  322,    4,  411,  491,  312,  321,  425,  568,  492,
102986  /*   610 */   216,  264,  407,  575,  574,  429,   66,  549,  414,  621,
102987  /*   620 */   540,  602,  590,  584,   13,  603,  621,  601,   72,   12,
102988  /*   630 */   618,  617,  616,  202,  210,  621,  546,  469,  422,  319,
102989  /*   640 */   148,   56,   57,   47,  582,  581,  583,  583,   54,   54,
102990  /*   650 */    55,   55,   55,   55,  338,   53,   53,   53,   53,   52,
102991  /*   660 */    52,   51,   51,   51,   50,  238,  313,  600,  600,  411,
102992  /*   670 */    39,   21,   37,  170,  237,  875,  411,  572,  572,  201,
102993  /*   680 */   144,  473,  538,  331,  414,  474,  143,  146,  630,  628,
102994  /*   690 */   334,  414,  353,  601,   68,  168,  590,  584,  132,  365,
102995  /*   700 */   601,   96,  307,  423,  530,  336,   49,   46,  147,  568,
102996  /*   710 */   406,  216,  549,  360,  529,   56,   57,   47,  582,  581,
102997  /*   720 */   583,  583,   54,   54,   55,   55,   55,   55,  411,   53,
102998  /*   730 */    53,   53,   53,   52,   52,   51,   51,   51,   50,  238,
102999  /*   740 */   313,  411,  605,  414,  484,  510,  172,  422,  597,  318,
103000  /*   750 */   496,  485,  601,   99,  411,  142,  414,  411,  231,  411,
103001  /*   760 */   540,  411,  359,  629,    2,  601,   97,  426,  308,  414,
103002  /*   770 */   590,  584,  414,   20,  414,  621,  414,  621,  601,  106,
103003  /*   780 */   503,  601,  105,  601,  108,  601,  109,  204,   28,   56,
103004  /*   790 */    57,   47,  582,  581,  583,  583,   54,   54,   55,   55,
103005  /*   800 */    55,   55,  411,   53,   53,   53,   53,   52,   52,   51,
103006  /*   810 */    51,   51,   50,  238,  313,  411,  597,  414,  411,  276,
103007  /*   820 */   214,  600,  411,  366,  213,  381,  601,  134,  274,  500,
103008  /*   830 */   414,  167,  130,  414,  621,  411,  354,  414,  376,  601,
103009  /*   840 */   135,  129,  601,  100,  590,  584,  601,  104,  522,  521,
103010  /*   850 */   414,  621,  224,  273,  600,  167,  327,  282,  600,  601,
103011  /*   860 */   103,  468,  521,   56,   57,   47,  582,  581,  583,  583,
103012  /*   870 */    54,   54,   55,   55,   55,   55,  411,   53,   53,   53,
103013  /*   880 */    53,   52,   52,   51,   51,   51,   50,  238,  313,  411,
103014  /*   890 */    27,  414,  411,  375,  276,  167,  359,  544,   50,  238,
103015  /*   900 */   601,   95,  128,  223,  414,  411,  165,  414,  411,  621,
103016  /*   910 */   411,  621,  612,  601,  102,  372,  601,   76,  590,  584,
103017  /*   920 */   414,  570,  236,  414,  470,  414,  167,  621,  188,  601,
103018  /*   930 */    98,  225,  601,  138,  601,  137,  232,   56,   45,   47,
103019  /*   940 */   582,  581,  583,  583,   54,   54,   55,   55,   55,   55,
103020  /*   950 */   411,   53,   53,   53,   53,   52,   52,   51,   51,   51,
103021  /*   960 */    50,  238,  313,  276,  276,  414,  411,  276,  544,  459,
103022  /*   970 */   359,  171,  209,  479,  601,  136,  628,  334,  621,  621,
103023  /*   980 */   125,  414,  621,  368,  411,  621,  257,  540,  589,  588,
103024  /*   990 */   601,   75,  590,  584,  458,  446,   23,   23,  124,  414,
103025  /*  1000 */   326,  325,  621,  427,  324,  309,  600,  288,  601,   92,
103026  /*  1010 */   586,  585,   57,   47,  582,  581,  583,  583,   54,   54,
103027  /*  1020 */    55,   55,   55,   55,  411,   53,   53,   53,   53,   52,
103028  /*  1030 */    52,   51,   51,   51,   50,  238,  313,  587,  411,  414,
103029  /*  1040 */   411,  207,  611,  476,  171,  472,  160,  123,  601,   91,
103030  /*  1050 */   323,  261,   15,  414,  464,  414,  411,  621,  411,  354,
103031  /*  1060 */   222,  411,  601,   74,  601,   90,  590,  584,  159,  264,
103032  /*  1070 */   158,  414,  461,  414,  621,  600,  414,  121,  120,   25,
103033  /*  1080 */   601,   89,  601,  101,  621,  601,   88,   47,  582,  581,
103034  /*  1090 */   583,  583,   54,   54,   55,   55,   55,   55,  544,   53,
103035  /*  1100 */    53,   53,   53,   52,   52,   51,   51,   51,   50,  238,
103036  /*  1110 */    43,  405,  263,    3,  610,  264,  140,  415,  622,   24,
103037  /*  1120 */   410,   11,  456,  594,  118,  155,  219,  452,  408,  621,
103038  /*  1130 */   621,  621,  156,   43,  405,  621,    3,  286,  621,  113,
103039  /*  1140 */   415,  622,  111,  445,  411,  400,  557,  403,  545,   10,
103040  /*  1150 */   411,  408,  264,  110,  205,  436,  541,  566,  453,  414,
103041  /*  1160 */   621,  621,   63,  621,  435,  414,  411,  621,  601,   94,
103042  /*  1170 */   403,  621,  411,  337,  601,   86,  150,   40,   41,  534,
103043  /*  1180 */   566,  414,  242,  264,   42,  413,  412,  414,  600,  595,
103044  /*  1190 */   601,   85,  191,  333,  107,  451,  601,   84,  621,  539,
103045  /*  1200 */    40,   41,  420,  230,  411,  149,  316,   42,  413,  412,
103046  /*  1210 */   398,  127,  595,  315,  621,  399,  278,  625,  181,  414,
103047  /*  1220 */   593,  593,  593,  592,  591,   14,  450,  411,  601,   71,
103048  /*  1230 */   240,  621,   43,  405,  264,    3,  615,  180,  264,  415,
103049  /*  1240 */   622,  614,  414,  593,  593,  593,  592,  591,   14,  621,
103050  /*  1250 */   408,  601,   70,  621,  417,   33,  405,  613,    3,  411,
103051  /*  1260 */   264,  411,  415,  622,  418,  626,  178,  509,    8,  403,
103052  /*  1270 */   241,  416,  126,  408,  414,  621,  414,  449,  208,  566,
103053  /*  1280 */   240,  221,  621,  601,   83,  601,   82,  599,  297,  277,
103054  /*  1290 */   296,   30,  403,   31,  395,  264,  295,  397,  489,   40,
103055  /*  1300 */    41,  411,  566,  220,  621,  294,   42,  413,  412,  271,
103056  /*  1310 */   621,  595,  600,  621,   59,   60,  414,  269,  267,  623,
103057  /*  1320 */   622,   36,   40,   41,  621,  601,   81,  598,  235,   42,
103058  /*  1330 */   413,  412,  621,  621,  595,  265,  344,  411,  248,  556,
103059  /*  1340 */   173,  185,  593,  593,  593,  592,  591,   14,  218,   29,
103060  /*  1350 */   621,  543,  414,  305,  304,  303,  179,  301,  411,  566,
103061  /*  1360 */   454,  601,   80,  289,  335,  593,  593,  593,  592,  591,
103062  /*  1370 */    14,  411,  287,  414,  151,  392,  246,  260,  411,  196,
103063  /*  1380 */   195,  523,  601,   69,  411,  245,  414,  526,  537,  285,
103064  /*  1390 */   389,  595,  621,  414,  536,  601,   17,  362,  153,  414,
103065  /*  1400 */   466,  463,  601,   78,  154,  414,  462,  152,  601,   77,
103066  /*  1410 */   355,  255,  621,  455,  601,    9,  621,  386,  444,  517,
103067  /*  1420 */   247,  621,  593,  593,  593,  621,  621,  244,  621,  243,
103068  /*  1430 */   430,  518,  292,  621,  329,  621,  145,  393,  280,  513,
103069  /*  1440 */   291,  131,  621,  514,  621,  621,  311,  621,  259,  346,
103070  /*  1450 */   249,  621,  621,  229,  314,  621,  228,  512,  227,  240,
103071  /*  1460 */   494,  488,  310,  164,  487,  486,  373,  480,  163,  262,
103072  /*  1470 */   369,  371,  162,   26,  212,  478,  477,  161,  141,  363,
103073  /*  1480 */   467,  122,  339,  187,  119,  348,  347,  117,  116,  115,
103074  /*  1490 */   114,  112,  182,  457,  320,   22,  433,  432,  448,   19,
103075  /*  1500 */   609,  431,  428,   62,  193,  596,  573,  298,  555,  552,
103076  /*  1510 */   571,  404,  290,  380,  498,  510,  495,  306,  281,  499,
103077  /*  1520 */   250,    5,  497,  460,  345,  447,  569,  550,  238,  299,
103078  /*  1530 */   527,  525,  508,  961,  502,  501,  961,  401,  961,  211,
103079  /*  1540 */   490,  356,  256,  961,  483,  961,  961,  961,  961,  961,
103080  /*  1550 */   961,  961,  961,  961,  961,  961,  370,
103081 };
103082 static const YYCODETYPE yy_lookahead[] = {
103083  /*     0 */    19,  142,  143,  144,  145,   24,    1,   26,   77,   78,
103084  /*    10 */    79,   80,   81,   82,   83,   84,   85,   86,   87,   88,
103085  /*    20 */    89,   90,   91,   92,   15,   98,   26,   27,    7,    8,
103086  /*    30 */    49,   50,   77,   78,   79,   80,  109,   82,   83,   84,
103087  /*    40 */    85,   86,   87,   88,   89,   90,   91,   92,   22,   68,
103088  /*    50 */    69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
103089  /*    60 */    79,   80,   23,   82,   83,   84,   85,   86,   87,   88,
103090  /*    70 */    89,   90,   91,   92,   19,   94,  112,   19,  114,  115,
103091  /*    80 */    25,   82,   83,   84,   85,   86,   87,   88,   89,   90,
103092  /*    90 */    91,   92,   19,   22,   94,   95,   96,  150,  150,   99,
103093  /*   100 */   100,  101,   76,  150,   49,   50,  105,  106,  107,   54,
103094  /*   110 */   110,  158,  165,  165,  161,  162,   26,   27,  165,  113,
103095  /*   120 */    16,  174,  175,   68,   69,   70,   71,   72,   73,   74,
103096  /*   130 */    75,   76,   77,   78,   79,   80,  118,   82,   83,   84,
103097  /*   140 */    85,   86,   87,   88,   89,   90,   91,   92,   19,   23,
103098  /*   150 */    92,   97,   98,   24,   96,   97,   98,   99,  100,  101,
103099  /*   160 */   102,   25,   97,  216,   60,   92,   62,  109,  221,   25,
103100  /*   170 */    97,   98,   99,  100,  101,  102,   86,   87,   49,   50,
103101  /*   180 */   118,  116,  109,   25,   94,   95,   32,   97,   88,   89,
103102  /*   190 */    90,   91,   92,  128,  104,   41,  106,   68,   69,   70,
103103  /*   200 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
103104  /*   210 */    11,   82,   83,   84,   85,   86,   87,   88,   89,   90,
103105  /*   220 */    91,   92,   19,   19,   86,   87,   88,   89,   90,   91,
103106  /*   230 */    92,   27,   96,  150,   66,   99,  100,  101,  112,  150,
103107  /*   240 */   114,  115,  138,  150,  161,  162,  110,  103,  165,  222,
103108  /*   250 */   223,  224,   49,   50,  165,   22,   57,   24,  165,  170,
103109  /*   260 */   171,  118,   94,  170,  171,   23,   98,   25,  185,  186,
103110  /*   270 */   243,   68,   69,   70,   71,   72,   73,   74,   75,   76,
103111  /*   280 */    77,   78,   79,   80,  126,   82,   83,   84,   85,   86,
103112  /*   290 */    87,   88,   89,   90,   91,   92,   19,  129,  130,  131,
103113  /*   300 */    88,   23,  172,  173,  105,  106,  107,  150,   22,   26,
103114  /*   310 */    27,  181,   26,   27,   22,  116,   26,   27,   26,  230,
103115  /*   320 */   231,  197,  165,  230,  231,  113,   49,   50,  204,  117,
103116  /*   330 */    96,  174,  175,   99,  100,  101,   22,   26,   27,  136,
103117  /*   340 */    26,   27,  118,   16,  110,   68,   69,   70,   71,   72,
103118  /*   350 */    73,   74,   75,   76,   77,   78,   79,   80,  118,   82,
103119  /*   360 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
103120  /*   370 */    19,  214,  215,  150,   23,   23,  155,   94,   95,   22,
103121  /*   380 */    94,   95,  116,  160,   94,   95,   94,   60,  165,   62,
103122  /*   390 */   112,   26,  114,  115,  128,   23,   36,  174,  175,   88,
103123  /*   400 */    49,   50,   57,  120,   22,   94,   95,   23,   94,   95,
103124  /*   410 */   120,   51,   25,  136,  169,  170,  171,  194,   58,   68,
103125  /*   420 */    69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
103126  /*   430 */    79,   80,   23,   82,   83,   84,   85,   86,   87,   88,
103127  /*   440 */    89,   90,   91,   92,   19,  150,   12,   12,   23,  228,
103128  /*   450 */   105,  106,  107,   23,  233,   25,  165,   19,  150,   94,
103129  /*   460 */   165,  116,   28,   28,  112,  174,  114,  115,  108,  174,
103130  /*   470 */   175,   26,   27,  165,   49,   50,  231,   11,   44,   44,
103131  /*   480 */    46,   46,  174,  175,  112,  160,  114,  115,   50,   22,
103132  /*   490 */    23,   57,   25,   68,   69,   70,   71,   72,   73,   74,
103133  /*   500 */    75,   76,   77,   78,   79,   80,  119,   82,   83,   84,
103134  /*   510 */    85,   86,   87,   88,   89,   90,   91,   92,   19,  194,
103135  /*   520 */   225,   23,   23,  215,   19,   95,  105,  106,  107,  150,
103136  /*   530 */    23,  150,   27,   23,   67,   25,  150,  206,  207,   94,
103137  /*   540 */    95,  166,  104,  218,  165,   22,  165,  109,   49,   50,
103138  /*   550 */   120,  165,   25,  174,  175,  174,  175,   23,   21,  234,
103139  /*   560 */   174,  175,   22,   23,  239,   25,   25,   68,   69,   70,
103140  /*   570 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
103141  /*   580 */   205,   82,   83,   84,   85,   86,   87,   88,   89,   90,
103142  /*   590 */    91,   92,   19,   22,   23,  216,   23,  222,  223,  224,
103143  /*   600 */    63,  220,   35,  150,  150,  163,  220,   67,  166,  167,
103144  /*   610 */   168,  150,  169,  170,  171,  161,  162,   25,  165,  165,
103145  /*   620 */   150,  113,   49,   50,   25,  117,  165,  174,  175,   35,
103146  /*   630 */     7,    8,    9,  160,  160,  165,  120,  100,   67,  247,
103147  /*   640 */   248,   68,   69,   70,   71,   72,   73,   74,   75,   76,
103148  /*   650 */    77,   78,   79,   80,  193,   82,   83,   84,   85,   86,
103149  /*   660 */    87,   88,   89,   90,   91,   92,   19,  194,  194,  150,
103150  /*   670 */   135,   24,  137,   35,  231,  138,  150,  129,  130,  206,
103151  /*   680 */   207,   30,   27,  213,  165,   34,  118,   95,    0,    1,
103152  /*   690 */     2,  165,  218,  174,  175,   50,   49,   50,   22,   48,
103153  /*   700 */   174,  175,   22,   23,   23,  244,  222,  223,  224,  166,
103154  /*   710 */   167,  168,  120,  239,   23,   68,   69,   70,   71,   72,
103155  /*   720 */    73,   74,   75,   76,   77,   78,   79,   80,  150,   82,
103156  /*   730 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
103157  /*   740 */    19,  150,  173,  165,  181,  182,   24,   67,   26,  104,
103158  /*   750 */   181,  188,  174,  175,  150,   39,  165,  150,   52,  150,
103159  /*   760 */   150,  150,  150,  144,  145,  174,  175,  249,  250,  165,
103160  /*   770 */    49,   50,  165,   52,  165,  165,  165,  165,  174,  175,
103161  /*   780 */    29,  174,  175,  174,  175,  174,  175,  160,   22,   68,
103162  /*   790 */    69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
103163  /*   800 */    79,   80,  150,   82,   83,   84,   85,   86,   87,   88,
103164  /*   810 */    89,   90,   91,   92,   19,  150,   94,  165,  150,  150,
103165  /*   820 */   160,  194,  150,  213,  160,   52,  174,  175,   23,   23,
103166  /*   830 */   165,   25,   22,  165,  165,  150,  150,  165,   52,  174,
103167  /*   840 */   175,   22,  174,  175,   49,   50,  174,  175,  190,  191,
103168  /*   850 */   165,  165,  240,   23,  194,   25,  187,  109,  194,  174,
103169  /*   860 */   175,  190,  191,   68,   69,   70,   71,   72,   73,   74,
103170  /*   870 */    75,   76,   77,   78,   79,   80,  150,   82,   83,   84,
103171  /*   880 */    85,   86,   87,   88,   89,   90,   91,   92,   19,  150,
103172  /*   890 */    22,  165,  150,   23,  150,   25,  150,  166,   91,   92,
103173  /*   900 */   174,  175,   22,  217,  165,  150,  102,  165,  150,  165,
103174  /*   910 */   150,  165,  150,  174,  175,   19,  174,  175,   49,   50,
103175  /*   920 */   165,   86,   87,  165,   23,  165,   25,  165,   24,  174,
103176  /*   930 */   175,  187,  174,  175,  174,  175,  205,   68,   69,   70,
103177  /*   940 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,
103178  /*   950 */   150,   82,   83,   84,   85,   86,   87,   88,   89,   90,
103179  /*   960 */    91,   92,   19,  150,  150,  165,  150,  150,  166,   23,
103180  /*   970 */   150,   25,  160,   20,  174,  175,    1,    2,  165,  165,
103181  /*   980 */   104,  165,  165,   43,  150,  165,  240,  150,   49,   50,
103182  /*   990 */   174,  175,   49,   50,   23,   23,   25,   25,   53,  165,
103183  /*  1000 */   187,  187,  165,   23,  187,   25,  194,  205,  174,  175,
103184  /*  1010 */    71,   72,   69,   70,   71,   72,   73,   74,   75,   76,
103185  /*  1020 */    77,   78,   79,   80,  150,   82,   83,   84,   85,   86,
103186  /*  1030 */    87,   88,   89,   90,   91,   92,   19,   98,  150,  165,
103187  /*  1040 */   150,  160,  150,   59,   25,   53,  104,   22,  174,  175,
103188  /*  1050 */   213,  138,    5,  165,    1,  165,  150,  165,  150,  150,
103189  /*  1060 */   240,  150,  174,  175,  174,  175,   49,   50,  118,  150,
103190  /*  1070 */    35,  165,   27,  165,  165,  194,  165,  108,  127,   76,
103191  /*  1080 */   174,  175,  174,  175,  165,  174,  175,   70,   71,   72,
103192  /*  1090 */    73,   74,   75,   76,   77,   78,   79,   80,  166,   82,
103193  /*  1100 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
103194  /*  1110 */    19,   20,  193,   22,  150,  150,  150,   26,   27,   76,
103195  /*  1120 */   150,   22,    1,  150,  119,  121,  217,   20,   37,  165,
103196  /*  1130 */   165,  165,   16,   19,   20,  165,   22,  205,  165,  119,
103197  /*  1140 */    26,   27,  108,  128,  150,  150,  150,   56,  150,   22,
103198  /*  1150 */   150,   37,  150,  127,  160,   23,  150,   66,  193,  165,
103199  /*  1160 */   165,  165,   16,  165,   23,  165,  150,  165,  174,  175,
103200  /*  1170 */    56,  165,  150,   65,  174,  175,   15,   86,   87,   88,
103201  /*  1180 */    66,  165,  140,  150,   93,   94,   95,  165,  194,   98,
103202  /*  1190 */   174,  175,   22,    3,  164,  193,  174,  175,  165,  150,
103203  /*  1200 */    86,   87,    4,  180,  150,  248,  251,   93,   94,   95,
103204  /*  1210 */   216,  180,   98,  251,  165,  221,  150,  149,    6,  165,
103205  /*  1220 */   129,  130,  131,  132,  133,  134,  193,  150,  174,  175,
103206  /*  1230 */   116,  165,   19,   20,  150,   22,  149,  151,  150,   26,
103207  /*  1240 */    27,  149,  165,  129,  130,  131,  132,  133,  134,  165,
103208  /*  1250 */    37,  174,  175,  165,  149,   19,   20,   13,   22,  150,
103209  /*  1260 */   150,  150,   26,   27,  146,  147,  151,  150,   25,   56,
103210  /*  1270 */   152,  159,  154,   37,  165,  165,  165,  193,  160,   66,
103211  /*  1280 */   116,  193,  165,  174,  175,  174,  175,  194,  199,  150,
103212  /*  1290 */   200,  126,   56,  124,  123,  150,  201,  122,  150,   86,
103213  /*  1300 */    87,  150,   66,  193,  165,  202,   93,   94,   95,  150,
103214  /*  1310 */   165,   98,  194,  165,  125,   22,  165,  150,  150,   26,
103215  /*  1320 */    27,  135,   86,   87,  165,  174,  175,  203,  226,   93,
103216  /*  1330 */    94,   95,  165,  165,   98,  150,  218,  150,  193,  157,
103217  /*  1340 */   118,  157,  129,  130,  131,  132,  133,  134,    5,  104,
103218  /*  1350 */   165,  211,  165,   10,   11,   12,   13,   14,  150,   66,
103219  /*  1360 */    17,  174,  175,  210,  246,  129,  130,  131,  132,  133,
103220  /*  1370 */   134,  150,  210,  165,   31,  121,   33,  150,  150,   86,
103221  /*  1380 */    87,  176,  174,  175,  150,   42,  165,   94,  211,  210,
103222  /*  1390 */   150,   98,  165,  165,  211,  174,  175,  150,   55,  165,
103223  /*  1400 */    57,  150,  174,  175,   61,  165,  150,   64,  174,  175,
103224  /*  1410 */   150,  150,  165,  150,  174,  175,  165,  104,  150,  184,
103225  /*  1420 */   150,  165,  129,  130,  131,  165,  165,  150,  165,  150,
103226  /*  1430 */   150,  176,  150,  165,   47,  165,  150,  150,  176,  103,
103227  /*  1440 */   150,   22,  165,  178,  165,  165,  179,  165,  105,  106,
103228  /*  1450 */   107,  165,  165,  229,  111,  165,   92,  176,  229,  116,
103229  /*  1460 */   184,  176,  179,  156,  176,  176,   18,  157,  156,  237,
103230  /*  1470 */    45,  157,  156,  135,  157,  157,  238,  156,   68,  157,
103231  /*  1480 */   189,  189,  139,  219,   22,  157,   18,  192,  192,  192,
103232  /*  1490 */   192,  189,  219,  199,  157,  242,   40,  157,  199,  242,
103233  /*  1500 */   153,  157,   38,  245,  196,  166,  232,  198,  177,  177,
103234  /*  1510 */   232,  227,  209,  178,  166,  182,  166,  148,  177,  177,
103235  /*  1520 */   209,  196,  177,  199,  209,  199,  166,  208,   92,  195,
103236  /*  1530 */   174,  174,  183,  252,  183,  183,  252,  191,  252,  235,
103237  /*  1540 */   186,  241,  241,  252,  186,  252,  252,  252,  252,  252,
103238  /*  1550 */   252,  252,  252,  252,  252,  252,  236,
103239 };
103240 #define YY_SHIFT_USE_DFLT (-74)
103241 #define YY_SHIFT_COUNT (418)
103242 #define YY_SHIFT_MIN   (-73)
103243 #define YY_SHIFT_MAX   (1468)
103244 static const short yy_shift_ofst[] = {
103245  /*     0 */   975, 1114, 1343, 1114, 1213, 1213,   90,   90,    0,  -19,
103246  /*    10 */  1213, 1213, 1213, 1213, 1213,  345,  445,  721, 1091, 1213,
103247  /*    20 */  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
103248  /*    30 */  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
103249  /*    40 */  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1236, 1213, 1213,
103250  /*    50 */  1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
103251  /*    60 */  1213,  199,  445,  445,  835,  835,  365, 1164,   55,  647,
103252  /*    70 */   573,  499,  425,  351,  277,  203,  129,  795,  795,  795,
103253  /*    80 */   795,  795,  795,  795,  795,  795,  795,  795,  795,  795,
103254  /*    90 */   795,  795,  795,  795,  795,  869,  795,  943, 1017, 1017,
103255  /*   100 */   -69,  -45,  -45,  -45,  -45,  -45,   -1,   58,  138,  100,
103256  /*   110 */   445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
103257  /*   120 */   445,  445,  445,  445,  445,  445,  537,  438,  445,  445,
103258  /*   130 */   445,  445,  445,  365,  807, 1436,  -74,  -74,  -74, 1293,
103259  /*   140 */    73,  434,  434,  311,  314,  290,  283,  286,  540,  467,
103260  /*   150 */   445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
103261  /*   160 */   445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
103262  /*   170 */   445,  445,  445,  445,  445,  445,  445,  445,  445,  445,
103263  /*   180 */   445,  445,   65,  722,  722,  722,  688,  266, 1164, 1164,
103264  /*   190 */  1164,  -74,  -74,  -74,  136,  168,  168,  234,  360,  360,
103265  /*   200 */   360,  430,  372,  435,  352,  278,  126,  -36,  -36,  -36,
103266  /*   210 */   -36,  421,  651,  -36,  -36,  592,  292,  212,  623,  158,
103267  /*   220 */   204,  204,  505,  158,  505,  144,  365,  154,  365,  154,
103268  /*   230 */   645,  154,  204,  154,  154,  535,  548,  548,  365,  387,
103269  /*   240 */   508,  233, 1464, 1222, 1222, 1456, 1456, 1222, 1462, 1410,
103270  /*   250 */  1165, 1468, 1468, 1468, 1468, 1222, 1165, 1462, 1410, 1410,
103271  /*   260 */  1222, 1448, 1338, 1425, 1222, 1222, 1448, 1222, 1448, 1222,
103272  /*   270 */  1448, 1419, 1313, 1313, 1313, 1387, 1364, 1364, 1419, 1313,
103273  /*   280 */  1336, 1313, 1387, 1313, 1313, 1254, 1245, 1254, 1245, 1254,
103274  /*   290 */  1245, 1222, 1222, 1186, 1189, 1175, 1169, 1171, 1165, 1164,
103275  /*   300 */  1243, 1244, 1244, 1212, 1212, 1212, 1212,  -74,  -74,  -74,
103276  /*   310 */   -74,  -74,  -74,  939,  104,  680,  571,  327,    1,  980,
103277  /*   320 */    26,  972,  971,  946,  901,  870,  830,  806,   54,   21,
103278  /*   330 */   -73,  510,  242, 1198, 1190, 1170, 1042, 1161, 1108, 1146,
103279  /*   340 */  1141, 1132, 1015, 1127, 1026, 1034, 1020, 1107, 1004, 1116,
103280  /*   350 */  1121, 1005, 1099,  951, 1043, 1003,  969, 1045, 1035,  950,
103281  /*   360 */  1053, 1047, 1025,  942,  913,  992, 1019,  945,  984,  940,
103282  /*   370 */   876,  904,  953,  896,  748,  804,  880,  786,  868,  819,
103283  /*   380 */   805,  810,  773,  751,  766,  706,  716,  691,  681,  568,
103284  /*   390 */   655,  638,  676,  516,  541,  594,  599,  567,  541,  534,
103285  /*   400 */   507,  527,  498,  523,  466,  382,  409,  384,  357,    6,
103286  /*   410 */   240,  224,  143,   62,   18,   71,   39,    9,    5,
103287 };
103288 #define YY_REDUCE_USE_DFLT (-142)
103289 #define YY_REDUCE_COUNT (312)
103290 #define YY_REDUCE_MIN   (-141)
103291 #define YY_REDUCE_MAX   (1369)
103292 static const short yy_reduce_ofst[] = {
103293  /*     0 */  -141,  994, 1118,  223,  157,  -53,   93,   89,   83,  375,
103294  /*    10 */   386,  381,  379,  308,  295,  325,  -47,   27, 1240, 1234,
103295  /*    20 */  1228, 1221, 1208, 1187, 1151, 1111, 1109, 1077, 1054, 1022,
103296  /*    30 */  1016, 1000,  911,  908,  906,  890,  888,  874,  834,  816,
103297  /*    40 */   800,  760,  758,  755,  742,  739,  726,  685,  672,  668,
103298  /*    50 */   665,  652,  611,  609,  607,  604,  591,  578,  526,  519,
103299  /*    60 */   453,  474,  454,  461,  443,  245,  442,  473,  484,  484,
103300  /*    70 */   484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
103301  /*    80 */   484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
103302  /*    90 */   484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
103303  /*   100 */   484,  484,  484,  484,  484,  484,  484,  130,  484,  484,
103304  /*   110 */  1145,  909, 1110, 1088, 1084, 1033, 1002,  965,  820,  837,
103305  /*   120 */   746,  686,  612,  817,  610,  919,  221,  563,  814,  813,
103306  /*   130 */   744,  669,  470,  543,  484,  484,  484,  484,  484,  291,
103307  /*   140 */   569,  671,  658,  970, 1290, 1287, 1286, 1282,  518,  518,
103308  /*   150 */  1280, 1279, 1277, 1270, 1268, 1263, 1261, 1260, 1256, 1251,
103309  /*   160 */  1247, 1227, 1185, 1168, 1167, 1159, 1148, 1139, 1117, 1066,
103310  /*   170 */  1049, 1006,  998,  996,  995,  973,  970,  966,  964,  892,
103311  /*   180 */   762,  -52,  881,  932,  802,  731,  619,  812,  664,  660,
103312  /*   190 */   627,  392,  331,  124, 1358, 1357, 1356, 1354, 1352, 1351,
103313  /*   200 */  1349, 1319, 1334, 1346, 1334, 1334, 1334, 1334, 1334, 1334,
103314  /*   210 */  1334, 1320, 1304, 1334, 1334, 1319, 1360, 1325, 1369, 1326,
103315  /*   220 */  1315, 1311, 1301, 1324, 1300, 1335, 1350, 1345, 1348, 1342,
103316  /*   230 */  1333, 1341, 1303, 1332, 1331, 1284, 1278, 1274, 1339, 1309,
103317  /*   240 */  1308, 1347, 1258, 1344, 1340, 1257, 1253, 1337, 1273, 1302,
103318  /*   250 */  1299, 1298, 1297, 1296, 1295, 1328, 1294, 1264, 1292, 1291,
103319  /*   260 */  1322, 1321, 1238, 1232, 1318, 1317, 1316, 1314, 1312, 1310,
103320  /*   270 */  1307, 1283, 1289, 1288, 1285, 1276, 1229, 1224, 1267, 1281,
103321  /*   280 */  1265, 1262, 1235, 1255, 1205, 1183, 1179, 1177, 1162, 1140,
103322  /*   290 */  1153, 1184, 1182, 1102, 1124, 1103, 1095, 1090, 1089, 1093,
103323  /*   300 */  1112, 1115, 1086, 1105, 1092, 1087, 1068,  962,  955,  957,
103324  /*   310 */  1031, 1023, 1030,
103325 };
103326 static const YYACTIONTYPE yy_default[] = {
103327  /*     0 */   635,  870,  959,  959,  959,  870,  899,  899,  959,  759,
103328  /*    10 */   959,  959,  959,  959,  868,  959,  959,  933,  959,  959,
103329  /*    20 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
103330  /*    30 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
103331  /*    40 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
103332  /*    50 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
103333  /*    60 */   959,  959,  959,  959,  899,  899,  674,  763,  794,  959,
103334  /*    70 */   959,  959,  959,  959,  959,  959,  959,  932,  934,  809,
103335  /*    80 */   808,  802,  801,  912,  774,  799,  792,  785,  796,  871,
103336  /*    90 */   864,  865,  863,  867,  872,  959,  795,  831,  848,  830,
103337  /*   100 */   842,  847,  854,  846,  843,  833,  832,  666,  834,  835,
103338  /*   110 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
103339  /*   120 */   959,  959,  959,  959,  959,  959,  661,  728,  959,  959,
103340  /*   130 */   959,  959,  959,  959,  836,  837,  851,  850,  849,  959,
103341  /*   140 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
103342  /*   150 */   959,  939,  937,  959,  883,  959,  959,  959,  959,  959,
103343  /*   160 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
103344  /*   170 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
103345  /*   180 */   959,  641,  959,  759,  759,  759,  635,  959,  959,  959,
103346  /*   190 */   959,  951,  763,  753,  719,  959,  959,  959,  959,  959,
103347  /*   200 */   959,  959,  959,  959,  959,  959,  959,  804,  742,  922,
103348  /*   210 */   924,  959,  905,  740,  663,  761,  676,  751,  643,  798,
103349  /*   220 */   776,  776,  917,  798,  917,  700,  959,  788,  959,  788,
103350  /*   230 */   697,  788,  776,  788,  788,  866,  959,  959,  959,  760,
103351  /*   240 */   751,  959,  944,  767,  767,  936,  936,  767,  810,  732,
103352  /*   250 */   798,  739,  739,  739,  739,  767,  798,  810,  732,  732,
103353  /*   260 */   767,  658,  911,  909,  767,  767,  658,  767,  658,  767,
103354  /*   270 */   658,  876,  730,  730,  730,  715,  880,  880,  876,  730,
103355  /*   280 */   700,  730,  715,  730,  730,  780,  775,  780,  775,  780,
103356  /*   290 */   775,  767,  767,  959,  793,  781,  791,  789,  798,  959,
103357  /*   300 */   718,  651,  651,  640,  640,  640,  640,  956,  956,  951,
103358  /*   310 */   702,  702,  684,  959,  959,  959,  959,  959,  959,  959,
103359  /*   320 */   885,  959,  959,  959,  959,  959,  959,  959,  959,  959,
103360  /*   330 */   959,  959,  959,  959,  636,  946,  959,  959,  943,  959,
103361  /*   340 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
103362  /*   350 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  915,
103363  /*   360 */   959,  959,  959,  959,  959,  959,  908,  907,  959,  959,
103364  /*   370 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
103365  /*   380 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  959,
103366  /*   390 */   959,  959,  959,  959,  790,  959,  782,  959,  869,  959,
103367  /*   400 */   959,  959,  959,  959,  959,  959,  959,  959,  959,  745,
103368  /*   410 */   819,  959,  818,  822,  817,  668,  959,  649,  959,  632,
103369  /*   420 */   637,  955,  958,  957,  954,  953,  952,  947,  945,  942,
103370  /*   430 */   941,  940,  938,  935,  931,  889,  887,  894,  893,  892,
103371  /*   440 */   891,  890,  888,  886,  884,  805,  803,  800,  797,  930,
103372  /*   450 */   882,  741,  738,  737,  657,  948,  914,  923,  921,  811,
103373  /*   460 */   920,  919,  918,  916,  913,  900,  807,  806,  733,  874,
103374  /*   470 */   873,  660,  904,  903,  902,  906,  910,  901,  769,  659,
103375  /*   480 */   656,  665,  722,  721,  729,  727,  726,  725,  724,  723,
103376  /*   490 */   720,  667,  675,  686,  714,  699,  698,  879,  881,  878,
103377  /*   500 */   877,  707,  706,  712,  711,  710,  709,  708,  705,  704,
103378  /*   510 */   703,  696,  695,  701,  694,  717,  716,  713,  693,  736,
103379  /*   520 */   735,  734,  731,  692,  691,  690,  822,  689,  688,  828,
103380  /*   530 */   827,  815,  858,  756,  755,  754,  766,  765,  778,  777,
103381  /*   540 */   813,  812,  779,  764,  758,  757,  773,  772,  771,  770,
103382  /*   550 */   762,  752,  784,  787,  786,  783,  860,  768,  857,  929,
103383  /*   560 */   928,  927,  926,  925,  862,  861,  829,  826,  679,  680,
103384  /*   570 */   898,  896,  897,  895,  682,  681,  678,  677,  859,  747,
103385  /*   580 */   746,  855,  852,  844,  840,  856,  853,  845,  841,  839,
103386  /*   590 */   838,  824,  823,  821,  820,  816,  825,  670,  748,  744,
103387  /*   600 */   743,  814,  750,  749,  687,  685,  683,  664,  662,  655,
103388  /*   610 */   653,  652,  654,  650,  648,  647,  646,  645,  644,  673,
103389  /*   620 */   672,  671,  669,  668,  642,  639,  638,  634,  633,  631,
103390 };
103391
103392 /* The next table maps tokens into fallback tokens.  If a construct
103393 ** like the following:
103394 ** 
103395 **      %fallback ID X Y Z.
103396 **
103397 ** appears in the grammar, then ID becomes a fallback token for X, Y,
103398 ** and Z.  Whenever one of the tokens X, Y, or Z is input to the parser
103399 ** but it does not parse, the type of the token is changed to ID and
103400 ** the parse is retried before an error is thrown.
103401 */
103402 #ifdef YYFALLBACK
103403 static const YYCODETYPE yyFallback[] = {
103404     0,  /*          $ => nothing */
103405     0,  /*       SEMI => nothing */
103406    26,  /*    EXPLAIN => ID */
103407    26,  /*      QUERY => ID */
103408    26,  /*       PLAN => ID */
103409    26,  /*      BEGIN => ID */
103410     0,  /* TRANSACTION => nothing */
103411    26,  /*   DEFERRED => ID */
103412    26,  /*  IMMEDIATE => ID */
103413    26,  /*  EXCLUSIVE => ID */
103414     0,  /*     COMMIT => nothing */
103415    26,  /*        END => ID */
103416    26,  /*   ROLLBACK => ID */
103417    26,  /*  SAVEPOINT => ID */
103418    26,  /*    RELEASE => ID */
103419     0,  /*         TO => nothing */
103420     0,  /*      TABLE => nothing */
103421     0,  /*     CREATE => nothing */
103422    26,  /*         IF => ID */
103423     0,  /*        NOT => nothing */
103424     0,  /*     EXISTS => nothing */
103425    26,  /*       TEMP => ID */
103426     0,  /*         LP => nothing */
103427     0,  /*         RP => nothing */
103428     0,  /*         AS => nothing */
103429     0,  /*      COMMA => nothing */
103430     0,  /*         ID => nothing */
103431     0,  /*    INDEXED => nothing */
103432    26,  /*      ABORT => ID */
103433    26,  /*     ACTION => ID */
103434    26,  /*      AFTER => ID */
103435    26,  /*    ANALYZE => ID */
103436    26,  /*        ASC => ID */
103437    26,  /*     ATTACH => ID */
103438    26,  /*     BEFORE => ID */
103439    26,  /*         BY => ID */
103440    26,  /*    CASCADE => ID */
103441    26,  /*       CAST => ID */
103442    26,  /*   COLUMNKW => ID */
103443    26,  /*   CONFLICT => ID */
103444    26,  /*   DATABASE => ID */
103445    26,  /*       DESC => ID */
103446    26,  /*     DETACH => ID */
103447    26,  /*       EACH => ID */
103448    26,  /*       FAIL => ID */
103449    26,  /*        FOR => ID */
103450    26,  /*     IGNORE => ID */
103451    26,  /*  INITIALLY => ID */
103452    26,  /*    INSTEAD => ID */
103453    26,  /*    LIKE_KW => ID */
103454    26,  /*      MATCH => ID */
103455    26,  /*         NO => ID */
103456    26,  /*        KEY => ID */
103457    26,  /*         OF => ID */
103458    26,  /*     OFFSET => ID */
103459    26,  /*     PRAGMA => ID */
103460    26,  /*      RAISE => ID */
103461    26,  /*    REPLACE => ID */
103462    26,  /*   RESTRICT => ID */
103463    26,  /*        ROW => ID */
103464    26,  /*    TRIGGER => ID */
103465    26,  /*     VACUUM => ID */
103466    26,  /*       VIEW => ID */
103467    26,  /*    VIRTUAL => ID */
103468    26,  /*    REINDEX => ID */
103469    26,  /*     RENAME => ID */
103470    26,  /*   CTIME_KW => ID */
103471 };
103472 #endif /* YYFALLBACK */
103473
103474 /* The following structure represents a single element of the
103475 ** parser's stack.  Information stored includes:
103476 **
103477 **   +  The state number for the parser at this level of the stack.
103478 **
103479 **   +  The value of the token stored at this level of the stack.
103480 **      (In other words, the "major" token.)
103481 **
103482 **   +  The semantic value stored at this level of the stack.  This is
103483 **      the information used by the action routines in the grammar.
103484 **      It is sometimes called the "minor" token.
103485 */
103486 struct yyStackEntry {
103487   YYACTIONTYPE stateno;  /* The state-number */
103488   YYCODETYPE major;      /* The major token value.  This is the code
103489                          ** number for the token at this stack level */
103490   YYMINORTYPE minor;     /* The user-supplied minor token value.  This
103491                          ** is the value of the token  */
103492 };
103493 typedef struct yyStackEntry yyStackEntry;
103494
103495 /* The state of the parser is completely contained in an instance of
103496 ** the following structure */
103497 struct yyParser {
103498   int yyidx;                    /* Index of top element in stack */
103499 #ifdef YYTRACKMAXSTACKDEPTH
103500   int yyidxMax;                 /* Maximum value of yyidx */
103501 #endif
103502   int yyerrcnt;                 /* Shifts left before out of the error */
103503   sqlite3ParserARG_SDECL                /* A place to hold %extra_argument */
103504 #if YYSTACKDEPTH<=0
103505   int yystksz;                  /* Current side of the stack */
103506   yyStackEntry *yystack;        /* The parser's stack */
103507 #else
103508   yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
103509 #endif
103510 };
103511 typedef struct yyParser yyParser;
103512
103513 #ifndef NDEBUG
103514 static FILE *yyTraceFILE = 0;
103515 static char *yyTracePrompt = 0;
103516 #endif /* NDEBUG */
103517
103518 #ifndef NDEBUG
103519 /* 
103520 ** Turn parser tracing on by giving a stream to which to write the trace
103521 ** and a prompt to preface each trace message.  Tracing is turned off
103522 ** by making either argument NULL 
103523 **
103524 ** Inputs:
103525 ** <ul>
103526 ** <li> A FILE* to which trace output should be written.
103527 **      If NULL, then tracing is turned off.
103528 ** <li> A prefix string written at the beginning of every
103529 **      line of trace output.  If NULL, then tracing is
103530 **      turned off.
103531 ** </ul>
103532 **
103533 ** Outputs:
103534 ** None.
103535 */
103536 SQLITE_PRIVATE void sqlite3ParserTrace(FILE *TraceFILE, char *zTracePrompt){
103537   yyTraceFILE = TraceFILE;
103538   yyTracePrompt = zTracePrompt;
103539   if( yyTraceFILE==0 ) yyTracePrompt = 0;
103540   else if( yyTracePrompt==0 ) yyTraceFILE = 0;
103541 }
103542 #endif /* NDEBUG */
103543
103544 #ifndef NDEBUG
103545 /* For tracing shifts, the names of all terminals and nonterminals
103546 ** are required.  The following table supplies these names */
103547 static const char *const yyTokenName[] = { 
103548   "$",             "SEMI",          "EXPLAIN",       "QUERY",       
103549   "PLAN",          "BEGIN",         "TRANSACTION",   "DEFERRED",    
103550   "IMMEDIATE",     "EXCLUSIVE",     "COMMIT",        "END",         
103551   "ROLLBACK",      "SAVEPOINT",     "RELEASE",       "TO",          
103552   "TABLE",         "CREATE",        "IF",            "NOT",         
103553   "EXISTS",        "TEMP",          "LP",            "RP",          
103554   "AS",            "COMMA",         "ID",            "INDEXED",     
103555   "ABORT",         "ACTION",        "AFTER",         "ANALYZE",     
103556   "ASC",           "ATTACH",        "BEFORE",        "BY",          
103557   "CASCADE",       "CAST",          "COLUMNKW",      "CONFLICT",    
103558   "DATABASE",      "DESC",          "DETACH",        "EACH",        
103559   "FAIL",          "FOR",           "IGNORE",        "INITIALLY",   
103560   "INSTEAD",       "LIKE_KW",       "MATCH",         "NO",          
103561   "KEY",           "OF",            "OFFSET",        "PRAGMA",      
103562   "RAISE",         "REPLACE",       "RESTRICT",      "ROW",         
103563   "TRIGGER",       "VACUUM",        "VIEW",          "VIRTUAL",     
103564   "REINDEX",       "RENAME",        "CTIME_KW",      "ANY",         
103565   "OR",            "AND",           "IS",            "BETWEEN",     
103566   "IN",            "ISNULL",        "NOTNULL",       "NE",          
103567   "EQ",            "GT",            "LE",            "LT",          
103568   "GE",            "ESCAPE",        "BITAND",        "BITOR",       
103569   "LSHIFT",        "RSHIFT",        "PLUS",          "MINUS",       
103570   "STAR",          "SLASH",         "REM",           "CONCAT",      
103571   "COLLATE",       "BITNOT",        "STRING",        "JOIN_KW",     
103572   "CONSTRAINT",    "DEFAULT",       "NULL",          "PRIMARY",     
103573   "UNIQUE",        "CHECK",         "REFERENCES",    "AUTOINCR",    
103574   "ON",            "INSERT",        "DELETE",        "UPDATE",      
103575   "SET",           "DEFERRABLE",    "FOREIGN",       "DROP",        
103576   "UNION",         "ALL",           "EXCEPT",        "INTERSECT",   
103577   "SELECT",        "DISTINCT",      "DOT",           "FROM",        
103578   "JOIN",          "USING",         "ORDER",         "GROUP",       
103579   "HAVING",        "LIMIT",         "WHERE",         "INTO",        
103580   "VALUES",        "INTEGER",       "FLOAT",         "BLOB",        
103581   "REGISTER",      "VARIABLE",      "CASE",          "WHEN",        
103582   "THEN",          "ELSE",          "INDEX",         "ALTER",       
103583   "ADD",           "error",         "input",         "cmdlist",     
103584   "ecmd",          "explain",       "cmdx",          "cmd",         
103585   "transtype",     "trans_opt",     "nm",            "savepoint_opt",
103586   "create_table",  "create_table_args",  "createkw",      "temp",        
103587   "ifnotexists",   "dbnm",          "columnlist",    "conslist_opt",
103588   "select",        "column",        "columnid",      "type",        
103589   "carglist",      "id",            "ids",           "typetoken",   
103590   "typename",      "signed",        "plus_num",      "minus_num",   
103591   "carg",          "ccons",         "term",          "expr",        
103592   "onconf",        "sortorder",     "autoinc",       "idxlist_opt", 
103593   "refargs",       "defer_subclause",  "refarg",        "refact",      
103594   "init_deferred_pred_opt",  "conslist",      "tcons",         "idxlist",     
103595   "defer_subclause_opt",  "orconf",        "resolvetype",   "raisetype",   
103596   "ifexists",      "fullname",      "oneselect",     "multiselect_op",
103597   "distinct",      "selcollist",    "from",          "where_opt",   
103598   "groupby_opt",   "having_opt",    "orderby_opt",   "limit_opt",   
103599   "sclp",          "as",            "seltablist",    "stl_prefix",  
103600   "joinop",        "indexed_opt",   "on_opt",        "using_opt",   
103601   "joinop2",       "inscollist",    "sortlist",      "sortitem",    
103602   "nexprlist",     "setlist",       "insert_cmd",    "inscollist_opt",
103603   "itemlist",      "exprlist",      "likeop",        "between_op",  
103604   "in_op",         "case_operand",  "case_exprlist",  "case_else",   
103605   "uniqueflag",    "collate",       "nmnum",         "plus_opt",    
103606   "number",        "trigger_decl",  "trigger_cmd_list",  "trigger_time",
103607   "trigger_event",  "foreach_clause",  "when_clause",   "trigger_cmd", 
103608   "trnm",          "tridxby",       "database_kw_opt",  "key_opt",     
103609   "add_column_fullname",  "kwcolumn_opt",  "create_vtab",   "vtabarglist", 
103610   "vtabarg",       "vtabargtoken",  "lp",            "anylist",     
103611 };
103612 #endif /* NDEBUG */
103613
103614 #ifndef NDEBUG
103615 /* For tracing reduce actions, the names of all rules are required.
103616 */
103617 static const char *const yyRuleName[] = {
103618  /*   0 */ "input ::= cmdlist",
103619  /*   1 */ "cmdlist ::= cmdlist ecmd",
103620  /*   2 */ "cmdlist ::= ecmd",
103621  /*   3 */ "ecmd ::= SEMI",
103622  /*   4 */ "ecmd ::= explain cmdx SEMI",
103623  /*   5 */ "explain ::=",
103624  /*   6 */ "explain ::= EXPLAIN",
103625  /*   7 */ "explain ::= EXPLAIN QUERY PLAN",
103626  /*   8 */ "cmdx ::= cmd",
103627  /*   9 */ "cmd ::= BEGIN transtype trans_opt",
103628  /*  10 */ "trans_opt ::=",
103629  /*  11 */ "trans_opt ::= TRANSACTION",
103630  /*  12 */ "trans_opt ::= TRANSACTION nm",
103631  /*  13 */ "transtype ::=",
103632  /*  14 */ "transtype ::= DEFERRED",
103633  /*  15 */ "transtype ::= IMMEDIATE",
103634  /*  16 */ "transtype ::= EXCLUSIVE",
103635  /*  17 */ "cmd ::= COMMIT trans_opt",
103636  /*  18 */ "cmd ::= END trans_opt",
103637  /*  19 */ "cmd ::= ROLLBACK trans_opt",
103638  /*  20 */ "savepoint_opt ::= SAVEPOINT",
103639  /*  21 */ "savepoint_opt ::=",
103640  /*  22 */ "cmd ::= SAVEPOINT nm",
103641  /*  23 */ "cmd ::= RELEASE savepoint_opt nm",
103642  /*  24 */ "cmd ::= ROLLBACK trans_opt TO savepoint_opt nm",
103643  /*  25 */ "cmd ::= create_table create_table_args",
103644  /*  26 */ "create_table ::= createkw temp TABLE ifnotexists nm dbnm",
103645  /*  27 */ "createkw ::= CREATE",
103646  /*  28 */ "ifnotexists ::=",
103647  /*  29 */ "ifnotexists ::= IF NOT EXISTS",
103648  /*  30 */ "temp ::= TEMP",
103649  /*  31 */ "temp ::=",
103650  /*  32 */ "create_table_args ::= LP columnlist conslist_opt RP",
103651  /*  33 */ "create_table_args ::= AS select",
103652  /*  34 */ "columnlist ::= columnlist COMMA column",
103653  /*  35 */ "columnlist ::= column",
103654  /*  36 */ "column ::= columnid type carglist",
103655  /*  37 */ "columnid ::= nm",
103656  /*  38 */ "id ::= ID",
103657  /*  39 */ "id ::= INDEXED",
103658  /*  40 */ "ids ::= ID|STRING",
103659  /*  41 */ "nm ::= id",
103660  /*  42 */ "nm ::= STRING",
103661  /*  43 */ "nm ::= JOIN_KW",
103662  /*  44 */ "type ::=",
103663  /*  45 */ "type ::= typetoken",
103664  /*  46 */ "typetoken ::= typename",
103665  /*  47 */ "typetoken ::= typename LP signed RP",
103666  /*  48 */ "typetoken ::= typename LP signed COMMA signed RP",
103667  /*  49 */ "typename ::= ids",
103668  /*  50 */ "typename ::= typename ids",
103669  /*  51 */ "signed ::= plus_num",
103670  /*  52 */ "signed ::= minus_num",
103671  /*  53 */ "carglist ::= carglist carg",
103672  /*  54 */ "carglist ::=",
103673  /*  55 */ "carg ::= CONSTRAINT nm ccons",
103674  /*  56 */ "carg ::= ccons",
103675  /*  57 */ "ccons ::= DEFAULT term",
103676  /*  58 */ "ccons ::= DEFAULT LP expr RP",
103677  /*  59 */ "ccons ::= DEFAULT PLUS term",
103678  /*  60 */ "ccons ::= DEFAULT MINUS term",
103679  /*  61 */ "ccons ::= DEFAULT id",
103680  /*  62 */ "ccons ::= NULL onconf",
103681  /*  63 */ "ccons ::= NOT NULL onconf",
103682  /*  64 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc",
103683  /*  65 */ "ccons ::= UNIQUE onconf",
103684  /*  66 */ "ccons ::= CHECK LP expr RP",
103685  /*  67 */ "ccons ::= REFERENCES nm idxlist_opt refargs",
103686  /*  68 */ "ccons ::= defer_subclause",
103687  /*  69 */ "ccons ::= COLLATE ids",
103688  /*  70 */ "autoinc ::=",
103689  /*  71 */ "autoinc ::= AUTOINCR",
103690  /*  72 */ "refargs ::=",
103691  /*  73 */ "refargs ::= refargs refarg",
103692  /*  74 */ "refarg ::= MATCH nm",
103693  /*  75 */ "refarg ::= ON INSERT refact",
103694  /*  76 */ "refarg ::= ON DELETE refact",
103695  /*  77 */ "refarg ::= ON UPDATE refact",
103696  /*  78 */ "refact ::= SET NULL",
103697  /*  79 */ "refact ::= SET DEFAULT",
103698  /*  80 */ "refact ::= CASCADE",
103699  /*  81 */ "refact ::= RESTRICT",
103700  /*  82 */ "refact ::= NO ACTION",
103701  /*  83 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
103702  /*  84 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
103703  /*  85 */ "init_deferred_pred_opt ::=",
103704  /*  86 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
103705  /*  87 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
103706  /*  88 */ "conslist_opt ::=",
103707  /*  89 */ "conslist_opt ::= COMMA conslist",
103708  /*  90 */ "conslist ::= conslist COMMA tcons",
103709  /*  91 */ "conslist ::= conslist tcons",
103710  /*  92 */ "conslist ::= tcons",
103711  /*  93 */ "tcons ::= CONSTRAINT nm",
103712  /*  94 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf",
103713  /*  95 */ "tcons ::= UNIQUE LP idxlist RP onconf",
103714  /*  96 */ "tcons ::= CHECK LP expr RP onconf",
103715  /*  97 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt",
103716  /*  98 */ "defer_subclause_opt ::=",
103717  /*  99 */ "defer_subclause_opt ::= defer_subclause",
103718  /* 100 */ "onconf ::=",
103719  /* 101 */ "onconf ::= ON CONFLICT resolvetype",
103720  /* 102 */ "orconf ::=",
103721  /* 103 */ "orconf ::= OR resolvetype",
103722  /* 104 */ "resolvetype ::= raisetype",
103723  /* 105 */ "resolvetype ::= IGNORE",
103724  /* 106 */ "resolvetype ::= REPLACE",
103725  /* 107 */ "cmd ::= DROP TABLE ifexists fullname",
103726  /* 108 */ "ifexists ::= IF EXISTS",
103727  /* 109 */ "ifexists ::=",
103728  /* 110 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select",
103729  /* 111 */ "cmd ::= DROP VIEW ifexists fullname",
103730  /* 112 */ "cmd ::= select",
103731  /* 113 */ "select ::= oneselect",
103732  /* 114 */ "select ::= select multiselect_op oneselect",
103733  /* 115 */ "multiselect_op ::= UNION",
103734  /* 116 */ "multiselect_op ::= UNION ALL",
103735  /* 117 */ "multiselect_op ::= EXCEPT|INTERSECT",
103736  /* 118 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
103737  /* 119 */ "distinct ::= DISTINCT",
103738  /* 120 */ "distinct ::= ALL",
103739  /* 121 */ "distinct ::=",
103740  /* 122 */ "sclp ::= selcollist COMMA",
103741  /* 123 */ "sclp ::=",
103742  /* 124 */ "selcollist ::= sclp expr as",
103743  /* 125 */ "selcollist ::= sclp STAR",
103744  /* 126 */ "selcollist ::= sclp nm DOT STAR",
103745  /* 127 */ "as ::= AS nm",
103746  /* 128 */ "as ::= ids",
103747  /* 129 */ "as ::=",
103748  /* 130 */ "from ::=",
103749  /* 131 */ "from ::= FROM seltablist",
103750  /* 132 */ "stl_prefix ::= seltablist joinop",
103751  /* 133 */ "stl_prefix ::=",
103752  /* 134 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt",
103753  /* 135 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt",
103754  /* 136 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt",
103755  /* 137 */ "dbnm ::=",
103756  /* 138 */ "dbnm ::= DOT nm",
103757  /* 139 */ "fullname ::= nm dbnm",
103758  /* 140 */ "joinop ::= COMMA|JOIN",
103759  /* 141 */ "joinop ::= JOIN_KW JOIN",
103760  /* 142 */ "joinop ::= JOIN_KW nm JOIN",
103761  /* 143 */ "joinop ::= JOIN_KW nm nm JOIN",
103762  /* 144 */ "on_opt ::= ON expr",
103763  /* 145 */ "on_opt ::=",
103764  /* 146 */ "indexed_opt ::=",
103765  /* 147 */ "indexed_opt ::= INDEXED BY nm",
103766  /* 148 */ "indexed_opt ::= NOT INDEXED",
103767  /* 149 */ "using_opt ::= USING LP inscollist RP",
103768  /* 150 */ "using_opt ::=",
103769  /* 151 */ "orderby_opt ::=",
103770  /* 152 */ "orderby_opt ::= ORDER BY sortlist",
103771  /* 153 */ "sortlist ::= sortlist COMMA sortitem sortorder",
103772  /* 154 */ "sortlist ::= sortitem sortorder",
103773  /* 155 */ "sortitem ::= expr",
103774  /* 156 */ "sortorder ::= ASC",
103775  /* 157 */ "sortorder ::= DESC",
103776  /* 158 */ "sortorder ::=",
103777  /* 159 */ "groupby_opt ::=",
103778  /* 160 */ "groupby_opt ::= GROUP BY nexprlist",
103779  /* 161 */ "having_opt ::=",
103780  /* 162 */ "having_opt ::= HAVING expr",
103781  /* 163 */ "limit_opt ::=",
103782  /* 164 */ "limit_opt ::= LIMIT expr",
103783  /* 165 */ "limit_opt ::= LIMIT expr OFFSET expr",
103784  /* 166 */ "limit_opt ::= LIMIT expr COMMA expr",
103785  /* 167 */ "cmd ::= DELETE FROM fullname indexed_opt where_opt",
103786  /* 168 */ "where_opt ::=",
103787  /* 169 */ "where_opt ::= WHERE expr",
103788  /* 170 */ "cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt",
103789  /* 171 */ "setlist ::= setlist COMMA nm EQ expr",
103790  /* 172 */ "setlist ::= nm EQ expr",
103791  /* 173 */ "cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP",
103792  /* 174 */ "cmd ::= insert_cmd INTO fullname inscollist_opt select",
103793  /* 175 */ "cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES",
103794  /* 176 */ "insert_cmd ::= INSERT orconf",
103795  /* 177 */ "insert_cmd ::= REPLACE",
103796  /* 178 */ "itemlist ::= itemlist COMMA expr",
103797  /* 179 */ "itemlist ::= expr",
103798  /* 180 */ "inscollist_opt ::=",
103799  /* 181 */ "inscollist_opt ::= LP inscollist RP",
103800  /* 182 */ "inscollist ::= inscollist COMMA nm",
103801  /* 183 */ "inscollist ::= nm",
103802  /* 184 */ "expr ::= term",
103803  /* 185 */ "expr ::= LP expr RP",
103804  /* 186 */ "term ::= NULL",
103805  /* 187 */ "expr ::= id",
103806  /* 188 */ "expr ::= JOIN_KW",
103807  /* 189 */ "expr ::= nm DOT nm",
103808  /* 190 */ "expr ::= nm DOT nm DOT nm",
103809  /* 191 */ "term ::= INTEGER|FLOAT|BLOB",
103810  /* 192 */ "term ::= STRING",
103811  /* 193 */ "expr ::= REGISTER",
103812  /* 194 */ "expr ::= VARIABLE",
103813  /* 195 */ "expr ::= expr COLLATE ids",
103814  /* 196 */ "expr ::= CAST LP expr AS typetoken RP",
103815  /* 197 */ "expr ::= ID LP distinct exprlist RP",
103816  /* 198 */ "expr ::= ID LP STAR RP",
103817  /* 199 */ "term ::= CTIME_KW",
103818  /* 200 */ "expr ::= expr AND expr",
103819  /* 201 */ "expr ::= expr OR expr",
103820  /* 202 */ "expr ::= expr LT|GT|GE|LE expr",
103821  /* 203 */ "expr ::= expr EQ|NE expr",
103822  /* 204 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
103823  /* 205 */ "expr ::= expr PLUS|MINUS expr",
103824  /* 206 */ "expr ::= expr STAR|SLASH|REM expr",
103825  /* 207 */ "expr ::= expr CONCAT expr",
103826  /* 208 */ "likeop ::= LIKE_KW",
103827  /* 209 */ "likeop ::= NOT LIKE_KW",
103828  /* 210 */ "likeop ::= MATCH",
103829  /* 211 */ "likeop ::= NOT MATCH",
103830  /* 212 */ "expr ::= expr likeop expr",
103831  /* 213 */ "expr ::= expr likeop expr ESCAPE expr",
103832  /* 214 */ "expr ::= expr ISNULL|NOTNULL",
103833  /* 215 */ "expr ::= expr NOT NULL",
103834  /* 216 */ "expr ::= expr IS expr",
103835  /* 217 */ "expr ::= expr IS NOT expr",
103836  /* 218 */ "expr ::= NOT expr",
103837  /* 219 */ "expr ::= BITNOT expr",
103838  /* 220 */ "expr ::= MINUS expr",
103839  /* 221 */ "expr ::= PLUS expr",
103840  /* 222 */ "between_op ::= BETWEEN",
103841  /* 223 */ "between_op ::= NOT BETWEEN",
103842  /* 224 */ "expr ::= expr between_op expr AND expr",
103843  /* 225 */ "in_op ::= IN",
103844  /* 226 */ "in_op ::= NOT IN",
103845  /* 227 */ "expr ::= expr in_op LP exprlist RP",
103846  /* 228 */ "expr ::= LP select RP",
103847  /* 229 */ "expr ::= expr in_op LP select RP",
103848  /* 230 */ "expr ::= expr in_op nm dbnm",
103849  /* 231 */ "expr ::= EXISTS LP select RP",
103850  /* 232 */ "expr ::= CASE case_operand case_exprlist case_else END",
103851  /* 233 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
103852  /* 234 */ "case_exprlist ::= WHEN expr THEN expr",
103853  /* 235 */ "case_else ::= ELSE expr",
103854  /* 236 */ "case_else ::=",
103855  /* 237 */ "case_operand ::= expr",
103856  /* 238 */ "case_operand ::=",
103857  /* 239 */ "exprlist ::= nexprlist",
103858  /* 240 */ "exprlist ::=",
103859  /* 241 */ "nexprlist ::= nexprlist COMMA expr",
103860  /* 242 */ "nexprlist ::= expr",
103861  /* 243 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP",
103862  /* 244 */ "uniqueflag ::= UNIQUE",
103863  /* 245 */ "uniqueflag ::=",
103864  /* 246 */ "idxlist_opt ::=",
103865  /* 247 */ "idxlist_opt ::= LP idxlist RP",
103866  /* 248 */ "idxlist ::= idxlist COMMA nm collate sortorder",
103867  /* 249 */ "idxlist ::= nm collate sortorder",
103868  /* 250 */ "collate ::=",
103869  /* 251 */ "collate ::= COLLATE ids",
103870  /* 252 */ "cmd ::= DROP INDEX ifexists fullname",
103871  /* 253 */ "cmd ::= VACUUM",
103872  /* 254 */ "cmd ::= VACUUM nm",
103873  /* 255 */ "cmd ::= PRAGMA nm dbnm",
103874  /* 256 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
103875  /* 257 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
103876  /* 258 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
103877  /* 259 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
103878  /* 260 */ "nmnum ::= plus_num",
103879  /* 261 */ "nmnum ::= nm",
103880  /* 262 */ "nmnum ::= ON",
103881  /* 263 */ "nmnum ::= DELETE",
103882  /* 264 */ "nmnum ::= DEFAULT",
103883  /* 265 */ "plus_num ::= plus_opt number",
103884  /* 266 */ "minus_num ::= MINUS number",
103885  /* 267 */ "number ::= INTEGER|FLOAT",
103886  /* 268 */ "plus_opt ::= PLUS",
103887  /* 269 */ "plus_opt ::=",
103888  /* 270 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
103889  /* 271 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
103890  /* 272 */ "trigger_time ::= BEFORE",
103891  /* 273 */ "trigger_time ::= AFTER",
103892  /* 274 */ "trigger_time ::= INSTEAD OF",
103893  /* 275 */ "trigger_time ::=",
103894  /* 276 */ "trigger_event ::= DELETE|INSERT",
103895  /* 277 */ "trigger_event ::= UPDATE",
103896  /* 278 */ "trigger_event ::= UPDATE OF inscollist",
103897  /* 279 */ "foreach_clause ::=",
103898  /* 280 */ "foreach_clause ::= FOR EACH ROW",
103899  /* 281 */ "when_clause ::=",
103900  /* 282 */ "when_clause ::= WHEN expr",
103901  /* 283 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
103902  /* 284 */ "trigger_cmd_list ::= trigger_cmd SEMI",
103903  /* 285 */ "trnm ::= nm",
103904  /* 286 */ "trnm ::= nm DOT nm",
103905  /* 287 */ "tridxby ::=",
103906  /* 288 */ "tridxby ::= INDEXED BY nm",
103907  /* 289 */ "tridxby ::= NOT INDEXED",
103908  /* 290 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt",
103909  /* 291 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt VALUES LP itemlist RP",
103910  /* 292 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select",
103911  /* 293 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt",
103912  /* 294 */ "trigger_cmd ::= select",
103913  /* 295 */ "expr ::= RAISE LP IGNORE RP",
103914  /* 296 */ "expr ::= RAISE LP raisetype COMMA nm RP",
103915  /* 297 */ "raisetype ::= ROLLBACK",
103916  /* 298 */ "raisetype ::= ABORT",
103917  /* 299 */ "raisetype ::= FAIL",
103918  /* 300 */ "cmd ::= DROP TRIGGER ifexists fullname",
103919  /* 301 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
103920  /* 302 */ "cmd ::= DETACH database_kw_opt expr",
103921  /* 303 */ "key_opt ::=",
103922  /* 304 */ "key_opt ::= KEY expr",
103923  /* 305 */ "database_kw_opt ::= DATABASE",
103924  /* 306 */ "database_kw_opt ::=",
103925  /* 307 */ "cmd ::= REINDEX",
103926  /* 308 */ "cmd ::= REINDEX nm dbnm",
103927  /* 309 */ "cmd ::= ANALYZE",
103928  /* 310 */ "cmd ::= ANALYZE nm dbnm",
103929  /* 311 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
103930  /* 312 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column",
103931  /* 313 */ "add_column_fullname ::= fullname",
103932  /* 314 */ "kwcolumn_opt ::=",
103933  /* 315 */ "kwcolumn_opt ::= COLUMNKW",
103934  /* 316 */ "cmd ::= create_vtab",
103935  /* 317 */ "cmd ::= create_vtab LP vtabarglist RP",
103936  /* 318 */ "create_vtab ::= createkw VIRTUAL TABLE nm dbnm USING nm",
103937  /* 319 */ "vtabarglist ::= vtabarg",
103938  /* 320 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
103939  /* 321 */ "vtabarg ::=",
103940  /* 322 */ "vtabarg ::= vtabarg vtabargtoken",
103941  /* 323 */ "vtabargtoken ::= ANY",
103942  /* 324 */ "vtabargtoken ::= lp anylist RP",
103943  /* 325 */ "lp ::= LP",
103944  /* 326 */ "anylist ::=",
103945  /* 327 */ "anylist ::= anylist LP anylist RP",
103946  /* 328 */ "anylist ::= anylist ANY",
103947 };
103948 #endif /* NDEBUG */
103949
103950
103951 #if YYSTACKDEPTH<=0
103952 /*
103953 ** Try to increase the size of the parser stack.
103954 */
103955 static void yyGrowStack(yyParser *p){
103956   int newSize;
103957   yyStackEntry *pNew;
103958
103959   newSize = p->yystksz*2 + 100;
103960   pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
103961   if( pNew ){
103962     p->yystack = pNew;
103963     p->yystksz = newSize;
103964 #ifndef NDEBUG
103965     if( yyTraceFILE ){
103966       fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
103967               yyTracePrompt, p->yystksz);
103968     }
103969 #endif
103970   }
103971 }
103972 #endif
103973
103974 /* 
103975 ** This function allocates a new parser.
103976 ** The only argument is a pointer to a function which works like
103977 ** malloc.
103978 **
103979 ** Inputs:
103980 ** A pointer to the function used to allocate memory.
103981 **
103982 ** Outputs:
103983 ** A pointer to a parser.  This pointer is used in subsequent calls
103984 ** to sqlite3Parser and sqlite3ParserFree.
103985 */
103986 SQLITE_PRIVATE void *sqlite3ParserAlloc(void *(*mallocProc)(size_t)){
103987   yyParser *pParser;
103988   pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
103989   if( pParser ){
103990     pParser->yyidx = -1;
103991 #ifdef YYTRACKMAXSTACKDEPTH
103992     pParser->yyidxMax = 0;
103993 #endif
103994 #if YYSTACKDEPTH<=0
103995     pParser->yystack = NULL;
103996     pParser->yystksz = 0;
103997     yyGrowStack(pParser);
103998 #endif
103999   }
104000   return pParser;
104001 }
104002
104003 /* The following function deletes the value associated with a
104004 ** symbol.  The symbol can be either a terminal or nonterminal.
104005 ** "yymajor" is the symbol code, and "yypminor" is a pointer to
104006 ** the value.
104007 */
104008 static void yy_destructor(
104009   yyParser *yypParser,    /* The parser */
104010   YYCODETYPE yymajor,     /* Type code for object to destroy */
104011   YYMINORTYPE *yypminor   /* The object to be destroyed */
104012 ){
104013   sqlite3ParserARG_FETCH;
104014   switch( yymajor ){
104015     /* Here is inserted the actions which take place when a
104016     ** terminal or non-terminal is destroyed.  This can happen
104017     ** when the symbol is popped from the stack during a
104018     ** reduce or during error processing or when a parser is 
104019     ** being destroyed before it is finished parsing.
104020     **
104021     ** Note: during a reduce, the only symbols destroyed are those
104022     ** which appear on the RHS of the rule, but which are not used
104023     ** inside the C code.
104024     */
104025     case 160: /* select */
104026     case 194: /* oneselect */
104027 {
104028 sqlite3SelectDelete(pParse->db, (yypminor->yy387));
104029 }
104030       break;
104031     case 174: /* term */
104032     case 175: /* expr */
104033 {
104034 sqlite3ExprDelete(pParse->db, (yypminor->yy118).pExpr);
104035 }
104036       break;
104037     case 179: /* idxlist_opt */
104038     case 187: /* idxlist */
104039     case 197: /* selcollist */
104040     case 200: /* groupby_opt */
104041     case 202: /* orderby_opt */
104042     case 204: /* sclp */
104043     case 214: /* sortlist */
104044     case 216: /* nexprlist */
104045     case 217: /* setlist */
104046     case 220: /* itemlist */
104047     case 221: /* exprlist */
104048     case 226: /* case_exprlist */
104049 {
104050 sqlite3ExprListDelete(pParse->db, (yypminor->yy322));
104051 }
104052       break;
104053     case 193: /* fullname */
104054     case 198: /* from */
104055     case 206: /* seltablist */
104056     case 207: /* stl_prefix */
104057 {
104058 sqlite3SrcListDelete(pParse->db, (yypminor->yy259));
104059 }
104060       break;
104061     case 199: /* where_opt */
104062     case 201: /* having_opt */
104063     case 210: /* on_opt */
104064     case 215: /* sortitem */
104065     case 225: /* case_operand */
104066     case 227: /* case_else */
104067     case 238: /* when_clause */
104068     case 243: /* key_opt */
104069 {
104070 sqlite3ExprDelete(pParse->db, (yypminor->yy314));
104071 }
104072       break;
104073     case 211: /* using_opt */
104074     case 213: /* inscollist */
104075     case 219: /* inscollist_opt */
104076 {
104077 sqlite3IdListDelete(pParse->db, (yypminor->yy384));
104078 }
104079       break;
104080     case 234: /* trigger_cmd_list */
104081     case 239: /* trigger_cmd */
104082 {
104083 sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy203));
104084 }
104085       break;
104086     case 236: /* trigger_event */
104087 {
104088 sqlite3IdListDelete(pParse->db, (yypminor->yy90).b);
104089 }
104090       break;
104091     default:  break;   /* If no destructor action specified: do nothing */
104092   }
104093 }
104094
104095 /*
104096 ** Pop the parser's stack once.
104097 **
104098 ** If there is a destructor routine associated with the token which
104099 ** is popped from the stack, then call it.
104100 **
104101 ** Return the major token number for the symbol popped.
104102 */
104103 static int yy_pop_parser_stack(yyParser *pParser){
104104   YYCODETYPE yymajor;
104105   yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
104106
104107   /* There is no mechanism by which the parser stack can be popped below
104108   ** empty in SQLite.  */
104109   if( NEVER(pParser->yyidx<0) ) return 0;
104110 #ifndef NDEBUG
104111   if( yyTraceFILE && pParser->yyidx>=0 ){
104112     fprintf(yyTraceFILE,"%sPopping %s\n",
104113       yyTracePrompt,
104114       yyTokenName[yytos->major]);
104115   }
104116 #endif
104117   yymajor = yytos->major;
104118   yy_destructor(pParser, yymajor, &yytos->minor);
104119   pParser->yyidx--;
104120   return yymajor;
104121 }
104122
104123 /* 
104124 ** Deallocate and destroy a parser.  Destructors are all called for
104125 ** all stack elements before shutting the parser down.
104126 **
104127 ** Inputs:
104128 ** <ul>
104129 ** <li>  A pointer to the parser.  This should be a pointer
104130 **       obtained from sqlite3ParserAlloc.
104131 ** <li>  A pointer to a function used to reclaim memory obtained
104132 **       from malloc.
104133 ** </ul>
104134 */
104135 SQLITE_PRIVATE void sqlite3ParserFree(
104136   void *p,                    /* The parser to be deleted */
104137   void (*freeProc)(void*)     /* Function used to reclaim memory */
104138 ){
104139   yyParser *pParser = (yyParser*)p;
104140   /* In SQLite, we never try to destroy a parser that was not successfully
104141   ** created in the first place. */
104142   if( NEVER(pParser==0) ) return;
104143   while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
104144 #if YYSTACKDEPTH<=0
104145   free(pParser->yystack);
104146 #endif
104147   (*freeProc)((void*)pParser);
104148 }
104149
104150 /*
104151 ** Return the peak depth of the stack for a parser.
104152 */
104153 #ifdef YYTRACKMAXSTACKDEPTH
104154 SQLITE_PRIVATE int sqlite3ParserStackPeak(void *p){
104155   yyParser *pParser = (yyParser*)p;
104156   return pParser->yyidxMax;
104157 }
104158 #endif
104159
104160 /*
104161 ** Find the appropriate action for a parser given the terminal
104162 ** look-ahead token iLookAhead.
104163 **
104164 ** If the look-ahead token is YYNOCODE, then check to see if the action is
104165 ** independent of the look-ahead.  If it is, return the action, otherwise
104166 ** return YY_NO_ACTION.
104167 */
104168 static int yy_find_shift_action(
104169   yyParser *pParser,        /* The parser */
104170   YYCODETYPE iLookAhead     /* The look-ahead token */
104171 ){
104172   int i;
104173   int stateno = pParser->yystack[pParser->yyidx].stateno;
104174  
104175   if( stateno>YY_SHIFT_COUNT
104176    || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
104177     return yy_default[stateno];
104178   }
104179   assert( iLookAhead!=YYNOCODE );
104180   i += iLookAhead;
104181   if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
104182     if( iLookAhead>0 ){
104183 #ifdef YYFALLBACK
104184       YYCODETYPE iFallback;            /* Fallback token */
104185       if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
104186              && (iFallback = yyFallback[iLookAhead])!=0 ){
104187 #ifndef NDEBUG
104188         if( yyTraceFILE ){
104189           fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
104190              yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
104191         }
104192 #endif
104193         return yy_find_shift_action(pParser, iFallback);
104194       }
104195 #endif
104196 #ifdef YYWILDCARD
104197       {
104198         int j = i - iLookAhead + YYWILDCARD;
104199         if( 
104200 #if YY_SHIFT_MIN+YYWILDCARD<0
104201           j>=0 &&
104202 #endif
104203 #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
104204           j<YY_ACTTAB_COUNT &&
104205 #endif
104206           yy_lookahead[j]==YYWILDCARD
104207         ){
104208 #ifndef NDEBUG
104209           if( yyTraceFILE ){
104210             fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
104211                yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]);
104212           }
104213 #endif /* NDEBUG */
104214           return yy_action[j];
104215         }
104216       }
104217 #endif /* YYWILDCARD */
104218     }
104219     return yy_default[stateno];
104220   }else{
104221     return yy_action[i];
104222   }
104223 }
104224
104225 /*
104226 ** Find the appropriate action for a parser given the non-terminal
104227 ** look-ahead token iLookAhead.
104228 **
104229 ** If the look-ahead token is YYNOCODE, then check to see if the action is
104230 ** independent of the look-ahead.  If it is, return the action, otherwise
104231 ** return YY_NO_ACTION.
104232 */
104233 static int yy_find_reduce_action(
104234   int stateno,              /* Current state number */
104235   YYCODETYPE iLookAhead     /* The look-ahead token */
104236 ){
104237   int i;
104238 #ifdef YYERRORSYMBOL
104239   if( stateno>YY_REDUCE_COUNT ){
104240     return yy_default[stateno];
104241   }
104242 #else
104243   assert( stateno<=YY_REDUCE_COUNT );
104244 #endif
104245   i = yy_reduce_ofst[stateno];
104246   assert( i!=YY_REDUCE_USE_DFLT );
104247   assert( iLookAhead!=YYNOCODE );
104248   i += iLookAhead;
104249 #ifdef YYERRORSYMBOL
104250   if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
104251     return yy_default[stateno];
104252   }
104253 #else
104254   assert( i>=0 && i<YY_ACTTAB_COUNT );
104255   assert( yy_lookahead[i]==iLookAhead );
104256 #endif
104257   return yy_action[i];
104258 }
104259
104260 /*
104261 ** The following routine is called if the stack overflows.
104262 */
104263 static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
104264    sqlite3ParserARG_FETCH;
104265    yypParser->yyidx--;
104266 #ifndef NDEBUG
104267    if( yyTraceFILE ){
104268      fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
104269    }
104270 #endif
104271    while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
104272    /* Here code is inserted which will execute if the parser
104273    ** stack every overflows */
104274
104275   UNUSED_PARAMETER(yypMinor); /* Silence some compiler warnings */
104276   sqlite3ErrorMsg(pParse, "parser stack overflow");
104277   pParse->parseError = 1;
104278    sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument var */
104279 }
104280
104281 /*
104282 ** Perform a shift action.
104283 */
104284 static void yy_shift(
104285   yyParser *yypParser,          /* The parser to be shifted */
104286   int yyNewState,               /* The new state to shift in */
104287   int yyMajor,                  /* The major token to shift in */
104288   YYMINORTYPE *yypMinor         /* Pointer to the minor token to shift in */
104289 ){
104290   yyStackEntry *yytos;
104291   yypParser->yyidx++;
104292 #ifdef YYTRACKMAXSTACKDEPTH
104293   if( yypParser->yyidx>yypParser->yyidxMax ){
104294     yypParser->yyidxMax = yypParser->yyidx;
104295   }
104296 #endif
104297 #if YYSTACKDEPTH>0 
104298   if( yypParser->yyidx>=YYSTACKDEPTH ){
104299     yyStackOverflow(yypParser, yypMinor);
104300     return;
104301   }
104302 #else
104303   if( yypParser->yyidx>=yypParser->yystksz ){
104304     yyGrowStack(yypParser);
104305     if( yypParser->yyidx>=yypParser->yystksz ){
104306       yyStackOverflow(yypParser, yypMinor);
104307       return;
104308     }
104309   }
104310 #endif
104311   yytos = &yypParser->yystack[yypParser->yyidx];
104312   yytos->stateno = (YYACTIONTYPE)yyNewState;
104313   yytos->major = (YYCODETYPE)yyMajor;
104314   yytos->minor = *yypMinor;
104315 #ifndef NDEBUG
104316   if( yyTraceFILE && yypParser->yyidx>0 ){
104317     int i;
104318     fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
104319     fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
104320     for(i=1; i<=yypParser->yyidx; i++)
104321       fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
104322     fprintf(yyTraceFILE,"\n");
104323   }
104324 #endif
104325 }
104326
104327 /* The following table contains information about every rule that
104328 ** is used during the reduce.
104329 */
104330 static const struct {
104331   YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
104332   unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
104333 } yyRuleInfo[] = {
104334   { 142, 1 },
104335   { 143, 2 },
104336   { 143, 1 },
104337   { 144, 1 },
104338   { 144, 3 },
104339   { 145, 0 },
104340   { 145, 1 },
104341   { 145, 3 },
104342   { 146, 1 },
104343   { 147, 3 },
104344   { 149, 0 },
104345   { 149, 1 },
104346   { 149, 2 },
104347   { 148, 0 },
104348   { 148, 1 },
104349   { 148, 1 },
104350   { 148, 1 },
104351   { 147, 2 },
104352   { 147, 2 },
104353   { 147, 2 },
104354   { 151, 1 },
104355   { 151, 0 },
104356   { 147, 2 },
104357   { 147, 3 },
104358   { 147, 5 },
104359   { 147, 2 },
104360   { 152, 6 },
104361   { 154, 1 },
104362   { 156, 0 },
104363   { 156, 3 },
104364   { 155, 1 },
104365   { 155, 0 },
104366   { 153, 4 },
104367   { 153, 2 },
104368   { 158, 3 },
104369   { 158, 1 },
104370   { 161, 3 },
104371   { 162, 1 },
104372   { 165, 1 },
104373   { 165, 1 },
104374   { 166, 1 },
104375   { 150, 1 },
104376   { 150, 1 },
104377   { 150, 1 },
104378   { 163, 0 },
104379   { 163, 1 },
104380   { 167, 1 },
104381   { 167, 4 },
104382   { 167, 6 },
104383   { 168, 1 },
104384   { 168, 2 },
104385   { 169, 1 },
104386   { 169, 1 },
104387   { 164, 2 },
104388   { 164, 0 },
104389   { 172, 3 },
104390   { 172, 1 },
104391   { 173, 2 },
104392   { 173, 4 },
104393   { 173, 3 },
104394   { 173, 3 },
104395   { 173, 2 },
104396   { 173, 2 },
104397   { 173, 3 },
104398   { 173, 5 },
104399   { 173, 2 },
104400   { 173, 4 },
104401   { 173, 4 },
104402   { 173, 1 },
104403   { 173, 2 },
104404   { 178, 0 },
104405   { 178, 1 },
104406   { 180, 0 },
104407   { 180, 2 },
104408   { 182, 2 },
104409   { 182, 3 },
104410   { 182, 3 },
104411   { 182, 3 },
104412   { 183, 2 },
104413   { 183, 2 },
104414   { 183, 1 },
104415   { 183, 1 },
104416   { 183, 2 },
104417   { 181, 3 },
104418   { 181, 2 },
104419   { 184, 0 },
104420   { 184, 2 },
104421   { 184, 2 },
104422   { 159, 0 },
104423   { 159, 2 },
104424   { 185, 3 },
104425   { 185, 2 },
104426   { 185, 1 },
104427   { 186, 2 },
104428   { 186, 7 },
104429   { 186, 5 },
104430   { 186, 5 },
104431   { 186, 10 },
104432   { 188, 0 },
104433   { 188, 1 },
104434   { 176, 0 },
104435   { 176, 3 },
104436   { 189, 0 },
104437   { 189, 2 },
104438   { 190, 1 },
104439   { 190, 1 },
104440   { 190, 1 },
104441   { 147, 4 },
104442   { 192, 2 },
104443   { 192, 0 },
104444   { 147, 8 },
104445   { 147, 4 },
104446   { 147, 1 },
104447   { 160, 1 },
104448   { 160, 3 },
104449   { 195, 1 },
104450   { 195, 2 },
104451   { 195, 1 },
104452   { 194, 9 },
104453   { 196, 1 },
104454   { 196, 1 },
104455   { 196, 0 },
104456   { 204, 2 },
104457   { 204, 0 },
104458   { 197, 3 },
104459   { 197, 2 },
104460   { 197, 4 },
104461   { 205, 2 },
104462   { 205, 1 },
104463   { 205, 0 },
104464   { 198, 0 },
104465   { 198, 2 },
104466   { 207, 2 },
104467   { 207, 0 },
104468   { 206, 7 },
104469   { 206, 7 },
104470   { 206, 7 },
104471   { 157, 0 },
104472   { 157, 2 },
104473   { 193, 2 },
104474   { 208, 1 },
104475   { 208, 2 },
104476   { 208, 3 },
104477   { 208, 4 },
104478   { 210, 2 },
104479   { 210, 0 },
104480   { 209, 0 },
104481   { 209, 3 },
104482   { 209, 2 },
104483   { 211, 4 },
104484   { 211, 0 },
104485   { 202, 0 },
104486   { 202, 3 },
104487   { 214, 4 },
104488   { 214, 2 },
104489   { 215, 1 },
104490   { 177, 1 },
104491   { 177, 1 },
104492   { 177, 0 },
104493   { 200, 0 },
104494   { 200, 3 },
104495   { 201, 0 },
104496   { 201, 2 },
104497   { 203, 0 },
104498   { 203, 2 },
104499   { 203, 4 },
104500   { 203, 4 },
104501   { 147, 5 },
104502   { 199, 0 },
104503   { 199, 2 },
104504   { 147, 7 },
104505   { 217, 5 },
104506   { 217, 3 },
104507   { 147, 8 },
104508   { 147, 5 },
104509   { 147, 6 },
104510   { 218, 2 },
104511   { 218, 1 },
104512   { 220, 3 },
104513   { 220, 1 },
104514   { 219, 0 },
104515   { 219, 3 },
104516   { 213, 3 },
104517   { 213, 1 },
104518   { 175, 1 },
104519   { 175, 3 },
104520   { 174, 1 },
104521   { 175, 1 },
104522   { 175, 1 },
104523   { 175, 3 },
104524   { 175, 5 },
104525   { 174, 1 },
104526   { 174, 1 },
104527   { 175, 1 },
104528   { 175, 1 },
104529   { 175, 3 },
104530   { 175, 6 },
104531   { 175, 5 },
104532   { 175, 4 },
104533   { 174, 1 },
104534   { 175, 3 },
104535   { 175, 3 },
104536   { 175, 3 },
104537   { 175, 3 },
104538   { 175, 3 },
104539   { 175, 3 },
104540   { 175, 3 },
104541   { 175, 3 },
104542   { 222, 1 },
104543   { 222, 2 },
104544   { 222, 1 },
104545   { 222, 2 },
104546   { 175, 3 },
104547   { 175, 5 },
104548   { 175, 2 },
104549   { 175, 3 },
104550   { 175, 3 },
104551   { 175, 4 },
104552   { 175, 2 },
104553   { 175, 2 },
104554   { 175, 2 },
104555   { 175, 2 },
104556   { 223, 1 },
104557   { 223, 2 },
104558   { 175, 5 },
104559   { 224, 1 },
104560   { 224, 2 },
104561   { 175, 5 },
104562   { 175, 3 },
104563   { 175, 5 },
104564   { 175, 4 },
104565   { 175, 4 },
104566   { 175, 5 },
104567   { 226, 5 },
104568   { 226, 4 },
104569   { 227, 2 },
104570   { 227, 0 },
104571   { 225, 1 },
104572   { 225, 0 },
104573   { 221, 1 },
104574   { 221, 0 },
104575   { 216, 3 },
104576   { 216, 1 },
104577   { 147, 11 },
104578   { 228, 1 },
104579   { 228, 0 },
104580   { 179, 0 },
104581   { 179, 3 },
104582   { 187, 5 },
104583   { 187, 3 },
104584   { 229, 0 },
104585   { 229, 2 },
104586   { 147, 4 },
104587   { 147, 1 },
104588   { 147, 2 },
104589   { 147, 3 },
104590   { 147, 5 },
104591   { 147, 6 },
104592   { 147, 5 },
104593   { 147, 6 },
104594   { 230, 1 },
104595   { 230, 1 },
104596   { 230, 1 },
104597   { 230, 1 },
104598   { 230, 1 },
104599   { 170, 2 },
104600   { 171, 2 },
104601   { 232, 1 },
104602   { 231, 1 },
104603   { 231, 0 },
104604   { 147, 5 },
104605   { 233, 11 },
104606   { 235, 1 },
104607   { 235, 1 },
104608   { 235, 2 },
104609   { 235, 0 },
104610   { 236, 1 },
104611   { 236, 1 },
104612   { 236, 3 },
104613   { 237, 0 },
104614   { 237, 3 },
104615   { 238, 0 },
104616   { 238, 2 },
104617   { 234, 3 },
104618   { 234, 2 },
104619   { 240, 1 },
104620   { 240, 3 },
104621   { 241, 0 },
104622   { 241, 3 },
104623   { 241, 2 },
104624   { 239, 7 },
104625   { 239, 8 },
104626   { 239, 5 },
104627   { 239, 5 },
104628   { 239, 1 },
104629   { 175, 4 },
104630   { 175, 6 },
104631   { 191, 1 },
104632   { 191, 1 },
104633   { 191, 1 },
104634   { 147, 4 },
104635   { 147, 6 },
104636   { 147, 3 },
104637   { 243, 0 },
104638   { 243, 2 },
104639   { 242, 1 },
104640   { 242, 0 },
104641   { 147, 1 },
104642   { 147, 3 },
104643   { 147, 1 },
104644   { 147, 3 },
104645   { 147, 6 },
104646   { 147, 6 },
104647   { 244, 1 },
104648   { 245, 0 },
104649   { 245, 1 },
104650   { 147, 1 },
104651   { 147, 4 },
104652   { 246, 7 },
104653   { 247, 1 },
104654   { 247, 3 },
104655   { 248, 0 },
104656   { 248, 2 },
104657   { 249, 1 },
104658   { 249, 3 },
104659   { 250, 1 },
104660   { 251, 0 },
104661   { 251, 4 },
104662   { 251, 2 },
104663 };
104664
104665 static void yy_accept(yyParser*);  /* Forward Declaration */
104666
104667 /*
104668 ** Perform a reduce action and the shift that must immediately
104669 ** follow the reduce.
104670 */
104671 static void yy_reduce(
104672   yyParser *yypParser,         /* The parser */
104673   int yyruleno                 /* Number of the rule by which to reduce */
104674 ){
104675   int yygoto;                     /* The next state */
104676   int yyact;                      /* The next action */
104677   YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */
104678   yyStackEntry *yymsp;            /* The top of the parser's stack */
104679   int yysize;                     /* Amount to pop the stack */
104680   sqlite3ParserARG_FETCH;
104681   yymsp = &yypParser->yystack[yypParser->yyidx];
104682 #ifndef NDEBUG
104683   if( yyTraceFILE && yyruleno>=0 
104684         && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
104685     fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
104686       yyRuleName[yyruleno]);
104687   }
104688 #endif /* NDEBUG */
104689
104690   /* Silence complaints from purify about yygotominor being uninitialized
104691   ** in some cases when it is copied into the stack after the following
104692   ** switch.  yygotominor is uninitialized when a rule reduces that does
104693   ** not set the value of its left-hand side nonterminal.  Leaving the
104694   ** value of the nonterminal uninitialized is utterly harmless as long
104695   ** as the value is never used.  So really the only thing this code
104696   ** accomplishes is to quieten purify.  
104697   **
104698   ** 2007-01-16:  The wireshark project (www.wireshark.org) reports that
104699   ** without this code, their parser segfaults.  I'm not sure what there
104700   ** parser is doing to make this happen.  This is the second bug report
104701   ** from wireshark this week.  Clearly they are stressing Lemon in ways
104702   ** that it has not been previously stressed...  (SQLite ticket #2172)
104703   */
104704   /*memset(&yygotominor, 0, sizeof(yygotominor));*/
104705   yygotominor = yyzerominor;
104706
104707
104708   switch( yyruleno ){
104709   /* Beginning here are the reduction cases.  A typical example
104710   ** follows:
104711   **   case 0:
104712   **  #line <lineno> <grammarfile>
104713   **     { ... }           // User supplied code
104714   **  #line <lineno> <thisfile>
104715   **     break;
104716   */
104717       case 5: /* explain ::= */
104718 { sqlite3BeginParse(pParse, 0); }
104719         break;
104720       case 6: /* explain ::= EXPLAIN */
104721 { sqlite3BeginParse(pParse, 1); }
104722         break;
104723       case 7: /* explain ::= EXPLAIN QUERY PLAN */
104724 { sqlite3BeginParse(pParse, 2); }
104725         break;
104726       case 8: /* cmdx ::= cmd */
104727 { sqlite3FinishCoding(pParse); }
104728         break;
104729       case 9: /* cmd ::= BEGIN transtype trans_opt */
104730 {sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy4);}
104731         break;
104732       case 13: /* transtype ::= */
104733 {yygotominor.yy4 = TK_DEFERRED;}
104734         break;
104735       case 14: /* transtype ::= DEFERRED */
104736       case 15: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==15);
104737       case 16: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==16);
104738       case 115: /* multiselect_op ::= UNION */ yytestcase(yyruleno==115);
104739       case 117: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==117);
104740 {yygotominor.yy4 = yymsp[0].major;}
104741         break;
104742       case 17: /* cmd ::= COMMIT trans_opt */
104743       case 18: /* cmd ::= END trans_opt */ yytestcase(yyruleno==18);
104744 {sqlite3CommitTransaction(pParse);}
104745         break;
104746       case 19: /* cmd ::= ROLLBACK trans_opt */
104747 {sqlite3RollbackTransaction(pParse);}
104748         break;
104749       case 22: /* cmd ::= SAVEPOINT nm */
104750 {
104751   sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0);
104752 }
104753         break;
104754       case 23: /* cmd ::= RELEASE savepoint_opt nm */
104755 {
104756   sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0);
104757 }
104758         break;
104759       case 24: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
104760 {
104761   sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0);
104762 }
104763         break;
104764       case 26: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */
104765 {
104766    sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy4,0,0,yymsp[-2].minor.yy4);
104767 }
104768         break;
104769       case 27: /* createkw ::= CREATE */
104770 {
104771   pParse->db->lookaside.bEnabled = 0;
104772   yygotominor.yy0 = yymsp[0].minor.yy0;
104773 }
104774         break;
104775       case 28: /* ifnotexists ::= */
104776       case 31: /* temp ::= */ yytestcase(yyruleno==31);
104777       case 70: /* autoinc ::= */ yytestcase(yyruleno==70);
104778       case 83: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ yytestcase(yyruleno==83);
104779       case 85: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==85);
104780       case 87: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ yytestcase(yyruleno==87);
104781       case 98: /* defer_subclause_opt ::= */ yytestcase(yyruleno==98);
104782       case 109: /* ifexists ::= */ yytestcase(yyruleno==109);
104783       case 120: /* distinct ::= ALL */ yytestcase(yyruleno==120);
104784       case 121: /* distinct ::= */ yytestcase(yyruleno==121);
104785       case 222: /* between_op ::= BETWEEN */ yytestcase(yyruleno==222);
104786       case 225: /* in_op ::= IN */ yytestcase(yyruleno==225);
104787 {yygotominor.yy4 = 0;}
104788         break;
104789       case 29: /* ifnotexists ::= IF NOT EXISTS */
104790       case 30: /* temp ::= TEMP */ yytestcase(yyruleno==30);
104791       case 71: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==71);
104792       case 86: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ yytestcase(yyruleno==86);
104793       case 108: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==108);
104794       case 119: /* distinct ::= DISTINCT */ yytestcase(yyruleno==119);
104795       case 223: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==223);
104796       case 226: /* in_op ::= NOT IN */ yytestcase(yyruleno==226);
104797 {yygotominor.yy4 = 1;}
104798         break;
104799       case 32: /* create_table_args ::= LP columnlist conslist_opt RP */
104800 {
104801   sqlite3EndTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0);
104802 }
104803         break;
104804       case 33: /* create_table_args ::= AS select */
104805 {
104806   sqlite3EndTable(pParse,0,0,yymsp[0].minor.yy387);
104807   sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy387);
104808 }
104809         break;
104810       case 36: /* column ::= columnid type carglist */
104811 {
104812   yygotominor.yy0.z = yymsp[-2].minor.yy0.z;
104813   yygotominor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-2].minor.yy0.z) + pParse->sLastToken.n;
104814 }
104815         break;
104816       case 37: /* columnid ::= nm */
104817 {
104818   sqlite3AddColumn(pParse,&yymsp[0].minor.yy0);
104819   yygotominor.yy0 = yymsp[0].minor.yy0;
104820 }
104821         break;
104822       case 38: /* id ::= ID */
104823       case 39: /* id ::= INDEXED */ yytestcase(yyruleno==39);
104824       case 40: /* ids ::= ID|STRING */ yytestcase(yyruleno==40);
104825       case 41: /* nm ::= id */ yytestcase(yyruleno==41);
104826       case 42: /* nm ::= STRING */ yytestcase(yyruleno==42);
104827       case 43: /* nm ::= JOIN_KW */ yytestcase(yyruleno==43);
104828       case 46: /* typetoken ::= typename */ yytestcase(yyruleno==46);
104829       case 49: /* typename ::= ids */ yytestcase(yyruleno==49);
104830       case 127: /* as ::= AS nm */ yytestcase(yyruleno==127);
104831       case 128: /* as ::= ids */ yytestcase(yyruleno==128);
104832       case 138: /* dbnm ::= DOT nm */ yytestcase(yyruleno==138);
104833       case 147: /* indexed_opt ::= INDEXED BY nm */ yytestcase(yyruleno==147);
104834       case 251: /* collate ::= COLLATE ids */ yytestcase(yyruleno==251);
104835       case 260: /* nmnum ::= plus_num */ yytestcase(yyruleno==260);
104836       case 261: /* nmnum ::= nm */ yytestcase(yyruleno==261);
104837       case 262: /* nmnum ::= ON */ yytestcase(yyruleno==262);
104838       case 263: /* nmnum ::= DELETE */ yytestcase(yyruleno==263);
104839       case 264: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==264);
104840       case 265: /* plus_num ::= plus_opt number */ yytestcase(yyruleno==265);
104841       case 266: /* minus_num ::= MINUS number */ yytestcase(yyruleno==266);
104842       case 267: /* number ::= INTEGER|FLOAT */ yytestcase(yyruleno==267);
104843       case 285: /* trnm ::= nm */ yytestcase(yyruleno==285);
104844 {yygotominor.yy0 = yymsp[0].minor.yy0;}
104845         break;
104846       case 45: /* type ::= typetoken */
104847 {sqlite3AddColumnType(pParse,&yymsp[0].minor.yy0);}
104848         break;
104849       case 47: /* typetoken ::= typename LP signed RP */
104850 {
104851   yygotominor.yy0.z = yymsp[-3].minor.yy0.z;
104852   yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z);
104853 }
104854         break;
104855       case 48: /* typetoken ::= typename LP signed COMMA signed RP */
104856 {
104857   yygotominor.yy0.z = yymsp[-5].minor.yy0.z;
104858   yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z);
104859 }
104860         break;
104861       case 50: /* typename ::= typename ids */
104862 {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);}
104863         break;
104864       case 57: /* ccons ::= DEFAULT term */
104865       case 59: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==59);
104866 {sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy118);}
104867         break;
104868       case 58: /* ccons ::= DEFAULT LP expr RP */
104869 {sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy118);}
104870         break;
104871       case 60: /* ccons ::= DEFAULT MINUS term */
104872 {
104873   ExprSpan v;
104874   v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy118.pExpr, 0, 0);
104875   v.zStart = yymsp[-1].minor.yy0.z;
104876   v.zEnd = yymsp[0].minor.yy118.zEnd;
104877   sqlite3AddDefaultValue(pParse,&v);
104878 }
104879         break;
104880       case 61: /* ccons ::= DEFAULT id */
104881 {
104882   ExprSpan v;
104883   spanExpr(&v, pParse, TK_STRING, &yymsp[0].minor.yy0);
104884   sqlite3AddDefaultValue(pParse,&v);
104885 }
104886         break;
104887       case 63: /* ccons ::= NOT NULL onconf */
104888 {sqlite3AddNotNull(pParse, yymsp[0].minor.yy4);}
104889         break;
104890       case 64: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
104891 {sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy4,yymsp[0].minor.yy4,yymsp[-2].minor.yy4);}
104892         break;
104893       case 65: /* ccons ::= UNIQUE onconf */
104894 {sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy4,0,0,0,0);}
104895         break;
104896       case 66: /* ccons ::= CHECK LP expr RP */
104897 {sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy118.pExpr);}
104898         break;
104899       case 67: /* ccons ::= REFERENCES nm idxlist_opt refargs */
104900 {sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy322,yymsp[0].minor.yy4);}
104901         break;
104902       case 68: /* ccons ::= defer_subclause */
104903 {sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy4);}
104904         break;
104905       case 69: /* ccons ::= COLLATE ids */
104906 {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
104907         break;
104908       case 72: /* refargs ::= */
104909 { yygotominor.yy4 = OE_None*0x0101; /* EV: R-19803-45884 */}
104910         break;
104911       case 73: /* refargs ::= refargs refarg */
104912 { yygotominor.yy4 = (yymsp[-1].minor.yy4 & ~yymsp[0].minor.yy215.mask) | yymsp[0].minor.yy215.value; }
104913         break;
104914       case 74: /* refarg ::= MATCH nm */
104915       case 75: /* refarg ::= ON INSERT refact */ yytestcase(yyruleno==75);
104916 { yygotominor.yy215.value = 0;     yygotominor.yy215.mask = 0x000000; }
104917         break;
104918       case 76: /* refarg ::= ON DELETE refact */
104919 { yygotominor.yy215.value = yymsp[0].minor.yy4;     yygotominor.yy215.mask = 0x0000ff; }
104920         break;
104921       case 77: /* refarg ::= ON UPDATE refact */
104922 { yygotominor.yy215.value = yymsp[0].minor.yy4<<8;  yygotominor.yy215.mask = 0x00ff00; }
104923         break;
104924       case 78: /* refact ::= SET NULL */
104925 { yygotominor.yy4 = OE_SetNull;  /* EV: R-33326-45252 */}
104926         break;
104927       case 79: /* refact ::= SET DEFAULT */
104928 { yygotominor.yy4 = OE_SetDflt;  /* EV: R-33326-45252 */}
104929         break;
104930       case 80: /* refact ::= CASCADE */
104931 { yygotominor.yy4 = OE_Cascade;  /* EV: R-33326-45252 */}
104932         break;
104933       case 81: /* refact ::= RESTRICT */
104934 { yygotominor.yy4 = OE_Restrict; /* EV: R-33326-45252 */}
104935         break;
104936       case 82: /* refact ::= NO ACTION */
104937 { yygotominor.yy4 = OE_None;     /* EV: R-33326-45252 */}
104938         break;
104939       case 84: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
104940       case 99: /* defer_subclause_opt ::= defer_subclause */ yytestcase(yyruleno==99);
104941       case 101: /* onconf ::= ON CONFLICT resolvetype */ yytestcase(yyruleno==101);
104942       case 104: /* resolvetype ::= raisetype */ yytestcase(yyruleno==104);
104943 {yygotominor.yy4 = yymsp[0].minor.yy4;}
104944         break;
104945       case 88: /* conslist_opt ::= */
104946 {yygotominor.yy0.n = 0; yygotominor.yy0.z = 0;}
104947         break;
104948       case 89: /* conslist_opt ::= COMMA conslist */
104949 {yygotominor.yy0 = yymsp[-1].minor.yy0;}
104950         break;
104951       case 94: /* tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf */
104952 {sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy322,yymsp[0].minor.yy4,yymsp[-2].minor.yy4,0);}
104953         break;
104954       case 95: /* tcons ::= UNIQUE LP idxlist RP onconf */
104955 {sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy322,yymsp[0].minor.yy4,0,0,0,0);}
104956         break;
104957       case 96: /* tcons ::= CHECK LP expr RP onconf */
104958 {sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy118.pExpr);}
104959         break;
104960       case 97: /* tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt */
104961 {
104962     sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy322, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[-1].minor.yy4);
104963     sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy4);
104964 }
104965         break;
104966       case 100: /* onconf ::= */
104967 {yygotominor.yy4 = OE_Default;}
104968         break;
104969       case 102: /* orconf ::= */
104970 {yygotominor.yy210 = OE_Default;}
104971         break;
104972       case 103: /* orconf ::= OR resolvetype */
104973 {yygotominor.yy210 = (u8)yymsp[0].minor.yy4;}
104974         break;
104975       case 105: /* resolvetype ::= IGNORE */
104976 {yygotominor.yy4 = OE_Ignore;}
104977         break;
104978       case 106: /* resolvetype ::= REPLACE */
104979 {yygotominor.yy4 = OE_Replace;}
104980         break;
104981       case 107: /* cmd ::= DROP TABLE ifexists fullname */
104982 {
104983   sqlite3DropTable(pParse, yymsp[0].minor.yy259, 0, yymsp[-1].minor.yy4);
104984 }
104985         break;
104986       case 110: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select */
104987 {
104988   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);
104989 }
104990         break;
104991       case 111: /* cmd ::= DROP VIEW ifexists fullname */
104992 {
104993   sqlite3DropTable(pParse, yymsp[0].minor.yy259, 1, yymsp[-1].minor.yy4);
104994 }
104995         break;
104996       case 112: /* cmd ::= select */
104997 {
104998   SelectDest dest = {SRT_Output, 0, 0, 0, 0};
104999   sqlite3Select(pParse, yymsp[0].minor.yy387, &dest);
105000   sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy387);
105001 }
105002         break;
105003       case 113: /* select ::= oneselect */
105004 {yygotominor.yy387 = yymsp[0].minor.yy387;}
105005         break;
105006       case 114: /* select ::= select multiselect_op oneselect */
105007 {
105008   if( yymsp[0].minor.yy387 ){
105009     yymsp[0].minor.yy387->op = (u8)yymsp[-1].minor.yy4;
105010     yymsp[0].minor.yy387->pPrior = yymsp[-2].minor.yy387;
105011   }else{
105012     sqlite3SelectDelete(pParse->db, yymsp[-2].minor.yy387);
105013   }
105014   yygotominor.yy387 = yymsp[0].minor.yy387;
105015 }
105016         break;
105017       case 116: /* multiselect_op ::= UNION ALL */
105018 {yygotominor.yy4 = TK_ALL;}
105019         break;
105020       case 118: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
105021 {
105022   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);
105023 }
105024         break;
105025       case 122: /* sclp ::= selcollist COMMA */
105026       case 247: /* idxlist_opt ::= LP idxlist RP */ yytestcase(yyruleno==247);
105027 {yygotominor.yy322 = yymsp[-1].minor.yy322;}
105028         break;
105029       case 123: /* sclp ::= */
105030       case 151: /* orderby_opt ::= */ yytestcase(yyruleno==151);
105031       case 159: /* groupby_opt ::= */ yytestcase(yyruleno==159);
105032       case 240: /* exprlist ::= */ yytestcase(yyruleno==240);
105033       case 246: /* idxlist_opt ::= */ yytestcase(yyruleno==246);
105034 {yygotominor.yy322 = 0;}
105035         break;
105036       case 124: /* selcollist ::= sclp expr as */
105037 {
105038    yygotominor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy322, yymsp[-1].minor.yy118.pExpr);
105039    if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[0].minor.yy0, 1);
105040    sqlite3ExprListSetSpan(pParse,yygotominor.yy322,&yymsp[-1].minor.yy118);
105041 }
105042         break;
105043       case 125: /* selcollist ::= sclp STAR */
105044 {
105045   Expr *p = sqlite3Expr(pParse->db, TK_ALL, 0);
105046   yygotominor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy322, p);
105047 }
105048         break;
105049       case 126: /* selcollist ::= sclp nm DOT STAR */
105050 {
105051   Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, &yymsp[0].minor.yy0);
105052   Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0);
105053   Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
105054   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322, pDot);
105055 }
105056         break;
105057       case 129: /* as ::= */
105058 {yygotominor.yy0.n = 0;}
105059         break;
105060       case 130: /* from ::= */
105061 {yygotominor.yy259 = sqlite3DbMallocZero(pParse->db, sizeof(*yygotominor.yy259));}
105062         break;
105063       case 131: /* from ::= FROM seltablist */
105064 {
105065   yygotominor.yy259 = yymsp[0].minor.yy259;
105066   sqlite3SrcListShiftJoinType(yygotominor.yy259);
105067 }
105068         break;
105069       case 132: /* stl_prefix ::= seltablist joinop */
105070 {
105071    yygotominor.yy259 = yymsp[-1].minor.yy259;
105072    if( ALWAYS(yygotominor.yy259 && yygotominor.yy259->nSrc>0) ) yygotominor.yy259->a[yygotominor.yy259->nSrc-1].jointype = (u8)yymsp[0].minor.yy4;
105073 }
105074         break;
105075       case 133: /* stl_prefix ::= */
105076 {yygotominor.yy259 = 0;}
105077         break;
105078       case 134: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
105079 {
105080   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);
105081   sqlite3SrcListIndexedBy(pParse, yygotominor.yy259, &yymsp[-2].minor.yy0);
105082 }
105083         break;
105084       case 135: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */
105085 {
105086     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);
105087   }
105088         break;
105089       case 136: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
105090 {
105091     if( yymsp[-6].minor.yy259==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy314==0 && yymsp[0].minor.yy384==0 ){
105092       yygotominor.yy259 = yymsp[-4].minor.yy259;
105093     }else{
105094       Select *pSubquery;
105095       sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy259);
105096       pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy259,0,0,0,0,0,0,0);
105097       yygotominor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
105098     }
105099   }
105100         break;
105101       case 137: /* dbnm ::= */
105102       case 146: /* indexed_opt ::= */ yytestcase(yyruleno==146);
105103 {yygotominor.yy0.z=0; yygotominor.yy0.n=0;}
105104         break;
105105       case 139: /* fullname ::= nm dbnm */
105106 {yygotominor.yy259 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
105107         break;
105108       case 140: /* joinop ::= COMMA|JOIN */
105109 { yygotominor.yy4 = JT_INNER; }
105110         break;
105111       case 141: /* joinop ::= JOIN_KW JOIN */
105112 { yygotominor.yy4 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); }
105113         break;
105114       case 142: /* joinop ::= JOIN_KW nm JOIN */
105115 { yygotominor.yy4 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); }
105116         break;
105117       case 143: /* joinop ::= JOIN_KW nm nm JOIN */
105118 { yygotominor.yy4 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); }
105119         break;
105120       case 144: /* on_opt ::= ON expr */
105121       case 155: /* sortitem ::= expr */ yytestcase(yyruleno==155);
105122       case 162: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==162);
105123       case 169: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==169);
105124       case 235: /* case_else ::= ELSE expr */ yytestcase(yyruleno==235);
105125       case 237: /* case_operand ::= expr */ yytestcase(yyruleno==237);
105126 {yygotominor.yy314 = yymsp[0].minor.yy118.pExpr;}
105127         break;
105128       case 145: /* on_opt ::= */
105129       case 161: /* having_opt ::= */ yytestcase(yyruleno==161);
105130       case 168: /* where_opt ::= */ yytestcase(yyruleno==168);
105131       case 236: /* case_else ::= */ yytestcase(yyruleno==236);
105132       case 238: /* case_operand ::= */ yytestcase(yyruleno==238);
105133 {yygotominor.yy314 = 0;}
105134         break;
105135       case 148: /* indexed_opt ::= NOT INDEXED */
105136 {yygotominor.yy0.z=0; yygotominor.yy0.n=1;}
105137         break;
105138       case 149: /* using_opt ::= USING LP inscollist RP */
105139       case 181: /* inscollist_opt ::= LP inscollist RP */ yytestcase(yyruleno==181);
105140 {yygotominor.yy384 = yymsp[-1].minor.yy384;}
105141         break;
105142       case 150: /* using_opt ::= */
105143       case 180: /* inscollist_opt ::= */ yytestcase(yyruleno==180);
105144 {yygotominor.yy384 = 0;}
105145         break;
105146       case 152: /* orderby_opt ::= ORDER BY sortlist */
105147       case 160: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==160);
105148       case 239: /* exprlist ::= nexprlist */ yytestcase(yyruleno==239);
105149 {yygotominor.yy322 = yymsp[0].minor.yy322;}
105150         break;
105151       case 153: /* sortlist ::= sortlist COMMA sortitem sortorder */
105152 {
105153   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322,yymsp[-1].minor.yy314);
105154   if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy4;
105155 }
105156         break;
105157       case 154: /* sortlist ::= sortitem sortorder */
105158 {
105159   yygotominor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy314);
105160   if( yygotominor.yy322 && ALWAYS(yygotominor.yy322->a) ) yygotominor.yy322->a[0].sortOrder = (u8)yymsp[0].minor.yy4;
105161 }
105162         break;
105163       case 156: /* sortorder ::= ASC */
105164       case 158: /* sortorder ::= */ yytestcase(yyruleno==158);
105165 {yygotominor.yy4 = SQLITE_SO_ASC;}
105166         break;
105167       case 157: /* sortorder ::= DESC */
105168 {yygotominor.yy4 = SQLITE_SO_DESC;}
105169         break;
105170       case 163: /* limit_opt ::= */
105171 {yygotominor.yy292.pLimit = 0; yygotominor.yy292.pOffset = 0;}
105172         break;
105173       case 164: /* limit_opt ::= LIMIT expr */
105174 {yygotominor.yy292.pLimit = yymsp[0].minor.yy118.pExpr; yygotominor.yy292.pOffset = 0;}
105175         break;
105176       case 165: /* limit_opt ::= LIMIT expr OFFSET expr */
105177 {yygotominor.yy292.pLimit = yymsp[-2].minor.yy118.pExpr; yygotominor.yy292.pOffset = yymsp[0].minor.yy118.pExpr;}
105178         break;
105179       case 166: /* limit_opt ::= LIMIT expr COMMA expr */
105180 {yygotominor.yy292.pOffset = yymsp[-2].minor.yy118.pExpr; yygotominor.yy292.pLimit = yymsp[0].minor.yy118.pExpr;}
105181         break;
105182       case 167: /* cmd ::= DELETE FROM fullname indexed_opt where_opt */
105183 {
105184   sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy259, &yymsp[-1].minor.yy0);
105185   sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy259,yymsp[0].minor.yy314);
105186 }
105187         break;
105188       case 170: /* cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt */
105189 {
105190   sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy259, &yymsp[-3].minor.yy0);
105191   sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy322,"set list"); 
105192   sqlite3Update(pParse,yymsp[-4].minor.yy259,yymsp[-1].minor.yy322,yymsp[0].minor.yy314,yymsp[-5].minor.yy210);
105193 }
105194         break;
105195       case 171: /* setlist ::= setlist COMMA nm EQ expr */
105196 {
105197   yygotominor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[0].minor.yy118.pExpr);
105198   sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[-2].minor.yy0, 1);
105199 }
105200         break;
105201       case 172: /* setlist ::= nm EQ expr */
105202 {
105203   yygotominor.yy322 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy118.pExpr);
105204   sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[-2].minor.yy0, 1);
105205 }
105206         break;
105207       case 173: /* cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP */
105208 {sqlite3Insert(pParse, yymsp[-5].minor.yy259, yymsp[-1].minor.yy322, 0, yymsp[-4].minor.yy384, yymsp[-7].minor.yy210);}
105209         break;
105210       case 174: /* cmd ::= insert_cmd INTO fullname inscollist_opt select */
105211 {sqlite3Insert(pParse, yymsp[-2].minor.yy259, 0, yymsp[0].minor.yy387, yymsp[-1].minor.yy384, yymsp[-4].minor.yy210);}
105212         break;
105213       case 175: /* cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES */
105214 {sqlite3Insert(pParse, yymsp[-3].minor.yy259, 0, 0, yymsp[-2].minor.yy384, yymsp[-5].minor.yy210);}
105215         break;
105216       case 176: /* insert_cmd ::= INSERT orconf */
105217 {yygotominor.yy210 = yymsp[0].minor.yy210;}
105218         break;
105219       case 177: /* insert_cmd ::= REPLACE */
105220 {yygotominor.yy210 = OE_Replace;}
105221         break;
105222       case 178: /* itemlist ::= itemlist COMMA expr */
105223       case 241: /* nexprlist ::= nexprlist COMMA expr */ yytestcase(yyruleno==241);
105224 {yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[0].minor.yy118.pExpr);}
105225         break;
105226       case 179: /* itemlist ::= expr */
105227       case 242: /* nexprlist ::= expr */ yytestcase(yyruleno==242);
105228 {yygotominor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy118.pExpr);}
105229         break;
105230       case 182: /* inscollist ::= inscollist COMMA nm */
105231 {yygotominor.yy384 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy384,&yymsp[0].minor.yy0);}
105232         break;
105233       case 183: /* inscollist ::= nm */
105234 {yygotominor.yy384 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0);}
105235         break;
105236       case 184: /* expr ::= term */
105237 {yygotominor.yy118 = yymsp[0].minor.yy118;}
105238         break;
105239       case 185: /* expr ::= LP expr RP */
105240 {yygotominor.yy118.pExpr = yymsp[-1].minor.yy118.pExpr; spanSet(&yygotominor.yy118,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);}
105241         break;
105242       case 186: /* term ::= NULL */
105243       case 191: /* term ::= INTEGER|FLOAT|BLOB */ yytestcase(yyruleno==191);
105244       case 192: /* term ::= STRING */ yytestcase(yyruleno==192);
105245 {spanExpr(&yygotominor.yy118, pParse, yymsp[0].major, &yymsp[0].minor.yy0);}
105246         break;
105247       case 187: /* expr ::= id */
105248       case 188: /* expr ::= JOIN_KW */ yytestcase(yyruleno==188);
105249 {spanExpr(&yygotominor.yy118, pParse, TK_ID, &yymsp[0].minor.yy0);}
105250         break;
105251       case 189: /* expr ::= nm DOT nm */
105252 {
105253   Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0);
105254   Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0);
105255   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2, 0);
105256   spanSet(&yygotominor.yy118,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
105257 }
105258         break;
105259       case 190: /* expr ::= nm DOT nm DOT nm */
105260 {
105261   Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-4].minor.yy0);
105262   Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0);
105263   Expr *temp3 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0);
105264   Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3, 0);
105265   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0);
105266   spanSet(&yygotominor.yy118,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);
105267 }
105268         break;
105269       case 193: /* expr ::= REGISTER */
105270 {
105271   /* When doing a nested parse, one can include terms in an expression
105272   ** that look like this:   #1 #2 ...  These terms refer to registers
105273   ** in the virtual machine.  #N is the N-th register. */
105274   if( pParse->nested==0 ){
105275     sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &yymsp[0].minor.yy0);
105276     yygotominor.yy118.pExpr = 0;
105277   }else{
105278     yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &yymsp[0].minor.yy0);
105279     if( yygotominor.yy118.pExpr ) sqlite3GetInt32(&yymsp[0].minor.yy0.z[1], &yygotominor.yy118.pExpr->iTable);
105280   }
105281   spanSet(&yygotominor.yy118, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
105282 }
105283         break;
105284       case 194: /* expr ::= VARIABLE */
105285 {
105286   spanExpr(&yygotominor.yy118, pParse, TK_VARIABLE, &yymsp[0].minor.yy0);
105287   sqlite3ExprAssignVarNumber(pParse, yygotominor.yy118.pExpr);
105288   spanSet(&yygotominor.yy118, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
105289 }
105290         break;
105291       case 195: /* expr ::= expr COLLATE ids */
105292 {
105293   yygotominor.yy118.pExpr = sqlite3ExprSetCollByToken(pParse, yymsp[-2].minor.yy118.pExpr, &yymsp[0].minor.yy0);
105294   yygotominor.yy118.zStart = yymsp[-2].minor.yy118.zStart;
105295   yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
105296 }
105297         break;
105298       case 196: /* expr ::= CAST LP expr AS typetoken RP */
105299 {
105300   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_CAST, yymsp[-3].minor.yy118.pExpr, 0, &yymsp[-1].minor.yy0);
105301   spanSet(&yygotominor.yy118,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0);
105302 }
105303         break;
105304       case 197: /* expr ::= ID LP distinct exprlist RP */
105305 {
105306   if( yymsp[-1].minor.yy322 && yymsp[-1].minor.yy322->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
105307     sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0);
105308   }
105309   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0);
105310   spanSet(&yygotominor.yy118,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);
105311   if( yymsp[-2].minor.yy4 && yygotominor.yy118.pExpr ){
105312     yygotominor.yy118.pExpr->flags |= EP_Distinct;
105313   }
105314 }
105315         break;
105316       case 198: /* expr ::= ID LP STAR RP */
105317 {
105318   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0);
105319   spanSet(&yygotominor.yy118,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
105320 }
105321         break;
105322       case 199: /* term ::= CTIME_KW */
105323 {
105324   /* The CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP values are
105325   ** treated as functions that return constants */
105326   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, 0,&yymsp[0].minor.yy0);
105327   if( yygotominor.yy118.pExpr ){
105328     yygotominor.yy118.pExpr->op = TK_CONST_FUNC;  
105329   }
105330   spanSet(&yygotominor.yy118, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
105331 }
105332         break;
105333       case 200: /* expr ::= expr AND expr */
105334       case 201: /* expr ::= expr OR expr */ yytestcase(yyruleno==201);
105335       case 202: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==202);
105336       case 203: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==203);
105337       case 204: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==204);
105338       case 205: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==205);
105339       case 206: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==206);
105340       case 207: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==207);
105341 {spanBinaryExpr(&yygotominor.yy118,pParse,yymsp[-1].major,&yymsp[-2].minor.yy118,&yymsp[0].minor.yy118);}
105342         break;
105343       case 208: /* likeop ::= LIKE_KW */
105344       case 210: /* likeop ::= MATCH */ yytestcase(yyruleno==210);
105345 {yygotominor.yy342.eOperator = yymsp[0].minor.yy0; yygotominor.yy342.not = 0;}
105346         break;
105347       case 209: /* likeop ::= NOT LIKE_KW */
105348       case 211: /* likeop ::= NOT MATCH */ yytestcase(yyruleno==211);
105349 {yygotominor.yy342.eOperator = yymsp[0].minor.yy0; yygotominor.yy342.not = 1;}
105350         break;
105351       case 212: /* expr ::= expr likeop expr */
105352 {
105353   ExprList *pList;
105354   pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy118.pExpr);
105355   pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy118.pExpr);
105356   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy342.eOperator);
105357   if( yymsp[-1].minor.yy342.not ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
105358   yygotominor.yy118.zStart = yymsp[-2].minor.yy118.zStart;
105359   yygotominor.yy118.zEnd = yymsp[0].minor.yy118.zEnd;
105360   if( yygotominor.yy118.pExpr ) yygotominor.yy118.pExpr->flags |= EP_InfixFunc;
105361 }
105362         break;
105363       case 213: /* expr ::= expr likeop expr ESCAPE expr */
105364 {
105365   ExprList *pList;
105366   pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy118.pExpr);
105367   pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy118.pExpr);
105368   pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy118.pExpr);
105369   yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy342.eOperator);
105370   if( yymsp[-3].minor.yy342.not ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
105371   yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
105372   yygotominor.yy118.zEnd = yymsp[0].minor.yy118.zEnd;
105373   if( yygotominor.yy118.pExpr ) yygotominor.yy118.pExpr->flags |= EP_InfixFunc;
105374 }
105375         break;
105376       case 214: /* expr ::= expr ISNULL|NOTNULL */
105377 {spanUnaryPostfix(&yygotominor.yy118,pParse,yymsp[0].major,&yymsp[-1].minor.yy118,&yymsp[0].minor.yy0);}
105378         break;
105379       case 215: /* expr ::= expr NOT NULL */
105380 {spanUnaryPostfix(&yygotominor.yy118,pParse,TK_NOTNULL,&yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
105381         break;
105382       case 216: /* expr ::= expr IS expr */
105383 {
105384   spanBinaryExpr(&yygotominor.yy118,pParse,TK_IS,&yymsp[-2].minor.yy118,&yymsp[0].minor.yy118);
105385   binaryToUnaryIfNull(pParse, yymsp[0].minor.yy118.pExpr, yygotominor.yy118.pExpr, TK_ISNULL);
105386 }
105387         break;
105388       case 217: /* expr ::= expr IS NOT expr */
105389 {
105390   spanBinaryExpr(&yygotominor.yy118,pParse,TK_ISNOT,&yymsp[-3].minor.yy118,&yymsp[0].minor.yy118);
105391   binaryToUnaryIfNull(pParse, yymsp[0].minor.yy118.pExpr, yygotominor.yy118.pExpr, TK_NOTNULL);
105392 }
105393         break;
105394       case 218: /* expr ::= NOT expr */
105395       case 219: /* expr ::= BITNOT expr */ yytestcase(yyruleno==219);
105396 {spanUnaryPrefix(&yygotominor.yy118,pParse,yymsp[-1].major,&yymsp[0].minor.yy118,&yymsp[-1].minor.yy0);}
105397         break;
105398       case 220: /* expr ::= MINUS expr */
105399 {spanUnaryPrefix(&yygotominor.yy118,pParse,TK_UMINUS,&yymsp[0].minor.yy118,&yymsp[-1].minor.yy0);}
105400         break;
105401       case 221: /* expr ::= PLUS expr */
105402 {spanUnaryPrefix(&yygotominor.yy118,pParse,TK_UPLUS,&yymsp[0].minor.yy118,&yymsp[-1].minor.yy0);}
105403         break;
105404       case 224: /* expr ::= expr between_op expr AND expr */
105405 {
105406   ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy118.pExpr);
105407   pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy118.pExpr);
105408   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy118.pExpr, 0, 0);
105409   if( yygotominor.yy118.pExpr ){
105410     yygotominor.yy118.pExpr->x.pList = pList;
105411   }else{
105412     sqlite3ExprListDelete(pParse->db, pList);
105413   } 
105414   if( yymsp[-3].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
105415   yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
105416   yygotominor.yy118.zEnd = yymsp[0].minor.yy118.zEnd;
105417 }
105418         break;
105419       case 227: /* expr ::= expr in_op LP exprlist RP */
105420 {
105421     if( yymsp[-1].minor.yy322==0 ){
105422       /* Expressions of the form
105423       **
105424       **      expr1 IN ()
105425       **      expr1 NOT IN ()
105426       **
105427       ** simplify to constants 0 (false) and 1 (true), respectively,
105428       ** regardless of the value of expr1.
105429       */
105430       yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &sqlite3IntTokens[yymsp[-3].minor.yy4]);
105431       sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy118.pExpr);
105432     }else{
105433       yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy118.pExpr, 0, 0);
105434       if( yygotominor.yy118.pExpr ){
105435         yygotominor.yy118.pExpr->x.pList = yymsp[-1].minor.yy322;
105436         sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
105437       }else{
105438         sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322);
105439       }
105440       if( yymsp[-3].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
105441     }
105442     yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
105443     yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
105444   }
105445         break;
105446       case 228: /* expr ::= LP select RP */
105447 {
105448     yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0, 0);
105449     if( yygotominor.yy118.pExpr ){
105450       yygotominor.yy118.pExpr->x.pSelect = yymsp[-1].minor.yy387;
105451       ExprSetProperty(yygotominor.yy118.pExpr, EP_xIsSelect);
105452       sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
105453     }else{
105454       sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy387);
105455     }
105456     yygotominor.yy118.zStart = yymsp[-2].minor.yy0.z;
105457     yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
105458   }
105459         break;
105460       case 229: /* expr ::= expr in_op LP select RP */
105461 {
105462     yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy118.pExpr, 0, 0);
105463     if( yygotominor.yy118.pExpr ){
105464       yygotominor.yy118.pExpr->x.pSelect = yymsp[-1].minor.yy387;
105465       ExprSetProperty(yygotominor.yy118.pExpr, EP_xIsSelect);
105466       sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
105467     }else{
105468       sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy387);
105469     }
105470     if( yymsp[-3].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
105471     yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
105472     yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
105473   }
105474         break;
105475       case 230: /* expr ::= expr in_op nm dbnm */
105476 {
105477     SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);
105478     yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-3].minor.yy118.pExpr, 0, 0);
105479     if( yygotominor.yy118.pExpr ){
105480       yygotominor.yy118.pExpr->x.pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0);
105481       ExprSetProperty(yygotominor.yy118.pExpr, EP_xIsSelect);
105482       sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
105483     }else{
105484       sqlite3SrcListDelete(pParse->db, pSrc);
105485     }
105486     if( yymsp[-2].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
105487     yygotominor.yy118.zStart = yymsp[-3].minor.yy118.zStart;
105488     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];
105489   }
105490         break;
105491       case 231: /* expr ::= EXISTS LP select RP */
105492 {
105493     Expr *p = yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0, 0);
105494     if( p ){
105495       p->x.pSelect = yymsp[-1].minor.yy387;
105496       ExprSetProperty(p, EP_xIsSelect);
105497       sqlite3ExprSetHeight(pParse, p);
105498     }else{
105499       sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy387);
105500     }
105501     yygotominor.yy118.zStart = yymsp[-3].minor.yy0.z;
105502     yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
105503   }
105504         break;
105505       case 232: /* expr ::= CASE case_operand case_exprlist case_else END */
105506 {
105507   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy314, yymsp[-1].minor.yy314, 0);
105508   if( yygotominor.yy118.pExpr ){
105509     yygotominor.yy118.pExpr->x.pList = yymsp[-2].minor.yy322;
105510     sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
105511   }else{
105512     sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy322);
105513   }
105514   yygotominor.yy118.zStart = yymsp[-4].minor.yy0.z;
105515   yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
105516 }
105517         break;
105518       case 233: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
105519 {
105520   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[-2].minor.yy118.pExpr);
105521   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yygotominor.yy322, yymsp[0].minor.yy118.pExpr);
105522 }
105523         break;
105524       case 234: /* case_exprlist ::= WHEN expr THEN expr */
105525 {
105526   yygotominor.yy322 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy118.pExpr);
105527   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yygotominor.yy322, yymsp[0].minor.yy118.pExpr);
105528 }
105529         break;
105530       case 243: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP */
105531 {
105532   sqlite3CreateIndex(pParse, &yymsp[-6].minor.yy0, &yymsp[-5].minor.yy0, 
105533                      sqlite3SrcListAppend(pParse->db,0,&yymsp[-3].minor.yy0,0), yymsp[-1].minor.yy322, yymsp[-9].minor.yy4,
105534                       &yymsp[-10].minor.yy0, &yymsp[0].minor.yy0, SQLITE_SO_ASC, yymsp[-7].minor.yy4);
105535 }
105536         break;
105537       case 244: /* uniqueflag ::= UNIQUE */
105538       case 298: /* raisetype ::= ABORT */ yytestcase(yyruleno==298);
105539 {yygotominor.yy4 = OE_Abort;}
105540         break;
105541       case 245: /* uniqueflag ::= */
105542 {yygotominor.yy4 = OE_None;}
105543         break;
105544       case 248: /* idxlist ::= idxlist COMMA nm collate sortorder */
105545 {
105546   Expr *p = 0;
105547   if( yymsp[-1].minor.yy0.n>0 ){
105548     p = sqlite3Expr(pParse->db, TK_COLUMN, 0);
105549     sqlite3ExprSetCollByToken(pParse, p, &yymsp[-1].minor.yy0);
105550   }
105551   yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, p);
105552   sqlite3ExprListSetName(pParse,yygotominor.yy322,&yymsp[-2].minor.yy0,1);
105553   sqlite3ExprListCheckLength(pParse, yygotominor.yy322, "index");
105554   if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy4;
105555 }
105556         break;
105557       case 249: /* idxlist ::= nm collate sortorder */
105558 {
105559   Expr *p = 0;
105560   if( yymsp[-1].minor.yy0.n>0 ){
105561     p = sqlite3PExpr(pParse, TK_COLUMN, 0, 0, 0);
105562     sqlite3ExprSetCollByToken(pParse, p, &yymsp[-1].minor.yy0);
105563   }
105564   yygotominor.yy322 = sqlite3ExprListAppend(pParse,0, p);
105565   sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[-2].minor.yy0, 1);
105566   sqlite3ExprListCheckLength(pParse, yygotominor.yy322, "index");
105567   if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy4;
105568 }
105569         break;
105570       case 250: /* collate ::= */
105571 {yygotominor.yy0.z = 0; yygotominor.yy0.n = 0;}
105572         break;
105573       case 252: /* cmd ::= DROP INDEX ifexists fullname */
105574 {sqlite3DropIndex(pParse, yymsp[0].minor.yy259, yymsp[-1].minor.yy4);}
105575         break;
105576       case 253: /* cmd ::= VACUUM */
105577       case 254: /* cmd ::= VACUUM nm */ yytestcase(yyruleno==254);
105578 {sqlite3Vacuum(pParse);}
105579         break;
105580       case 255: /* cmd ::= PRAGMA nm dbnm */
105581 {sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);}
105582         break;
105583       case 256: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
105584 {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);}
105585         break;
105586       case 257: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
105587 {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);}
105588         break;
105589       case 258: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
105590 {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);}
105591         break;
105592       case 259: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
105593 {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);}
105594         break;
105595       case 270: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
105596 {
105597   Token all;
105598   all.z = yymsp[-3].minor.yy0.z;
105599   all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
105600   sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy203, &all);
105601 }
105602         break;
105603       case 271: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
105604 {
105605   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);
105606   yygotominor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0);
105607 }
105608         break;
105609       case 272: /* trigger_time ::= BEFORE */
105610       case 275: /* trigger_time ::= */ yytestcase(yyruleno==275);
105611 { yygotominor.yy4 = TK_BEFORE; }
105612         break;
105613       case 273: /* trigger_time ::= AFTER */
105614 { yygotominor.yy4 = TK_AFTER;  }
105615         break;
105616       case 274: /* trigger_time ::= INSTEAD OF */
105617 { yygotominor.yy4 = TK_INSTEAD;}
105618         break;
105619       case 276: /* trigger_event ::= DELETE|INSERT */
105620       case 277: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==277);
105621 {yygotominor.yy90.a = yymsp[0].major; yygotominor.yy90.b = 0;}
105622         break;
105623       case 278: /* trigger_event ::= UPDATE OF inscollist */
105624 {yygotominor.yy90.a = TK_UPDATE; yygotominor.yy90.b = yymsp[0].minor.yy384;}
105625         break;
105626       case 281: /* when_clause ::= */
105627       case 303: /* key_opt ::= */ yytestcase(yyruleno==303);
105628 { yygotominor.yy314 = 0; }
105629         break;
105630       case 282: /* when_clause ::= WHEN expr */
105631       case 304: /* key_opt ::= KEY expr */ yytestcase(yyruleno==304);
105632 { yygotominor.yy314 = yymsp[0].minor.yy118.pExpr; }
105633         break;
105634       case 283: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
105635 {
105636   assert( yymsp[-2].minor.yy203!=0 );
105637   yymsp[-2].minor.yy203->pLast->pNext = yymsp[-1].minor.yy203;
105638   yymsp[-2].minor.yy203->pLast = yymsp[-1].minor.yy203;
105639   yygotominor.yy203 = yymsp[-2].minor.yy203;
105640 }
105641         break;
105642       case 284: /* trigger_cmd_list ::= trigger_cmd SEMI */
105643
105644   assert( yymsp[-1].minor.yy203!=0 );
105645   yymsp[-1].minor.yy203->pLast = yymsp[-1].minor.yy203;
105646   yygotominor.yy203 = yymsp[-1].minor.yy203;
105647 }
105648         break;
105649       case 286: /* trnm ::= nm DOT nm */
105650 {
105651   yygotominor.yy0 = yymsp[0].minor.yy0;
105652   sqlite3ErrorMsg(pParse, 
105653         "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
105654         "statements within triggers");
105655 }
105656         break;
105657       case 288: /* tridxby ::= INDEXED BY nm */
105658 {
105659   sqlite3ErrorMsg(pParse,
105660         "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
105661         "within triggers");
105662 }
105663         break;
105664       case 289: /* tridxby ::= NOT INDEXED */
105665 {
105666   sqlite3ErrorMsg(pParse,
105667         "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
105668         "within triggers");
105669 }
105670         break;
105671       case 290: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */
105672 { yygotominor.yy203 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy322, yymsp[0].minor.yy314, yymsp[-5].minor.yy210); }
105673         break;
105674       case 291: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt VALUES LP itemlist RP */
105675 {yygotominor.yy203 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy384, yymsp[-1].minor.yy322, 0, yymsp[-7].minor.yy210);}
105676         break;
105677       case 292: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select */
105678 {yygotominor.yy203 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy384, 0, yymsp[0].minor.yy387, yymsp[-4].minor.yy210);}
105679         break;
105680       case 293: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */
105681 {yygotominor.yy203 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy314);}
105682         break;
105683       case 294: /* trigger_cmd ::= select */
105684 {yygotominor.yy203 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy387); }
105685         break;
105686       case 295: /* expr ::= RAISE LP IGNORE RP */
105687 {
105688   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, 0); 
105689   if( yygotominor.yy118.pExpr ){
105690     yygotominor.yy118.pExpr->affinity = OE_Ignore;
105691   }
105692   yygotominor.yy118.zStart = yymsp[-3].minor.yy0.z;
105693   yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
105694 }
105695         break;
105696       case 296: /* expr ::= RAISE LP raisetype COMMA nm RP */
105697 {
105698   yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, &yymsp[-1].minor.yy0); 
105699   if( yygotominor.yy118.pExpr ) {
105700     yygotominor.yy118.pExpr->affinity = (char)yymsp[-3].minor.yy4;
105701   }
105702   yygotominor.yy118.zStart = yymsp[-5].minor.yy0.z;
105703   yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
105704 }
105705         break;
105706       case 297: /* raisetype ::= ROLLBACK */
105707 {yygotominor.yy4 = OE_Rollback;}
105708         break;
105709       case 299: /* raisetype ::= FAIL */
105710 {yygotominor.yy4 = OE_Fail;}
105711         break;
105712       case 300: /* cmd ::= DROP TRIGGER ifexists fullname */
105713 {
105714   sqlite3DropTrigger(pParse,yymsp[0].minor.yy259,yymsp[-1].minor.yy4);
105715 }
105716         break;
105717       case 301: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
105718 {
105719   sqlite3Attach(pParse, yymsp[-3].minor.yy118.pExpr, yymsp[-1].minor.yy118.pExpr, yymsp[0].minor.yy314);
105720 }
105721         break;
105722       case 302: /* cmd ::= DETACH database_kw_opt expr */
105723 {
105724   sqlite3Detach(pParse, yymsp[0].minor.yy118.pExpr);
105725 }
105726         break;
105727       case 307: /* cmd ::= REINDEX */
105728 {sqlite3Reindex(pParse, 0, 0);}
105729         break;
105730       case 308: /* cmd ::= REINDEX nm dbnm */
105731 {sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
105732         break;
105733       case 309: /* cmd ::= ANALYZE */
105734 {sqlite3Analyze(pParse, 0, 0);}
105735         break;
105736       case 310: /* cmd ::= ANALYZE nm dbnm */
105737 {sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
105738         break;
105739       case 311: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
105740 {
105741   sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy259,&yymsp[0].minor.yy0);
105742 }
105743         break;
105744       case 312: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column */
105745 {
105746   sqlite3AlterFinishAddColumn(pParse, &yymsp[0].minor.yy0);
105747 }
105748         break;
105749       case 313: /* add_column_fullname ::= fullname */
105750 {
105751   pParse->db->lookaside.bEnabled = 0;
105752   sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy259);
105753 }
105754         break;
105755       case 316: /* cmd ::= create_vtab */
105756 {sqlite3VtabFinishParse(pParse,0);}
105757         break;
105758       case 317: /* cmd ::= create_vtab LP vtabarglist RP */
105759 {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);}
105760         break;
105761       case 318: /* create_vtab ::= createkw VIRTUAL TABLE nm dbnm USING nm */
105762 {
105763     sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
105764 }
105765         break;
105766       case 321: /* vtabarg ::= */
105767 {sqlite3VtabArgInit(pParse);}
105768         break;
105769       case 323: /* vtabargtoken ::= ANY */
105770       case 324: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==324);
105771       case 325: /* lp ::= LP */ yytestcase(yyruleno==325);
105772 {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);}
105773         break;
105774       default:
105775       /* (0) input ::= cmdlist */ yytestcase(yyruleno==0);
105776       /* (1) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==1);
105777       /* (2) cmdlist ::= ecmd */ yytestcase(yyruleno==2);
105778       /* (3) ecmd ::= SEMI */ yytestcase(yyruleno==3);
105779       /* (4) ecmd ::= explain cmdx SEMI */ yytestcase(yyruleno==4);
105780       /* (10) trans_opt ::= */ yytestcase(yyruleno==10);
105781       /* (11) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==11);
105782       /* (12) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==12);
105783       /* (20) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==20);
105784       /* (21) savepoint_opt ::= */ yytestcase(yyruleno==21);
105785       /* (25) cmd ::= create_table create_table_args */ yytestcase(yyruleno==25);
105786       /* (34) columnlist ::= columnlist COMMA column */ yytestcase(yyruleno==34);
105787       /* (35) columnlist ::= column */ yytestcase(yyruleno==35);
105788       /* (44) type ::= */ yytestcase(yyruleno==44);
105789       /* (51) signed ::= plus_num */ yytestcase(yyruleno==51);
105790       /* (52) signed ::= minus_num */ yytestcase(yyruleno==52);
105791       /* (53) carglist ::= carglist carg */ yytestcase(yyruleno==53);
105792       /* (54) carglist ::= */ yytestcase(yyruleno==54);
105793       /* (55) carg ::= CONSTRAINT nm ccons */ yytestcase(yyruleno==55);
105794       /* (56) carg ::= ccons */ yytestcase(yyruleno==56);
105795       /* (62) ccons ::= NULL onconf */ yytestcase(yyruleno==62);
105796       /* (90) conslist ::= conslist COMMA tcons */ yytestcase(yyruleno==90);
105797       /* (91) conslist ::= conslist tcons */ yytestcase(yyruleno==91);
105798       /* (92) conslist ::= tcons */ yytestcase(yyruleno==92);
105799       /* (93) tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==93);
105800       /* (268) plus_opt ::= PLUS */ yytestcase(yyruleno==268);
105801       /* (269) plus_opt ::= */ yytestcase(yyruleno==269);
105802       /* (279) foreach_clause ::= */ yytestcase(yyruleno==279);
105803       /* (280) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==280);
105804       /* (287) tridxby ::= */ yytestcase(yyruleno==287);
105805       /* (305) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==305);
105806       /* (306) database_kw_opt ::= */ yytestcase(yyruleno==306);
105807       /* (314) kwcolumn_opt ::= */ yytestcase(yyruleno==314);
105808       /* (315) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==315);
105809       /* (319) vtabarglist ::= vtabarg */ yytestcase(yyruleno==319);
105810       /* (320) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==320);
105811       /* (322) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==322);
105812       /* (326) anylist ::= */ yytestcase(yyruleno==326);
105813       /* (327) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==327);
105814       /* (328) anylist ::= anylist ANY */ yytestcase(yyruleno==328);
105815         break;
105816   };
105817   yygoto = yyRuleInfo[yyruleno].lhs;
105818   yysize = yyRuleInfo[yyruleno].nrhs;
105819   yypParser->yyidx -= yysize;
105820   yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
105821   if( yyact < YYNSTATE ){
105822 #ifdef NDEBUG
105823     /* If we are not debugging and the reduce action popped at least
105824     ** one element off the stack, then we can push the new element back
105825     ** onto the stack here, and skip the stack overflow test in yy_shift().
105826     ** That gives a significant speed improvement. */
105827     if( yysize ){
105828       yypParser->yyidx++;
105829       yymsp -= yysize-1;
105830       yymsp->stateno = (YYACTIONTYPE)yyact;
105831       yymsp->major = (YYCODETYPE)yygoto;
105832       yymsp->minor = yygotominor;
105833     }else
105834 #endif
105835     {
105836       yy_shift(yypParser,yyact,yygoto,&yygotominor);
105837     }
105838   }else{
105839     assert( yyact == YYNSTATE + YYNRULE + 1 );
105840     yy_accept(yypParser);
105841   }
105842 }
105843
105844 /*
105845 ** The following code executes when the parse fails
105846 */
105847 #ifndef YYNOERRORRECOVERY
105848 static void yy_parse_failed(
105849   yyParser *yypParser           /* The parser */
105850 ){
105851   sqlite3ParserARG_FETCH;
105852 #ifndef NDEBUG
105853   if( yyTraceFILE ){
105854     fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
105855   }
105856 #endif
105857   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
105858   /* Here code is inserted which will be executed whenever the
105859   ** parser fails */
105860   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
105861 }
105862 #endif /* YYNOERRORRECOVERY */
105863
105864 /*
105865 ** The following code executes when a syntax error first occurs.
105866 */
105867 static void yy_syntax_error(
105868   yyParser *yypParser,           /* The parser */
105869   int yymajor,                   /* The major type of the error token */
105870   YYMINORTYPE yyminor            /* The minor type of the error token */
105871 ){
105872   sqlite3ParserARG_FETCH;
105873 #define TOKEN (yyminor.yy0)
105874
105875   UNUSED_PARAMETER(yymajor);  /* Silence some compiler warnings */
105876   assert( TOKEN.z[0] );  /* The tokenizer always gives us a token */
105877   sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
105878   pParse->parseError = 1;
105879   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
105880 }
105881
105882 /*
105883 ** The following is executed when the parser accepts
105884 */
105885 static void yy_accept(
105886   yyParser *yypParser           /* The parser */
105887 ){
105888   sqlite3ParserARG_FETCH;
105889 #ifndef NDEBUG
105890   if( yyTraceFILE ){
105891     fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
105892   }
105893 #endif
105894   while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
105895   /* Here code is inserted which will be executed whenever the
105896   ** parser accepts */
105897   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
105898 }
105899
105900 /* The main parser program.
105901 ** The first argument is a pointer to a structure obtained from
105902 ** "sqlite3ParserAlloc" which describes the current state of the parser.
105903 ** The second argument is the major token number.  The third is
105904 ** the minor token.  The fourth optional argument is whatever the
105905 ** user wants (and specified in the grammar) and is available for
105906 ** use by the action routines.
105907 **
105908 ** Inputs:
105909 ** <ul>
105910 ** <li> A pointer to the parser (an opaque structure.)
105911 ** <li> The major token number.
105912 ** <li> The minor token number.
105913 ** <li> An option argument of a grammar-specified type.
105914 ** </ul>
105915 **
105916 ** Outputs:
105917 ** None.
105918 */
105919 SQLITE_PRIVATE void sqlite3Parser(
105920   void *yyp,                   /* The parser */
105921   int yymajor,                 /* The major token code number */
105922   sqlite3ParserTOKENTYPE yyminor       /* The value for the token */
105923   sqlite3ParserARG_PDECL               /* Optional %extra_argument parameter */
105924 ){
105925   YYMINORTYPE yyminorunion;
105926   int yyact;            /* The parser action. */
105927   int yyendofinput;     /* True if we are at the end of input */
105928 #ifdef YYERRORSYMBOL
105929   int yyerrorhit = 0;   /* True if yymajor has invoked an error */
105930 #endif
105931   yyParser *yypParser;  /* The parser */
105932
105933   /* (re)initialize the parser, if necessary */
105934   yypParser = (yyParser*)yyp;
105935   if( yypParser->yyidx<0 ){
105936 #if YYSTACKDEPTH<=0
105937     if( yypParser->yystksz <=0 ){
105938       /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/
105939       yyminorunion = yyzerominor;
105940       yyStackOverflow(yypParser, &yyminorunion);
105941       return;
105942     }
105943 #endif
105944     yypParser->yyidx = 0;
105945     yypParser->yyerrcnt = -1;
105946     yypParser->yystack[0].stateno = 0;
105947     yypParser->yystack[0].major = 0;
105948   }
105949   yyminorunion.yy0 = yyminor;
105950   yyendofinput = (yymajor==0);
105951   sqlite3ParserARG_STORE;
105952
105953 #ifndef NDEBUG
105954   if( yyTraceFILE ){
105955     fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
105956   }
105957 #endif
105958
105959   do{
105960     yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
105961     if( yyact<YYNSTATE ){
105962       assert( !yyendofinput );  /* Impossible to shift the $ token */
105963       yy_shift(yypParser,yyact,yymajor,&yyminorunion);
105964       yypParser->yyerrcnt--;
105965       yymajor = YYNOCODE;
105966     }else if( yyact < YYNSTATE + YYNRULE ){
105967       yy_reduce(yypParser,yyact-YYNSTATE);
105968     }else{
105969       assert( yyact == YY_ERROR_ACTION );
105970 #ifdef YYERRORSYMBOL
105971       int yymx;
105972 #endif
105973 #ifndef NDEBUG
105974       if( yyTraceFILE ){
105975         fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
105976       }
105977 #endif
105978 #ifdef YYERRORSYMBOL
105979       /* A syntax error has occurred.
105980       ** The response to an error depends upon whether or not the
105981       ** grammar defines an error token "ERROR".  
105982       **
105983       ** This is what we do if the grammar does define ERROR:
105984       **
105985       **  * Call the %syntax_error function.
105986       **
105987       **  * Begin popping the stack until we enter a state where
105988       **    it is legal to shift the error symbol, then shift
105989       **    the error symbol.
105990       **
105991       **  * Set the error count to three.
105992       **
105993       **  * Begin accepting and shifting new tokens.  No new error
105994       **    processing will occur until three tokens have been
105995       **    shifted successfully.
105996       **
105997       */
105998       if( yypParser->yyerrcnt<0 ){
105999         yy_syntax_error(yypParser,yymajor,yyminorunion);
106000       }
106001       yymx = yypParser->yystack[yypParser->yyidx].major;
106002       if( yymx==YYERRORSYMBOL || yyerrorhit ){
106003 #ifndef NDEBUG
106004         if( yyTraceFILE ){
106005           fprintf(yyTraceFILE,"%sDiscard input token %s\n",
106006              yyTracePrompt,yyTokenName[yymajor]);
106007         }
106008 #endif
106009         yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion);
106010         yymajor = YYNOCODE;
106011       }else{
106012          while(
106013           yypParser->yyidx >= 0 &&
106014           yymx != YYERRORSYMBOL &&
106015           (yyact = yy_find_reduce_action(
106016                         yypParser->yystack[yypParser->yyidx].stateno,
106017                         YYERRORSYMBOL)) >= YYNSTATE
106018         ){
106019           yy_pop_parser_stack(yypParser);
106020         }
106021         if( yypParser->yyidx < 0 || yymajor==0 ){
106022           yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
106023           yy_parse_failed(yypParser);
106024           yymajor = YYNOCODE;
106025         }else if( yymx!=YYERRORSYMBOL ){
106026           YYMINORTYPE u2;
106027           u2.YYERRSYMDT = 0;
106028           yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
106029         }
106030       }
106031       yypParser->yyerrcnt = 3;
106032       yyerrorhit = 1;
106033 #elif defined(YYNOERRORRECOVERY)
106034       /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
106035       ** do any kind of error recovery.  Instead, simply invoke the syntax
106036       ** error routine and continue going as if nothing had happened.
106037       **
106038       ** Applications can set this macro (for example inside %include) if
106039       ** they intend to abandon the parse upon the first syntax error seen.
106040       */
106041       yy_syntax_error(yypParser,yymajor,yyminorunion);
106042       yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
106043       yymajor = YYNOCODE;
106044       
106045 #else  /* YYERRORSYMBOL is not defined */
106046       /* This is what we do if the grammar does not define ERROR:
106047       **
106048       **  * Report an error message, and throw away the input token.
106049       **
106050       **  * If the input token is $, then fail the parse.
106051       **
106052       ** As before, subsequent error messages are suppressed until
106053       ** three input tokens have been successfully shifted.
106054       */
106055       if( yypParser->yyerrcnt<=0 ){
106056         yy_syntax_error(yypParser,yymajor,yyminorunion);
106057       }
106058       yypParser->yyerrcnt = 3;
106059       yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
106060       if( yyendofinput ){
106061         yy_parse_failed(yypParser);
106062       }
106063       yymajor = YYNOCODE;
106064 #endif
106065     }
106066   }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
106067   return;
106068 }
106069
106070 /************** End of parse.c ***********************************************/
106071 /************** Begin file tokenize.c ****************************************/
106072 /*
106073 ** 2001 September 15
106074 **
106075 ** The author disclaims copyright to this source code.  In place of
106076 ** a legal notice, here is a blessing:
106077 **
106078 **    May you do good and not evil.
106079 **    May you find forgiveness for yourself and forgive others.
106080 **    May you share freely, never taking more than you give.
106081 **
106082 *************************************************************************
106083 ** An tokenizer for SQL
106084 **
106085 ** This file contains C code that splits an SQL input string up into
106086 ** individual tokens and sends those tokens one-by-one over to the
106087 ** parser for analysis.
106088 */
106089
106090 /*
106091 ** The charMap() macro maps alphabetic characters into their
106092 ** lower-case ASCII equivalent.  On ASCII machines, this is just
106093 ** an upper-to-lower case map.  On EBCDIC machines we also need
106094 ** to adjust the encoding.  Only alphabetic characters and underscores
106095 ** need to be translated.
106096 */
106097 #ifdef SQLITE_ASCII
106098 # define charMap(X) sqlite3UpperToLower[(unsigned char)X]
106099 #endif
106100 #ifdef SQLITE_EBCDIC
106101 # define charMap(X) ebcdicToAscii[(unsigned char)X]
106102 const unsigned char ebcdicToAscii[] = {
106103 /* 0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F */
106104    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 0x */
106105    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 1x */
106106    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 2x */
106107    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 3x */
106108    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 4x */
106109    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 5x */
106110    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 95,  0,  0,  /* 6x */
106111    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* 7x */
106112    0, 97, 98, 99,100,101,102,103,104,105,  0,  0,  0,  0,  0,  0,  /* 8x */
106113    0,106,107,108,109,110,111,112,113,114,  0,  0,  0,  0,  0,  0,  /* 9x */
106114    0,  0,115,116,117,118,119,120,121,122,  0,  0,  0,  0,  0,  0,  /* Ax */
106115    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* Bx */
106116    0, 97, 98, 99,100,101,102,103,104,105,  0,  0,  0,  0,  0,  0,  /* Cx */
106117    0,106,107,108,109,110,111,112,113,114,  0,  0,  0,  0,  0,  0,  /* Dx */
106118    0,  0,115,116,117,118,119,120,121,122,  0,  0,  0,  0,  0,  0,  /* Ex */
106119    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  /* Fx */
106120 };
106121 #endif
106122
106123 /*
106124 ** The sqlite3KeywordCode function looks up an identifier to determine if
106125 ** it is a keyword.  If it is a keyword, the token code of that keyword is 
106126 ** returned.  If the input is not a keyword, TK_ID is returned.
106127 **
106128 ** The implementation of this routine was generated by a program,
106129 ** mkkeywordhash.h, located in the tool subdirectory of the distribution.
106130 ** The output of the mkkeywordhash.c program is written into a file
106131 ** named keywordhash.h and then included into this source file by
106132 ** the #include below.
106133 */
106134 /************** Include keywordhash.h in the middle of tokenize.c ************/
106135 /************** Begin file keywordhash.h *************************************/
106136 /***** This file contains automatically generated code ******
106137 **
106138 ** The code in this file has been automatically generated by
106139 **
106140 **   sqlite/tool/mkkeywordhash.c
106141 **
106142 ** The code in this file implements a function that determines whether
106143 ** or not a given identifier is really an SQL keyword.  The same thing
106144 ** might be implemented more directly using a hand-written hash table.
106145 ** But by using this automatically generated code, the size of the code
106146 ** is substantially reduced.  This is important for embedded applications
106147 ** on platforms with limited memory.
106148 */
106149 /* Hash score: 175 */
106150 static int keywordCode(const char *z, int n){
106151   /* zText[] encodes 811 bytes of keywords in 541 bytes */
106152   /*   REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT       */
106153   /*   ABLEFTHENDEFERRABLELSEXCEPTRANSACTIONATURALTERAISEXCLUSIVE         */
106154   /*   XISTSAVEPOINTERSECTRIGGEREFERENCESCONSTRAINTOFFSETEMPORARY         */
106155   /*   UNIQUERYATTACHAVINGROUPDATEBEGINNERELEASEBETWEENOTNULLIKE          */
106156   /*   CASCADELETECASECOLLATECREATECURRENT_DATEDETACHIMMEDIATEJOIN        */
106157   /*   SERTMATCHPLANALYZEPRAGMABORTVALUESVIRTUALIMITWHENWHERENAME         */
106158   /*   AFTEREPLACEANDEFAULTAUTOINCREMENTCASTCOLUMNCOMMITCONFLICTCROSS     */
106159   /*   CURRENT_TIMESTAMPRIMARYDEFERREDISTINCTDROPFAILFROMFULLGLOBYIF      */
106160   /*   ISNULLORDERESTRICTOUTERIGHTROLLBACKROWUNIONUSINGVACUUMVIEW         */
106161   /*   INITIALLY                                                          */
106162   static const char zText[540] = {
106163     'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H',
106164     'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G',
106165     'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A',
106166     'S','E','L','E','C','T','A','B','L','E','F','T','H','E','N','D','E','F',
106167     'E','R','R','A','B','L','E','L','S','E','X','C','E','P','T','R','A','N',
106168     'S','A','C','T','I','O','N','A','T','U','R','A','L','T','E','R','A','I',
106169     'S','E','X','C','L','U','S','I','V','E','X','I','S','T','S','A','V','E',
106170     'P','O','I','N','T','E','R','S','E','C','T','R','I','G','G','E','R','E',
106171     'F','E','R','E','N','C','E','S','C','O','N','S','T','R','A','I','N','T',
106172     'O','F','F','S','E','T','E','M','P','O','R','A','R','Y','U','N','I','Q',
106173     'U','E','R','Y','A','T','T','A','C','H','A','V','I','N','G','R','O','U',
106174     'P','D','A','T','E','B','E','G','I','N','N','E','R','E','L','E','A','S',
106175     'E','B','E','T','W','E','E','N','O','T','N','U','L','L','I','K','E','C',
106176     'A','S','C','A','D','E','L','E','T','E','C','A','S','E','C','O','L','L',
106177     'A','T','E','C','R','E','A','T','E','C','U','R','R','E','N','T','_','D',
106178     'A','T','E','D','E','T','A','C','H','I','M','M','E','D','I','A','T','E',
106179     'J','O','I','N','S','E','R','T','M','A','T','C','H','P','L','A','N','A',
106180     'L','Y','Z','E','P','R','A','G','M','A','B','O','R','T','V','A','L','U',
106181     'E','S','V','I','R','T','U','A','L','I','M','I','T','W','H','E','N','W',
106182     'H','E','R','E','N','A','M','E','A','F','T','E','R','E','P','L','A','C',
106183     'E','A','N','D','E','F','A','U','L','T','A','U','T','O','I','N','C','R',
106184     'E','M','E','N','T','C','A','S','T','C','O','L','U','M','N','C','O','M',
106185     'M','I','T','C','O','N','F','L','I','C','T','C','R','O','S','S','C','U',
106186     'R','R','E','N','T','_','T','I','M','E','S','T','A','M','P','R','I','M',
106187     'A','R','Y','D','E','F','E','R','R','E','D','I','S','T','I','N','C','T',
106188     'D','R','O','P','F','A','I','L','F','R','O','M','F','U','L','L','G','L',
106189     'O','B','Y','I','F','I','S','N','U','L','L','O','R','D','E','R','E','S',
106190     'T','R','I','C','T','O','U','T','E','R','I','G','H','T','R','O','L','L',
106191     'B','A','C','K','R','O','W','U','N','I','O','N','U','S','I','N','G','V',
106192     'A','C','U','U','M','V','I','E','W','I','N','I','T','I','A','L','L','Y',
106193   };
106194   static const unsigned char aHash[127] = {
106195       72, 101, 114,  70,   0,  45,   0,   0,  78,   0,  73,   0,   0,
106196       42,  12,  74,  15,   0, 113,  81,  50, 108,   0,  19,   0,   0,
106197      118,   0, 116, 111,   0,  22,  89,   0,   9,   0,   0,  66,  67,
106198        0,  65,   6,   0,  48,  86,  98,   0, 115,  97,   0,   0,  44,
106199        0,  99,  24,   0,  17,   0, 119,  49,  23,   0,   5, 106,  25,
106200       92,   0,   0, 121, 102,  56, 120,  53,  28,  51,   0,  87,   0,
106201       96,  26,   0,  95,   0,   0,   0,  91,  88,  93,  84, 105,  14,
106202       39, 104,   0,  77,   0,  18,  85, 107,  32,   0, 117,  76, 109,
106203       58,  46,  80,   0,   0,  90,  40,   0, 112,   0,  36,   0,   0,
106204       29,   0,  82,  59,  60,   0,  20,  57,   0,  52,
106205   };
106206   static const unsigned char aNext[121] = {
106207        0,   0,   0,   0,   4,   0,   0,   0,   0,   0,   0,   0,   0,
106208        0,   2,   0,   0,   0,   0,   0,   0,  13,   0,   0,   0,   0,
106209        0,   7,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
106210        0,   0,   0,   0,  33,   0,  21,   0,   0,   0,  43,   3,  47,
106211        0,   0,   0,   0,  30,   0,  54,   0,  38,   0,   0,   0,   1,
106212       62,   0,   0,  63,   0,  41,   0,   0,   0,   0,   0,   0,   0,
106213       61,   0,   0,   0,   0,  31,  55,  16,  34,  10,   0,   0,   0,
106214        0,   0,   0,   0,  11,  68,  75,   0,   8,   0, 100,  94,   0,
106215      103,   0,  83,   0,  71,   0,   0, 110,  27,  37,  69,  79,   0,
106216       35,  64,   0,   0,
106217   };
106218   static const unsigned char aLen[121] = {
106219        7,   7,   5,   4,   6,   4,   5,   3,   6,   7,   3,   6,   6,
106220        7,   7,   3,   8,   2,   6,   5,   4,   4,   3,  10,   4,   6,
106221       11,   6,   2,   7,   5,   5,   9,   6,   9,   9,   7,  10,  10,
106222        4,   6,   2,   3,   9,   4,   2,   6,   5,   6,   6,   5,   6,
106223        5,   5,   7,   7,   7,   3,   2,   4,   4,   7,   3,   6,   4,
106224        7,   6,  12,   6,   9,   4,   6,   5,   4,   7,   6,   5,   6,
106225        7,   5,   4,   5,   6,   5,   7,   3,   7,  13,   2,   2,   4,
106226        6,   6,   8,   5,  17,  12,   7,   8,   8,   2,   4,   4,   4,
106227        4,   4,   2,   2,   6,   5,   8,   5,   5,   8,   3,   5,   5,
106228        6,   4,   9,   3,
106229   };
106230   static const unsigned short int aOffset[121] = {
106231        0,   2,   2,   8,   9,  14,  16,  20,  23,  25,  25,  29,  33,
106232       36,  41,  46,  48,  53,  54,  59,  62,  65,  67,  69,  78,  81,
106233       86,  91,  95,  96, 101, 105, 109, 117, 122, 128, 136, 142, 152,
106234      159, 162, 162, 165, 167, 167, 171, 176, 179, 184, 189, 194, 197,
106235      203, 206, 210, 217, 223, 223, 223, 226, 229, 233, 234, 238, 244,
106236      248, 255, 261, 273, 279, 288, 290, 296, 301, 303, 310, 315, 320,
106237      326, 332, 337, 341, 344, 350, 354, 361, 363, 370, 372, 374, 383,
106238      387, 393, 399, 407, 412, 412, 428, 435, 442, 443, 450, 454, 458,
106239      462, 466, 469, 471, 473, 479, 483, 491, 495, 500, 508, 511, 516,
106240      521, 527, 531, 536,
106241   };
106242   static const unsigned char aCode[121] = {
106243     TK_REINDEX,    TK_INDEXED,    TK_INDEX,      TK_DESC,       TK_ESCAPE,     
106244     TK_EACH,       TK_CHECK,      TK_KEY,        TK_BEFORE,     TK_FOREIGN,    
106245     TK_FOR,        TK_IGNORE,     TK_LIKE_KW,    TK_EXPLAIN,    TK_INSTEAD,    
106246     TK_ADD,        TK_DATABASE,   TK_AS,         TK_SELECT,     TK_TABLE,      
106247     TK_JOIN_KW,    TK_THEN,       TK_END,        TK_DEFERRABLE, TK_ELSE,       
106248     TK_EXCEPT,     TK_TRANSACTION,TK_ACTION,     TK_ON,         TK_JOIN_KW,    
106249     TK_ALTER,      TK_RAISE,      TK_EXCLUSIVE,  TK_EXISTS,     TK_SAVEPOINT,  
106250     TK_INTERSECT,  TK_TRIGGER,    TK_REFERENCES, TK_CONSTRAINT, TK_INTO,       
106251     TK_OFFSET,     TK_OF,         TK_SET,        TK_TEMP,       TK_TEMP,       
106252     TK_OR,         TK_UNIQUE,     TK_QUERY,      TK_ATTACH,     TK_HAVING,     
106253     TK_GROUP,      TK_UPDATE,     TK_BEGIN,      TK_JOIN_KW,    TK_RELEASE,    
106254     TK_BETWEEN,    TK_NOTNULL,    TK_NOT,        TK_NO,         TK_NULL,       
106255     TK_LIKE_KW,    TK_CASCADE,    TK_ASC,        TK_DELETE,     TK_CASE,       
106256     TK_COLLATE,    TK_CREATE,     TK_CTIME_KW,   TK_DETACH,     TK_IMMEDIATE,  
106257     TK_JOIN,       TK_INSERT,     TK_MATCH,      TK_PLAN,       TK_ANALYZE,    
106258     TK_PRAGMA,     TK_ABORT,      TK_VALUES,     TK_VIRTUAL,    TK_LIMIT,      
106259     TK_WHEN,       TK_WHERE,      TK_RENAME,     TK_AFTER,      TK_REPLACE,    
106260     TK_AND,        TK_DEFAULT,    TK_AUTOINCR,   TK_TO,         TK_IN,         
106261     TK_CAST,       TK_COLUMNKW,   TK_COMMIT,     TK_CONFLICT,   TK_JOIN_KW,    
106262     TK_CTIME_KW,   TK_CTIME_KW,   TK_PRIMARY,    TK_DEFERRED,   TK_DISTINCT,   
106263     TK_IS,         TK_DROP,       TK_FAIL,       TK_FROM,       TK_JOIN_KW,    
106264     TK_LIKE_KW,    TK_BY,         TK_IF,         TK_ISNULL,     TK_ORDER,      
106265     TK_RESTRICT,   TK_JOIN_KW,    TK_JOIN_KW,    TK_ROLLBACK,   TK_ROW,        
106266     TK_UNION,      TK_USING,      TK_VACUUM,     TK_VIEW,       TK_INITIALLY,  
106267     TK_ALL,        
106268   };
106269   int h, i;
106270   if( n<2 ) return TK_ID;
106271   h = ((charMap(z[0])*4) ^
106272       (charMap(z[n-1])*3) ^
106273       n) % 127;
106274   for(i=((int)aHash[h])-1; i>=0; i=((int)aNext[i])-1){
106275     if( aLen[i]==n && sqlite3StrNICmp(&zText[aOffset[i]],z,n)==0 ){
106276       testcase( i==0 ); /* REINDEX */
106277       testcase( i==1 ); /* INDEXED */
106278       testcase( i==2 ); /* INDEX */
106279       testcase( i==3 ); /* DESC */
106280       testcase( i==4 ); /* ESCAPE */
106281       testcase( i==5 ); /* EACH */
106282       testcase( i==6 ); /* CHECK */
106283       testcase( i==7 ); /* KEY */
106284       testcase( i==8 ); /* BEFORE */
106285       testcase( i==9 ); /* FOREIGN */
106286       testcase( i==10 ); /* FOR */
106287       testcase( i==11 ); /* IGNORE */
106288       testcase( i==12 ); /* REGEXP */
106289       testcase( i==13 ); /* EXPLAIN */
106290       testcase( i==14 ); /* INSTEAD */
106291       testcase( i==15 ); /* ADD */
106292       testcase( i==16 ); /* DATABASE */
106293       testcase( i==17 ); /* AS */
106294       testcase( i==18 ); /* SELECT */
106295       testcase( i==19 ); /* TABLE */
106296       testcase( i==20 ); /* LEFT */
106297       testcase( i==21 ); /* THEN */
106298       testcase( i==22 ); /* END */
106299       testcase( i==23 ); /* DEFERRABLE */
106300       testcase( i==24 ); /* ELSE */
106301       testcase( i==25 ); /* EXCEPT */
106302       testcase( i==26 ); /* TRANSACTION */
106303       testcase( i==27 ); /* ACTION */
106304       testcase( i==28 ); /* ON */
106305       testcase( i==29 ); /* NATURAL */
106306       testcase( i==30 ); /* ALTER */
106307       testcase( i==31 ); /* RAISE */
106308       testcase( i==32 ); /* EXCLUSIVE */
106309       testcase( i==33 ); /* EXISTS */
106310       testcase( i==34 ); /* SAVEPOINT */
106311       testcase( i==35 ); /* INTERSECT */
106312       testcase( i==36 ); /* TRIGGER */
106313       testcase( i==37 ); /* REFERENCES */
106314       testcase( i==38 ); /* CONSTRAINT */
106315       testcase( i==39 ); /* INTO */
106316       testcase( i==40 ); /* OFFSET */
106317       testcase( i==41 ); /* OF */
106318       testcase( i==42 ); /* SET */
106319       testcase( i==43 ); /* TEMPORARY */
106320       testcase( i==44 ); /* TEMP */
106321       testcase( i==45 ); /* OR */
106322       testcase( i==46 ); /* UNIQUE */
106323       testcase( i==47 ); /* QUERY */
106324       testcase( i==48 ); /* ATTACH */
106325       testcase( i==49 ); /* HAVING */
106326       testcase( i==50 ); /* GROUP */
106327       testcase( i==51 ); /* UPDATE */
106328       testcase( i==52 ); /* BEGIN */
106329       testcase( i==53 ); /* INNER */
106330       testcase( i==54 ); /* RELEASE */
106331       testcase( i==55 ); /* BETWEEN */
106332       testcase( i==56 ); /* NOTNULL */
106333       testcase( i==57 ); /* NOT */
106334       testcase( i==58 ); /* NO */
106335       testcase( i==59 ); /* NULL */
106336       testcase( i==60 ); /* LIKE */
106337       testcase( i==61 ); /* CASCADE */
106338       testcase( i==62 ); /* ASC */
106339       testcase( i==63 ); /* DELETE */
106340       testcase( i==64 ); /* CASE */
106341       testcase( i==65 ); /* COLLATE */
106342       testcase( i==66 ); /* CREATE */
106343       testcase( i==67 ); /* CURRENT_DATE */
106344       testcase( i==68 ); /* DETACH */
106345       testcase( i==69 ); /* IMMEDIATE */
106346       testcase( i==70 ); /* JOIN */
106347       testcase( i==71 ); /* INSERT */
106348       testcase( i==72 ); /* MATCH */
106349       testcase( i==73 ); /* PLAN */
106350       testcase( i==74 ); /* ANALYZE */
106351       testcase( i==75 ); /* PRAGMA */
106352       testcase( i==76 ); /* ABORT */
106353       testcase( i==77 ); /* VALUES */
106354       testcase( i==78 ); /* VIRTUAL */
106355       testcase( i==79 ); /* LIMIT */
106356       testcase( i==80 ); /* WHEN */
106357       testcase( i==81 ); /* WHERE */
106358       testcase( i==82 ); /* RENAME */
106359       testcase( i==83 ); /* AFTER */
106360       testcase( i==84 ); /* REPLACE */
106361       testcase( i==85 ); /* AND */
106362       testcase( i==86 ); /* DEFAULT */
106363       testcase( i==87 ); /* AUTOINCREMENT */
106364       testcase( i==88 ); /* TO */
106365       testcase( i==89 ); /* IN */
106366       testcase( i==90 ); /* CAST */
106367       testcase( i==91 ); /* COLUMN */
106368       testcase( i==92 ); /* COMMIT */
106369       testcase( i==93 ); /* CONFLICT */
106370       testcase( i==94 ); /* CROSS */
106371       testcase( i==95 ); /* CURRENT_TIMESTAMP */
106372       testcase( i==96 ); /* CURRENT_TIME */
106373       testcase( i==97 ); /* PRIMARY */
106374       testcase( i==98 ); /* DEFERRED */
106375       testcase( i==99 ); /* DISTINCT */
106376       testcase( i==100 ); /* IS */
106377       testcase( i==101 ); /* DROP */
106378       testcase( i==102 ); /* FAIL */
106379       testcase( i==103 ); /* FROM */
106380       testcase( i==104 ); /* FULL */
106381       testcase( i==105 ); /* GLOB */
106382       testcase( i==106 ); /* BY */
106383       testcase( i==107 ); /* IF */
106384       testcase( i==108 ); /* ISNULL */
106385       testcase( i==109 ); /* ORDER */
106386       testcase( i==110 ); /* RESTRICT */
106387       testcase( i==111 ); /* OUTER */
106388       testcase( i==112 ); /* RIGHT */
106389       testcase( i==113 ); /* ROLLBACK */
106390       testcase( i==114 ); /* ROW */
106391       testcase( i==115 ); /* UNION */
106392       testcase( i==116 ); /* USING */
106393       testcase( i==117 ); /* VACUUM */
106394       testcase( i==118 ); /* VIEW */
106395       testcase( i==119 ); /* INITIALLY */
106396       testcase( i==120 ); /* ALL */
106397       return aCode[i];
106398     }
106399   }
106400   return TK_ID;
106401 }
106402 SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char *z, int n){
106403   return keywordCode((char*)z, n);
106404 }
106405 #define SQLITE_N_KEYWORD 121
106406
106407 /************** End of keywordhash.h *****************************************/
106408 /************** Continuing where we left off in tokenize.c *******************/
106409
106410
106411 /*
106412 ** If X is a character that can be used in an identifier then
106413 ** IdChar(X) will be true.  Otherwise it is false.
106414 **
106415 ** For ASCII, any character with the high-order bit set is
106416 ** allowed in an identifier.  For 7-bit characters, 
106417 ** sqlite3IsIdChar[X] must be 1.
106418 **
106419 ** For EBCDIC, the rules are more complex but have the same
106420 ** end result.
106421 **
106422 ** Ticket #1066.  the SQL standard does not allow '$' in the
106423 ** middle of identfiers.  But many SQL implementations do. 
106424 ** SQLite will allow '$' in identifiers for compatibility.
106425 ** But the feature is undocumented.
106426 */
106427 #ifdef SQLITE_ASCII
106428 #define IdChar(C)  ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0)
106429 #endif
106430 #ifdef SQLITE_EBCDIC
106431 SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[] = {
106432 /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
106433     0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  /* 4x */
106434     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0,  /* 5x */
106435     0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0,  /* 6x */
106436     0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,  /* 7x */
106437     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0,  /* 8x */
106438     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0,  /* 9x */
106439     1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0,  /* Ax */
106440     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* Bx */
106441     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,  /* Cx */
106442     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,  /* Dx */
106443     0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,  /* Ex */
106444     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,  /* Fx */
106445 };
106446 #define IdChar(C)  (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40]))
106447 #endif
106448
106449
106450 /*
106451 ** Return the length of the token that begins at z[0]. 
106452 ** Store the token type in *tokenType before returning.
106453 */
106454 SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){
106455   int i, c;
106456   switch( *z ){
106457     case ' ': case '\t': case '\n': case '\f': case '\r': {
106458       testcase( z[0]==' ' );
106459       testcase( z[0]=='\t' );
106460       testcase( z[0]=='\n' );
106461       testcase( z[0]=='\f' );
106462       testcase( z[0]=='\r' );
106463       for(i=1; sqlite3Isspace(z[i]); i++){}
106464       *tokenType = TK_SPACE;
106465       return i;
106466     }
106467     case '-': {
106468       if( z[1]=='-' ){
106469         /* IMP: R-15891-05542 -- syntax diagram for comments */
106470         for(i=2; (c=z[i])!=0 && c!='\n'; i++){}
106471         *tokenType = TK_SPACE;   /* IMP: R-22934-25134 */
106472         return i;
106473       }
106474       *tokenType = TK_MINUS;
106475       return 1;
106476     }
106477     case '(': {
106478       *tokenType = TK_LP;
106479       return 1;
106480     }
106481     case ')': {
106482       *tokenType = TK_RP;
106483       return 1;
106484     }
106485     case ';': {
106486       *tokenType = TK_SEMI;
106487       return 1;
106488     }
106489     case '+': {
106490       *tokenType = TK_PLUS;
106491       return 1;
106492     }
106493     case '*': {
106494       *tokenType = TK_STAR;
106495       return 1;
106496     }
106497     case '/': {
106498       if( z[1]!='*' || z[2]==0 ){
106499         *tokenType = TK_SLASH;
106500         return 1;
106501       }
106502       /* IMP: R-15891-05542 -- syntax diagram for comments */
106503       for(i=3, c=z[2]; (c!='*' || z[i]!='/') && (c=z[i])!=0; i++){}
106504       if( c ) i++;
106505       *tokenType = TK_SPACE;   /* IMP: R-22934-25134 */
106506       return i;
106507     }
106508     case '%': {
106509       *tokenType = TK_REM;
106510       return 1;
106511     }
106512     case '=': {
106513       *tokenType = TK_EQ;
106514       return 1 + (z[1]=='=');
106515     }
106516     case '<': {
106517       if( (c=z[1])=='=' ){
106518         *tokenType = TK_LE;
106519         return 2;
106520       }else if( c=='>' ){
106521         *tokenType = TK_NE;
106522         return 2;
106523       }else if( c=='<' ){
106524         *tokenType = TK_LSHIFT;
106525         return 2;
106526       }else{
106527         *tokenType = TK_LT;
106528         return 1;
106529       }
106530     }
106531     case '>': {
106532       if( (c=z[1])=='=' ){
106533         *tokenType = TK_GE;
106534         return 2;
106535       }else if( c=='>' ){
106536         *tokenType = TK_RSHIFT;
106537         return 2;
106538       }else{
106539         *tokenType = TK_GT;
106540         return 1;
106541       }
106542     }
106543     case '!': {
106544       if( z[1]!='=' ){
106545         *tokenType = TK_ILLEGAL;
106546         return 2;
106547       }else{
106548         *tokenType = TK_NE;
106549         return 2;
106550       }
106551     }
106552     case '|': {
106553       if( z[1]!='|' ){
106554         *tokenType = TK_BITOR;
106555         return 1;
106556       }else{
106557         *tokenType = TK_CONCAT;
106558         return 2;
106559       }
106560     }
106561     case ',': {
106562       *tokenType = TK_COMMA;
106563       return 1;
106564     }
106565     case '&': {
106566       *tokenType = TK_BITAND;
106567       return 1;
106568     }
106569     case '~': {
106570       *tokenType = TK_BITNOT;
106571       return 1;
106572     }
106573     case '`':
106574     case '\'':
106575     case '"': {
106576       int delim = z[0];
106577       testcase( delim=='`' );
106578       testcase( delim=='\'' );
106579       testcase( delim=='"' );
106580       for(i=1; (c=z[i])!=0; i++){
106581         if( c==delim ){
106582           if( z[i+1]==delim ){
106583             i++;
106584           }else{
106585             break;
106586           }
106587         }
106588       }
106589       if( c=='\'' ){
106590         *tokenType = TK_STRING;
106591         return i+1;
106592       }else if( c!=0 ){
106593         *tokenType = TK_ID;
106594         return i+1;
106595       }else{
106596         *tokenType = TK_ILLEGAL;
106597         return i;
106598       }
106599     }
106600     case '.': {
106601 #ifndef SQLITE_OMIT_FLOATING_POINT
106602       if( !sqlite3Isdigit(z[1]) )
106603 #endif
106604       {
106605         *tokenType = TK_DOT;
106606         return 1;
106607       }
106608       /* If the next character is a digit, this is a floating point
106609       ** number that begins with ".".  Fall thru into the next case */
106610     }
106611     case '0': case '1': case '2': case '3': case '4':
106612     case '5': case '6': case '7': case '8': case '9': {
106613       testcase( z[0]=='0' );  testcase( z[0]=='1' );  testcase( z[0]=='2' );
106614       testcase( z[0]=='3' );  testcase( z[0]=='4' );  testcase( z[0]=='5' );
106615       testcase( z[0]=='6' );  testcase( z[0]=='7' );  testcase( z[0]=='8' );
106616       testcase( z[0]=='9' );
106617       *tokenType = TK_INTEGER;
106618       for(i=0; sqlite3Isdigit(z[i]); i++){}
106619 #ifndef SQLITE_OMIT_FLOATING_POINT
106620       if( z[i]=='.' ){
106621         i++;
106622         while( sqlite3Isdigit(z[i]) ){ i++; }
106623         *tokenType = TK_FLOAT;
106624       }
106625       if( (z[i]=='e' || z[i]=='E') &&
106626            ( sqlite3Isdigit(z[i+1]) 
106627             || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2]))
106628            )
106629       ){
106630         i += 2;
106631         while( sqlite3Isdigit(z[i]) ){ i++; }
106632         *tokenType = TK_FLOAT;
106633       }
106634 #endif
106635       while( IdChar(z[i]) ){
106636         *tokenType = TK_ILLEGAL;
106637         i++;
106638       }
106639       return i;
106640     }
106641     case '[': {
106642       for(i=1, c=z[0]; c!=']' && (c=z[i])!=0; i++){}
106643       *tokenType = c==']' ? TK_ID : TK_ILLEGAL;
106644       return i;
106645     }
106646     case '?': {
106647       *tokenType = TK_VARIABLE;
106648       for(i=1; sqlite3Isdigit(z[i]); i++){}
106649       return i;
106650     }
106651     case '#': {
106652       for(i=1; sqlite3Isdigit(z[i]); i++){}
106653       if( i>1 ){
106654         /* Parameters of the form #NNN (where NNN is a number) are used
106655         ** internally by sqlite3NestedParse.  */
106656         *tokenType = TK_REGISTER;
106657         return i;
106658       }
106659       /* Fall through into the next case if the '#' is not followed by
106660       ** a digit. Try to match #AAAA where AAAA is a parameter name. */
106661     }
106662 #ifndef SQLITE_OMIT_TCL_VARIABLE
106663     case '$':
106664 #endif
106665     case '@':  /* For compatibility with MS SQL Server */
106666     case ':': {
106667       int n = 0;
106668       testcase( z[0]=='$' );  testcase( z[0]=='@' );  testcase( z[0]==':' );
106669       *tokenType = TK_VARIABLE;
106670       for(i=1; (c=z[i])!=0; i++){
106671         if( IdChar(c) ){
106672           n++;
106673 #ifndef SQLITE_OMIT_TCL_VARIABLE
106674         }else if( c=='(' && n>0 ){
106675           do{
106676             i++;
106677           }while( (c=z[i])!=0 && !sqlite3Isspace(c) && c!=')' );
106678           if( c==')' ){
106679             i++;
106680           }else{
106681             *tokenType = TK_ILLEGAL;
106682           }
106683           break;
106684         }else if( c==':' && z[i+1]==':' ){
106685           i++;
106686 #endif
106687         }else{
106688           break;
106689         }
106690       }
106691       if( n==0 ) *tokenType = TK_ILLEGAL;
106692       return i;
106693     }
106694 #ifndef SQLITE_OMIT_BLOB_LITERAL
106695     case 'x': case 'X': {
106696       testcase( z[0]=='x' ); testcase( z[0]=='X' );
106697       if( z[1]=='\'' ){
106698         *tokenType = TK_BLOB;
106699         for(i=2; (c=z[i])!=0 && c!='\''; i++){
106700           if( !sqlite3Isxdigit(c) ){
106701             *tokenType = TK_ILLEGAL;
106702           }
106703         }
106704         if( i%2 || !c ) *tokenType = TK_ILLEGAL;
106705         if( c ) i++;
106706         return i;
106707       }
106708       /* Otherwise fall through to the next case */
106709     }
106710 #endif
106711     default: {
106712       if( !IdChar(*z) ){
106713         break;
106714       }
106715       for(i=1; IdChar(z[i]); i++){}
106716       *tokenType = keywordCode((char*)z, i);
106717       return i;
106718     }
106719   }
106720   *tokenType = TK_ILLEGAL;
106721   return 1;
106722 }
106723
106724 /*
106725 ** Run the parser on the given SQL string.  The parser structure is
106726 ** passed in.  An SQLITE_ status code is returned.  If an error occurs
106727 ** then an and attempt is made to write an error message into 
106728 ** memory obtained from sqlite3_malloc() and to make *pzErrMsg point to that
106729 ** error message.
106730 */
106731 SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){
106732   int nErr = 0;                   /* Number of errors encountered */
106733   int i;                          /* Loop counter */
106734   void *pEngine;                  /* The LEMON-generated LALR(1) parser */
106735   int tokenType;                  /* type of the next token */
106736   int lastTokenParsed = -1;       /* type of the previous token */
106737   u8 enableLookaside;             /* Saved value of db->lookaside.bEnabled */
106738   sqlite3 *db = pParse->db;       /* The database connection */
106739   int mxSqlLen;                   /* Max length of an SQL string */
106740
106741
106742   mxSqlLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];
106743   if( db->activeVdbeCnt==0 ){
106744     db->u1.isInterrupted = 0;
106745   }
106746   pParse->rc = SQLITE_OK;
106747   pParse->zTail = zSql;
106748   i = 0;
106749   assert( pzErrMsg!=0 );
106750   pEngine = sqlite3ParserAlloc((void*(*)(size_t))sqlite3Malloc);
106751   if( pEngine==0 ){
106752     db->mallocFailed = 1;
106753     return SQLITE_NOMEM;
106754   }
106755   assert( pParse->pNewTable==0 );
106756   assert( pParse->pNewTrigger==0 );
106757   assert( pParse->nVar==0 );
106758   assert( pParse->nVarExpr==0 );
106759   assert( pParse->nVarExprAlloc==0 );
106760   assert( pParse->apVarExpr==0 );
106761   enableLookaside = db->lookaside.bEnabled;
106762   if( db->lookaside.pStart ) db->lookaside.bEnabled = 1;
106763   while( !db->mallocFailed && zSql[i]!=0 ){
106764     assert( i>=0 );
106765     pParse->sLastToken.z = &zSql[i];
106766     pParse->sLastToken.n = sqlite3GetToken((unsigned char*)&zSql[i],&tokenType);
106767     i += pParse->sLastToken.n;
106768     if( i>mxSqlLen ){
106769       pParse->rc = SQLITE_TOOBIG;
106770       break;
106771     }
106772     switch( tokenType ){
106773       case TK_SPACE: {
106774         if( db->u1.isInterrupted ){
106775           sqlite3ErrorMsg(pParse, "interrupt");
106776           pParse->rc = SQLITE_INTERRUPT;
106777           goto abort_parse;
106778         }
106779         break;
106780       }
106781       case TK_ILLEGAL: {
106782         sqlite3DbFree(db, *pzErrMsg);
106783         *pzErrMsg = sqlite3MPrintf(db, "unrecognized token: \"%T\"",
106784                         &pParse->sLastToken);
106785         nErr++;
106786         goto abort_parse;
106787       }
106788       case TK_SEMI: {
106789         pParse->zTail = &zSql[i];
106790         /* Fall thru into the default case */
106791       }
106792       default: {
106793         sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse);
106794         lastTokenParsed = tokenType;
106795         if( pParse->rc!=SQLITE_OK ){
106796           goto abort_parse;
106797         }
106798         break;
106799       }
106800     }
106801   }
106802 abort_parse:
106803   if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){
106804     if( lastTokenParsed!=TK_SEMI ){
106805       sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse);
106806       pParse->zTail = &zSql[i];
106807     }
106808     sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse);
106809   }
106810 #ifdef YYTRACKMAXSTACKDEPTH
106811   sqlite3StatusSet(SQLITE_STATUS_PARSER_STACK,
106812       sqlite3ParserStackPeak(pEngine)
106813   );
106814 #endif /* YYDEBUG */
106815   sqlite3ParserFree(pEngine, sqlite3_free);
106816   db->lookaside.bEnabled = enableLookaside;
106817   if( db->mallocFailed ){
106818     pParse->rc = SQLITE_NOMEM;
106819   }
106820   if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){
106821     sqlite3SetString(&pParse->zErrMsg, db, "%s", sqlite3ErrStr(pParse->rc));
106822   }
106823   assert( pzErrMsg!=0 );
106824   if( pParse->zErrMsg ){
106825     *pzErrMsg = pParse->zErrMsg;
106826     sqlite3_log(pParse->rc, "%s", *pzErrMsg);
106827     pParse->zErrMsg = 0;
106828     nErr++;
106829   }
106830   if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){
106831     sqlite3VdbeDelete(pParse->pVdbe);
106832     pParse->pVdbe = 0;
106833   }
106834 #ifndef SQLITE_OMIT_SHARED_CACHE
106835   if( pParse->nested==0 ){
106836     sqlite3DbFree(db, pParse->aTableLock);
106837     pParse->aTableLock = 0;
106838     pParse->nTableLock = 0;
106839   }
106840 #endif
106841 #ifndef SQLITE_OMIT_VIRTUALTABLE
106842   sqlite3_free(pParse->apVtabLock);
106843 #endif
106844
106845   if( !IN_DECLARE_VTAB ){
106846     /* If the pParse->declareVtab flag is set, do not delete any table 
106847     ** structure built up in pParse->pNewTable. The calling code (see vtab.c)
106848     ** will take responsibility for freeing the Table structure.
106849     */
106850     sqlite3DeleteTable(db, pParse->pNewTable);
106851   }
106852
106853   sqlite3DeleteTrigger(db, pParse->pNewTrigger);
106854   sqlite3DbFree(db, pParse->apVarExpr);
106855   sqlite3DbFree(db, pParse->aAlias);
106856   while( pParse->pAinc ){
106857     AutoincInfo *p = pParse->pAinc;
106858     pParse->pAinc = p->pNext;
106859     sqlite3DbFree(db, p);
106860   }
106861   while( pParse->pZombieTab ){
106862     Table *p = pParse->pZombieTab;
106863     pParse->pZombieTab = p->pNextZombie;
106864     sqlite3DeleteTable(db, p);
106865   }
106866   if( nErr>0 && pParse->rc==SQLITE_OK ){
106867     pParse->rc = SQLITE_ERROR;
106868   }
106869   return nErr;
106870 }
106871
106872 /************** End of tokenize.c ********************************************/
106873 /************** Begin file complete.c ****************************************/
106874 /*
106875 ** 2001 September 15
106876 **
106877 ** The author disclaims copyright to this source code.  In place of
106878 ** a legal notice, here is a blessing:
106879 **
106880 **    May you do good and not evil.
106881 **    May you find forgiveness for yourself and forgive others.
106882 **    May you share freely, never taking more than you give.
106883 **
106884 *************************************************************************
106885 ** An tokenizer for SQL
106886 **
106887 ** This file contains C code that implements the sqlite3_complete() API.
106888 ** This code used to be part of the tokenizer.c source file.  But by
106889 ** separating it out, the code will be automatically omitted from
106890 ** static links that do not use it.
106891 */
106892 #ifndef SQLITE_OMIT_COMPLETE
106893
106894 /*
106895 ** This is defined in tokenize.c.  We just have to import the definition.
106896 */
106897 #ifndef SQLITE_AMALGAMATION
106898 #ifdef SQLITE_ASCII
106899 #define IdChar(C)  ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0)
106900 #endif
106901 #ifdef SQLITE_EBCDIC
106902 SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[];
106903 #define IdChar(C)  (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40]))
106904 #endif
106905 #endif /* SQLITE_AMALGAMATION */
106906
106907
106908 /*
106909 ** Token types used by the sqlite3_complete() routine.  See the header
106910 ** comments on that procedure for additional information.
106911 */
106912 #define tkSEMI    0
106913 #define tkWS      1
106914 #define tkOTHER   2
106915 #ifndef SQLITE_OMIT_TRIGGER
106916 #define tkEXPLAIN 3
106917 #define tkCREATE  4
106918 #define tkTEMP    5
106919 #define tkTRIGGER 6
106920 #define tkEND     7
106921 #endif
106922
106923 /*
106924 ** Return TRUE if the given SQL string ends in a semicolon.
106925 **
106926 ** Special handling is require for CREATE TRIGGER statements.
106927 ** Whenever the CREATE TRIGGER keywords are seen, the statement
106928 ** must end with ";END;".
106929 **
106930 ** This implementation uses a state machine with 8 states:
106931 **
106932 **   (0) INVALID   We have not yet seen a non-whitespace character.
106933 **
106934 **   (1) START     At the beginning or end of an SQL statement.  This routine
106935 **                 returns 1 if it ends in the START state and 0 if it ends
106936 **                 in any other state.
106937 **
106938 **   (2) NORMAL    We are in the middle of statement which ends with a single
106939 **                 semicolon.
106940 **
106941 **   (3) EXPLAIN   The keyword EXPLAIN has been seen at the beginning of 
106942 **                 a statement.
106943 **
106944 **   (4) CREATE    The keyword CREATE has been seen at the beginning of a
106945 **                 statement, possibly preceeded by EXPLAIN and/or followed by
106946 **                 TEMP or TEMPORARY
106947 **
106948 **   (5) TRIGGER   We are in the middle of a trigger definition that must be
106949 **                 ended by a semicolon, the keyword END, and another semicolon.
106950 **
106951 **   (6) SEMI      We've seen the first semicolon in the ";END;" that occurs at
106952 **                 the end of a trigger definition.
106953 **
106954 **   (7) END       We've seen the ";END" of the ";END;" that occurs at the end
106955 **                 of a trigger difinition.
106956 **
106957 ** Transitions between states above are determined by tokens extracted
106958 ** from the input.  The following tokens are significant:
106959 **
106960 **   (0) tkSEMI      A semicolon.
106961 **   (1) tkWS        Whitespace.
106962 **   (2) tkOTHER     Any other SQL token.
106963 **   (3) tkEXPLAIN   The "explain" keyword.
106964 **   (4) tkCREATE    The "create" keyword.
106965 **   (5) tkTEMP      The "temp" or "temporary" keyword.
106966 **   (6) tkTRIGGER   The "trigger" keyword.
106967 **   (7) tkEND       The "end" keyword.
106968 **
106969 ** Whitespace never causes a state transition and is always ignored.
106970 ** This means that a SQL string of all whitespace is invalid.
106971 **
106972 ** If we compile with SQLITE_OMIT_TRIGGER, all of the computation needed
106973 ** to recognize the end of a trigger can be omitted.  All we have to do
106974 ** is look for a semicolon that is not part of an string or comment.
106975 */
106976 SQLITE_API int sqlite3_complete(const char *zSql){
106977   u8 state = 0;   /* Current state, using numbers defined in header comment */
106978   u8 token;       /* Value of the next token */
106979
106980 #ifndef SQLITE_OMIT_TRIGGER
106981   /* A complex statement machine used to detect the end of a CREATE TRIGGER
106982   ** statement.  This is the normal case.
106983   */
106984   static const u8 trans[8][8] = {
106985                      /* Token:                                                */
106986      /* State:       **  SEMI  WS  OTHER  EXPLAIN  CREATE  TEMP  TRIGGER  END */
106987      /* 0 INVALID: */ {    1,  0,     2,       3,      4,    2,       2,   2, },
106988      /* 1   START: */ {    1,  1,     2,       3,      4,    2,       2,   2, },
106989      /* 2  NORMAL: */ {    1,  2,     2,       2,      2,    2,       2,   2, },
106990      /* 3 EXPLAIN: */ {    1,  3,     3,       2,      4,    2,       2,   2, },
106991      /* 4  CREATE: */ {    1,  4,     2,       2,      2,    4,       5,   2, },
106992      /* 5 TRIGGER: */ {    6,  5,     5,       5,      5,    5,       5,   5, },
106993      /* 6    SEMI: */ {    6,  6,     5,       5,      5,    5,       5,   7, },
106994      /* 7     END: */ {    1,  7,     5,       5,      5,    5,       5,   5, },
106995   };
106996 #else
106997   /* If triggers are not supported by this compile then the statement machine
106998   ** used to detect the end of a statement is much simplier
106999   */
107000   static const u8 trans[3][3] = {
107001                      /* Token:           */
107002      /* State:       **  SEMI  WS  OTHER */
107003      /* 0 INVALID: */ {    1,  0,     2, },
107004      /* 1   START: */ {    1,  1,     2, },
107005      /* 2  NORMAL: */ {    1,  2,     2, },
107006   };
107007 #endif /* SQLITE_OMIT_TRIGGER */
107008
107009   while( *zSql ){
107010     switch( *zSql ){
107011       case ';': {  /* A semicolon */
107012         token = tkSEMI;
107013         break;
107014       }
107015       case ' ':
107016       case '\r':
107017       case '\t':
107018       case '\n':
107019       case '\f': {  /* White space is ignored */
107020         token = tkWS;
107021         break;
107022       }
107023       case '/': {   /* C-style comments */
107024         if( zSql[1]!='*' ){
107025           token = tkOTHER;
107026           break;
107027         }
107028         zSql += 2;
107029         while( zSql[0] && (zSql[0]!='*' || zSql[1]!='/') ){ zSql++; }
107030         if( zSql[0]==0 ) return 0;
107031         zSql++;
107032         token = tkWS;
107033         break;
107034       }
107035       case '-': {   /* SQL-style comments from "--" to end of line */
107036         if( zSql[1]!='-' ){
107037           token = tkOTHER;
107038           break;
107039         }
107040         while( *zSql && *zSql!='\n' ){ zSql++; }
107041         if( *zSql==0 ) return state==1;
107042         token = tkWS;
107043         break;
107044       }
107045       case '[': {   /* Microsoft-style identifiers in [...] */
107046         zSql++;
107047         while( *zSql && *zSql!=']' ){ zSql++; }
107048         if( *zSql==0 ) return 0;
107049         token = tkOTHER;
107050         break;
107051       }
107052       case '`':     /* Grave-accent quoted symbols used by MySQL */
107053       case '"':     /* single- and double-quoted strings */
107054       case '\'': {
107055         int c = *zSql;
107056         zSql++;
107057         while( *zSql && *zSql!=c ){ zSql++; }
107058         if( *zSql==0 ) return 0;
107059         token = tkOTHER;
107060         break;
107061       }
107062       default: {
107063 #ifdef SQLITE_EBCDIC
107064         unsigned char c;
107065 #endif
107066         if( IdChar((u8)*zSql) ){
107067           /* Keywords and unquoted identifiers */
107068           int nId;
107069           for(nId=1; IdChar(zSql[nId]); nId++){}
107070 #ifdef SQLITE_OMIT_TRIGGER
107071           token = tkOTHER;
107072 #else
107073           switch( *zSql ){
107074             case 'c': case 'C': {
107075               if( nId==6 && sqlite3StrNICmp(zSql, "create", 6)==0 ){
107076                 token = tkCREATE;
107077               }else{
107078                 token = tkOTHER;
107079               }
107080               break;
107081             }
107082             case 't': case 'T': {
107083               if( nId==7 && sqlite3StrNICmp(zSql, "trigger", 7)==0 ){
107084                 token = tkTRIGGER;
107085               }else if( nId==4 && sqlite3StrNICmp(zSql, "temp", 4)==0 ){
107086                 token = tkTEMP;
107087               }else if( nId==9 && sqlite3StrNICmp(zSql, "temporary", 9)==0 ){
107088                 token = tkTEMP;
107089               }else{
107090                 token = tkOTHER;
107091               }
107092               break;
107093             }
107094             case 'e':  case 'E': {
107095               if( nId==3 && sqlite3StrNICmp(zSql, "end", 3)==0 ){
107096                 token = tkEND;
107097               }else
107098 #ifndef SQLITE_OMIT_EXPLAIN
107099               if( nId==7 && sqlite3StrNICmp(zSql, "explain", 7)==0 ){
107100                 token = tkEXPLAIN;
107101               }else
107102 #endif
107103               {
107104                 token = tkOTHER;
107105               }
107106               break;
107107             }
107108             default: {
107109               token = tkOTHER;
107110               break;
107111             }
107112           }
107113 #endif /* SQLITE_OMIT_TRIGGER */
107114           zSql += nId-1;
107115         }else{
107116           /* Operators and special symbols */
107117           token = tkOTHER;
107118         }
107119         break;
107120       }
107121     }
107122     state = trans[state][token];
107123     zSql++;
107124   }
107125   return state==1;
107126 }
107127
107128 #ifndef SQLITE_OMIT_UTF16
107129 /*
107130 ** This routine is the same as the sqlite3_complete() routine described
107131 ** above, except that the parameter is required to be UTF-16 encoded, not
107132 ** UTF-8.
107133 */
107134 SQLITE_API int sqlite3_complete16(const void *zSql){
107135   sqlite3_value *pVal;
107136   char const *zSql8;
107137   int rc = SQLITE_NOMEM;
107138
107139 #ifndef SQLITE_OMIT_AUTOINIT
107140   rc = sqlite3_initialize();
107141   if( rc ) return rc;
107142 #endif
107143   pVal = sqlite3ValueNew(0);
107144   sqlite3ValueSetStr(pVal, -1, zSql, SQLITE_UTF16NATIVE, SQLITE_STATIC);
107145   zSql8 = sqlite3ValueText(pVal, SQLITE_UTF8);
107146   if( zSql8 ){
107147     rc = sqlite3_complete(zSql8);
107148   }else{
107149     rc = SQLITE_NOMEM;
107150   }
107151   sqlite3ValueFree(pVal);
107152   return sqlite3ApiExit(0, rc);
107153 }
107154 #endif /* SQLITE_OMIT_UTF16 */
107155 #endif /* SQLITE_OMIT_COMPLETE */
107156
107157 /************** End of complete.c ********************************************/
107158 /************** Begin file main.c ********************************************/
107159 /*
107160 ** 2001 September 15
107161 **
107162 ** The author disclaims copyright to this source code.  In place of
107163 ** a legal notice, here is a blessing:
107164 **
107165 **    May you do good and not evil.
107166 **    May you find forgiveness for yourself and forgive others.
107167 **    May you share freely, never taking more than you give.
107168 **
107169 *************************************************************************
107170 ** Main file for the SQLite library.  The routines in this file
107171 ** implement the programmer interface to the library.  Routines in
107172 ** other files are for internal use by SQLite and should not be
107173 ** accessed by users of the library.
107174 */
107175
107176 #ifdef SQLITE_ENABLE_FTS3
107177 /************** Include fts3.h in the middle of main.c ***********************/
107178 /************** Begin file fts3.h ********************************************/
107179 /*
107180 ** 2006 Oct 10
107181 **
107182 ** The author disclaims copyright to this source code.  In place of
107183 ** a legal notice, here is a blessing:
107184 **
107185 **    May you do good and not evil.
107186 **    May you find forgiveness for yourself and forgive others.
107187 **    May you share freely, never taking more than you give.
107188 **
107189 ******************************************************************************
107190 **
107191 ** This header file is used by programs that want to link against the
107192 ** FTS3 library.  All it does is declare the sqlite3Fts3Init() interface.
107193 */
107194
107195 #if 0
107196 extern "C" {
107197 #endif  /* __cplusplus */
107198
107199 SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db);
107200
107201 #if 0
107202 }  /* extern "C" */
107203 #endif  /* __cplusplus */
107204
107205 /************** End of fts3.h ************************************************/
107206 /************** Continuing where we left off in main.c ***********************/
107207 #endif
107208 #ifdef SQLITE_ENABLE_RTREE
107209 /************** Include rtree.h in the middle of main.c **********************/
107210 /************** Begin file rtree.h *******************************************/
107211 /*
107212 ** 2008 May 26
107213 **
107214 ** The author disclaims copyright to this source code.  In place of
107215 ** a legal notice, here is a blessing:
107216 **
107217 **    May you do good and not evil.
107218 **    May you find forgiveness for yourself and forgive others.
107219 **    May you share freely, never taking more than you give.
107220 **
107221 ******************************************************************************
107222 **
107223 ** This header file is used by programs that want to link against the
107224 ** RTREE library.  All it does is declare the sqlite3RtreeInit() interface.
107225 */
107226
107227 #if 0
107228 extern "C" {
107229 #endif  /* __cplusplus */
107230
107231 SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db);
107232
107233 #if 0
107234 }  /* extern "C" */
107235 #endif  /* __cplusplus */
107236
107237 /************** End of rtree.h ***********************************************/
107238 /************** Continuing where we left off in main.c ***********************/
107239 #endif
107240 #ifdef SQLITE_ENABLE_ICU
107241 /************** Include sqliteicu.h in the middle of main.c ******************/
107242 /************** Begin file sqliteicu.h ***************************************/
107243 /*
107244 ** 2008 May 26
107245 **
107246 ** The author disclaims copyright to this source code.  In place of
107247 ** a legal notice, here is a blessing:
107248 **
107249 **    May you do good and not evil.
107250 **    May you find forgiveness for yourself and forgive others.
107251 **    May you share freely, never taking more than you give.
107252 **
107253 ******************************************************************************
107254 **
107255 ** This header file is used by programs that want to link against the
107256 ** ICU extension.  All it does is declare the sqlite3IcuInit() interface.
107257 */
107258
107259 #if 0
107260 extern "C" {
107261 #endif  /* __cplusplus */
107262
107263 SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db);
107264
107265 #if 0
107266 }  /* extern "C" */
107267 #endif  /* __cplusplus */
107268
107269
107270 /************** End of sqliteicu.h *******************************************/
107271 /************** Continuing where we left off in main.c ***********************/
107272 #endif
107273
107274 #ifndef SQLITE_AMALGAMATION
107275 /* IMPLEMENTATION-OF: R-46656-45156 The sqlite3_version[] string constant
107276 ** contains the text of SQLITE_VERSION macro. 
107277 */
107278 SQLITE_API const char sqlite3_version[] = SQLITE_VERSION;
107279 #endif
107280
107281 /* IMPLEMENTATION-OF: R-53536-42575 The sqlite3_libversion() function returns
107282 ** a pointer to the to the sqlite3_version[] string constant. 
107283 */
107284 SQLITE_API const char *sqlite3_libversion(void){ return sqlite3_version; }
107285
107286 /* IMPLEMENTATION-OF: R-63124-39300 The sqlite3_sourceid() function returns a
107287 ** pointer to a string constant whose value is the same as the
107288 ** SQLITE_SOURCE_ID C preprocessor macro. 
107289 */
107290 SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
107291
107292 /* IMPLEMENTATION-OF: R-35210-63508 The sqlite3_libversion_number() function
107293 ** returns an integer equal to SQLITE_VERSION_NUMBER.
107294 */
107295 SQLITE_API int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; }
107296
107297 /* IMPLEMENTATION-OF: R-54823-41343 The sqlite3_threadsafe() function returns
107298 ** zero if and only if SQLite was compiled mutexing code omitted due to
107299 ** the SQLITE_THREADSAFE compile-time option being set to 0.
107300 */
107301 SQLITE_API int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; }
107302
107303 #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
107304 /*
107305 ** If the following function pointer is not NULL and if
107306 ** SQLITE_ENABLE_IOTRACE is enabled, then messages describing
107307 ** I/O active are written using this function.  These messages
107308 ** are intended for debugging activity only.
107309 */
107310 SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*, ...) = 0;
107311 #endif
107312
107313 /*
107314 ** If the following global variable points to a string which is the
107315 ** name of a directory, then that directory will be used to store
107316 ** temporary files.
107317 **
107318 ** See also the "PRAGMA temp_store_directory" SQL command.
107319 */
107320 SQLITE_API char *sqlite3_temp_directory = 0;
107321
107322 /*
107323 ** Initialize SQLite.  
107324 **
107325 ** This routine must be called to initialize the memory allocation,
107326 ** VFS, and mutex subsystems prior to doing any serious work with
107327 ** SQLite.  But as long as you do not compile with SQLITE_OMIT_AUTOINIT
107328 ** this routine will be called automatically by key routines such as
107329 ** sqlite3_open().  
107330 **
107331 ** This routine is a no-op except on its very first call for the process,
107332 ** or for the first call after a call to sqlite3_shutdown.
107333 **
107334 ** The first thread to call this routine runs the initialization to
107335 ** completion.  If subsequent threads call this routine before the first
107336 ** thread has finished the initialization process, then the subsequent
107337 ** threads must block until the first thread finishes with the initialization.
107338 **
107339 ** The first thread might call this routine recursively.  Recursive
107340 ** calls to this routine should not block, of course.  Otherwise the
107341 ** initialization process would never complete.
107342 **
107343 ** Let X be the first thread to enter this routine.  Let Y be some other
107344 ** thread.  Then while the initial invocation of this routine by X is
107345 ** incomplete, it is required that:
107346 **
107347 **    *  Calls to this routine from Y must block until the outer-most
107348 **       call by X completes.
107349 **
107350 **    *  Recursive calls to this routine from thread X return immediately
107351 **       without blocking.
107352 */
107353 SQLITE_API int sqlite3_initialize(void){
107354   sqlite3_mutex *pMaster;                      /* The main static mutex */
107355   int rc;                                      /* Result code */
107356
107357 #ifdef SQLITE_OMIT_WSD
107358   rc = sqlite3_wsd_init(4096, 24);
107359   if( rc!=SQLITE_OK ){
107360     return rc;
107361   }
107362 #endif
107363
107364   /* If SQLite is already completely initialized, then this call
107365   ** to sqlite3_initialize() should be a no-op.  But the initialization
107366   ** must be complete.  So isInit must not be set until the very end
107367   ** of this routine.
107368   */
107369   if( sqlite3GlobalConfig.isInit ) return SQLITE_OK;
107370
107371   /* Make sure the mutex subsystem is initialized.  If unable to 
107372   ** initialize the mutex subsystem, return early with the error.
107373   ** If the system is so sick that we are unable to allocate a mutex,
107374   ** there is not much SQLite is going to be able to do.
107375   **
107376   ** The mutex subsystem must take care of serializing its own
107377   ** initialization.
107378   */
107379   rc = sqlite3MutexInit();
107380   if( rc ) return rc;
107381
107382   /* Initialize the malloc() system and the recursive pInitMutex mutex.
107383   ** This operation is protected by the STATIC_MASTER mutex.  Note that
107384   ** MutexAlloc() is called for a static mutex prior to initializing the
107385   ** malloc subsystem - this implies that the allocation of a static
107386   ** mutex must not require support from the malloc subsystem.
107387   */
107388   pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
107389   sqlite3_mutex_enter(pMaster);
107390   sqlite3GlobalConfig.isMutexInit = 1;
107391   if( !sqlite3GlobalConfig.isMallocInit ){
107392     rc = sqlite3MallocInit();
107393   }
107394   if( rc==SQLITE_OK ){
107395     sqlite3GlobalConfig.isMallocInit = 1;
107396     if( !sqlite3GlobalConfig.pInitMutex ){
107397       sqlite3GlobalConfig.pInitMutex =
107398            sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
107399       if( sqlite3GlobalConfig.bCoreMutex && !sqlite3GlobalConfig.pInitMutex ){
107400         rc = SQLITE_NOMEM;
107401       }
107402     }
107403   }
107404   if( rc==SQLITE_OK ){
107405     sqlite3GlobalConfig.nRefInitMutex++;
107406   }
107407   sqlite3_mutex_leave(pMaster);
107408
107409   /* If rc is not SQLITE_OK at this point, then either the malloc
107410   ** subsystem could not be initialized or the system failed to allocate
107411   ** the pInitMutex mutex. Return an error in either case.  */
107412   if( rc!=SQLITE_OK ){
107413     return rc;
107414   }
107415
107416   /* Do the rest of the initialization under the recursive mutex so
107417   ** that we will be able to handle recursive calls into
107418   ** sqlite3_initialize().  The recursive calls normally come through
107419   ** sqlite3_os_init() when it invokes sqlite3_vfs_register(), but other
107420   ** recursive calls might also be possible.
107421   **
107422   ** IMPLEMENTATION-OF: R-00140-37445 SQLite automatically serializes calls
107423   ** to the xInit method, so the xInit method need not be threadsafe.
107424   **
107425   ** The following mutex is what serializes access to the appdef pcache xInit
107426   ** methods.  The sqlite3_pcache_methods.xInit() all is embedded in the
107427   ** call to sqlite3PcacheInitialize().
107428   */
107429   sqlite3_mutex_enter(sqlite3GlobalConfig.pInitMutex);
107430   if( sqlite3GlobalConfig.isInit==0 && sqlite3GlobalConfig.inProgress==0 ){
107431     FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
107432     sqlite3GlobalConfig.inProgress = 1;
107433     memset(pHash, 0, sizeof(sqlite3GlobalFunctions));
107434     sqlite3RegisterGlobalFunctions();
107435     if( sqlite3GlobalConfig.isPCacheInit==0 ){
107436       rc = sqlite3PcacheInitialize();
107437     }
107438     if( rc==SQLITE_OK ){
107439       sqlite3GlobalConfig.isPCacheInit = 1;
107440       rc = sqlite3OsInit();
107441     }
107442     if( rc==SQLITE_OK ){
107443       sqlite3PCacheBufferSetup( sqlite3GlobalConfig.pPage, 
107444           sqlite3GlobalConfig.szPage, sqlite3GlobalConfig.nPage);
107445       sqlite3GlobalConfig.isInit = 1;
107446     }
107447     sqlite3GlobalConfig.inProgress = 0;
107448   }
107449   sqlite3_mutex_leave(sqlite3GlobalConfig.pInitMutex);
107450
107451   /* Go back under the static mutex and clean up the recursive
107452   ** mutex to prevent a resource leak.
107453   */
107454   sqlite3_mutex_enter(pMaster);
107455   sqlite3GlobalConfig.nRefInitMutex--;
107456   if( sqlite3GlobalConfig.nRefInitMutex<=0 ){
107457     assert( sqlite3GlobalConfig.nRefInitMutex==0 );
107458     sqlite3_mutex_free(sqlite3GlobalConfig.pInitMutex);
107459     sqlite3GlobalConfig.pInitMutex = 0;
107460   }
107461   sqlite3_mutex_leave(pMaster);
107462
107463   /* The following is just a sanity check to make sure SQLite has
107464   ** been compiled correctly.  It is important to run this code, but
107465   ** we don't want to run it too often and soak up CPU cycles for no
107466   ** reason.  So we run it once during initialization.
107467   */
107468 #ifndef NDEBUG
107469 #ifndef SQLITE_OMIT_FLOATING_POINT
107470   /* This section of code's only "output" is via assert() statements. */
107471   if ( rc==SQLITE_OK ){
107472     u64 x = (((u64)1)<<63)-1;
107473     double y;
107474     assert(sizeof(x)==8);
107475     assert(sizeof(x)==sizeof(y));
107476     memcpy(&y, &x, 8);
107477     assert( sqlite3IsNaN(y) );
107478   }
107479 #endif
107480 #endif
107481
107482   return rc;
107483 }
107484
107485 /*
107486 ** Undo the effects of sqlite3_initialize().  Must not be called while
107487 ** there are outstanding database connections or memory allocations or
107488 ** while any part of SQLite is otherwise in use in any thread.  This
107489 ** routine is not threadsafe.  But it is safe to invoke this routine
107490 ** on when SQLite is already shut down.  If SQLite is already shut down
107491 ** when this routine is invoked, then this routine is a harmless no-op.
107492 */
107493 SQLITE_API int sqlite3_shutdown(void){
107494   if( sqlite3GlobalConfig.isInit ){
107495     sqlite3_os_end();
107496     sqlite3_reset_auto_extension();
107497     sqlite3GlobalConfig.isInit = 0;
107498   }
107499   if( sqlite3GlobalConfig.isPCacheInit ){
107500     sqlite3PcacheShutdown();
107501     sqlite3GlobalConfig.isPCacheInit = 0;
107502   }
107503   if( sqlite3GlobalConfig.isMallocInit ){
107504     sqlite3MallocEnd();
107505     sqlite3GlobalConfig.isMallocInit = 0;
107506   }
107507   if( sqlite3GlobalConfig.isMutexInit ){
107508     sqlite3MutexEnd();
107509     sqlite3GlobalConfig.isMutexInit = 0;
107510   }
107511
107512   return SQLITE_OK;
107513 }
107514
107515 /*
107516 ** This API allows applications to modify the global configuration of
107517 ** the SQLite library at run-time.
107518 **
107519 ** This routine should only be called when there are no outstanding
107520 ** database connections or memory allocations.  This routine is not
107521 ** threadsafe.  Failure to heed these warnings can lead to unpredictable
107522 ** behavior.
107523 */
107524 SQLITE_API int sqlite3_config(int op, ...){
107525   va_list ap;
107526   int rc = SQLITE_OK;
107527
107528   /* sqlite3_config() shall return SQLITE_MISUSE if it is invoked while
107529   ** the SQLite library is in use. */
107530   if( sqlite3GlobalConfig.isInit ) return SQLITE_MISUSE_BKPT;
107531
107532   va_start(ap, op);
107533   switch( op ){
107534
107535     /* Mutex configuration options are only available in a threadsafe
107536     ** compile. 
107537     */
107538 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0
107539     case SQLITE_CONFIG_SINGLETHREAD: {
107540       /* Disable all mutexing */
107541       sqlite3GlobalConfig.bCoreMutex = 0;
107542       sqlite3GlobalConfig.bFullMutex = 0;
107543       break;
107544     }
107545     case SQLITE_CONFIG_MULTITHREAD: {
107546       /* Disable mutexing of database connections */
107547       /* Enable mutexing of core data structures */
107548       sqlite3GlobalConfig.bCoreMutex = 1;
107549       sqlite3GlobalConfig.bFullMutex = 0;
107550       break;
107551     }
107552     case SQLITE_CONFIG_SERIALIZED: {
107553       /* Enable all mutexing */
107554       sqlite3GlobalConfig.bCoreMutex = 1;
107555       sqlite3GlobalConfig.bFullMutex = 1;
107556       break;
107557     }
107558     case SQLITE_CONFIG_MUTEX: {
107559       /* Specify an alternative mutex implementation */
107560       sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*);
107561       break;
107562     }
107563     case SQLITE_CONFIG_GETMUTEX: {
107564       /* Retrieve the current mutex implementation */
107565       *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex;
107566       break;
107567     }
107568 #endif
107569
107570
107571     case SQLITE_CONFIG_MALLOC: {
107572       /* Specify an alternative malloc implementation */
107573       sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*);
107574       break;
107575     }
107576     case SQLITE_CONFIG_GETMALLOC: {
107577       /* Retrieve the current malloc() implementation */
107578       if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault();
107579       *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m;
107580       break;
107581     }
107582     case SQLITE_CONFIG_MEMSTATUS: {
107583       /* Enable or disable the malloc status collection */
107584       sqlite3GlobalConfig.bMemstat = va_arg(ap, int);
107585       break;
107586     }
107587     case SQLITE_CONFIG_SCRATCH: {
107588       /* Designate a buffer for scratch memory space */
107589       sqlite3GlobalConfig.pScratch = va_arg(ap, void*);
107590       sqlite3GlobalConfig.szScratch = va_arg(ap, int);
107591       sqlite3GlobalConfig.nScratch = va_arg(ap, int);
107592       break;
107593     }
107594     case SQLITE_CONFIG_PAGECACHE: {
107595       /* Designate a buffer for page cache memory space */
107596       sqlite3GlobalConfig.pPage = va_arg(ap, void*);
107597       sqlite3GlobalConfig.szPage = va_arg(ap, int);
107598       sqlite3GlobalConfig.nPage = va_arg(ap, int);
107599       break;
107600     }
107601
107602     case SQLITE_CONFIG_PCACHE: {
107603       /* Specify an alternative page cache implementation */
107604       sqlite3GlobalConfig.pcache = *va_arg(ap, sqlite3_pcache_methods*);
107605       break;
107606     }
107607
107608     case SQLITE_CONFIG_GETPCACHE: {
107609       if( sqlite3GlobalConfig.pcache.xInit==0 ){
107610         sqlite3PCacheSetDefault();
107611       }
107612       *va_arg(ap, sqlite3_pcache_methods*) = sqlite3GlobalConfig.pcache;
107613       break;
107614     }
107615
107616 #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
107617     case SQLITE_CONFIG_HEAP: {
107618       /* Designate a buffer for heap memory space */
107619       sqlite3GlobalConfig.pHeap = va_arg(ap, void*);
107620       sqlite3GlobalConfig.nHeap = va_arg(ap, int);
107621       sqlite3GlobalConfig.mnReq = va_arg(ap, int);
107622
107623       if( sqlite3GlobalConfig.mnReq<1 ){
107624         sqlite3GlobalConfig.mnReq = 1;
107625       }else if( sqlite3GlobalConfig.mnReq>(1<<12) ){
107626         /* cap min request size at 2^12 */
107627         sqlite3GlobalConfig.mnReq = (1<<12);
107628       }
107629
107630       if( sqlite3GlobalConfig.pHeap==0 ){
107631         /* If the heap pointer is NULL, then restore the malloc implementation
107632         ** back to NULL pointers too.  This will cause the malloc to go
107633         ** back to its default implementation when sqlite3_initialize() is
107634         ** run.
107635         */
107636         memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m));
107637       }else{
107638         /* The heap pointer is not NULL, then install one of the
107639         ** mem5.c/mem3.c methods. If neither ENABLE_MEMSYS3 nor
107640         ** ENABLE_MEMSYS5 is defined, return an error.
107641         */
107642 #ifdef SQLITE_ENABLE_MEMSYS3
107643         sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3();
107644 #endif
107645 #ifdef SQLITE_ENABLE_MEMSYS5
107646         sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5();
107647 #endif
107648       }
107649       break;
107650     }
107651 #endif
107652
107653     case SQLITE_CONFIG_LOOKASIDE: {
107654       sqlite3GlobalConfig.szLookaside = va_arg(ap, int);
107655       sqlite3GlobalConfig.nLookaside = va_arg(ap, int);
107656       break;
107657     }
107658     
107659     /* Record a pointer to the logger funcction and its first argument.
107660     ** The default is NULL.  Logging is disabled if the function pointer is
107661     ** NULL.
107662     */
107663     case SQLITE_CONFIG_LOG: {
107664       /* MSVC is picky about pulling func ptrs from va lists.
107665       ** http://support.microsoft.com/kb/47961
107666       ** sqlite3GlobalConfig.xLog = va_arg(ap, void(*)(void*,int,const char*));
107667       */
107668       typedef void(*LOGFUNC_t)(void*,int,const char*);
107669       sqlite3GlobalConfig.xLog = va_arg(ap, LOGFUNC_t);
107670       sqlite3GlobalConfig.pLogArg = va_arg(ap, void*);
107671       break;
107672     }
107673
107674     default: {
107675       rc = SQLITE_ERROR;
107676       break;
107677     }
107678   }
107679   va_end(ap);
107680   return rc;
107681 }
107682
107683 /*
107684 ** Set up the lookaside buffers for a database connection.
107685 ** Return SQLITE_OK on success.  
107686 ** If lookaside is already active, return SQLITE_BUSY.
107687 **
107688 ** The sz parameter is the number of bytes in each lookaside slot.
107689 ** The cnt parameter is the number of slots.  If pStart is NULL the
107690 ** space for the lookaside memory is obtained from sqlite3_malloc().
107691 ** If pStart is not NULL then it is sz*cnt bytes of memory to use for
107692 ** the lookaside memory.
107693 */
107694 static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
107695   void *pStart;
107696   if( db->lookaside.nOut ){
107697     return SQLITE_BUSY;
107698   }
107699   /* Free any existing lookaside buffer for this handle before
107700   ** allocating a new one so we don't have to have space for 
107701   ** both at the same time.
107702   */
107703   if( db->lookaside.bMalloced ){
107704     sqlite3_free(db->lookaside.pStart);
107705   }
107706   /* The size of a lookaside slot needs to be larger than a pointer
107707   ** to be useful.
107708   */
107709   if( sz<=(int)sizeof(LookasideSlot*) ) sz = 0;
107710   if( cnt<0 ) cnt = 0;
107711   if( sz==0 || cnt==0 ){
107712     sz = 0;
107713     pStart = 0;
107714   }else if( pBuf==0 ){
107715     sz = ROUNDDOWN8(sz); /* IMP: R-33038-09382 */
107716     sqlite3BeginBenignMalloc();
107717     pStart = sqlite3Malloc( sz*cnt );  /* IMP: R-61949-35727 */
107718     sqlite3EndBenignMalloc();
107719   }else{
107720     sz = ROUNDDOWN8(sz); /* IMP: R-33038-09382 */
107721     pStart = pBuf;
107722   }
107723   db->lookaside.pStart = pStart;
107724   db->lookaside.pFree = 0;
107725   db->lookaside.sz = (u16)sz;
107726   if( pStart ){
107727     int i;
107728     LookasideSlot *p;
107729     assert( sz > (int)sizeof(LookasideSlot*) );
107730     p = (LookasideSlot*)pStart;
107731     for(i=cnt-1; i>=0; i--){
107732       p->pNext = db->lookaside.pFree;
107733       db->lookaside.pFree = p;
107734       p = (LookasideSlot*)&((u8*)p)[sz];
107735     }
107736     db->lookaside.pEnd = p;
107737     db->lookaside.bEnabled = 1;
107738     db->lookaside.bMalloced = pBuf==0 ?1:0;
107739   }else{
107740     db->lookaside.pEnd = 0;
107741     db->lookaside.bEnabled = 0;
107742     db->lookaside.bMalloced = 0;
107743   }
107744   return SQLITE_OK;
107745 }
107746
107747 /*
107748 ** Return the mutex associated with a database connection.
107749 */
107750 SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){
107751   return db->mutex;
107752 }
107753
107754 /*
107755 ** Configuration settings for an individual database connection
107756 */
107757 SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){
107758   va_list ap;
107759   int rc;
107760   va_start(ap, op);
107761   switch( op ){
107762     case SQLITE_DBCONFIG_LOOKASIDE: {
107763       void *pBuf = va_arg(ap, void*); /* IMP: R-26835-10964 */
107764       int sz = va_arg(ap, int);       /* IMP: R-47871-25994 */
107765       int cnt = va_arg(ap, int);      /* IMP: R-04460-53386 */
107766       rc = setupLookaside(db, pBuf, sz, cnt);
107767       break;
107768     }
107769     default: {
107770       static const struct {
107771         int op;      /* The opcode */
107772         u32 mask;    /* Mask of the bit in sqlite3.flags to set/clear */
107773       } aFlagOp[] = {
107774         { SQLITE_DBCONFIG_ENABLE_FKEY,    SQLITE_ForeignKeys    },
107775         { SQLITE_DBCONFIG_ENABLE_TRIGGER, SQLITE_EnableTrigger  },
107776       };
107777       unsigned int i;
107778       rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
107779       for(i=0; i<ArraySize(aFlagOp); i++){
107780         if( aFlagOp[i].op==op ){
107781           int onoff = va_arg(ap, int);
107782           int *pRes = va_arg(ap, int*);
107783           int oldFlags = db->flags;
107784           if( onoff>0 ){
107785             db->flags |= aFlagOp[i].mask;
107786           }else if( onoff==0 ){
107787             db->flags &= ~aFlagOp[i].mask;
107788           }
107789           if( oldFlags!=db->flags ){
107790             sqlite3ExpirePreparedStatements(db);
107791           }
107792           if( pRes ){
107793             *pRes = (db->flags & aFlagOp[i].mask)!=0;
107794           }
107795           rc = SQLITE_OK;
107796           break;
107797         }
107798       }
107799       break;
107800     }
107801   }
107802   va_end(ap);
107803   return rc;
107804 }
107805
107806
107807 /*
107808 ** Return true if the buffer z[0..n-1] contains all spaces.
107809 */
107810 static int allSpaces(const char *z, int n){
107811   while( n>0 && z[n-1]==' ' ){ n--; }
107812   return n==0;
107813 }
107814
107815 /*
107816 ** This is the default collating function named "BINARY" which is always
107817 ** available.
107818 **
107819 ** If the padFlag argument is not NULL then space padding at the end
107820 ** of strings is ignored.  This implements the RTRIM collation.
107821 */
107822 static int binCollFunc(
107823   void *padFlag,
107824   int nKey1, const void *pKey1,
107825   int nKey2, const void *pKey2
107826 ){
107827   int rc, n;
107828   n = nKey1<nKey2 ? nKey1 : nKey2;
107829   rc = memcmp(pKey1, pKey2, n);
107830   if( rc==0 ){
107831     if( padFlag
107832      && allSpaces(((char*)pKey1)+n, nKey1-n)
107833      && allSpaces(((char*)pKey2)+n, nKey2-n)
107834     ){
107835       /* Leave rc unchanged at 0 */
107836     }else{
107837       rc = nKey1 - nKey2;
107838     }
107839   }
107840   return rc;
107841 }
107842
107843 /*
107844 ** Another built-in collating sequence: NOCASE. 
107845 **
107846 ** This collating sequence is intended to be used for "case independant
107847 ** comparison". SQLite's knowledge of upper and lower case equivalents
107848 ** extends only to the 26 characters used in the English language.
107849 **
107850 ** At the moment there is only a UTF-8 implementation.
107851 */
107852 static int nocaseCollatingFunc(
107853   void *NotUsed,
107854   int nKey1, const void *pKey1,
107855   int nKey2, const void *pKey2
107856 ){
107857   int r = sqlite3StrNICmp(
107858       (const char *)pKey1, (const char *)pKey2, (nKey1<nKey2)?nKey1:nKey2);
107859   UNUSED_PARAMETER(NotUsed);
107860   if( 0==r ){
107861     r = nKey1-nKey2;
107862   }
107863   return r;
107864 }
107865
107866 /*
107867 ** Return the ROWID of the most recent insert
107868 */
107869 SQLITE_API sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
107870   return db->lastRowid;
107871 }
107872
107873 /*
107874 ** Return the number of changes in the most recent call to sqlite3_exec().
107875 */
107876 SQLITE_API int sqlite3_changes(sqlite3 *db){
107877   return db->nChange;
107878 }
107879
107880 /*
107881 ** Return the number of changes since the database handle was opened.
107882 */
107883 SQLITE_API int sqlite3_total_changes(sqlite3 *db){
107884   return db->nTotalChange;
107885 }
107886
107887 /*
107888 ** Close all open savepoints. This function only manipulates fields of the
107889 ** database handle object, it does not close any savepoints that may be open
107890 ** at the b-tree/pager level.
107891 */
107892 SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *db){
107893   while( db->pSavepoint ){
107894     Savepoint *pTmp = db->pSavepoint;
107895     db->pSavepoint = pTmp->pNext;
107896     sqlite3DbFree(db, pTmp);
107897   }
107898   db->nSavepoint = 0;
107899   db->nStatement = 0;
107900   db->isTransactionSavepoint = 0;
107901 }
107902
107903 /*
107904 ** Invoke the destructor function associated with FuncDef p, if any. Except,
107905 ** if this is not the last copy of the function, do not invoke it. Multiple
107906 ** copies of a single function are created when create_function() is called
107907 ** with SQLITE_ANY as the encoding.
107908 */
107909 static void functionDestroy(sqlite3 *db, FuncDef *p){
107910   FuncDestructor *pDestructor = p->pDestructor;
107911   if( pDestructor ){
107912     pDestructor->nRef--;
107913     if( pDestructor->nRef==0 ){
107914       pDestructor->xDestroy(pDestructor->pUserData);
107915       sqlite3DbFree(db, pDestructor);
107916     }
107917   }
107918 }
107919
107920 /*
107921 ** Close an existing SQLite database
107922 */
107923 SQLITE_API int sqlite3_close(sqlite3 *db){
107924   HashElem *i;                    /* Hash table iterator */
107925   int j;
107926
107927   if( !db ){
107928     return SQLITE_OK;
107929   }
107930   if( !sqlite3SafetyCheckSickOrOk(db) ){
107931     return SQLITE_MISUSE_BKPT;
107932   }
107933   sqlite3_mutex_enter(db->mutex);
107934
107935   /* Force xDestroy calls on all virtual tables */
107936   sqlite3ResetInternalSchema(db, -1);
107937
107938   /* If a transaction is open, the ResetInternalSchema() call above
107939   ** will not have called the xDisconnect() method on any virtual
107940   ** tables in the db->aVTrans[] array. The following sqlite3VtabRollback()
107941   ** call will do so. We need to do this before the check for active
107942   ** SQL statements below, as the v-table implementation may be storing
107943   ** some prepared statements internally.
107944   */
107945   sqlite3VtabRollback(db);
107946
107947   /* If there are any outstanding VMs, return SQLITE_BUSY. */
107948   if( db->pVdbe ){
107949     sqlite3Error(db, SQLITE_BUSY, 
107950         "unable to close due to unfinalised statements");
107951     sqlite3_mutex_leave(db->mutex);
107952     return SQLITE_BUSY;
107953   }
107954   assert( sqlite3SafetyCheckSickOrOk(db) );
107955
107956   for(j=0; j<db->nDb; j++){
107957     Btree *pBt = db->aDb[j].pBt;
107958     if( pBt && sqlite3BtreeIsInBackup(pBt) ){
107959       sqlite3Error(db, SQLITE_BUSY, 
107960           "unable to close due to unfinished backup operation");
107961       sqlite3_mutex_leave(db->mutex);
107962       return SQLITE_BUSY;
107963     }
107964   }
107965
107966   /* Free any outstanding Savepoint structures. */
107967   sqlite3CloseSavepoints(db);
107968
107969   for(j=0; j<db->nDb; j++){
107970     struct Db *pDb = &db->aDb[j];
107971     if( pDb->pBt ){
107972       sqlite3BtreeClose(pDb->pBt);
107973       pDb->pBt = 0;
107974       if( j!=1 ){
107975         pDb->pSchema = 0;
107976       }
107977     }
107978   }
107979   sqlite3ResetInternalSchema(db, -1);
107980
107981   /* Tell the code in notify.c that the connection no longer holds any
107982   ** locks and does not require any further unlock-notify callbacks.
107983   */
107984   sqlite3ConnectionClosed(db);
107985
107986   assert( db->nDb<=2 );
107987   assert( db->aDb==db->aDbStatic );
107988   for(j=0; j<ArraySize(db->aFunc.a); j++){
107989     FuncDef *pNext, *pHash, *p;
107990     for(p=db->aFunc.a[j]; p; p=pHash){
107991       pHash = p->pHash;
107992       while( p ){
107993         functionDestroy(db, p);
107994         pNext = p->pNext;
107995         sqlite3DbFree(db, p);
107996         p = pNext;
107997       }
107998     }
107999   }
108000   for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){
108001     CollSeq *pColl = (CollSeq *)sqliteHashData(i);
108002     /* Invoke any destructors registered for collation sequence user data. */
108003     for(j=0; j<3; j++){
108004       if( pColl[j].xDel ){
108005         pColl[j].xDel(pColl[j].pUser);
108006       }
108007     }
108008     sqlite3DbFree(db, pColl);
108009   }
108010   sqlite3HashClear(&db->aCollSeq);
108011 #ifndef SQLITE_OMIT_VIRTUALTABLE
108012   for(i=sqliteHashFirst(&db->aModule); i; i=sqliteHashNext(i)){
108013     Module *pMod = (Module *)sqliteHashData(i);
108014     if( pMod->xDestroy ){
108015       pMod->xDestroy(pMod->pAux);
108016     }
108017     sqlite3DbFree(db, pMod);
108018   }
108019   sqlite3HashClear(&db->aModule);
108020 #endif
108021
108022   sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */
108023   if( db->pErr ){
108024     sqlite3ValueFree(db->pErr);
108025   }
108026   sqlite3CloseExtensions(db);
108027
108028   db->magic = SQLITE_MAGIC_ERROR;
108029
108030   /* The temp-database schema is allocated differently from the other schema
108031   ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()).
108032   ** So it needs to be freed here. Todo: Why not roll the temp schema into
108033   ** the same sqliteMalloc() as the one that allocates the database 
108034   ** structure?
108035   */
108036   sqlite3DbFree(db, db->aDb[1].pSchema);
108037   sqlite3_mutex_leave(db->mutex);
108038   db->magic = SQLITE_MAGIC_CLOSED;
108039   sqlite3_mutex_free(db->mutex);
108040   assert( db->lookaside.nOut==0 );  /* Fails on a lookaside memory leak */
108041   if( db->lookaside.bMalloced ){
108042     sqlite3_free(db->lookaside.pStart);
108043   }
108044   sqlite3_free(db);
108045   return SQLITE_OK;
108046 }
108047
108048 /*
108049 ** Rollback all database files.
108050 */
108051 SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db){
108052   int i;
108053   int inTrans = 0;
108054   assert( sqlite3_mutex_held(db->mutex) );
108055   sqlite3BeginBenignMalloc();
108056   for(i=0; i<db->nDb; i++){
108057     if( db->aDb[i].pBt ){
108058       if( sqlite3BtreeIsInTrans(db->aDb[i].pBt) ){
108059         inTrans = 1;
108060       }
108061       sqlite3BtreeRollback(db->aDb[i].pBt);
108062       db->aDb[i].inTrans = 0;
108063     }
108064   }
108065   sqlite3VtabRollback(db);
108066   sqlite3EndBenignMalloc();
108067
108068   if( db->flags&SQLITE_InternChanges ){
108069     sqlite3ExpirePreparedStatements(db);
108070     sqlite3ResetInternalSchema(db, -1);
108071   }
108072
108073   /* Any deferred constraint violations have now been resolved. */
108074   db->nDeferredCons = 0;
108075
108076   /* If one has been configured, invoke the rollback-hook callback */
108077   if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){
108078     db->xRollbackCallback(db->pRollbackArg);
108079   }
108080 }
108081
108082 /*
108083 ** Return a static string that describes the kind of error specified in the
108084 ** argument.
108085 */
108086 SQLITE_PRIVATE const char *sqlite3ErrStr(int rc){
108087   static const char* const aMsg[] = {
108088     /* SQLITE_OK          */ "not an error",
108089     /* SQLITE_ERROR       */ "SQL logic error or missing database",
108090     /* SQLITE_INTERNAL    */ 0,
108091     /* SQLITE_PERM        */ "access permission denied",
108092     /* SQLITE_ABORT       */ "callback requested query abort",
108093     /* SQLITE_BUSY        */ "database is locked",
108094     /* SQLITE_LOCKED      */ "database table is locked",
108095     /* SQLITE_NOMEM       */ "out of memory",
108096     /* SQLITE_READONLY    */ "attempt to write a readonly database",
108097     /* SQLITE_INTERRUPT   */ "interrupted",
108098     /* SQLITE_IOERR       */ "disk I/O error",
108099     /* SQLITE_CORRUPT     */ "database disk image is malformed",
108100     /* SQLITE_NOTFOUND    */ "unknown operation",
108101     /* SQLITE_FULL        */ "database or disk is full",
108102     /* SQLITE_CANTOPEN    */ "unable to open database file",
108103     /* SQLITE_PROTOCOL    */ "locking protocol",
108104     /* SQLITE_EMPTY       */ "table contains no data",
108105     /* SQLITE_SCHEMA      */ "database schema has changed",
108106     /* SQLITE_TOOBIG      */ "string or blob too big",
108107     /* SQLITE_CONSTRAINT  */ "constraint failed",
108108     /* SQLITE_MISMATCH    */ "datatype mismatch",
108109     /* SQLITE_MISUSE      */ "library routine called out of sequence",
108110     /* SQLITE_NOLFS       */ "large file support is disabled",
108111     /* SQLITE_AUTH        */ "authorization denied",
108112     /* SQLITE_FORMAT      */ "auxiliary database format error",
108113     /* SQLITE_RANGE       */ "bind or column index out of range",
108114     /* SQLITE_NOTADB      */ "file is encrypted or is not a database",
108115   };
108116   rc &= 0xff;
108117   if( ALWAYS(rc>=0) && rc<(int)(sizeof(aMsg)/sizeof(aMsg[0])) && aMsg[rc]!=0 ){
108118     return aMsg[rc];
108119   }else{
108120     return "unknown error";
108121   }
108122 }
108123
108124 /*
108125 ** This routine implements a busy callback that sleeps and tries
108126 ** again until a timeout value is reached.  The timeout value is
108127 ** an integer number of milliseconds passed in as the first
108128 ** argument.
108129 */
108130 static int sqliteDefaultBusyCallback(
108131  void *ptr,               /* Database connection */
108132  int count                /* Number of times table has been busy */
108133 ){
108134 #if SQLITE_OS_WIN || (defined(HAVE_USLEEP) && HAVE_USLEEP)
108135   static const u8 delays[] =
108136      { 1, 2, 5, 10, 15, 20, 25, 25,  25,  50,  50, 100 };
108137   static const u8 totals[] =
108138      { 0, 1, 3,  8, 18, 33, 53, 78, 103, 128, 178, 228 };
108139 # define NDELAY ArraySize(delays)
108140   sqlite3 *db = (sqlite3 *)ptr;
108141   int timeout = db->busyTimeout;
108142   int delay, prior;
108143
108144   assert( count>=0 );
108145   if( count < NDELAY ){
108146     delay = delays[count];
108147     prior = totals[count];
108148   }else{
108149     delay = delays[NDELAY-1];
108150     prior = totals[NDELAY-1] + delay*(count-(NDELAY-1));
108151   }
108152   if( prior + delay > timeout ){
108153     delay = timeout - prior;
108154     if( delay<=0 ) return 0;
108155   }
108156   sqlite3OsSleep(db->pVfs, delay*1000);
108157   return 1;
108158 #else
108159   sqlite3 *db = (sqlite3 *)ptr;
108160   int timeout = ((sqlite3 *)ptr)->busyTimeout;
108161   if( (count+1)*1000 > timeout ){
108162     return 0;
108163   }
108164   sqlite3OsSleep(db->pVfs, 1000000);
108165   return 1;
108166 #endif
108167 }
108168
108169 /*
108170 ** Invoke the given busy handler.
108171 **
108172 ** This routine is called when an operation failed with a lock.
108173 ** If this routine returns non-zero, the lock is retried.  If it
108174 ** returns 0, the operation aborts with an SQLITE_BUSY error.
108175 */
108176 SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler *p){
108177   int rc;
108178   if( NEVER(p==0) || p->xFunc==0 || p->nBusy<0 ) return 0;
108179   rc = p->xFunc(p->pArg, p->nBusy);
108180   if( rc==0 ){
108181     p->nBusy = -1;
108182   }else{
108183     p->nBusy++;
108184   }
108185   return rc; 
108186 }
108187
108188 /*
108189 ** This routine sets the busy callback for an Sqlite database to the
108190 ** given callback function with the given argument.
108191 */
108192 SQLITE_API int sqlite3_busy_handler(
108193   sqlite3 *db,
108194   int (*xBusy)(void*,int),
108195   void *pArg
108196 ){
108197   sqlite3_mutex_enter(db->mutex);
108198   db->busyHandler.xFunc = xBusy;
108199   db->busyHandler.pArg = pArg;
108200   db->busyHandler.nBusy = 0;
108201   sqlite3_mutex_leave(db->mutex);
108202   return SQLITE_OK;
108203 }
108204
108205 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
108206 /*
108207 ** This routine sets the progress callback for an Sqlite database to the
108208 ** given callback function with the given argument. The progress callback will
108209 ** be invoked every nOps opcodes.
108210 */
108211 SQLITE_API void sqlite3_progress_handler(
108212   sqlite3 *db, 
108213   int nOps,
108214   int (*xProgress)(void*), 
108215   void *pArg
108216 ){
108217   sqlite3_mutex_enter(db->mutex);
108218   if( nOps>0 ){
108219     db->xProgress = xProgress;
108220     db->nProgressOps = nOps;
108221     db->pProgressArg = pArg;
108222   }else{
108223     db->xProgress = 0;
108224     db->nProgressOps = 0;
108225     db->pProgressArg = 0;
108226   }
108227   sqlite3_mutex_leave(db->mutex);
108228 }
108229 #endif
108230
108231
108232 /*
108233 ** This routine installs a default busy handler that waits for the
108234 ** specified number of milliseconds before returning 0.
108235 */
108236 SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){
108237   if( ms>0 ){
108238     db->busyTimeout = ms;
108239     sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
108240   }else{
108241     sqlite3_busy_handler(db, 0, 0);
108242   }
108243   return SQLITE_OK;
108244 }
108245
108246 /*
108247 ** Cause any pending operation to stop at its earliest opportunity.
108248 */
108249 SQLITE_API void sqlite3_interrupt(sqlite3 *db){
108250   db->u1.isInterrupted = 1;
108251 }
108252
108253
108254 /*
108255 ** This function is exactly the same as sqlite3_create_function(), except
108256 ** that it is designed to be called by internal code. The difference is
108257 ** that if a malloc() fails in sqlite3_create_function(), an error code
108258 ** is returned and the mallocFailed flag cleared. 
108259 */
108260 SQLITE_PRIVATE int sqlite3CreateFunc(
108261   sqlite3 *db,
108262   const char *zFunctionName,
108263   int nArg,
108264   int enc,
108265   void *pUserData,
108266   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
108267   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
108268   void (*xFinal)(sqlite3_context*),
108269   FuncDestructor *pDestructor
108270 ){
108271   FuncDef *p;
108272   int nName;
108273
108274   assert( sqlite3_mutex_held(db->mutex) );
108275   if( zFunctionName==0 ||
108276       (xFunc && (xFinal || xStep)) || 
108277       (!xFunc && (xFinal && !xStep)) ||
108278       (!xFunc && (!xFinal && xStep)) ||
108279       (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) ||
108280       (255<(nName = sqlite3Strlen30( zFunctionName))) ){
108281     return SQLITE_MISUSE_BKPT;
108282   }
108283   
108284 #ifndef SQLITE_OMIT_UTF16
108285   /* If SQLITE_UTF16 is specified as the encoding type, transform this
108286   ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
108287   ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
108288   **
108289   ** If SQLITE_ANY is specified, add three versions of the function
108290   ** to the hash table.
108291   */
108292   if( enc==SQLITE_UTF16 ){
108293     enc = SQLITE_UTF16NATIVE;
108294   }else if( enc==SQLITE_ANY ){
108295     int rc;
108296     rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8,
108297          pUserData, xFunc, xStep, xFinal, pDestructor);
108298     if( rc==SQLITE_OK ){
108299       rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE,
108300           pUserData, xFunc, xStep, xFinal, pDestructor);
108301     }
108302     if( rc!=SQLITE_OK ){
108303       return rc;
108304     }
108305     enc = SQLITE_UTF16BE;
108306   }
108307 #else
108308   enc = SQLITE_UTF8;
108309 #endif
108310   
108311   /* Check if an existing function is being overridden or deleted. If so,
108312   ** and there are active VMs, then return SQLITE_BUSY. If a function
108313   ** is being overridden/deleted but there are no active VMs, allow the
108314   ** operation to continue but invalidate all precompiled statements.
108315   */
108316   p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 0);
108317   if( p && p->iPrefEnc==enc && p->nArg==nArg ){
108318     if( db->activeVdbeCnt ){
108319       sqlite3Error(db, SQLITE_BUSY, 
108320         "unable to delete/modify user-function due to active statements");
108321       assert( !db->mallocFailed );
108322       return SQLITE_BUSY;
108323     }else{
108324       sqlite3ExpirePreparedStatements(db);
108325     }
108326   }
108327
108328   p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 1);
108329   assert(p || db->mallocFailed);
108330   if( !p ){
108331     return SQLITE_NOMEM;
108332   }
108333
108334   /* If an older version of the function with a configured destructor is
108335   ** being replaced invoke the destructor function here. */
108336   functionDestroy(db, p);
108337
108338   if( pDestructor ){
108339     pDestructor->nRef++;
108340   }
108341   p->pDestructor = pDestructor;
108342   p->flags = 0;
108343   p->xFunc = xFunc;
108344   p->xStep = xStep;
108345   p->xFinalize = xFinal;
108346   p->pUserData = pUserData;
108347   p->nArg = (u16)nArg;
108348   return SQLITE_OK;
108349 }
108350
108351 /*
108352 ** Create new user functions.
108353 */
108354 SQLITE_API int sqlite3_create_function(
108355   sqlite3 *db,
108356   const char *zFunc,
108357   int nArg,
108358   int enc,
108359   void *p,
108360   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
108361   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
108362   void (*xFinal)(sqlite3_context*)
108363 ){
108364   return sqlite3_create_function_v2(db, zFunc, nArg, enc, p, xFunc, xStep,
108365                                     xFinal, 0);
108366 }
108367
108368 SQLITE_API int sqlite3_create_function_v2(
108369   sqlite3 *db,
108370   const char *zFunc,
108371   int nArg,
108372   int enc,
108373   void *p,
108374   void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
108375   void (*xStep)(sqlite3_context*,int,sqlite3_value **),
108376   void (*xFinal)(sqlite3_context*),
108377   void (*xDestroy)(void *)
108378 ){
108379   int rc = SQLITE_ERROR;
108380   FuncDestructor *pArg = 0;
108381   sqlite3_mutex_enter(db->mutex);
108382   if( xDestroy ){
108383     pArg = (FuncDestructor *)sqlite3DbMallocZero(db, sizeof(FuncDestructor));
108384     if( !pArg ){
108385       xDestroy(p);
108386       goto out;
108387     }
108388     pArg->xDestroy = xDestroy;
108389     pArg->pUserData = p;
108390   }
108391   rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, xFunc, xStep, xFinal, pArg);
108392   if( pArg && pArg->nRef==0 ){
108393     assert( rc!=SQLITE_OK );
108394     xDestroy(p);
108395     sqlite3DbFree(db, pArg);
108396   }
108397
108398  out:
108399   rc = sqlite3ApiExit(db, rc);
108400   sqlite3_mutex_leave(db->mutex);
108401   return rc;
108402 }
108403
108404 #ifndef SQLITE_OMIT_UTF16
108405 SQLITE_API int sqlite3_create_function16(
108406   sqlite3 *db,
108407   const void *zFunctionName,
108408   int nArg,
108409   int eTextRep,
108410   void *p,
108411   void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
108412   void (*xStep)(sqlite3_context*,int,sqlite3_value**),
108413   void (*xFinal)(sqlite3_context*)
108414 ){
108415   int rc;
108416   char *zFunc8;
108417   sqlite3_mutex_enter(db->mutex);
108418   assert( !db->mallocFailed );
108419   zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE);
108420   rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal,0);
108421   sqlite3DbFree(db, zFunc8);
108422   rc = sqlite3ApiExit(db, rc);
108423   sqlite3_mutex_leave(db->mutex);
108424   return rc;
108425 }
108426 #endif
108427
108428
108429 /*
108430 ** Declare that a function has been overloaded by a virtual table.
108431 **
108432 ** If the function already exists as a regular global function, then
108433 ** this routine is a no-op.  If the function does not exist, then create
108434 ** a new one that always throws a run-time error.  
108435 **
108436 ** When virtual tables intend to provide an overloaded function, they
108437 ** should call this routine to make sure the global function exists.
108438 ** A global function must exist in order for name resolution to work
108439 ** properly.
108440 */
108441 SQLITE_API int sqlite3_overload_function(
108442   sqlite3 *db,
108443   const char *zName,
108444   int nArg
108445 ){
108446   int nName = sqlite3Strlen30(zName);
108447   int rc;
108448   sqlite3_mutex_enter(db->mutex);
108449   if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){
108450     sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8,
108451                       0, sqlite3InvalidFunction, 0, 0, 0);
108452   }
108453   rc = sqlite3ApiExit(db, SQLITE_OK);
108454   sqlite3_mutex_leave(db->mutex);
108455   return rc;
108456 }
108457
108458 #ifndef SQLITE_OMIT_TRACE
108459 /*
108460 ** Register a trace function.  The pArg from the previously registered trace
108461 ** is returned.  
108462 **
108463 ** A NULL trace function means that no tracing is executes.  A non-NULL
108464 ** trace is a pointer to a function that is invoked at the start of each
108465 ** SQL statement.
108466 */
108467 SQLITE_API void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
108468   void *pOld;
108469   sqlite3_mutex_enter(db->mutex);
108470   pOld = db->pTraceArg;
108471   db->xTrace = xTrace;
108472   db->pTraceArg = pArg;
108473   sqlite3_mutex_leave(db->mutex);
108474   return pOld;
108475 }
108476 /*
108477 ** Register a profile function.  The pArg from the previously registered 
108478 ** profile function is returned.  
108479 **
108480 ** A NULL profile function means that no profiling is executes.  A non-NULL
108481 ** profile is a pointer to a function that is invoked at the conclusion of
108482 ** each SQL statement that is run.
108483 */
108484 SQLITE_API void *sqlite3_profile(
108485   sqlite3 *db,
108486   void (*xProfile)(void*,const char*,sqlite_uint64),
108487   void *pArg
108488 ){
108489   void *pOld;
108490   sqlite3_mutex_enter(db->mutex);
108491   pOld = db->pProfileArg;
108492   db->xProfile = xProfile;
108493   db->pProfileArg = pArg;
108494   sqlite3_mutex_leave(db->mutex);
108495   return pOld;
108496 }
108497 #endif /* SQLITE_OMIT_TRACE */
108498
108499 /*** EXPERIMENTAL ***
108500 **
108501 ** Register a function to be invoked when a transaction comments.
108502 ** If the invoked function returns non-zero, then the commit becomes a
108503 ** rollback.
108504 */
108505 SQLITE_API void *sqlite3_commit_hook(
108506   sqlite3 *db,              /* Attach the hook to this database */
108507   int (*xCallback)(void*),  /* Function to invoke on each commit */
108508   void *pArg                /* Argument to the function */
108509 ){
108510   void *pOld;
108511   sqlite3_mutex_enter(db->mutex);
108512   pOld = db->pCommitArg;
108513   db->xCommitCallback = xCallback;
108514   db->pCommitArg = pArg;
108515   sqlite3_mutex_leave(db->mutex);
108516   return pOld;
108517 }
108518
108519 /*
108520 ** Register a callback to be invoked each time a row is updated,
108521 ** inserted or deleted using this database connection.
108522 */
108523 SQLITE_API void *sqlite3_update_hook(
108524   sqlite3 *db,              /* Attach the hook to this database */
108525   void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
108526   void *pArg                /* Argument to the function */
108527 ){
108528   void *pRet;
108529   sqlite3_mutex_enter(db->mutex);
108530   pRet = db->pUpdateArg;
108531   db->xUpdateCallback = xCallback;
108532   db->pUpdateArg = pArg;
108533   sqlite3_mutex_leave(db->mutex);
108534   return pRet;
108535 }
108536
108537 /*
108538 ** Register a callback to be invoked each time a transaction is rolled
108539 ** back by this database connection.
108540 */
108541 SQLITE_API void *sqlite3_rollback_hook(
108542   sqlite3 *db,              /* Attach the hook to this database */
108543   void (*xCallback)(void*), /* Callback function */
108544   void *pArg                /* Argument to the function */
108545 ){
108546   void *pRet;
108547   sqlite3_mutex_enter(db->mutex);
108548   pRet = db->pRollbackArg;
108549   db->xRollbackCallback = xCallback;
108550   db->pRollbackArg = pArg;
108551   sqlite3_mutex_leave(db->mutex);
108552   return pRet;
108553 }
108554
108555 #ifndef SQLITE_OMIT_WAL
108556 /*
108557 ** The sqlite3_wal_hook() callback registered by sqlite3_wal_autocheckpoint().
108558 ** Invoke sqlite3_wal_checkpoint if the number of frames in the log file
108559 ** is greater than sqlite3.pWalArg cast to an integer (the value configured by
108560 ** wal_autocheckpoint()).
108561 */ 
108562 SQLITE_PRIVATE int sqlite3WalDefaultHook(
108563   void *pClientData,     /* Argument */
108564   sqlite3 *db,           /* Connection */
108565   const char *zDb,       /* Database */
108566   int nFrame             /* Size of WAL */
108567 ){
108568   if( nFrame>=SQLITE_PTR_TO_INT(pClientData) ){
108569     sqlite3BeginBenignMalloc();
108570     sqlite3_wal_checkpoint(db, zDb);
108571     sqlite3EndBenignMalloc();
108572   }
108573   return SQLITE_OK;
108574 }
108575 #endif /* SQLITE_OMIT_WAL */
108576
108577 /*
108578 ** Configure an sqlite3_wal_hook() callback to automatically checkpoint
108579 ** a database after committing a transaction if there are nFrame or
108580 ** more frames in the log file. Passing zero or a negative value as the
108581 ** nFrame parameter disables automatic checkpoints entirely.
108582 **
108583 ** The callback registered by this function replaces any existing callback
108584 ** registered using sqlite3_wal_hook(). Likewise, registering a callback
108585 ** using sqlite3_wal_hook() disables the automatic checkpoint mechanism
108586 ** configured by this function.
108587 */
108588 SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){
108589 #ifdef SQLITE_OMIT_WAL
108590   UNUSED_PARAMETER(db);
108591   UNUSED_PARAMETER(nFrame);
108592 #else
108593   if( nFrame>0 ){
108594     sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame));
108595   }else{
108596     sqlite3_wal_hook(db, 0, 0);
108597   }
108598 #endif
108599   return SQLITE_OK;
108600 }
108601
108602 /*
108603 ** Register a callback to be invoked each time a transaction is written
108604 ** into the write-ahead-log by this database connection.
108605 */
108606 SQLITE_API void *sqlite3_wal_hook(
108607   sqlite3 *db,                    /* Attach the hook to this db handle */
108608   int(*xCallback)(void *, sqlite3*, const char*, int),
108609   void *pArg                      /* First argument passed to xCallback() */
108610 ){
108611 #ifndef SQLITE_OMIT_WAL
108612   void *pRet;
108613   sqlite3_mutex_enter(db->mutex);
108614   pRet = db->pWalArg;
108615   db->xWalCallback = xCallback;
108616   db->pWalArg = pArg;
108617   sqlite3_mutex_leave(db->mutex);
108618   return pRet;
108619 #else
108620   return 0;
108621 #endif
108622 }
108623
108624 /*
108625 ** Checkpoint database zDb.
108626 */
108627 SQLITE_API int sqlite3_wal_checkpoint_v2(
108628   sqlite3 *db,                    /* Database handle */
108629   const char *zDb,                /* Name of attached database (or NULL) */
108630   int eMode,                      /* SQLITE_CHECKPOINT_* value */
108631   int *pnLog,                     /* OUT: Size of WAL log in frames */
108632   int *pnCkpt                     /* OUT: Total number of frames checkpointed */
108633 ){
108634 #ifdef SQLITE_OMIT_WAL
108635   return SQLITE_OK;
108636 #else
108637   int rc;                         /* Return code */
108638   int iDb = SQLITE_MAX_ATTACHED;  /* sqlite3.aDb[] index of db to checkpoint */
108639
108640   /* Initialize the output variables to -1 in case an error occurs. */
108641   if( pnLog ) *pnLog = -1;
108642   if( pnCkpt ) *pnCkpt = -1;
108643
108644   assert( SQLITE_CHECKPOINT_FULL>SQLITE_CHECKPOINT_PASSIVE );
108645   assert( SQLITE_CHECKPOINT_FULL<SQLITE_CHECKPOINT_RESTART );
108646   assert( SQLITE_CHECKPOINT_PASSIVE+2==SQLITE_CHECKPOINT_RESTART );
108647   if( eMode<SQLITE_CHECKPOINT_PASSIVE || eMode>SQLITE_CHECKPOINT_RESTART ){
108648     return SQLITE_MISUSE;
108649   }
108650
108651   sqlite3_mutex_enter(db->mutex);
108652   if( zDb && zDb[0] ){
108653     iDb = sqlite3FindDbName(db, zDb);
108654   }
108655   if( iDb<0 ){
108656     rc = SQLITE_ERROR;
108657     sqlite3Error(db, SQLITE_ERROR, "unknown database: %s", zDb);
108658   }else{
108659     rc = sqlite3Checkpoint(db, iDb, eMode, pnLog, pnCkpt);
108660     sqlite3Error(db, rc, 0);
108661   }
108662   rc = sqlite3ApiExit(db, rc);
108663   sqlite3_mutex_leave(db->mutex);
108664   return rc;
108665 #endif
108666 }
108667
108668
108669 /*
108670 ** Checkpoint database zDb. If zDb is NULL, or if the buffer zDb points
108671 ** to contains a zero-length string, all attached databases are 
108672 ** checkpointed.
108673 */
108674 SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb){
108675   return sqlite3_wal_checkpoint_v2(db, zDb, SQLITE_CHECKPOINT_PASSIVE, 0, 0);
108676 }
108677
108678 #ifndef SQLITE_OMIT_WAL
108679 /*
108680 ** Run a checkpoint on database iDb. This is a no-op if database iDb is
108681 ** not currently open in WAL mode.
108682 **
108683 ** If a transaction is open on the database being checkpointed, this 
108684 ** function returns SQLITE_LOCKED and a checkpoint is not attempted. If 
108685 ** an error occurs while running the checkpoint, an SQLite error code is 
108686 ** returned (i.e. SQLITE_IOERR). Otherwise, SQLITE_OK.
108687 **
108688 ** The mutex on database handle db should be held by the caller. The mutex
108689 ** associated with the specific b-tree being checkpointed is taken by
108690 ** this function while the checkpoint is running.
108691 **
108692 ** If iDb is passed SQLITE_MAX_ATTACHED, then all attached databases are
108693 ** checkpointed. If an error is encountered it is returned immediately -
108694 ** no attempt is made to checkpoint any remaining databases.
108695 **
108696 ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
108697 */
108698 SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3 *db, int iDb, int eMode, int *pnLog, int *pnCkpt){
108699   int rc = SQLITE_OK;             /* Return code */
108700   int i;                          /* Used to iterate through attached dbs */
108701   int bBusy = 0;                  /* True if SQLITE_BUSY has been encountered */
108702
108703   assert( sqlite3_mutex_held(db->mutex) );
108704   assert( !pnLog || *pnLog==-1 );
108705   assert( !pnCkpt || *pnCkpt==-1 );
108706
108707   for(i=0; i<db->nDb && rc==SQLITE_OK; i++){
108708     if( i==iDb || iDb==SQLITE_MAX_ATTACHED ){
108709       rc = sqlite3BtreeCheckpoint(db->aDb[i].pBt, eMode, pnLog, pnCkpt);
108710       pnLog = 0;
108711       pnCkpt = 0;
108712       if( rc==SQLITE_BUSY ){
108713         bBusy = 1;
108714         rc = SQLITE_OK;
108715       }
108716     }
108717   }
108718
108719   return (rc==SQLITE_OK && bBusy) ? SQLITE_BUSY : rc;
108720 }
108721 #endif /* SQLITE_OMIT_WAL */
108722
108723 /*
108724 ** This function returns true if main-memory should be used instead of
108725 ** a temporary file for transient pager files and statement journals.
108726 ** The value returned depends on the value of db->temp_store (runtime
108727 ** parameter) and the compile time value of SQLITE_TEMP_STORE. The
108728 ** following table describes the relationship between these two values
108729 ** and this functions return value.
108730 **
108731 **   SQLITE_TEMP_STORE     db->temp_store     Location of temporary database
108732 **   -----------------     --------------     ------------------------------
108733 **   0                     any                file      (return 0)
108734 **   1                     1                  file      (return 0)
108735 **   1                     2                  memory    (return 1)
108736 **   1                     0                  file      (return 0)
108737 **   2                     1                  file      (return 0)
108738 **   2                     2                  memory    (return 1)
108739 **   2                     0                  memory    (return 1)
108740 **   3                     any                memory    (return 1)
108741 */
108742 SQLITE_PRIVATE int sqlite3TempInMemory(const sqlite3 *db){
108743 #if SQLITE_TEMP_STORE==1
108744   return ( db->temp_store==2 );
108745 #endif
108746 #if SQLITE_TEMP_STORE==2
108747   return ( db->temp_store!=1 );
108748 #endif
108749 #if SQLITE_TEMP_STORE==3
108750   return 1;
108751 #endif
108752 #if SQLITE_TEMP_STORE<1 || SQLITE_TEMP_STORE>3
108753   return 0;
108754 #endif
108755 }
108756
108757 /*
108758 ** Return UTF-8 encoded English language explanation of the most recent
108759 ** error.
108760 */
108761 SQLITE_API const char *sqlite3_errmsg(sqlite3 *db){
108762   const char *z;
108763   if( !db ){
108764     return sqlite3ErrStr(SQLITE_NOMEM);
108765   }
108766   if( !sqlite3SafetyCheckSickOrOk(db) ){
108767     return sqlite3ErrStr(SQLITE_MISUSE_BKPT);
108768   }
108769   sqlite3_mutex_enter(db->mutex);
108770   if( db->mallocFailed ){
108771     z = sqlite3ErrStr(SQLITE_NOMEM);
108772   }else{
108773     z = (char*)sqlite3_value_text(db->pErr);
108774     assert( !db->mallocFailed );
108775     if( z==0 ){
108776       z = sqlite3ErrStr(db->errCode);
108777     }
108778   }
108779   sqlite3_mutex_leave(db->mutex);
108780   return z;
108781 }
108782
108783 #ifndef SQLITE_OMIT_UTF16
108784 /*
108785 ** Return UTF-16 encoded English language explanation of the most recent
108786 ** error.
108787 */
108788 SQLITE_API const void *sqlite3_errmsg16(sqlite3 *db){
108789   static const u16 outOfMem[] = {
108790     'o', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0
108791   };
108792   static const u16 misuse[] = {
108793     'l', 'i', 'b', 'r', 'a', 'r', 'y', ' ', 
108794     'r', 'o', 'u', 't', 'i', 'n', 'e', ' ', 
108795     'c', 'a', 'l', 'l', 'e', 'd', ' ', 
108796     'o', 'u', 't', ' ', 
108797     'o', 'f', ' ', 
108798     's', 'e', 'q', 'u', 'e', 'n', 'c', 'e', 0
108799   };
108800
108801   const void *z;
108802   if( !db ){
108803     return (void *)outOfMem;
108804   }
108805   if( !sqlite3SafetyCheckSickOrOk(db) ){
108806     return (void *)misuse;
108807   }
108808   sqlite3_mutex_enter(db->mutex);
108809   if( db->mallocFailed ){
108810     z = (void *)outOfMem;
108811   }else{
108812     z = sqlite3_value_text16(db->pErr);
108813     if( z==0 ){
108814       sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode),
108815            SQLITE_UTF8, SQLITE_STATIC);
108816       z = sqlite3_value_text16(db->pErr);
108817     }
108818     /* A malloc() may have failed within the call to sqlite3_value_text16()
108819     ** above. If this is the case, then the db->mallocFailed flag needs to
108820     ** be cleared before returning. Do this directly, instead of via
108821     ** sqlite3ApiExit(), to avoid setting the database handle error message.
108822     */
108823     db->mallocFailed = 0;
108824   }
108825   sqlite3_mutex_leave(db->mutex);
108826   return z;
108827 }
108828 #endif /* SQLITE_OMIT_UTF16 */
108829
108830 /*
108831 ** Return the most recent error code generated by an SQLite routine. If NULL is
108832 ** passed to this function, we assume a malloc() failed during sqlite3_open().
108833 */
108834 SQLITE_API int sqlite3_errcode(sqlite3 *db){
108835   if( db && !sqlite3SafetyCheckSickOrOk(db) ){
108836     return SQLITE_MISUSE_BKPT;
108837   }
108838   if( !db || db->mallocFailed ){
108839     return SQLITE_NOMEM;
108840   }
108841   return db->errCode & db->errMask;
108842 }
108843 SQLITE_API int sqlite3_extended_errcode(sqlite3 *db){
108844   if( db && !sqlite3SafetyCheckSickOrOk(db) ){
108845     return SQLITE_MISUSE_BKPT;
108846   }
108847   if( !db || db->mallocFailed ){
108848     return SQLITE_NOMEM;
108849   }
108850   return db->errCode;
108851 }
108852
108853 /*
108854 ** Create a new collating function for database "db".  The name is zName
108855 ** and the encoding is enc.
108856 */
108857 static int createCollation(
108858   sqlite3* db,
108859   const char *zName, 
108860   u8 enc,
108861   u8 collType,
108862   void* pCtx,
108863   int(*xCompare)(void*,int,const void*,int,const void*),
108864   void(*xDel)(void*)
108865 ){
108866   CollSeq *pColl;
108867   int enc2;
108868   int nName = sqlite3Strlen30(zName);
108869   
108870   assert( sqlite3_mutex_held(db->mutex) );
108871
108872   /* If SQLITE_UTF16 is specified as the encoding type, transform this
108873   ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
108874   ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
108875   */
108876   enc2 = enc;
108877   testcase( enc2==SQLITE_UTF16 );
108878   testcase( enc2==SQLITE_UTF16_ALIGNED );
108879   if( enc2==SQLITE_UTF16 || enc2==SQLITE_UTF16_ALIGNED ){
108880     enc2 = SQLITE_UTF16NATIVE;
108881   }
108882   if( enc2<SQLITE_UTF8 || enc2>SQLITE_UTF16BE ){
108883     return SQLITE_MISUSE_BKPT;
108884   }
108885
108886   /* Check if this call is removing or replacing an existing collation 
108887   ** sequence. If so, and there are active VMs, return busy. If there
108888   ** are no active VMs, invalidate any pre-compiled statements.
108889   */
108890   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 0);
108891   if( pColl && pColl->xCmp ){
108892     if( db->activeVdbeCnt ){
108893       sqlite3Error(db, SQLITE_BUSY, 
108894         "unable to delete/modify collation sequence due to active statements");
108895       return SQLITE_BUSY;
108896     }
108897     sqlite3ExpirePreparedStatements(db);
108898
108899     /* If collation sequence pColl was created directly by a call to
108900     ** sqlite3_create_collation, and not generated by synthCollSeq(),
108901     ** then any copies made by synthCollSeq() need to be invalidated.
108902     ** Also, collation destructor - CollSeq.xDel() - function may need
108903     ** to be called.
108904     */ 
108905     if( (pColl->enc & ~SQLITE_UTF16_ALIGNED)==enc2 ){
108906       CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName, nName);
108907       int j;
108908       for(j=0; j<3; j++){
108909         CollSeq *p = &aColl[j];
108910         if( p->enc==pColl->enc ){
108911           if( p->xDel ){
108912             p->xDel(p->pUser);
108913           }
108914           p->xCmp = 0;
108915         }
108916       }
108917     }
108918   }
108919
108920   pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 1);
108921   if( pColl==0 ) return SQLITE_NOMEM;
108922   pColl->xCmp = xCompare;
108923   pColl->pUser = pCtx;
108924   pColl->xDel = xDel;
108925   pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED));
108926   pColl->type = collType;
108927   sqlite3Error(db, SQLITE_OK, 0);
108928   return SQLITE_OK;
108929 }
108930
108931
108932 /*
108933 ** This array defines hard upper bounds on limit values.  The
108934 ** initializer must be kept in sync with the SQLITE_LIMIT_*
108935 ** #defines in sqlite3.h.
108936 */
108937 static const int aHardLimit[] = {
108938   SQLITE_MAX_LENGTH,
108939   SQLITE_MAX_SQL_LENGTH,
108940   SQLITE_MAX_COLUMN,
108941   SQLITE_MAX_EXPR_DEPTH,
108942   SQLITE_MAX_COMPOUND_SELECT,
108943   SQLITE_MAX_VDBE_OP,
108944   SQLITE_MAX_FUNCTION_ARG,
108945   SQLITE_MAX_ATTACHED,
108946   SQLITE_MAX_LIKE_PATTERN_LENGTH,
108947   SQLITE_MAX_VARIABLE_NUMBER,
108948   SQLITE_MAX_TRIGGER_DEPTH,
108949 };
108950
108951 /*
108952 ** Make sure the hard limits are set to reasonable values
108953 */
108954 #if SQLITE_MAX_LENGTH<100
108955 # error SQLITE_MAX_LENGTH must be at least 100
108956 #endif
108957 #if SQLITE_MAX_SQL_LENGTH<100
108958 # error SQLITE_MAX_SQL_LENGTH must be at least 100
108959 #endif
108960 #if SQLITE_MAX_SQL_LENGTH>SQLITE_MAX_LENGTH
108961 # error SQLITE_MAX_SQL_LENGTH must not be greater than SQLITE_MAX_LENGTH
108962 #endif
108963 #if SQLITE_MAX_COMPOUND_SELECT<2
108964 # error SQLITE_MAX_COMPOUND_SELECT must be at least 2
108965 #endif
108966 #if SQLITE_MAX_VDBE_OP<40
108967 # error SQLITE_MAX_VDBE_OP must be at least 40
108968 #endif
108969 #if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>1000
108970 # error SQLITE_MAX_FUNCTION_ARG must be between 0 and 1000
108971 #endif
108972 #if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>62
108973 # error SQLITE_MAX_ATTACHED must be between 0 and 62
108974 #endif
108975 #if SQLITE_MAX_LIKE_PATTERN_LENGTH<1
108976 # error SQLITE_MAX_LIKE_PATTERN_LENGTH must be at least 1
108977 #endif
108978 #if SQLITE_MAX_COLUMN>32767
108979 # error SQLITE_MAX_COLUMN must not exceed 32767
108980 #endif
108981 #if SQLITE_MAX_TRIGGER_DEPTH<1
108982 # error SQLITE_MAX_TRIGGER_DEPTH must be at least 1
108983 #endif
108984
108985
108986 /*
108987 ** Change the value of a limit.  Report the old value.
108988 ** If an invalid limit index is supplied, report -1.
108989 ** Make no changes but still report the old value if the
108990 ** new limit is negative.
108991 **
108992 ** A new lower limit does not shrink existing constructs.
108993 ** It merely prevents new constructs that exceed the limit
108994 ** from forming.
108995 */
108996 SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){
108997   int oldLimit;
108998
108999
109000   /* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME
109001   ** there is a hard upper bound set at compile-time by a C preprocessor
109002   ** macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to
109003   ** "_MAX_".)
109004   */
109005   assert( aHardLimit[SQLITE_LIMIT_LENGTH]==SQLITE_MAX_LENGTH );
109006   assert( aHardLimit[SQLITE_LIMIT_SQL_LENGTH]==SQLITE_MAX_SQL_LENGTH );
109007   assert( aHardLimit[SQLITE_LIMIT_COLUMN]==SQLITE_MAX_COLUMN );
109008   assert( aHardLimit[SQLITE_LIMIT_EXPR_DEPTH]==SQLITE_MAX_EXPR_DEPTH );
109009   assert( aHardLimit[SQLITE_LIMIT_COMPOUND_SELECT]==SQLITE_MAX_COMPOUND_SELECT);
109010   assert( aHardLimit[SQLITE_LIMIT_VDBE_OP]==SQLITE_MAX_VDBE_OP );
109011   assert( aHardLimit[SQLITE_LIMIT_FUNCTION_ARG]==SQLITE_MAX_FUNCTION_ARG );
109012   assert( aHardLimit[SQLITE_LIMIT_ATTACHED]==SQLITE_MAX_ATTACHED );
109013   assert( aHardLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]==
109014                                                SQLITE_MAX_LIKE_PATTERN_LENGTH );
109015   assert( aHardLimit[SQLITE_LIMIT_VARIABLE_NUMBER]==SQLITE_MAX_VARIABLE_NUMBER);
109016   assert( aHardLimit[SQLITE_LIMIT_TRIGGER_DEPTH]==SQLITE_MAX_TRIGGER_DEPTH );
109017   assert( SQLITE_LIMIT_TRIGGER_DEPTH==(SQLITE_N_LIMIT-1) );
109018
109019
109020   if( limitId<0 || limitId>=SQLITE_N_LIMIT ){
109021     return -1;
109022   }
109023   oldLimit = db->aLimit[limitId];
109024   if( newLimit>=0 ){                   /* IMP: R-52476-28732 */
109025     if( newLimit>aHardLimit[limitId] ){
109026       newLimit = aHardLimit[limitId];  /* IMP: R-51463-25634 */
109027     }
109028     db->aLimit[limitId] = newLimit;
109029   }
109030   return oldLimit;                     /* IMP: R-53341-35419 */
109031 }
109032
109033 /*
109034 ** This routine does the work of opening a database on behalf of
109035 ** sqlite3_open() and sqlite3_open16(). The database filename "zFilename"  
109036 ** is UTF-8 encoded.
109037 */
109038 static int openDatabase(
109039   const char *zFilename, /* Database filename UTF-8 encoded */
109040   sqlite3 **ppDb,        /* OUT: Returned database handle */
109041   unsigned flags,        /* Operational flags */
109042   const char *zVfs       /* Name of the VFS to use */
109043 ){
109044   sqlite3 *db;
109045   int rc;
109046   int isThreadsafe;
109047
109048   *ppDb = 0;
109049 #ifndef SQLITE_OMIT_AUTOINIT
109050   rc = sqlite3_initialize();
109051   if( rc ) return rc;
109052 #endif
109053
109054   /* Only allow sensible combinations of bits in the flags argument.  
109055   ** Throw an error if any non-sense combination is used.  If we
109056   ** do not block illegal combinations here, it could trigger
109057   ** assert() statements in deeper layers.  Sensible combinations
109058   ** are:
109059   **
109060   **  1:  SQLITE_OPEN_READONLY
109061   **  2:  SQLITE_OPEN_READWRITE
109062   **  6:  SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
109063   */
109064   assert( SQLITE_OPEN_READONLY  == 0x01 );
109065   assert( SQLITE_OPEN_READWRITE == 0x02 );
109066   assert( SQLITE_OPEN_CREATE    == 0x04 );
109067   testcase( (1<<(flags&7))==0x02 ); /* READONLY */
109068   testcase( (1<<(flags&7))==0x04 ); /* READWRITE */
109069   testcase( (1<<(flags&7))==0x40 ); /* READWRITE | CREATE */
109070   if( ((1<<(flags&7)) & 0x46)==0 ) return SQLITE_MISUSE;
109071
109072   if( sqlite3GlobalConfig.bCoreMutex==0 ){
109073     isThreadsafe = 0;
109074   }else if( flags & SQLITE_OPEN_NOMUTEX ){
109075     isThreadsafe = 0;
109076   }else if( flags & SQLITE_OPEN_FULLMUTEX ){
109077     isThreadsafe = 1;
109078   }else{
109079     isThreadsafe = sqlite3GlobalConfig.bFullMutex;
109080   }
109081   if( flags & SQLITE_OPEN_PRIVATECACHE ){
109082     flags &= ~SQLITE_OPEN_SHAREDCACHE;
109083   }else if( sqlite3GlobalConfig.sharedCacheEnabled ){
109084     flags |= SQLITE_OPEN_SHAREDCACHE;
109085   }
109086
109087   /* Remove harmful bits from the flags parameter
109088   **
109089   ** The SQLITE_OPEN_NOMUTEX and SQLITE_OPEN_FULLMUTEX flags were
109090   ** dealt with in the previous code block.  Besides these, the only
109091   ** valid input flags for sqlite3_open_v2() are SQLITE_OPEN_READONLY,
109092   ** SQLITE_OPEN_READWRITE, SQLITE_OPEN_CREATE, SQLITE_OPEN_SHAREDCACHE,
109093   ** SQLITE_OPEN_PRIVATECACHE, and some reserved bits.  Silently mask
109094   ** off all other flags.
109095   */
109096   flags &=  ~( SQLITE_OPEN_DELETEONCLOSE |
109097                SQLITE_OPEN_EXCLUSIVE |
109098                SQLITE_OPEN_MAIN_DB |
109099                SQLITE_OPEN_TEMP_DB | 
109100                SQLITE_OPEN_TRANSIENT_DB | 
109101                SQLITE_OPEN_MAIN_JOURNAL | 
109102                SQLITE_OPEN_TEMP_JOURNAL | 
109103                SQLITE_OPEN_SUBJOURNAL | 
109104                SQLITE_OPEN_MASTER_JOURNAL |
109105                SQLITE_OPEN_NOMUTEX |
109106                SQLITE_OPEN_FULLMUTEX |
109107                SQLITE_OPEN_WAL
109108              );
109109
109110   /* Allocate the sqlite data structure */
109111   db = sqlite3MallocZero( sizeof(sqlite3) );
109112   if( db==0 ) goto opendb_out;
109113   if( isThreadsafe ){
109114     db->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
109115     if( db->mutex==0 ){
109116       sqlite3_free(db);
109117       db = 0;
109118       goto opendb_out;
109119     }
109120   }
109121   sqlite3_mutex_enter(db->mutex);
109122   db->errMask = 0xff;
109123   db->nDb = 2;
109124   db->magic = SQLITE_MAGIC_BUSY;
109125   db->aDb = db->aDbStatic;
109126
109127   assert( sizeof(db->aLimit)==sizeof(aHardLimit) );
109128   memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit));
109129   db->autoCommit = 1;
109130   db->nextAutovac = -1;
109131   db->nextPagesize = 0;
109132   db->flags |= SQLITE_ShortColNames | SQLITE_AutoIndex | SQLITE_EnableTrigger
109133 #if SQLITE_DEFAULT_FILE_FORMAT<4
109134                  | SQLITE_LegacyFileFmt
109135 #endif
109136 #ifdef SQLITE_ENABLE_LOAD_EXTENSION
109137                  | SQLITE_LoadExtension
109138 #endif
109139 #if SQLITE_DEFAULT_RECURSIVE_TRIGGERS
109140                  | SQLITE_RecTriggers
109141 #endif
109142 #if defined(SQLITE_DEFAULT_FOREIGN_KEYS) && SQLITE_DEFAULT_FOREIGN_KEYS
109143                  | SQLITE_ForeignKeys
109144 #endif
109145       ;
109146   sqlite3HashInit(&db->aCollSeq);
109147 #ifndef SQLITE_OMIT_VIRTUALTABLE
109148   sqlite3HashInit(&db->aModule);
109149 #endif
109150
109151   db->pVfs = sqlite3_vfs_find(zVfs);
109152   if( !db->pVfs ){
109153     rc = SQLITE_ERROR;
109154     sqlite3Error(db, rc, "no such vfs: %s", zVfs);
109155     goto opendb_out;
109156   }
109157
109158   /* Add the default collation sequence BINARY. BINARY works for both UTF-8
109159   ** and UTF-16, so add a version for each to avoid any unnecessary
109160   ** conversions. The only error that can occur here is a malloc() failure.
109161   */
109162   createCollation(db, "BINARY", SQLITE_UTF8, SQLITE_COLL_BINARY, 0,
109163                   binCollFunc, 0);
109164   createCollation(db, "BINARY", SQLITE_UTF16BE, SQLITE_COLL_BINARY, 0,
109165                   binCollFunc, 0);
109166   createCollation(db, "BINARY", SQLITE_UTF16LE, SQLITE_COLL_BINARY, 0,
109167                   binCollFunc, 0);
109168   createCollation(db, "RTRIM", SQLITE_UTF8, SQLITE_COLL_USER, (void*)1,
109169                   binCollFunc, 0);
109170   if( db->mallocFailed ){
109171     goto opendb_out;
109172   }
109173   db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
109174   assert( db->pDfltColl!=0 );
109175
109176   /* Also add a UTF-8 case-insensitive collation sequence. */
109177   createCollation(db, "NOCASE", SQLITE_UTF8, SQLITE_COLL_NOCASE, 0,
109178                   nocaseCollatingFunc, 0);
109179
109180   /* Open the backend database driver */
109181   db->openFlags = flags;
109182   rc = sqlite3BtreeOpen(zFilename, db, &db->aDb[0].pBt, 0,
109183                         flags | SQLITE_OPEN_MAIN_DB);
109184   if( rc!=SQLITE_OK ){
109185     if( rc==SQLITE_IOERR_NOMEM ){
109186       rc = SQLITE_NOMEM;
109187     }
109188     sqlite3Error(db, rc, 0);
109189     goto opendb_out;
109190   }
109191   db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt);
109192   db->aDb[1].pSchema = sqlite3SchemaGet(db, 0);
109193
109194
109195   /* The default safety_level for the main database is 'full'; for the temp
109196   ** database it is 'NONE'. This matches the pager layer defaults.  
109197   */
109198   db->aDb[0].zName = "main";
109199   db->aDb[0].safety_level = 3;
109200   db->aDb[1].zName = "temp";
109201   db->aDb[1].safety_level = 1;
109202
109203   db->magic = SQLITE_MAGIC_OPEN;
109204   if( db->mallocFailed ){
109205     goto opendb_out;
109206   }
109207
109208   /* Register all built-in functions, but do not attempt to read the
109209   ** database schema yet. This is delayed until the first time the database
109210   ** is accessed.
109211   */
109212   sqlite3Error(db, SQLITE_OK, 0);
109213   sqlite3RegisterBuiltinFunctions(db);
109214
109215   /* Load automatic extensions - extensions that have been registered
109216   ** using the sqlite3_automatic_extension() API.
109217   */
109218   sqlite3AutoLoadExtensions(db);
109219   rc = sqlite3_errcode(db);
109220   if( rc!=SQLITE_OK ){
109221     goto opendb_out;
109222   }
109223
109224 #ifdef SQLITE_ENABLE_FTS1
109225   if( !db->mallocFailed ){
109226     extern int sqlite3Fts1Init(sqlite3*);
109227     rc = sqlite3Fts1Init(db);
109228   }
109229 #endif
109230
109231 #ifdef SQLITE_ENABLE_FTS2
109232   if( !db->mallocFailed && rc==SQLITE_OK ){
109233     extern int sqlite3Fts2Init(sqlite3*);
109234     rc = sqlite3Fts2Init(db);
109235   }
109236 #endif
109237
109238 #ifdef SQLITE_ENABLE_FTS3
109239   if( !db->mallocFailed && rc==SQLITE_OK ){
109240     rc = sqlite3Fts3Init(db);
109241   }
109242 #endif
109243
109244 #ifdef SQLITE_ENABLE_ICU
109245   if( !db->mallocFailed && rc==SQLITE_OK ){
109246     rc = sqlite3IcuInit(db);
109247   }
109248 #endif
109249
109250 #ifdef SQLITE_ENABLE_RTREE
109251   if( !db->mallocFailed && rc==SQLITE_OK){
109252     rc = sqlite3RtreeInit(db);
109253   }
109254 #endif
109255
109256   sqlite3Error(db, rc, 0);
109257
109258   /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking
109259   ** mode.  -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking
109260   ** mode.  Doing nothing at all also makes NORMAL the default.
109261   */
109262 #ifdef SQLITE_DEFAULT_LOCKING_MODE
109263   db->dfltLockMode = SQLITE_DEFAULT_LOCKING_MODE;
109264   sqlite3PagerLockingMode(sqlite3BtreePager(db->aDb[0].pBt),
109265                           SQLITE_DEFAULT_LOCKING_MODE);
109266 #endif
109267
109268   /* Enable the lookaside-malloc subsystem */
109269   setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside,
109270                         sqlite3GlobalConfig.nLookaside);
109271
109272   sqlite3_wal_autocheckpoint(db, SQLITE_DEFAULT_WAL_AUTOCHECKPOINT);
109273
109274 opendb_out:
109275   if( db ){
109276     assert( db->mutex!=0 || isThreadsafe==0 || sqlite3GlobalConfig.bFullMutex==0 );
109277     sqlite3_mutex_leave(db->mutex);
109278   }
109279   rc = sqlite3_errcode(db);
109280   if( rc==SQLITE_NOMEM ){
109281     sqlite3_close(db);
109282     db = 0;
109283   }else if( rc!=SQLITE_OK ){
109284     db->magic = SQLITE_MAGIC_SICK;
109285   }
109286   *ppDb = db;
109287   return sqlite3ApiExit(0, rc);
109288 }
109289
109290 /*
109291 ** Open a new database handle.
109292 */
109293 SQLITE_API int sqlite3_open(
109294   const char *zFilename, 
109295   sqlite3 **ppDb 
109296 ){
109297   return openDatabase(zFilename, ppDb,
109298                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
109299 }
109300 SQLITE_API int sqlite3_open_v2(
109301   const char *filename,   /* Database filename (UTF-8) */
109302   sqlite3 **ppDb,         /* OUT: SQLite db handle */
109303   int flags,              /* Flags */
109304   const char *zVfs        /* Name of VFS module to use */
109305 ){
109306   return openDatabase(filename, ppDb, flags, zVfs);
109307 }
109308
109309 #ifndef SQLITE_OMIT_UTF16
109310 /*
109311 ** Open a new database handle.
109312 */
109313 SQLITE_API int sqlite3_open16(
109314   const void *zFilename, 
109315   sqlite3 **ppDb
109316 ){
109317   char const *zFilename8;   /* zFilename encoded in UTF-8 instead of UTF-16 */
109318   sqlite3_value *pVal;
109319   int rc;
109320
109321   assert( zFilename );
109322   assert( ppDb );
109323   *ppDb = 0;
109324 #ifndef SQLITE_OMIT_AUTOINIT
109325   rc = sqlite3_initialize();
109326   if( rc ) return rc;
109327 #endif
109328   pVal = sqlite3ValueNew(0);
109329   sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
109330   zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
109331   if( zFilename8 ){
109332     rc = openDatabase(zFilename8, ppDb,
109333                       SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
109334     assert( *ppDb || rc==SQLITE_NOMEM );
109335     if( rc==SQLITE_OK && !DbHasProperty(*ppDb, 0, DB_SchemaLoaded) ){
109336       ENC(*ppDb) = SQLITE_UTF16NATIVE;
109337     }
109338   }else{
109339     rc = SQLITE_NOMEM;
109340   }
109341   sqlite3ValueFree(pVal);
109342
109343   return sqlite3ApiExit(0, rc);
109344 }
109345 #endif /* SQLITE_OMIT_UTF16 */
109346
109347 /*
109348 ** Register a new collation sequence with the database handle db.
109349 */
109350 SQLITE_API int sqlite3_create_collation(
109351   sqlite3* db, 
109352   const char *zName, 
109353   int enc, 
109354   void* pCtx,
109355   int(*xCompare)(void*,int,const void*,int,const void*)
109356 ){
109357   int rc;
109358   sqlite3_mutex_enter(db->mutex);
109359   assert( !db->mallocFailed );
109360   rc = createCollation(db, zName, (u8)enc, SQLITE_COLL_USER, pCtx, xCompare, 0);
109361   rc = sqlite3ApiExit(db, rc);
109362   sqlite3_mutex_leave(db->mutex);
109363   return rc;
109364 }
109365
109366 /*
109367 ** Register a new collation sequence with the database handle db.
109368 */
109369 SQLITE_API int sqlite3_create_collation_v2(
109370   sqlite3* db, 
109371   const char *zName, 
109372   int enc, 
109373   void* pCtx,
109374   int(*xCompare)(void*,int,const void*,int,const void*),
109375   void(*xDel)(void*)
109376 ){
109377   int rc;
109378   sqlite3_mutex_enter(db->mutex);
109379   assert( !db->mallocFailed );
109380   rc = createCollation(db, zName, (u8)enc, SQLITE_COLL_USER, pCtx, xCompare, xDel);
109381   rc = sqlite3ApiExit(db, rc);
109382   sqlite3_mutex_leave(db->mutex);
109383   return rc;
109384 }
109385
109386 #ifndef SQLITE_OMIT_UTF16
109387 /*
109388 ** Register a new collation sequence with the database handle db.
109389 */
109390 SQLITE_API int sqlite3_create_collation16(
109391   sqlite3* db, 
109392   const void *zName,
109393   int enc, 
109394   void* pCtx,
109395   int(*xCompare)(void*,int,const void*,int,const void*)
109396 ){
109397   int rc = SQLITE_OK;
109398   char *zName8;
109399   sqlite3_mutex_enter(db->mutex);
109400   assert( !db->mallocFailed );
109401   zName8 = sqlite3Utf16to8(db, zName, -1, SQLITE_UTF16NATIVE);
109402   if( zName8 ){
109403     rc = createCollation(db, zName8, (u8)enc, SQLITE_COLL_USER, pCtx, xCompare, 0);
109404     sqlite3DbFree(db, zName8);
109405   }
109406   rc = sqlite3ApiExit(db, rc);
109407   sqlite3_mutex_leave(db->mutex);
109408   return rc;
109409 }
109410 #endif /* SQLITE_OMIT_UTF16 */
109411
109412 /*
109413 ** Register a collation sequence factory callback with the database handle
109414 ** db. Replace any previously installed collation sequence factory.
109415 */
109416 SQLITE_API int sqlite3_collation_needed(
109417   sqlite3 *db, 
109418   void *pCollNeededArg, 
109419   void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
109420 ){
109421   sqlite3_mutex_enter(db->mutex);
109422   db->xCollNeeded = xCollNeeded;
109423   db->xCollNeeded16 = 0;
109424   db->pCollNeededArg = pCollNeededArg;
109425   sqlite3_mutex_leave(db->mutex);
109426   return SQLITE_OK;
109427 }
109428
109429 #ifndef SQLITE_OMIT_UTF16
109430 /*
109431 ** Register a collation sequence factory callback with the database handle
109432 ** db. Replace any previously installed collation sequence factory.
109433 */
109434 SQLITE_API int sqlite3_collation_needed16(
109435   sqlite3 *db, 
109436   void *pCollNeededArg, 
109437   void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
109438 ){
109439   sqlite3_mutex_enter(db->mutex);
109440   db->xCollNeeded = 0;
109441   db->xCollNeeded16 = xCollNeeded16;
109442   db->pCollNeededArg = pCollNeededArg;
109443   sqlite3_mutex_leave(db->mutex);
109444   return SQLITE_OK;
109445 }
109446 #endif /* SQLITE_OMIT_UTF16 */
109447
109448 #ifndef SQLITE_OMIT_DEPRECATED
109449 /*
109450 ** This function is now an anachronism. It used to be used to recover from a
109451 ** malloc() failure, but SQLite now does this automatically.
109452 */
109453 SQLITE_API int sqlite3_global_recover(void){
109454   return SQLITE_OK;
109455 }
109456 #endif
109457
109458 /*
109459 ** Test to see whether or not the database connection is in autocommit
109460 ** mode.  Return TRUE if it is and FALSE if not.  Autocommit mode is on
109461 ** by default.  Autocommit is disabled by a BEGIN statement and reenabled
109462 ** by the next COMMIT or ROLLBACK.
109463 **
109464 ******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
109465 */
109466 SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){
109467   return db->autoCommit;
109468 }
109469
109470 /*
109471 ** The following routines are subtitutes for constants SQLITE_CORRUPT,
109472 ** SQLITE_MISUSE, SQLITE_CANTOPEN, SQLITE_IOERR and possibly other error
109473 ** constants.  They server two purposes:
109474 **
109475 **   1.  Serve as a convenient place to set a breakpoint in a debugger
109476 **       to detect when version error conditions occurs.
109477 **
109478 **   2.  Invoke sqlite3_log() to provide the source code location where
109479 **       a low-level error is first detected.
109480 */
109481 SQLITE_PRIVATE int sqlite3CorruptError(int lineno){
109482   testcase( sqlite3GlobalConfig.xLog!=0 );
109483   sqlite3_log(SQLITE_CORRUPT,
109484               "database corruption at line %d of [%.10s]",
109485               lineno, 20+sqlite3_sourceid());
109486   return SQLITE_CORRUPT;
109487 }
109488 SQLITE_PRIVATE int sqlite3MisuseError(int lineno){
109489   testcase( sqlite3GlobalConfig.xLog!=0 );
109490   sqlite3_log(SQLITE_MISUSE, 
109491               "misuse at line %d of [%.10s]",
109492               lineno, 20+sqlite3_sourceid());
109493   return SQLITE_MISUSE;
109494 }
109495 SQLITE_PRIVATE int sqlite3CantopenError(int lineno){
109496   testcase( sqlite3GlobalConfig.xLog!=0 );
109497   sqlite3_log(SQLITE_CANTOPEN, 
109498               "cannot open file at line %d of [%.10s]",
109499               lineno, 20+sqlite3_sourceid());
109500   return SQLITE_CANTOPEN;
109501 }
109502
109503
109504 #ifndef SQLITE_OMIT_DEPRECATED
109505 /*
109506 ** This is a convenience routine that makes sure that all thread-specific
109507 ** data for this thread has been deallocated.
109508 **
109509 ** SQLite no longer uses thread-specific data so this routine is now a
109510 ** no-op.  It is retained for historical compatibility.
109511 */
109512 SQLITE_API void sqlite3_thread_cleanup(void){
109513 }
109514 #endif
109515
109516 /*
109517 ** Return meta information about a specific column of a database table.
109518 ** See comment in sqlite3.h (sqlite.h.in) for details.
109519 */
109520 #ifdef SQLITE_ENABLE_COLUMN_METADATA
109521 SQLITE_API int sqlite3_table_column_metadata(
109522   sqlite3 *db,                /* Connection handle */
109523   const char *zDbName,        /* Database name or NULL */
109524   const char *zTableName,     /* Table name */
109525   const char *zColumnName,    /* Column name */
109526   char const **pzDataType,    /* OUTPUT: Declared data type */
109527   char const **pzCollSeq,     /* OUTPUT: Collation sequence name */
109528   int *pNotNull,              /* OUTPUT: True if NOT NULL constraint exists */
109529   int *pPrimaryKey,           /* OUTPUT: True if column part of PK */
109530   int *pAutoinc               /* OUTPUT: True if column is auto-increment */
109531 ){
109532   int rc;
109533   char *zErrMsg = 0;
109534   Table *pTab = 0;
109535   Column *pCol = 0;
109536   int iCol;
109537
109538   char const *zDataType = 0;
109539   char const *zCollSeq = 0;
109540   int notnull = 0;
109541   int primarykey = 0;
109542   int autoinc = 0;
109543
109544   /* Ensure the database schema has been loaded */
109545   sqlite3_mutex_enter(db->mutex);
109546   sqlite3BtreeEnterAll(db);
109547   rc = sqlite3Init(db, &zErrMsg);
109548   if( SQLITE_OK!=rc ){
109549     goto error_out;
109550   }
109551
109552   /* Locate the table in question */
109553   pTab = sqlite3FindTable(db, zTableName, zDbName);
109554   if( !pTab || pTab->pSelect ){
109555     pTab = 0;
109556     goto error_out;
109557   }
109558
109559   /* Find the column for which info is requested */
109560   if( sqlite3IsRowid(zColumnName) ){
109561     iCol = pTab->iPKey;
109562     if( iCol>=0 ){
109563       pCol = &pTab->aCol[iCol];
109564     }
109565   }else{
109566     for(iCol=0; iCol<pTab->nCol; iCol++){
109567       pCol = &pTab->aCol[iCol];
109568       if( 0==sqlite3StrICmp(pCol->zName, zColumnName) ){
109569         break;
109570       }
109571     }
109572     if( iCol==pTab->nCol ){
109573       pTab = 0;
109574       goto error_out;
109575     }
109576   }
109577
109578   /* The following block stores the meta information that will be returned
109579   ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey
109580   ** and autoinc. At this point there are two possibilities:
109581   ** 
109582   **     1. The specified column name was rowid", "oid" or "_rowid_" 
109583   **        and there is no explicitly declared IPK column. 
109584   **
109585   **     2. The table is not a view and the column name identified an 
109586   **        explicitly declared column. Copy meta information from *pCol.
109587   */ 
109588   if( pCol ){
109589     zDataType = pCol->zType;
109590     zCollSeq = pCol->zColl;
109591     notnull = pCol->notNull!=0;
109592     primarykey  = pCol->isPrimKey!=0;
109593     autoinc = pTab->iPKey==iCol && (pTab->tabFlags & TF_Autoincrement)!=0;
109594   }else{
109595     zDataType = "INTEGER";
109596     primarykey = 1;
109597   }
109598   if( !zCollSeq ){
109599     zCollSeq = "BINARY";
109600   }
109601
109602 error_out:
109603   sqlite3BtreeLeaveAll(db);
109604
109605   /* Whether the function call succeeded or failed, set the output parameters
109606   ** to whatever their local counterparts contain. If an error did occur,
109607   ** this has the effect of zeroing all output parameters.
109608   */
109609   if( pzDataType ) *pzDataType = zDataType;
109610   if( pzCollSeq ) *pzCollSeq = zCollSeq;
109611   if( pNotNull ) *pNotNull = notnull;
109612   if( pPrimaryKey ) *pPrimaryKey = primarykey;
109613   if( pAutoinc ) *pAutoinc = autoinc;
109614
109615   if( SQLITE_OK==rc && !pTab ){
109616     sqlite3DbFree(db, zErrMsg);
109617     zErrMsg = sqlite3MPrintf(db, "no such table column: %s.%s", zTableName,
109618         zColumnName);
109619     rc = SQLITE_ERROR;
109620   }
109621   sqlite3Error(db, rc, (zErrMsg?"%s":0), zErrMsg);
109622   sqlite3DbFree(db, zErrMsg);
109623   rc = sqlite3ApiExit(db, rc);
109624   sqlite3_mutex_leave(db->mutex);
109625   return rc;
109626 }
109627 #endif
109628
109629 /*
109630 ** Sleep for a little while.  Return the amount of time slept.
109631 */
109632 SQLITE_API int sqlite3_sleep(int ms){
109633   sqlite3_vfs *pVfs;
109634   int rc;
109635   pVfs = sqlite3_vfs_find(0);
109636   if( pVfs==0 ) return 0;
109637
109638   /* This function works in milliseconds, but the underlying OsSleep() 
109639   ** API uses microseconds. Hence the 1000's.
109640   */
109641   rc = (sqlite3OsSleep(pVfs, 1000*ms)/1000);
109642   return rc;
109643 }
109644
109645 /*
109646 ** Enable or disable the extended result codes.
109647 */
109648 SQLITE_API int sqlite3_extended_result_codes(sqlite3 *db, int onoff){
109649   sqlite3_mutex_enter(db->mutex);
109650   db->errMask = onoff ? 0xffffffff : 0xff;
109651   sqlite3_mutex_leave(db->mutex);
109652   return SQLITE_OK;
109653 }
109654
109655 /*
109656 ** Invoke the xFileControl method on a particular database.
109657 */
109658 SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){
109659   int rc = SQLITE_ERROR;
109660   int iDb;
109661   sqlite3_mutex_enter(db->mutex);
109662   if( zDbName==0 ){
109663     iDb = 0;
109664   }else{
109665     for(iDb=0; iDb<db->nDb; iDb++){
109666       if( strcmp(db->aDb[iDb].zName, zDbName)==0 ) break;
109667     }
109668   }
109669   if( iDb<db->nDb ){
109670     Btree *pBtree = db->aDb[iDb].pBt;
109671     if( pBtree ){
109672       Pager *pPager;
109673       sqlite3_file *fd;
109674       sqlite3BtreeEnter(pBtree);
109675       pPager = sqlite3BtreePager(pBtree);
109676       assert( pPager!=0 );
109677       fd = sqlite3PagerFile(pPager);
109678       assert( fd!=0 );
109679       if( op==SQLITE_FCNTL_FILE_POINTER ){
109680         *(sqlite3_file**)pArg = fd;
109681         rc = SQLITE_OK;
109682       }else if( fd->pMethods ){
109683         rc = sqlite3OsFileControl(fd, op, pArg);
109684       }else{
109685         rc = SQLITE_NOTFOUND;
109686       }
109687       sqlite3BtreeLeave(pBtree);
109688     }
109689   }
109690   sqlite3_mutex_leave(db->mutex);
109691   return rc;   
109692 }
109693
109694 /*
109695 ** Interface to the testing logic.
109696 */
109697 SQLITE_API int sqlite3_test_control(int op, ...){
109698   int rc = 0;
109699 #ifndef SQLITE_OMIT_BUILTIN_TEST
109700   va_list ap;
109701   va_start(ap, op);
109702   switch( op ){
109703
109704     /*
109705     ** Save the current state of the PRNG.
109706     */
109707     case SQLITE_TESTCTRL_PRNG_SAVE: {
109708       sqlite3PrngSaveState();
109709       break;
109710     }
109711
109712     /*
109713     ** Restore the state of the PRNG to the last state saved using
109714     ** PRNG_SAVE.  If PRNG_SAVE has never before been called, then
109715     ** this verb acts like PRNG_RESET.
109716     */
109717     case SQLITE_TESTCTRL_PRNG_RESTORE: {
109718       sqlite3PrngRestoreState();
109719       break;
109720     }
109721
109722     /*
109723     ** Reset the PRNG back to its uninitialized state.  The next call
109724     ** to sqlite3_randomness() will reseed the PRNG using a single call
109725     ** to the xRandomness method of the default VFS.
109726     */
109727     case SQLITE_TESTCTRL_PRNG_RESET: {
109728       sqlite3PrngResetState();
109729       break;
109730     }
109731
109732     /*
109733     **  sqlite3_test_control(BITVEC_TEST, size, program)
109734     **
109735     ** Run a test against a Bitvec object of size.  The program argument
109736     ** is an array of integers that defines the test.  Return -1 on a
109737     ** memory allocation error, 0 on success, or non-zero for an error.
109738     ** See the sqlite3BitvecBuiltinTest() for additional information.
109739     */
109740     case SQLITE_TESTCTRL_BITVEC_TEST: {
109741       int sz = va_arg(ap, int);
109742       int *aProg = va_arg(ap, int*);
109743       rc = sqlite3BitvecBuiltinTest(sz, aProg);
109744       break;
109745     }
109746
109747     /*
109748     **  sqlite3_test_control(BENIGN_MALLOC_HOOKS, xBegin, xEnd)
109749     **
109750     ** Register hooks to call to indicate which malloc() failures 
109751     ** are benign.
109752     */
109753     case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: {
109754       typedef void (*void_function)(void);
109755       void_function xBenignBegin;
109756       void_function xBenignEnd;
109757       xBenignBegin = va_arg(ap, void_function);
109758       xBenignEnd = va_arg(ap, void_function);
109759       sqlite3BenignMallocHooks(xBenignBegin, xBenignEnd);
109760       break;
109761     }
109762
109763     /*
109764     **  sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, unsigned int X)
109765     **
109766     ** Set the PENDING byte to the value in the argument, if X>0.
109767     ** Make no changes if X==0.  Return the value of the pending byte
109768     ** as it existing before this routine was called.
109769     **
109770     ** IMPORTANT:  Changing the PENDING byte from 0x40000000 results in
109771     ** an incompatible database file format.  Changing the PENDING byte
109772     ** while any database connection is open results in undefined and
109773     ** dileterious behavior.
109774     */
109775     case SQLITE_TESTCTRL_PENDING_BYTE: {
109776       rc = PENDING_BYTE;
109777 #ifndef SQLITE_OMIT_WSD
109778       {
109779         unsigned int newVal = va_arg(ap, unsigned int);
109780         if( newVal ) sqlite3PendingByte = newVal;
109781       }
109782 #endif
109783       break;
109784     }
109785
109786     /*
109787     **  sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, int X)
109788     **
109789     ** This action provides a run-time test to see whether or not
109790     ** assert() was enabled at compile-time.  If X is true and assert()
109791     ** is enabled, then the return value is true.  If X is true and
109792     ** assert() is disabled, then the return value is zero.  If X is
109793     ** false and assert() is enabled, then the assertion fires and the
109794     ** process aborts.  If X is false and assert() is disabled, then the
109795     ** return value is zero.
109796     */
109797     case SQLITE_TESTCTRL_ASSERT: {
109798       volatile int x = 0;
109799       assert( (x = va_arg(ap,int))!=0 );
109800       rc = x;
109801       break;
109802     }
109803
109804
109805     /*
109806     **  sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, int X)
109807     **
109808     ** This action provides a run-time test to see how the ALWAYS and
109809     ** NEVER macros were defined at compile-time.
109810     **
109811     ** The return value is ALWAYS(X).  
109812     **
109813     ** The recommended test is X==2.  If the return value is 2, that means
109814     ** ALWAYS() and NEVER() are both no-op pass-through macros, which is the
109815     ** default setting.  If the return value is 1, then ALWAYS() is either
109816     ** hard-coded to true or else it asserts if its argument is false.
109817     ** The first behavior (hard-coded to true) is the case if
109818     ** SQLITE_TESTCTRL_ASSERT shows that assert() is disabled and the second
109819     ** behavior (assert if the argument to ALWAYS() is false) is the case if
109820     ** SQLITE_TESTCTRL_ASSERT shows that assert() is enabled.
109821     **
109822     ** The run-time test procedure might look something like this:
109823     **
109824     **    if( sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, 2)==2 ){
109825     **      // ALWAYS() and NEVER() are no-op pass-through macros
109826     **    }else if( sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, 1) ){
109827     **      // ALWAYS(x) asserts that x is true. NEVER(x) asserts x is false.
109828     **    }else{
109829     **      // ALWAYS(x) is a constant 1.  NEVER(x) is a constant 0.
109830     **    }
109831     */
109832     case SQLITE_TESTCTRL_ALWAYS: {
109833       int x = va_arg(ap,int);
109834       rc = ALWAYS(x);
109835       break;
109836     }
109837
109838     /*   sqlite3_test_control(SQLITE_TESTCTRL_RESERVE, sqlite3 *db, int N)
109839     **
109840     ** Set the nReserve size to N for the main database on the database
109841     ** connection db.
109842     */
109843     case SQLITE_TESTCTRL_RESERVE: {
109844       sqlite3 *db = va_arg(ap, sqlite3*);
109845       int x = va_arg(ap,int);
109846       sqlite3_mutex_enter(db->mutex);
109847       sqlite3BtreeSetPageSize(db->aDb[0].pBt, 0, x, 0);
109848       sqlite3_mutex_leave(db->mutex);
109849       break;
109850     }
109851
109852     /*  sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS, sqlite3 *db, int N)
109853     **
109854     ** Enable or disable various optimizations for testing purposes.  The 
109855     ** argument N is a bitmask of optimizations to be disabled.  For normal
109856     ** operation N should be 0.  The idea is that a test program (like the
109857     ** SQL Logic Test or SLT test module) can run the same SQL multiple times
109858     ** with various optimizations disabled to verify that the same answer
109859     ** is obtained in every case.
109860     */
109861     case SQLITE_TESTCTRL_OPTIMIZATIONS: {
109862       sqlite3 *db = va_arg(ap, sqlite3*);
109863       int x = va_arg(ap,int);
109864       db->flags = (x & SQLITE_OptMask) | (db->flags & ~SQLITE_OptMask);
109865       break;
109866     }
109867
109868 #ifdef SQLITE_N_KEYWORD
109869     /* sqlite3_test_control(SQLITE_TESTCTRL_ISKEYWORD, const char *zWord)
109870     **
109871     ** If zWord is a keyword recognized by the parser, then return the
109872     ** number of keywords.  Or if zWord is not a keyword, return 0.
109873     ** 
109874     ** This test feature is only available in the amalgamation since
109875     ** the SQLITE_N_KEYWORD macro is not defined in this file if SQLite
109876     ** is built using separate source files.
109877     */
109878     case SQLITE_TESTCTRL_ISKEYWORD: {
109879       const char *zWord = va_arg(ap, const char*);
109880       int n = sqlite3Strlen30(zWord);
109881       rc = (sqlite3KeywordCode((u8*)zWord, n)!=TK_ID) ? SQLITE_N_KEYWORD : 0;
109882       break;
109883     }
109884 #endif 
109885
109886     /* sqlite3_test_control(SQLITE_TESTCTRL_PGHDRSZ)
109887     **
109888     ** Return the size of a pcache header in bytes.
109889     */
109890     case SQLITE_TESTCTRL_PGHDRSZ: {
109891       rc = sizeof(PgHdr);
109892       break;
109893     }
109894
109895     /* sqlite3_test_control(SQLITE_TESTCTRL_SCRATCHMALLOC, sz, &pNew, pFree);
109896     **
109897     ** Pass pFree into sqlite3ScratchFree(). 
109898     ** If sz>0 then allocate a scratch buffer into pNew.  
109899     */
109900     case SQLITE_TESTCTRL_SCRATCHMALLOC: {
109901       void *pFree, **ppNew;
109902       int sz;
109903       sz = va_arg(ap, int);
109904       ppNew = va_arg(ap, void**);
109905       pFree = va_arg(ap, void*);
109906       if( sz ) *ppNew = sqlite3ScratchMalloc(sz);
109907       sqlite3ScratchFree(pFree);
109908       break;
109909     }
109910
109911   }
109912   va_end(ap);
109913 #endif /* SQLITE_OMIT_BUILTIN_TEST */
109914   return rc;
109915 }
109916
109917 /************** End of main.c ************************************************/
109918 /************** Begin file notify.c ******************************************/
109919 /*
109920 ** 2009 March 3
109921 **
109922 ** The author disclaims copyright to this source code.  In place of
109923 ** a legal notice, here is a blessing:
109924 **
109925 **    May you do good and not evil.
109926 **    May you find forgiveness for yourself and forgive others.
109927 **    May you share freely, never taking more than you give.
109928 **
109929 *************************************************************************
109930 **
109931 ** This file contains the implementation of the sqlite3_unlock_notify()
109932 ** API method and its associated functionality.
109933 */
109934
109935 /* Omit this entire file if SQLITE_ENABLE_UNLOCK_NOTIFY is not defined. */
109936 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
109937
109938 /*
109939 ** Public interfaces:
109940 **
109941 **   sqlite3ConnectionBlocked()
109942 **   sqlite3ConnectionUnlocked()
109943 **   sqlite3ConnectionClosed()
109944 **   sqlite3_unlock_notify()
109945 */
109946
109947 #define assertMutexHeld() \
109948   assert( sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)) )
109949
109950 /*
109951 ** Head of a linked list of all sqlite3 objects created by this process
109952 ** for which either sqlite3.pBlockingConnection or sqlite3.pUnlockConnection
109953 ** is not NULL. This variable may only accessed while the STATIC_MASTER
109954 ** mutex is held.
109955 */
109956 static sqlite3 *SQLITE_WSD sqlite3BlockedList = 0;
109957
109958 #ifndef NDEBUG
109959 /*
109960 ** This function is a complex assert() that verifies the following 
109961 ** properties of the blocked connections list:
109962 **
109963 **   1) Each entry in the list has a non-NULL value for either 
109964 **      pUnlockConnection or pBlockingConnection, or both.
109965 **
109966 **   2) All entries in the list that share a common value for 
109967 **      xUnlockNotify are grouped together.
109968 **
109969 **   3) If the argument db is not NULL, then none of the entries in the
109970 **      blocked connections list have pUnlockConnection or pBlockingConnection
109971 **      set to db. This is used when closing connection db.
109972 */
109973 static void checkListProperties(sqlite3 *db){
109974   sqlite3 *p;
109975   for(p=sqlite3BlockedList; p; p=p->pNextBlocked){
109976     int seen = 0;
109977     sqlite3 *p2;
109978
109979     /* Verify property (1) */
109980     assert( p->pUnlockConnection || p->pBlockingConnection );
109981
109982     /* Verify property (2) */
109983     for(p2=sqlite3BlockedList; p2!=p; p2=p2->pNextBlocked){
109984       if( p2->xUnlockNotify==p->xUnlockNotify ) seen = 1;
109985       assert( p2->xUnlockNotify==p->xUnlockNotify || !seen );
109986       assert( db==0 || p->pUnlockConnection!=db );
109987       assert( db==0 || p->pBlockingConnection!=db );
109988     }
109989   }
109990 }
109991 #else
109992 # define checkListProperties(x)
109993 #endif
109994
109995 /*
109996 ** Remove connection db from the blocked connections list. If connection
109997 ** db is not currently a part of the list, this function is a no-op.
109998 */
109999 static void removeFromBlockedList(sqlite3 *db){
110000   sqlite3 **pp;
110001   assertMutexHeld();
110002   for(pp=&sqlite3BlockedList; *pp; pp = &(*pp)->pNextBlocked){
110003     if( *pp==db ){
110004       *pp = (*pp)->pNextBlocked;
110005       break;
110006     }
110007   }
110008 }
110009
110010 /*
110011 ** Add connection db to the blocked connections list. It is assumed
110012 ** that it is not already a part of the list.
110013 */
110014 static void addToBlockedList(sqlite3 *db){
110015   sqlite3 **pp;
110016   assertMutexHeld();
110017   for(
110018     pp=&sqlite3BlockedList; 
110019     *pp && (*pp)->xUnlockNotify!=db->xUnlockNotify; 
110020     pp=&(*pp)->pNextBlocked
110021   );
110022   db->pNextBlocked = *pp;
110023   *pp = db;
110024 }
110025
110026 /*
110027 ** Obtain the STATIC_MASTER mutex.
110028 */
110029 static void enterMutex(void){
110030   sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
110031   checkListProperties(0);
110032 }
110033
110034 /*
110035 ** Release the STATIC_MASTER mutex.
110036 */
110037 static void leaveMutex(void){
110038   assertMutexHeld();
110039   checkListProperties(0);
110040   sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
110041 }
110042
110043 /*
110044 ** Register an unlock-notify callback.
110045 **
110046 ** This is called after connection "db" has attempted some operation
110047 ** but has received an SQLITE_LOCKED error because another connection
110048 ** (call it pOther) in the same process was busy using the same shared
110049 ** cache.  pOther is found by looking at db->pBlockingConnection.
110050 **
110051 ** If there is no blocking connection, the callback is invoked immediately,
110052 ** before this routine returns.
110053 **
110054 ** If pOther is already blocked on db, then report SQLITE_LOCKED, to indicate
110055 ** a deadlock.
110056 **
110057 ** Otherwise, make arrangements to invoke xNotify when pOther drops
110058 ** its locks.
110059 **
110060 ** Each call to this routine overrides any prior callbacks registered
110061 ** on the same "db".  If xNotify==0 then any prior callbacks are immediately
110062 ** cancelled.
110063 */
110064 SQLITE_API int sqlite3_unlock_notify(
110065   sqlite3 *db,
110066   void (*xNotify)(void **, int),
110067   void *pArg
110068 ){
110069   int rc = SQLITE_OK;
110070
110071   sqlite3_mutex_enter(db->mutex);
110072   enterMutex();
110073
110074   if( xNotify==0 ){
110075     removeFromBlockedList(db);
110076     db->pBlockingConnection = 0;
110077     db->pUnlockConnection = 0;
110078     db->xUnlockNotify = 0;
110079     db->pUnlockArg = 0;
110080   }else if( 0==db->pBlockingConnection ){
110081     /* The blocking transaction has been concluded. Or there never was a 
110082     ** blocking transaction. In either case, invoke the notify callback
110083     ** immediately. 
110084     */
110085     xNotify(&pArg, 1);
110086   }else{
110087     sqlite3 *p;
110088
110089     for(p=db->pBlockingConnection; p && p!=db; p=p->pUnlockConnection){}
110090     if( p ){
110091       rc = SQLITE_LOCKED;              /* Deadlock detected. */
110092     }else{
110093       db->pUnlockConnection = db->pBlockingConnection;
110094       db->xUnlockNotify = xNotify;
110095       db->pUnlockArg = pArg;
110096       removeFromBlockedList(db);
110097       addToBlockedList(db);
110098     }
110099   }
110100
110101   leaveMutex();
110102   assert( !db->mallocFailed );
110103   sqlite3Error(db, rc, (rc?"database is deadlocked":0));
110104   sqlite3_mutex_leave(db->mutex);
110105   return rc;
110106 }
110107
110108 /*
110109 ** This function is called while stepping or preparing a statement 
110110 ** associated with connection db. The operation will return SQLITE_LOCKED
110111 ** to the user because it requires a lock that will not be available
110112 ** until connection pBlocker concludes its current transaction.
110113 */
110114 SQLITE_PRIVATE void sqlite3ConnectionBlocked(sqlite3 *db, sqlite3 *pBlocker){
110115   enterMutex();
110116   if( db->pBlockingConnection==0 && db->pUnlockConnection==0 ){
110117     addToBlockedList(db);
110118   }
110119   db->pBlockingConnection = pBlocker;
110120   leaveMutex();
110121 }
110122
110123 /*
110124 ** This function is called when
110125 ** the transaction opened by database db has just finished. Locks held 
110126 ** by database connection db have been released.
110127 **
110128 ** This function loops through each entry in the blocked connections
110129 ** list and does the following:
110130 **
110131 **   1) If the sqlite3.pBlockingConnection member of a list entry is
110132 **      set to db, then set pBlockingConnection=0.
110133 **
110134 **   2) If the sqlite3.pUnlockConnection member of a list entry is
110135 **      set to db, then invoke the configured unlock-notify callback and
110136 **      set pUnlockConnection=0.
110137 **
110138 **   3) If the two steps above mean that pBlockingConnection==0 and
110139 **      pUnlockConnection==0, remove the entry from the blocked connections
110140 **      list.
110141 */
110142 SQLITE_PRIVATE void sqlite3ConnectionUnlocked(sqlite3 *db){
110143   void (*xUnlockNotify)(void **, int) = 0; /* Unlock-notify cb to invoke */
110144   int nArg = 0;                            /* Number of entries in aArg[] */
110145   sqlite3 **pp;                            /* Iterator variable */
110146   void **aArg;               /* Arguments to the unlock callback */
110147   void **aDyn = 0;           /* Dynamically allocated space for aArg[] */
110148   void *aStatic[16];         /* Starter space for aArg[].  No malloc required */
110149
110150   aArg = aStatic;
110151   enterMutex();         /* Enter STATIC_MASTER mutex */
110152
110153   /* This loop runs once for each entry in the blocked-connections list. */
110154   for(pp=&sqlite3BlockedList; *pp; /* no-op */ ){
110155     sqlite3 *p = *pp;
110156
110157     /* Step 1. */
110158     if( p->pBlockingConnection==db ){
110159       p->pBlockingConnection = 0;
110160     }
110161
110162     /* Step 2. */
110163     if( p->pUnlockConnection==db ){
110164       assert( p->xUnlockNotify );
110165       if( p->xUnlockNotify!=xUnlockNotify && nArg!=0 ){
110166         xUnlockNotify(aArg, nArg);
110167         nArg = 0;
110168       }
110169
110170       sqlite3BeginBenignMalloc();
110171       assert( aArg==aDyn || (aDyn==0 && aArg==aStatic) );
110172       assert( nArg<=(int)ArraySize(aStatic) || aArg==aDyn );
110173       if( (!aDyn && nArg==(int)ArraySize(aStatic))
110174        || (aDyn && nArg==(int)(sqlite3MallocSize(aDyn)/sizeof(void*)))
110175       ){
110176         /* The aArg[] array needs to grow. */
110177         void **pNew = (void **)sqlite3Malloc(nArg*sizeof(void *)*2);
110178         if( pNew ){
110179           memcpy(pNew, aArg, nArg*sizeof(void *));
110180           sqlite3_free(aDyn);
110181           aDyn = aArg = pNew;
110182         }else{
110183           /* This occurs when the array of context pointers that need to
110184           ** be passed to the unlock-notify callback is larger than the
110185           ** aStatic[] array allocated on the stack and the attempt to 
110186           ** allocate a larger array from the heap has failed.
110187           **
110188           ** This is a difficult situation to handle. Returning an error
110189           ** code to the caller is insufficient, as even if an error code
110190           ** is returned the transaction on connection db will still be
110191           ** closed and the unlock-notify callbacks on blocked connections
110192           ** will go unissued. This might cause the application to wait
110193           ** indefinitely for an unlock-notify callback that will never 
110194           ** arrive.
110195           **
110196           ** Instead, invoke the unlock-notify callback with the context
110197           ** array already accumulated. We can then clear the array and
110198           ** begin accumulating any further context pointers without 
110199           ** requiring any dynamic allocation. This is sub-optimal because
110200           ** it means that instead of one callback with a large array of
110201           ** context pointers the application will receive two or more
110202           ** callbacks with smaller arrays of context pointers, which will
110203           ** reduce the applications ability to prioritize multiple 
110204           ** connections. But it is the best that can be done under the
110205           ** circumstances.
110206           */
110207           xUnlockNotify(aArg, nArg);
110208           nArg = 0;
110209         }
110210       }
110211       sqlite3EndBenignMalloc();
110212
110213       aArg[nArg++] = p->pUnlockArg;
110214       xUnlockNotify = p->xUnlockNotify;
110215       p->pUnlockConnection = 0;
110216       p->xUnlockNotify = 0;
110217       p->pUnlockArg = 0;
110218     }
110219
110220     /* Step 3. */
110221     if( p->pBlockingConnection==0 && p->pUnlockConnection==0 ){
110222       /* Remove connection p from the blocked connections list. */
110223       *pp = p->pNextBlocked;
110224       p->pNextBlocked = 0;
110225     }else{
110226       pp = &p->pNextBlocked;
110227     }
110228   }
110229
110230   if( nArg!=0 ){
110231     xUnlockNotify(aArg, nArg);
110232   }
110233   sqlite3_free(aDyn);
110234   leaveMutex();         /* Leave STATIC_MASTER mutex */
110235 }
110236
110237 /*
110238 ** This is called when the database connection passed as an argument is 
110239 ** being closed. The connection is removed from the blocked list.
110240 */
110241 SQLITE_PRIVATE void sqlite3ConnectionClosed(sqlite3 *db){
110242   sqlite3ConnectionUnlocked(db);
110243   enterMutex();
110244   removeFromBlockedList(db);
110245   checkListProperties(db);
110246   leaveMutex();
110247 }
110248 #endif
110249
110250 /************** End of notify.c **********************************************/
110251 /************** Begin file recover.c *****************************************/
110252 /*
110253 ** 2012 Jan 11
110254 **
110255 ** The author disclaims copyright to this source code.  In place of
110256 ** a legal notice, here is a blessing:
110257 **
110258 **    May you do good and not evil.
110259 **    May you find forgiveness for yourself and forgive others.
110260 **    May you share freely, never taking more than you give.
110261 */
110262 /* TODO(shess): THIS MODULE IS STILL EXPERIMENTAL.  DO NOT USE IT. */
110263 /* Implements a virtual table "recover" which can be used to recover
110264  * data from a corrupt table.  The table is walked manually, with
110265  * corrupt items skipped.  Additionally, any errors while reading will
110266  * be skipped.
110267  *
110268  * Given a table with this definition:
110269  *
110270  * CREATE TABLE Stuff (
110271  *   name TEXT PRIMARY KEY,
110272  *   value TEXT NOT NULL
110273  * );
110274  *
110275  * to recover the data from teh table, you could do something like:
110276  *
110277  * -- Attach another database, the original is not trustworthy.
110278  * ATTACH DATABASE '/tmp/db.db' AS rdb;
110279  * -- Create a new version of the table.
110280  * CREATE TABLE rdb.Stuff (
110281  *   name TEXT PRIMARY KEY,
110282  *   value TEXT NOT NULL
110283  * );
110284  * -- This will read the original table's data.
110285  * CREATE VIRTUAL TABLE temp.recover_Stuff using recover(
110286  *   main.Stuff,
110287  *   name TEXT STRICT NOT NULL,  -- only real TEXT data allowed
110288  *   value TEXT STRICT NOT NULL
110289  * );
110290  * -- Corruption means the UNIQUE constraint may no longer hold for
110291  * -- Stuff, so either OR REPLACE or OR IGNORE must be used.
110292  * INSERT OR REPLACE INTO rdb.Stuff (rowid, name, value )
110293  *   SELECT rowid, name, value FROM temp.recover_Stuff;
110294  * DROP TABLE temp.recover_Stuff;
110295  * DETACH DATABASE rdb;
110296  * -- Move db.db to replace original db in filesystem.
110297  *
110298  *
110299  * Usage
110300  *
110301  * Given the goal of dealing with corruption, it would not be safe to
110302  * create a recovery table in the database being recovered.  So
110303  * recovery tables must be created in the temp database.  They are not
110304  * appropriate to persist, in any case.  [As a bonus, sqlite_master
110305  * tables can be recovered.  Perhaps more cute than useful, though.]
110306  *
110307  * The parameters are a specifier for the table to read, and a column
110308  * definition for each bit of data stored in that table.  The named
110309  * table must be convertable to a root page number by reading the
110310  * sqlite_master table.  Bare table names are assumed to be in
110311  * database 0 ("main"), other databases can be specified in db.table
110312  * fashion.
110313  *
110314  * Column definitions are similar to BUT NOT THE SAME AS those
110315  * provided to CREATE statements:
110316  *  column-def: column-name [type-name [STRICT] [NOT NULL]]
110317  *  type-name: (ANY|ROWID|INTEGER|FLOAT|NUMERIC|TEXT|BLOB)
110318  *
110319  * Only those exact type names are accepted, there is no type
110320  * intuition.  The only constraints accepted are STRICT (see below)
110321  * and NOT NULL.  Anything unexpected will cause the create to fail.
110322  *
110323  * ANY is a convenience to indicate that manifest typing is desired.
110324  * It is equivalent to not specifying a type at all.  The results for
110325  * such columns will have the type of the data's storage.  The exposed
110326  * schema will contain no type for that column.
110327  *
110328  * ROWID is used for columns representing aliases to the rowid
110329  * (INTEGER PRIMARY KEY, with or without AUTOINCREMENT), to make the
110330  * concept explicit.  Such columns are actually stored as NULL, so
110331  * they cannot be simply ignored.  The exposed schema will be INTEGER
110332  * for that column.
110333  *
110334  * NOT NULL causes rows with a NULL in that column to be skipped.  It
110335  * also adds NOT NULL to the column in the exposed schema.  If the
110336  * table has ever had columns added using ALTER TABLE, then those
110337  * columns implicitly contain NULL for rows which have not been
110338  * updated.  [Workaround using COALESCE() in your SELECT statement.]
110339  *
110340  * The created table is read-only, with no indices.  Any SELECT will
110341  * be a full-table scan, returning each valid row read from the
110342  * storage of the backing table.  The rowid will be the rowid of the
110343  * row from the backing table.  "Valid" means:
110344  * - The cell metadata for the row is well-formed.  Mainly this means that
110345  *   the cell header info describes a payload of the size indicated by
110346  *   the cell's payload size.
110347  * - The cell does not run off the page.
110348  * - The cell does not overlap any other cell on the page.
110349  * - The cell contains doesn't contain too many columns.
110350  * - The types of the serialized data match the indicated types (see below).
110351  *
110352  *
110353  * Type affinity versus type storage.
110354  *
110355  * http://www.sqlite.org/datatype3.html describes SQLite's type
110356  * affinity system.  The system provides for automated coercion of
110357  * types in certain cases, transparently enough that many developers
110358  * do not realize that it is happening.  Importantly, it implies that
110359  * the raw data stored in the database may not have the obvious type.
110360  *
110361  * Differences between the stored data types and the expected data
110362  * types may be a signal of corruption.  This module makes some
110363  * allowances for automatic coercion.  It is important to be concious
110364  * of the difference between the schema exposed by the module, and the
110365  * data types read from storage.  The following table describes how
110366  * the module interprets things:
110367  *
110368  * type     schema   data                     STRICT
110369  * ----     ------   ----                     ------
110370  * ANY      <none>   any                      any
110371  * ROWID    INTEGER  n/a                      n/a
110372  * INTEGER  INTEGER  integer                  integer
110373  * FLOAT    FLOAT    integer or float         float
110374  * NUMERIC  NUMERIC  integer, float, or text  integer or float
110375  * TEXT     TEXT     text or blob             text
110376  * BLOB     BLOB     blob                     blob
110377  *
110378  * type is the type provided to the recover module, schema is the
110379  * schema exposed by the module, data is the acceptable types of data
110380  * decoded from storage, and STRICT is a modification of that.
110381  *
110382  * A very loose recovery system might use ANY for all columns, then
110383  * use the appropriate sqlite3_column_*() calls to coerce to expected
110384  * types.  This doesn't provide much protection if a page from a
110385  * different table with the same column count is linked into an
110386  * inappropriate btree.
110387  *
110388  * A very tight recovery system might use STRICT to enforce typing on
110389  * all columns, preferring to skip rows which are valid at the storage
110390  * level but don't contain the right types.  Note that FLOAT STRICT is
110391  * almost certainly not appropriate, since integral values are
110392  * transparently stored as integers, when that is more efficient.
110393  *
110394  * Another option is to use ANY for all columns and inspect each
110395  * result manually (using sqlite3_column_*).  This should only be
110396  * necessary in cases where developers have used manifest typing (test
110397  * to make sure before you decide that you aren't using manifest
110398  * typing!).
110399  *
110400  *
110401  * Caveats
110402  *
110403  * Leaf pages not referenced by interior nodes will not be found.
110404  *
110405  * Leaf pages referenced from interior nodes of other tables will not
110406  * be resolved.
110407  *
110408  * Rows referencing invalid overflow pages will be skipped.
110409  *
110410  * SQlite rows have a header which describes how to interpret the rest
110411  * of the payload.  The header can be valid in cases where the rest of
110412  * the record is actually corrupt (in the sense that the data is not
110413  * the intended data).  This can especially happen WRT overflow pages,
110414  * as lack of atomic updates between pages is the primary form of
110415  * corruption I have seen in the wild.
110416  */
110417 /* The implementation is via a series of cursors.  The cursor
110418  * implementations follow the pattern:
110419  *
110420  * // Creates the cursor using various initialization info.
110421  * int cursorCreate(...);
110422  *
110423  * // Returns 1 if there is no more data, 0 otherwise.
110424  * int cursorEOF(Cursor *pCursor);
110425  *
110426  * // Various accessors can be used if not at EOF.
110427  *
110428  * // Move to the next item.
110429  * int cursorNext(Cursor *pCursor);
110430  *
110431  * // Destroy the memory associated with the cursor.
110432  * void cursorDestroy(Cursor *pCursor);
110433  *
110434  * References in the following are to sections at
110435  * http://www.sqlite.org/fileformat2.html .
110436  *
110437  * RecoverLeafCursor iterates the records in a leaf table node
110438  * described in section 1.5 "B-tree Pages".  When the node is
110439  * exhausted, an interior cursor is used to get the next leaf node,
110440  * and iteration continues there.
110441  *
110442  * RecoverInteriorCursor iterates the child pages in an interior table
110443  * node described in section 1.5 "B-tree Pages".  When the node is
110444  * exhausted, a parent interior cursor is used to get the next
110445  * interior node at the same level, and iteration continues there.
110446  *
110447  * Together these record the path from the leaf level to the root of
110448  * the tree.  Iteration happens from the leaves rather than the root
110449  * both for efficiency and putting the special case at the front of
110450  * the list is easier to implement.
110451  *
110452  * RecoverCursor uses a RecoverLeafCursor to iterate the rows of a
110453  * table, returning results via the SQLite virtual table interface.
110454  */
110455 /* TODO(shess): It might be useful to allow DEFAULT in types to
110456  * specify what to do for NULL when an ALTER TABLE case comes up.
110457  * Unfortunately, simply adding it to the exposed schema and using
110458  * sqlite3_result_null() does not cause the default to be generate.
110459  * Handling it ourselves seems hard, unfortunately.
110460  */
110461
110462
110463 /* Internal SQLite things that are used:
110464  * u32, u64, i64 types.
110465  * Btree, Pager, and DbPage structs.
110466  * DbPage.pData, .pPager, and .pgno
110467  * sqlite3 struct.
110468  * sqlite3BtreePager() and sqlite3BtreeGetPageSize()
110469  * sqlite3PagerAcquire() and sqlite3PagerUnref()
110470  * getVarint().
110471  */
110472
110473 /* For debugging. */
110474 #if 0
110475 #define FNENTRY() fprintf(stderr, "In %s\n", __FUNCTION__)
110476 #else
110477 #define FNENTRY()
110478 #endif
110479
110480 /* Generic constants and helper functions. */
110481
110482 static const unsigned char kTableLeafPage = 0x0D;
110483 static const unsigned char kTableInteriorPage = 0x05;
110484
110485 /* From section 1.5. */
110486 static const unsigned kiPageTypeOffset = 0;
110487 static const unsigned kiPageFreeBlockOffset = 1;
110488 static const unsigned kiPageCellCountOffset = 3;
110489 static const unsigned kiPageCellContentOffset = 5;
110490 static const unsigned kiPageFragmentedBytesOffset = 7;
110491 static const unsigned knPageLeafHeaderBytes = 8;
110492 /* Interior pages contain an additional field. */
110493 static const unsigned kiPageRightChildOffset = 8;
110494 static const unsigned kiPageInteriorHeaderBytes = 12;
110495
110496 /* Accepted types are specified by a mask. */
110497 #define MASK_ROWID (1<<0)
110498 #define MASK_INTEGER (1<<1)
110499 #define MASK_FLOAT (1<<2)
110500 #define MASK_TEXT (1<<3)
110501 #define MASK_BLOB (1<<4)
110502 #define MASK_NULL (1<<5)
110503
110504 /* Helpers to decode fixed-size fields. */
110505 static u32 decodeUnsigned16(const unsigned char *pData){
110506   return (pData[0]<<8) + pData[1];
110507 }
110508 static u32 decodeUnsigned32(const unsigned char *pData){
110509   return (decodeUnsigned16(pData)<<16) + decodeUnsigned16(pData+2);
110510 }
110511 static i64 decodeSigned(const unsigned char *pData, unsigned nBytes){
110512   i64 r = (char)(*pData);
110513   while( --nBytes ){
110514     r <<= 8;
110515     r += *(++pData);
110516   }
110517   return r;
110518 }
110519 /* Derived from vdbeaux.c, sqlite3VdbeSerialGet(), case 7. */
110520 /* TODO(shess): Determine if swapMixedEndianFloat() applies. */
110521 static double decodeFloat64(const unsigned char *pData){
110522 #if !defined(NDEBUG)
110523   static const u64 t1 = ((u64)0x3ff00000)<<32;
110524   static const double r1 = 1.0;
110525   u64 t2 = t1;
110526   assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 );
110527 #endif
110528   i64 x = decodeSigned(pData, 8);
110529   double d;
110530   memcpy(&d, &x, sizeof(x));
110531   return d;
110532 }
110533
110534 /* Return true if a varint can safely be read from pData/nData. */
110535 /* TODO(shess): DbPage points into the middle of a buffer which
110536  * contains the page data before DbPage.  So code should always be
110537  * able to read a small number of varints safely.  Consider whether to
110538  * trust that or not.
110539  */
110540 static int checkVarint(const unsigned char *pData, unsigned nData){
110541   unsigned i;
110542
110543   /* In the worst case the decoder takes all 8 bits of the 9th byte. */
110544   if( nData>=9 ){
110545     return 1;
110546   }
110547
110548   /* Look for a high-bit-clear byte in what's left. */
110549   for( i=0; i<nData; ++i ){
110550     if( !(pData[i]&0x80) ){
110551       return 1;
110552     }
110553   }
110554
110555   /* Cannot decode in the space given. */
110556   return 0;
110557 }
110558
110559 /* Return 1 if n varints can be read from pData/nData. */
110560 static int checkVarints(const unsigned char *pData, unsigned nData,
110561                         unsigned n){
110562   unsigned nCur = 0;   /* Byte offset within current varint. */
110563   unsigned nFound = 0; /* Number of varints found. */
110564   unsigned i;
110565
110566   /* In the worst case the decoder takes all 8 bits of the 9th byte. */
110567   if( nData>=9*n ){
110568     return 1;
110569   }
110570
110571   for( i=0; nFound<n && i<nData; ++i ){
110572     nCur++;
110573     if( nCur==9 || !(pData[i]&0x80) ){
110574       nFound++;
110575       nCur = 0;
110576     }
110577   }
110578
110579   return nFound==n;
110580 }
110581
110582 /* ctype and str[n]casecmp() can be affected by locale (eg, tr_TR).
110583  * These versions consider only the ASCII space.
110584  */
110585 /* TODO(shess): It may be reasonable to just remove the need for these
110586  * entirely.  The module could require "TEXT STRICT NOT NULL", not
110587  * "Text Strict Not Null" or whatever the developer felt like typing
110588  * that day.  Handling corrupt data is a PERFECT place to be pedantic.
110589  */
110590 static int ascii_isspace(char c){
110591   /* From fts3_expr.c */
110592   return c==' ' || c=='\t' || c=='\n' || c=='\r' || c=='\v' || c=='\f';
110593 }
110594 static int ascii_isalnum(int x){
110595   /* From fts3_tokenizer1.c */
110596   return (x>='0' && x<='9') || (x>='A' && x<='Z') || (x>='a' && x<='z');
110597 }
110598 static int ascii_tolower(int x){
110599   /* From fts3_tokenizer1.c */
110600   return (x>='A' && x<='Z') ? x-'A'+'a' : x;
110601 }
110602 /* TODO(shess): Consider sqlite3_strnicmp() */
110603 static int ascii_strncasecmp(const char *s1, const char *s2, size_t n){
110604   const unsigned char *us1 = (const unsigned char *)s1;
110605   const unsigned char *us2 = (const unsigned char *)s2;
110606   while( *us1 && *us2 && n && ascii_tolower(*us1)==ascii_tolower(*us2) ){
110607     us1++, us2++, n--;
110608   }
110609   return n ? ascii_tolower(*us1)-ascii_tolower(*us2) : 0;
110610 }
110611 static int ascii_strcasecmp(const char *s1, const char *s2){
110612   /* If s2 is equal through strlen(s1), will exit while() due to s1's
110613    * trailing NUL, and return NUL-s2[strlen(s1)].
110614    */
110615   return ascii_strncasecmp(s1, s2, strlen(s1)+1);
110616 }
110617
110618 /* For some reason I kept making mistakes with offset calculations. */
110619 static const unsigned char *PageData(DbPage *pPage, unsigned iOffset){
110620   assert( iOffset<=pPage->nPageSize );
110621   return (unsigned char *)pPage->pData + iOffset;
110622 }
110623
110624 /* The first page in the file contains a file header in the first 100
110625  * bytes.  The page's header information comes after that.  Note that
110626  * the offsets in the page's header information are relative to the
110627  * beginning of the page, NOT the end of the page header.
110628  */
110629 static const unsigned char *PageHeader(DbPage *pPage){
110630   if( pPage->pgno==1 ){
110631     const unsigned nDatabaseHeader = 100;
110632     return PageData(pPage, nDatabaseHeader);
110633   }else{
110634     return PageData(pPage, 0);
110635   }
110636 }
110637
110638 /* Helper to fetch the pager and page size for the named database. */
110639 static int GetPager(sqlite3 *db, const char *zName,
110640                     Pager **pPager, unsigned *pnPageSize){
110641   Btree *pBt = NULL;
110642   int i;
110643   for( i=0; i<db->nDb; ++i ){
110644     if( ascii_strcasecmp(db->aDb[i].zName, zName)==0 ){
110645       pBt = db->aDb[i].pBt;
110646       break;
110647     }
110648   }
110649   if( !pBt ){
110650     return SQLITE_ERROR;
110651   }
110652
110653   *pPager = sqlite3BtreePager(pBt);
110654   *pnPageSize = sqlite3BtreeGetPageSize(pBt) - sqlite3BtreeGetReserve(pBt);
110655   return SQLITE_OK;
110656 }
110657
110658 /* iSerialType is a type read from a record header.  See "2.1 Record Format".
110659  */
110660
110661 /* Storage size of iSerialType in bytes.  My interpretation of SQLite
110662  * documentation is that text and blob fields can have 32-bit length.
110663  * Values past 2^31-12 will need more than 32 bits to encode, which is
110664  * why iSerialType is u64.
110665  */
110666 static u32 SerialTypeLength(u64 iSerialType){
110667   switch( iSerialType ){
110668     case 0 : return 0;  /* NULL */
110669     case 1 : return 1;  /* Various integers. */
110670     case 2 : return 2;
110671     case 3 : return 3;
110672     case 4 : return 4;
110673     case 5 : return 6;
110674     case 6 : return 8;
110675     case 7 : return 8;  /* 64-bit float. */
110676     case 8 : return 0;  /* Constant 0. */
110677     case 9 : return 0;  /* Constant 1. */
110678     case 10 : case 11 : assert( !"RESERVED TYPE"); return 0;
110679   }
110680   return (u32)((iSerialType>>1) - 6);
110681 }
110682
110683 /* True if iSerialType refers to a blob. */
110684 static int SerialTypeIsBlob(u64 iSerialType){
110685   assert( iSerialType>=12 );
110686   return (iSerialType%2)==0;
110687 }
110688
110689 /* Returns true if the serialized type represented by iSerialType is
110690  * compatible with the given type mask.
110691  */
110692 static int SerialTypeIsCompatible(u64 iSerialType, unsigned char mask){
110693   switch( iSerialType ){
110694     case 0  : return (mask&MASK_NULL)!=0;
110695     case 1  : return (mask&MASK_INTEGER)!=0;
110696     case 2  : return (mask&MASK_INTEGER)!=0;
110697     case 3  : return (mask&MASK_INTEGER)!=0;
110698     case 4  : return (mask&MASK_INTEGER)!=0;
110699     case 5  : return (mask&MASK_INTEGER)!=0;
110700     case 6  : return (mask&MASK_INTEGER)!=0;
110701     case 7  : return (mask&MASK_FLOAT)!=0;
110702     case 8  : return (mask&MASK_INTEGER)!=0;
110703     case 9  : return (mask&MASK_INTEGER)!=0;
110704     case 10 : assert( !"RESERVED TYPE"); return 0;
110705     case 11 : assert( !"RESERVED TYPE"); return 0;
110706   }
110707   return (mask&(SerialTypeIsBlob(iSerialType) ? MASK_BLOB : MASK_TEXT));
110708 }
110709
110710 /* Versions of strdup() with return values appropriate for
110711  * sqlite3_free().  malloc.c has sqlite3DbStrDup()/NDup(), but those
110712  * need sqlite3DbFree(), which seems intrusive.
110713  */
110714 static char *sqlite3_strndup(const char *z, unsigned n){
110715   char *zNew;
110716
110717   if( z==NULL ){
110718     return NULL;
110719   }
110720
110721   zNew = sqlite3_malloc(n+1);
110722   if( zNew!=NULL ){
110723     memcpy(zNew, z, n);
110724     zNew[n] = '\0';
110725   }
110726   return zNew;
110727 }
110728 static char *sqlite3_strdup(const char *z){
110729   if( z==NULL ){
110730     return NULL;
110731   }
110732   return sqlite3_strndup(z, strlen(z));
110733 }
110734
110735 /* Fetch the page number of zTable in zDb from sqlite_master in zDb,
110736  * and put it in *piRootPage.
110737  */
110738 static int getRootPage(sqlite3 *db, const char *zDb, const char *zTable,
110739                        u32 *piRootPage){
110740   char *zSql;  /* SQL selecting root page of named element. */
110741   sqlite3_stmt *pStmt;
110742   int rc;
110743
110744   if( strcmp(zTable, "sqlite_master")==0 ){
110745     *piRootPage = 1;
110746     return SQLITE_OK;
110747   }
110748
110749   zSql = sqlite3_mprintf("SELECT rootpage FROM %s.sqlite_master "
110750                          "WHERE type = 'table' AND tbl_name = %Q",
110751                          zDb, zTable);
110752   if( !zSql ){
110753     return SQLITE_NOMEM;
110754   }
110755
110756   rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
110757   sqlite3_free(zSql);
110758   if( rc!=SQLITE_OK ){
110759     return rc;
110760   }
110761
110762   /* Require a result. */
110763   rc = sqlite3_step(pStmt);
110764   if( rc==SQLITE_DONE ){
110765     rc = SQLITE_CORRUPT;
110766   }else if( rc==SQLITE_ROW ){
110767     *piRootPage = sqlite3_column_int(pStmt, 0);
110768
110769     /* Require only one result. */
110770     rc = sqlite3_step(pStmt);
110771     if( rc==SQLITE_DONE ){
110772       rc = SQLITE_OK;
110773     }else if( rc==SQLITE_ROW ){
110774       rc = SQLITE_CORRUPT;
110775     }
110776   }
110777   sqlite3_finalize(pStmt);
110778   return rc;
110779 }
110780
110781 static int getEncoding(sqlite3 *db, const char *zDb, int* piEncoding){
110782   sqlite3_stmt *pStmt;
110783   int rc;
110784   char *zSql = sqlite3_mprintf("PRAGMA %s.encoding", zDb);
110785   if( !zSql ){
110786     return SQLITE_NOMEM;
110787   }
110788
110789   rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
110790   sqlite3_free(zSql);
110791   if( rc!=SQLITE_OK ){
110792     return rc;
110793   }
110794
110795   /* Require a result. */
110796   rc = sqlite3_step(pStmt);
110797   if( rc==SQLITE_DONE ){
110798     /* This case should not be possible. */
110799     rc = SQLITE_CORRUPT;
110800   }else if( rc==SQLITE_ROW ){
110801     if( sqlite3_column_type(pStmt, 0)==SQLITE_TEXT ){
110802       const char* z = (const char *)sqlite3_column_text(pStmt, 0);
110803       /* These strings match the literals in pragma.c. */
110804       if( !strcmp(z, "UTF-16le") ){
110805         *piEncoding = SQLITE_UTF16LE;
110806       }else if( !strcmp(z, "UTF-16be") ){
110807         *piEncoding = SQLITE_UTF16BE;
110808       }else if( !strcmp(z, "UTF-8") ){
110809         *piEncoding = SQLITE_UTF8;
110810       }else{
110811         /* This case should not be possible. */
110812         *piEncoding = SQLITE_UTF8;
110813       }
110814     }else{
110815       /* This case should not be possible. */
110816       *piEncoding = SQLITE_UTF8;
110817     }
110818
110819     /* Require only one result. */
110820     rc = sqlite3_step(pStmt);
110821     if( rc==SQLITE_DONE ){
110822       rc = SQLITE_OK;
110823     }else if( rc==SQLITE_ROW ){
110824       /* This case should not be possible. */
110825       rc = SQLITE_CORRUPT;
110826     }
110827   }
110828   sqlite3_finalize(pStmt);
110829   return rc;
110830 }
110831
110832 /* Cursor for iterating interior nodes.  Interior page cells contain a
110833  * child page number and a rowid.  The child page contains items left
110834  * of the rowid (less than).  The rightmost page of the subtree is
110835  * stored in the page header.
110836  *
110837  * interiorCursorDestroy - release all resources associated with the
110838  *                         cursor and any parent cursors.
110839  * interiorCursorCreate - create a cursor with the given parent and page.
110840  * interiorCursorEOF - returns true if neither the cursor nor the
110841  *                     parent cursors can return any more data.
110842  * interiorCursorNextPage - fetch the next child page from the cursor.
110843  *
110844  * Logically, interiorCursorNextPage() returns the next child page
110845  * number from the page the cursor is currently reading, calling the
110846  * parent cursor as necessary to get new pages to read, until done.
110847  * SQLITE_ROW if a page is returned, SQLITE_DONE if out of pages,
110848  * error otherwise.  Unfortunately, if the table is corrupted
110849  * unexpected pages can be returned.  If any unexpected page is found,
110850  * leaf or otherwise, it is returned to the caller for processing,
110851  * with the interior cursor left empty.  The next call to
110852  * interiorCursorNextPage() will recurse to the parent cursor until an
110853  * interior page to iterate is returned.
110854  *
110855  * Note that while interiorCursorNextPage() will refuse to follow
110856  * loops, it does not keep track of pages returned for purposes of
110857  * preventing duplication.
110858  *
110859  * Note that interiorCursorEOF() could return false (not at EOF), and
110860  * interiorCursorNextPage() could still return SQLITE_DONE.  This
110861  * could happen if there are more cells to iterate in an interior
110862  * page, but those cells refer to invalid pages.
110863  */
110864 typedef struct RecoverInteriorCursor RecoverInteriorCursor;
110865 struct RecoverInteriorCursor {
110866   RecoverInteriorCursor *pParent; /* Parent node to this node. */
110867   DbPage *pPage;                  /* Reference to leaf page. */
110868   unsigned nPageSize;             /* Size of page. */
110869   unsigned nChildren;             /* Number of children on the page. */
110870   unsigned iChild;                /* Index of next child to return. */
110871 };
110872
110873 static void interiorCursorDestroy(RecoverInteriorCursor *pCursor){
110874   /* Destroy all the cursors to the root. */
110875   while( pCursor ){
110876     RecoverInteriorCursor *p = pCursor;
110877     pCursor = pCursor->pParent;
110878
110879     if( p->pPage ){
110880       sqlite3PagerUnref(p->pPage);
110881       p->pPage = NULL;
110882     }
110883
110884     memset(p, 0xA5, sizeof(*p));
110885     sqlite3_free(p);
110886   }
110887 }
110888
110889 /* Internal helper.  Reset storage in preparation for iterating pPage. */
110890 static void interiorCursorSetPage(RecoverInteriorCursor *pCursor,
110891                                   DbPage *pPage){
110892   assert( PageHeader(pPage)[kiPageTypeOffset]==kTableInteriorPage );
110893
110894   if( pCursor->pPage ){
110895     sqlite3PagerUnref(pCursor->pPage);
110896     pCursor->pPage = NULL;
110897   }
110898   pCursor->pPage = pPage;
110899   pCursor->iChild = 0;
110900
110901   /* A child for each cell, plus one in the header. */
110902   /* TODO(shess): Sanity-check the count?  Page header plus per-cell
110903    * cost of 16-bit offset, 32-bit page number, and one varint
110904    * (minimum 1 byte).
110905    */
110906   pCursor->nChildren = decodeUnsigned16(PageHeader(pPage) +
110907                                         kiPageCellCountOffset) + 1;
110908 }
110909
110910 static int interiorCursorCreate(RecoverInteriorCursor *pParent,
110911                                 DbPage *pPage, int nPageSize,
110912                                 RecoverInteriorCursor **ppCursor){
110913   RecoverInteriorCursor *pCursor =
110914     sqlite3_malloc(sizeof(RecoverInteriorCursor));
110915   if( !pCursor ){
110916     return SQLITE_NOMEM;
110917   }
110918
110919   memset(pCursor, 0, sizeof(*pCursor));
110920   pCursor->pParent = pParent;
110921   pCursor->nPageSize = nPageSize;
110922   interiorCursorSetPage(pCursor, pPage);
110923   *ppCursor = pCursor;
110924   return SQLITE_OK;
110925 }
110926
110927 /* Internal helper.  Return the child page number at iChild. */
110928 static unsigned interiorCursorChildPage(RecoverInteriorCursor *pCursor){
110929   const unsigned char *pPageHeader;  /* Header of the current page. */
110930   const unsigned char *pCellOffsets; /* Offset to page's cell offsets. */
110931   unsigned iCellOffset;              /* Offset of target cell. */
110932
110933   assert( pCursor->iChild<pCursor->nChildren );
110934
110935   /* Rightmost child is in the header. */
110936   pPageHeader = PageHeader(pCursor->pPage);
110937   if( pCursor->iChild==pCursor->nChildren-1 ){
110938     return decodeUnsigned32(pPageHeader + kiPageRightChildOffset);
110939   }
110940
110941   /* Each cell is a 4-byte integer page number and a varint rowid
110942    * which is greater than the rowid of items in that sub-tree (this
110943    * module ignores ordering). The offset is from the beginning of the
110944    * page, not from the page header.
110945    */
110946   pCellOffsets = pPageHeader + kiPageInteriorHeaderBytes;
110947   iCellOffset = decodeUnsigned16(pCellOffsets + pCursor->iChild*2);
110948   if( iCellOffset<=pCursor->nPageSize-4 ){
110949     return decodeUnsigned32(PageData(pCursor->pPage, iCellOffset));
110950   }
110951
110952   /* TODO(shess): Check for cell overlaps?  Cells require 4 bytes plus
110953    * a varint.  Check could be identical to leaf check (or even a
110954    * shared helper testing for "Cells starting in this range"?).
110955    */
110956
110957   /* If the offset is broken, return an invalid page number. */
110958   return 0;
110959 }
110960
110961 static int interiorCursorEOF(RecoverInteriorCursor *pCursor){
110962   /* Find a parent with remaining children.  EOF if none found. */
110963   while( pCursor && pCursor->iChild>=pCursor->nChildren ){
110964     pCursor = pCursor->pParent;
110965   }
110966   return pCursor==NULL;
110967 }
110968
110969 /* Internal helper.  Used to detect if iPage would cause a loop. */
110970 static int interiorCursorPageInUse(RecoverInteriorCursor *pCursor,
110971                                    unsigned iPage){
110972   /* Find any parent using the indicated page. */
110973   while( pCursor && pCursor->pPage->pgno!=iPage ){
110974     pCursor = pCursor->pParent;
110975   }
110976   return pCursor!=NULL;
110977 }
110978
110979 /* Get the next page from the interior cursor at *ppCursor.  Returns
110980  * SQLITE_ROW with the page in *ppPage, or SQLITE_DONE if out of
110981  * pages, or the error SQLite returned.
110982  *
110983  * If the tree is uneven, then when the cursor attempts to get a new
110984  * interior page from the parent cursor, it may get a non-interior
110985  * page.  In that case, the new page is returned, and *ppCursor is
110986  * updated to point to the parent cursor (this cursor is freed).
110987  */
110988 /* TODO(shess): I've tried to avoid recursion in most of this code,
110989  * but this case is more challenging because the recursive call is in
110990  * the middle of operation.  One option for converting it without
110991  * adding memory management would be to retain the head pointer and
110992  * use a helper to "back up" as needed.  Another option would be to
110993  * reverse the list during traversal.
110994  */
110995 static int interiorCursorNextPage(RecoverInteriorCursor **ppCursor,
110996                                   DbPage **ppPage){
110997   RecoverInteriorCursor *pCursor = *ppCursor;
110998   while( 1 ){
110999     int rc;
111000     const unsigned char *pPageHeader;  /* Header of found page. */
111001
111002     /* Find a valid child page which isn't on the stack. */
111003     while( pCursor->iChild<pCursor->nChildren ){
111004       const unsigned iPage = interiorCursorChildPage(pCursor);
111005       pCursor->iChild++;
111006       if( interiorCursorPageInUse(pCursor, iPage) ){
111007         fprintf(stderr, "Loop detected at %d\n", iPage);
111008       }else{
111009         int rc = sqlite3PagerAcquire(pCursor->pPage->pPager, iPage, ppPage, 0);
111010         if( rc==SQLITE_OK ){
111011           return SQLITE_ROW;
111012         }
111013       }
111014     }
111015
111016     /* This page has no more children.  Get next page from parent. */
111017     if( !pCursor->pParent ){
111018       return SQLITE_DONE;
111019     }
111020     rc = interiorCursorNextPage(&pCursor->pParent, ppPage);
111021     if( rc!=SQLITE_ROW ){
111022       return rc;
111023     }
111024
111025     /* If a non-interior page is received, that either means that the
111026      * tree is uneven, or that a child was re-used (say as an overflow
111027      * page).  Remove this cursor and let the caller handle the page.
111028      */
111029     pPageHeader = PageHeader(*ppPage);
111030     if( pPageHeader[kiPageTypeOffset]!=kTableInteriorPage ){
111031       *ppCursor = pCursor->pParent;
111032       pCursor->pParent = NULL;
111033       interiorCursorDestroy(pCursor);
111034       return SQLITE_ROW;
111035     }
111036
111037     /* Iterate the new page. */
111038     interiorCursorSetPage(pCursor, *ppPage);
111039     *ppPage = NULL;
111040   }
111041
111042   assert(NULL);  /* NOTREACHED() */
111043   return SQLITE_CORRUPT;
111044 }
111045
111046 /* Large rows are spilled to overflow pages.  The row's main page
111047  * stores the overflow page number after the local payload, with a
111048  * linked list forward from there as necessary.  overflowMaybeCreate()
111049  * and overflowGetSegment() provide an abstraction for accessing such
111050  * data while centralizing the code.
111051  *
111052  * overflowDestroy - releases all resources associated with the structure.
111053  * overflowMaybeCreate - create the overflow structure if it is needed
111054  *                       to represent the given record.  See function comment.
111055  * overflowGetSegment - fetch a segment from the record, accounting
111056  *                      for overflow pages.  Segments which are not
111057  *                      entirely contained with a page are constructed
111058  *                      into a buffer which is returned.  See function comment.
111059  */
111060 typedef struct RecoverOverflow RecoverOverflow;
111061 struct RecoverOverflow {
111062   RecoverOverflow *pNextOverflow;
111063   DbPage *pPage;
111064   unsigned nPageSize;
111065 };
111066
111067 static void overflowDestroy(RecoverOverflow *pOverflow){
111068   while( pOverflow ){
111069     RecoverOverflow *p = pOverflow;
111070     pOverflow = p->pNextOverflow;
111071
111072     if( p->pPage ){
111073       sqlite3PagerUnref(p->pPage);
111074       p->pPage = NULL;
111075     }
111076
111077     memset(p, 0xA5, sizeof(*p));
111078     sqlite3_free(p);
111079   }
111080 }
111081
111082 /* Internal helper.  Used to detect if iPage would cause a loop. */
111083 static int overflowPageInUse(RecoverOverflow *pOverflow, unsigned iPage){
111084   while( pOverflow && pOverflow->pPage->pgno!=iPage ){
111085     pOverflow = pOverflow->pNextOverflow;
111086   }
111087   return pOverflow!=NULL;
111088 }
111089
111090 /* Setup to access an nRecordBytes record beginning at iRecordOffset
111091  * in pPage.  If nRecordBytes can be satisfied entirely from pPage,
111092  * then no overflow pages are needed an *pnLocalRecordBytes is set to
111093  * nRecordBytes.  Otherwise, *ppOverflow is set to the head of a list
111094  * of overflow pages, and *pnLocalRecordBytes is set to the number of
111095  * bytes local to pPage.
111096  *
111097  * overflowGetSegment() will do the right thing regardless of whether
111098  * those values are set to be in-page or not.
111099  */
111100 static int overflowMaybeCreate(DbPage *pPage, unsigned nPageSize,
111101                                unsigned iRecordOffset, unsigned nRecordBytes,
111102                                unsigned *pnLocalRecordBytes,
111103                                RecoverOverflow **ppOverflow){
111104   unsigned nLocalRecordBytes;  /* Record bytes in the leaf page. */
111105   unsigned iNextPage;          /* Next page number for record data. */
111106   unsigned nBytes;             /* Maximum record bytes as of current page. */
111107   int rc;
111108   RecoverOverflow *pFirstOverflow;  /* First in linked list of pages. */
111109   RecoverOverflow *pLastOverflow;   /* End of linked list. */
111110
111111   /* Calculations from the "Table B-Tree Leaf Cell" part of section
111112    * 1.5 of http://www.sqlite.org/fileformat2.html .  maxLocal and
111113    * minLocal to match naming in btree.c.
111114    */
111115   const unsigned maxLocal = nPageSize - 35;
111116   const unsigned minLocal = ((nPageSize-12)*32/255)-23;  /* m */
111117
111118   /* Always fit anything smaller than maxLocal. */
111119   if( nRecordBytes<=maxLocal ){
111120     *pnLocalRecordBytes = nRecordBytes;
111121     *ppOverflow = NULL;
111122     return SQLITE_OK;
111123   }
111124
111125   /* Calculate the remainder after accounting for minLocal on the leaf
111126    * page and what packs evenly into overflow pages.  If the remainder
111127    * does not fit into maxLocal, then a partially-full overflow page
111128    * will be required in any case, so store as little as possible locally.
111129    */
111130   nLocalRecordBytes = minLocal+((nRecordBytes-minLocal)%(nPageSize-4));
111131   if( maxLocal<nLocalRecordBytes ){
111132     nLocalRecordBytes = minLocal;
111133   }
111134
111135   /* Don't read off the end of the page. */
111136   if( iRecordOffset+nLocalRecordBytes+4>nPageSize ){
111137     return SQLITE_CORRUPT;
111138   }
111139
111140   /* First overflow page number is after the local bytes. */
111141   iNextPage =
111142       decodeUnsigned32(PageData(pPage, iRecordOffset + nLocalRecordBytes));
111143   nBytes = nLocalRecordBytes;
111144
111145   /* While there are more pages to read, and more bytes are needed,
111146    * get another page.
111147    */
111148   pFirstOverflow = pLastOverflow = NULL;
111149   rc = SQLITE_OK;
111150   while( iNextPage && nBytes<nRecordBytes ){
111151     RecoverOverflow *pOverflow;  /* New overflow page for the list. */
111152
111153     rc = sqlite3PagerAcquire(pPage->pPager, iNextPage, &pPage, 0);
111154     if( rc!=SQLITE_OK ){
111155       break;
111156     }
111157
111158     pOverflow = sqlite3_malloc(sizeof(RecoverOverflow));
111159     if( !pOverflow ){
111160       sqlite3PagerUnref(pPage);
111161       rc = SQLITE_NOMEM;
111162       break;
111163     }
111164     memset(pOverflow, 0, sizeof(*pOverflow));
111165     pOverflow->pPage = pPage;
111166     pOverflow->nPageSize = nPageSize;
111167
111168     if( !pFirstOverflow ){
111169       pFirstOverflow = pOverflow;
111170     }else{
111171       pLastOverflow->pNextOverflow = pOverflow;
111172     }
111173     pLastOverflow = pOverflow;
111174
111175     iNextPage = decodeUnsigned32(pPage->pData);
111176     nBytes += nPageSize-4;
111177
111178     /* Avoid loops. */
111179     if( overflowPageInUse(pFirstOverflow, iNextPage) ){
111180       fprintf(stderr, "Overflow loop detected at %d\n", iNextPage);
111181       rc = SQLITE_CORRUPT;
111182       break;
111183     }
111184   }
111185
111186   /* If there were not enough pages, or too many, things are corrupt.
111187    * Not having enough pages is an obvious problem, all the data
111188    * cannot be read.  Too many pages means that the contents of the
111189    * row between the main page and the overflow page(s) is
111190    * inconsistent (most likely one or more of the overflow pages does
111191    * not really belong to this row).
111192    */
111193   if( rc==SQLITE_OK && (nBytes<nRecordBytes || iNextPage) ){
111194     rc = SQLITE_CORRUPT;
111195   }
111196
111197   if( rc==SQLITE_OK ){
111198     *ppOverflow = pFirstOverflow;
111199     *pnLocalRecordBytes = nLocalRecordBytes;
111200   }else if( pFirstOverflow ){
111201     overflowDestroy(pFirstOverflow);
111202   }
111203   return rc;
111204 }
111205
111206 /* Use in concert with overflowMaybeCreate() to efficiently read parts
111207  * of a potentially-overflowing record.  pPage and iRecordOffset are
111208  * the values passed into overflowMaybeCreate(), nLocalRecordBytes and
111209  * pOverflow are the values returned by that call.
111210  *
111211  * On SQLITE_OK, *ppBase points to nRequestBytes of data at
111212  * iRequestOffset within the record.  If the data exists contiguously
111213  * in a page, a direct pointer is returned, otherwise a buffer from
111214  * sqlite3_malloc() is returned with the data.  *pbFree is set true if
111215  * sqlite3_free() should be called on *ppBase.
111216  */
111217 /* Operation of this function is subtle.  At any time, pPage is the
111218  * current page, with iRecordOffset and nLocalRecordBytes being record
111219  * data within pPage, and pOverflow being the overflow page after
111220  * pPage.  This allows the code to handle both the initial leaf page
111221  * and overflow pages consistently by adjusting the values
111222  * appropriately.
111223  */
111224 static int overflowGetSegment(DbPage *pPage, unsigned iRecordOffset,
111225                               unsigned nLocalRecordBytes,
111226                               RecoverOverflow *pOverflow,
111227                               unsigned iRequestOffset, unsigned nRequestBytes,
111228                               unsigned char **ppBase, int *pbFree){
111229   unsigned nBase;         /* Amount of data currently collected. */
111230   unsigned char *pBase;   /* Buffer to collect record data into. */
111231
111232   /* Skip to the page containing the start of the data. */
111233   while( iRequestOffset>=nLocalRecordBytes && pOverflow ){
111234     /* Factor out current page's contribution. */
111235     iRequestOffset -= nLocalRecordBytes;
111236
111237     /* Move forward to the next page in the list. */
111238     pPage = pOverflow->pPage;
111239     iRecordOffset = 4;
111240     nLocalRecordBytes = pOverflow->nPageSize - iRecordOffset;
111241     pOverflow = pOverflow->pNextOverflow;
111242   }
111243
111244   /* If the requested data is entirely within this page, return a
111245    * pointer into the page.
111246    */
111247   if( iRequestOffset+nRequestBytes<=nLocalRecordBytes ){
111248     /* TODO(shess): "assignment discards qualifiers from pointer target type"
111249      * Having ppBase be const makes sense, but sqlite3_free() takes non-const.
111250      */
111251     *ppBase = (unsigned char *)PageData(pPage, iRecordOffset + iRequestOffset);
111252     *pbFree = 0;
111253     return SQLITE_OK;
111254   }
111255
111256   /* The data range would require additional pages. */
111257   if( !pOverflow ){
111258     /* Should never happen, the range is outside the nRecordBytes
111259      * passed to overflowMaybeCreate().
111260      */
111261     assert(NULL);  /* NOTREACHED */
111262     return SQLITE_ERROR;
111263   }
111264
111265   /* Get a buffer to construct into. */
111266   nBase = 0;
111267   pBase = sqlite3_malloc(nRequestBytes);
111268   if( !pBase ){
111269     return SQLITE_NOMEM;
111270   }
111271   while( nBase<nRequestBytes ){
111272     /* Copy over data present on this page. */
111273     unsigned nCopyBytes = nRequestBytes - nBase;
111274     if( nLocalRecordBytes-iRequestOffset<nCopyBytes ){
111275       nCopyBytes = nLocalRecordBytes - iRequestOffset;
111276     }
111277     memcpy(pBase + nBase, PageData(pPage, iRecordOffset + iRequestOffset),
111278            nCopyBytes);
111279     nBase += nCopyBytes;
111280
111281     if( pOverflow ){
111282       /* Copy from start of record data in future pages. */
111283       iRequestOffset = 0;
111284
111285       /* Move forward to the next page in the list.  Should match
111286        * first while() loop.
111287        */
111288       pPage = pOverflow->pPage;
111289       iRecordOffset = 4;
111290       nLocalRecordBytes = pOverflow->nPageSize - iRecordOffset;
111291       pOverflow = pOverflow->pNextOverflow;
111292     }else if( nBase<nRequestBytes ){
111293       /* Ran out of overflow pages with data left to deliver.  Not
111294        * possible if the requested range fits within nRecordBytes
111295        * passed to overflowMaybeCreate() when creating pOverflow.
111296        */
111297       assert(NULL);  /* NOTREACHED */
111298       sqlite3_free(pBase);
111299       return SQLITE_ERROR;
111300     }
111301   }
111302   assert( nBase==nRequestBytes );
111303   *ppBase = pBase;
111304   *pbFree = 1;
111305   return SQLITE_OK;
111306 }
111307
111308 /* Primary structure for iterating the contents of a table.
111309  *
111310  * leafCursorDestroy - release all resources associated with the cursor.
111311  * leafCursorCreate - create a cursor to iterate items from tree at
111312  *                    the provided root page.
111313  * leafCursorNextValidCell - get the cursor ready to access data from
111314  *                           the next valid cell in the table.
111315  * leafCursorCellRowid - get the current cell's rowid.
111316  * leafCursorCellColumns - get current cell's column count.
111317  * leafCursorCellColInfo - get type and data for a column in current cell.
111318  *
111319  * leafCursorNextValidCell skips cells which fail simple integrity
111320  * checks, such as overlapping other cells, or being located at
111321  * impossible offsets, or where header data doesn't correctly describe
111322  * payload data.  Returns SQLITE_ROW if a valid cell is found,
111323  * SQLITE_DONE if all pages in the tree were exhausted.
111324  *
111325  * leafCursorCellColInfo() accounts for overflow pages in the style of
111326  * overflowGetSegment().
111327  */
111328 typedef struct RecoverLeafCursor RecoverLeafCursor;
111329 struct RecoverLeafCursor {
111330   RecoverInteriorCursor *pParent;  /* Parent node to this node. */
111331   DbPage *pPage;                   /* Reference to leaf page. */
111332   unsigned nPageSize;              /* Size of pPage. */
111333   unsigned nCells;                 /* Number of cells in pPage. */
111334   unsigned iCell;                  /* Current cell. */
111335
111336   /* Info parsed from data in iCell. */
111337   i64 iRowid;                      /* rowid parsed. */
111338   unsigned nRecordCols;            /* how many items in the record. */
111339   u64 iRecordOffset;               /* offset to record data. */
111340   /* TODO(shess): nRecordBytes and nRecordHeaderBytes are used in
111341    * leafCursorCellColInfo() to prevent buffer overruns.
111342    * leafCursorCellDecode() already verified that the cell is valid, so
111343    * those checks should be redundant.
111344    */
111345   u64 nRecordBytes;                /* Size of record data. */
111346   unsigned nLocalRecordBytes;      /* Amount of record data in-page. */
111347   unsigned nRecordHeaderBytes;     /* Size of record header data. */
111348   unsigned char *pRecordHeader;    /* Pointer to record header data. */
111349   int bFreeRecordHeader;           /* True if record header requires free. */
111350   RecoverOverflow *pOverflow;      /* Cell overflow info, if needed. */
111351 };
111352
111353 /* Internal helper shared between next-page and create-cursor.  If
111354  * pPage is a leaf page, it will be stored in the cursor and state
111355  * initialized for reading cells.
111356  *
111357  * If pPage is an interior page, a new parent cursor is created and
111358  * injected on the stack.  This is necessary to handle trees with
111359  * uneven depth, but also is used during initial setup.
111360  *
111361  * If pPage is not a table page at all, it is discarded.
111362  *
111363  * If SQLITE_OK is returned, the caller no longer owns pPage,
111364  * otherwise the caller is responsible for discarding it.
111365  */
111366 static int leafCursorLoadPage(RecoverLeafCursor *pCursor, DbPage *pPage){
111367   const unsigned char *pPageHeader;  /* Header of *pPage */
111368
111369   /* Release the current page. */
111370   if( pCursor->pPage ){
111371     sqlite3PagerUnref(pCursor->pPage);
111372     pCursor->pPage = NULL;
111373     pCursor->iCell = pCursor->nCells = 0;
111374   }
111375
111376   /* If the page is an unexpected interior node, inject a new stack
111377    * layer and try again from there.
111378    */
111379   pPageHeader = PageHeader(pPage);
111380   if( pPageHeader[kiPageTypeOffset]==kTableInteriorPage ){
111381     RecoverInteriorCursor *pParent;
111382     int rc = interiorCursorCreate(pCursor->pParent, pPage, pCursor->nPageSize,
111383                                   &pParent);
111384     if( rc!=SQLITE_OK ){
111385       return rc;
111386     }
111387     pCursor->pParent = pParent;
111388     return SQLITE_OK;
111389   }
111390
111391   /* Not a leaf page, skip it. */
111392   if( pPageHeader[kiPageTypeOffset]!=kTableLeafPage ){
111393     sqlite3PagerUnref(pPage);
111394     return SQLITE_OK;
111395   }
111396
111397   /* Take ownership of the page and start decoding. */
111398   pCursor->pPage = pPage;
111399   pCursor->iCell = 0;
111400   pCursor->nCells = decodeUnsigned16(pPageHeader + kiPageCellCountOffset);
111401   return SQLITE_OK;
111402 }
111403
111404 /* Get the next leaf-level page in the tree.  Returns SQLITE_ROW when
111405  * a leaf page is found, SQLITE_DONE when no more leaves exist, or any
111406  * error which occurred.
111407  */
111408 static int leafCursorNextPage(RecoverLeafCursor *pCursor){
111409   if( !pCursor->pParent ){
111410     return SQLITE_DONE;
111411   }
111412
111413   /* Repeatedly load the parent's next child page until a leaf is found. */
111414   do {
111415     DbPage *pNextPage;
111416     int rc = interiorCursorNextPage(&pCursor->pParent, &pNextPage);
111417     if( rc!=SQLITE_ROW ){
111418       assert( rc==SQLITE_DONE );
111419       return rc;
111420     }
111421
111422     rc = leafCursorLoadPage(pCursor, pNextPage);
111423     if( rc!=SQLITE_OK ){
111424       sqlite3PagerUnref(pNextPage);
111425       return rc;
111426     }
111427   } while( !pCursor->pPage );
111428
111429   return SQLITE_ROW;
111430 }
111431
111432 static void leafCursorDestroyCellData(RecoverLeafCursor *pCursor){
111433   if( pCursor->bFreeRecordHeader ){
111434     sqlite3_free(pCursor->pRecordHeader);
111435   }
111436   pCursor->bFreeRecordHeader = 0;
111437   pCursor->pRecordHeader = NULL;
111438
111439   if( pCursor->pOverflow ){
111440     overflowDestroy(pCursor->pOverflow);
111441     pCursor->pOverflow = NULL;
111442   }
111443 }
111444
111445 static void leafCursorDestroy(RecoverLeafCursor *pCursor){
111446   leafCursorDestroyCellData(pCursor);
111447
111448   if( pCursor->pParent ){
111449     interiorCursorDestroy(pCursor->pParent);
111450     pCursor->pParent = NULL;
111451   }
111452
111453   if( pCursor->pPage ){
111454     sqlite3PagerUnref(pCursor->pPage);
111455     pCursor->pPage = NULL;
111456   }
111457
111458   memset(pCursor, 0xA5, sizeof(*pCursor));
111459   sqlite3_free(pCursor);
111460 }
111461
111462 /* Create a cursor to iterate the rows from the leaf pages of a table
111463  * rooted at iRootPage.
111464  */
111465 /* TODO(shess): recoverOpen() calls this to setup the cursor, and I
111466  * think that recoverFilter() may make a hard assumption that the
111467  * cursor returned will turn up at least one valid cell.
111468  *
111469  * The cases I can think of which break this assumption are:
111470  * - pPage is a valid leaf page with no valid cells.
111471  * - pPage is a valid interior page with no valid leaves.
111472  * - pPage is a valid interior page who's leaves contain no valid cells.
111473  * - pPage is not a valid leaf or interior page.
111474  */
111475 static int leafCursorCreate(Pager *pPager, unsigned nPageSize,
111476                             u32 iRootPage, RecoverLeafCursor **ppCursor){
111477   DbPage *pPage;               /* Reference to page at iRootPage. */
111478   RecoverLeafCursor *pCursor;  /* Leaf cursor being constructed. */
111479   int rc;
111480
111481   /* Start out with the root page. */
111482   rc = sqlite3PagerAcquire(pPager, iRootPage, &pPage, 0);
111483   if( rc!=SQLITE_OK ){
111484     return rc;
111485   }
111486
111487   pCursor = sqlite3_malloc(sizeof(RecoverLeafCursor));
111488   if( !pCursor ){
111489     sqlite3PagerUnref(pPage);
111490     return SQLITE_NOMEM;
111491   }
111492   memset(pCursor, 0, sizeof(*pCursor));
111493
111494   pCursor->nPageSize = nPageSize;
111495
111496   rc = leafCursorLoadPage(pCursor, pPage);
111497   if( rc!=SQLITE_OK ){
111498     sqlite3PagerUnref(pPage);
111499     leafCursorDestroy(pCursor);
111500     return rc;
111501   }
111502
111503   /* pPage wasn't a leaf page, find the next leaf page. */
111504   if( !pCursor->pPage ){
111505     rc = leafCursorNextPage(pCursor);
111506     if( rc!=SQLITE_DONE && rc!=SQLITE_ROW ){
111507       leafCursorDestroy(pCursor);
111508       return rc;
111509     }
111510   }
111511
111512   *ppCursor = pCursor;
111513   return SQLITE_OK;
111514 }
111515
111516 /* Useful for setting breakpoints. */
111517 static int ValidateError(){
111518   return SQLITE_ERROR;
111519 }
111520
111521 /* Setup the cursor for reading the information from cell iCell. */
111522 static int leafCursorCellDecode(RecoverLeafCursor *pCursor){
111523   const unsigned char *pPageHeader;  /* Header of current page. */
111524   const unsigned char *pPageEnd;     /* Byte after end of current page. */
111525   const unsigned char *pCellOffsets; /* Pointer to page's cell offsets. */
111526   unsigned iCellOffset;              /* Offset of current cell (iCell). */
111527   const unsigned char *pCell;        /* Pointer to data at iCellOffset. */
111528   unsigned nCellMaxBytes;            /* Maximum local size of iCell. */
111529   unsigned iEndOffset;               /* End of iCell's in-page data. */
111530   u64 nRecordBytes;                  /* Expected size of cell, w/overflow. */
111531   u64 iRowid;                        /* iCell's rowid (in table). */
111532   unsigned nRead;                    /* Amount of cell read. */
111533   unsigned nRecordHeaderRead;        /* Header data read. */
111534   u64 nRecordHeaderBytes;            /* Header size expected. */
111535   unsigned nRecordCols;              /* Columns read from header. */
111536   u64 nRecordColBytes;               /* Bytes in payload for those columns. */
111537   unsigned i;
111538   int rc;
111539
111540   assert( pCursor->iCell<pCursor->nCells );
111541
111542   leafCursorDestroyCellData(pCursor);
111543
111544   /* Find the offset to the row. */
111545   pPageHeader = PageHeader(pCursor->pPage);
111546   pCellOffsets = pPageHeader + knPageLeafHeaderBytes;
111547   pPageEnd = PageData(pCursor->pPage, pCursor->nPageSize);
111548   if( pCellOffsets + pCursor->iCell*2 + 2 > pPageEnd ){
111549     return ValidateError();
111550   }
111551   iCellOffset = decodeUnsigned16(pCellOffsets + pCursor->iCell*2);
111552   if( iCellOffset>=pCursor->nPageSize ){
111553     return ValidateError();
111554   }
111555
111556   pCell = PageData(pCursor->pPage, iCellOffset);
111557   nCellMaxBytes = pCursor->nPageSize - iCellOffset;
111558
111559   /* B-tree leaf cells lead with varint record size, varint rowid and
111560    * varint header size.
111561    */
111562   /* TODO(shess): The smallest page size is 512 bytes, which has an m
111563    * of 39.  Three varints need at most 27 bytes to encode.  I think.
111564    */
111565   if( !checkVarints(pCell, nCellMaxBytes, 3) ){
111566     return ValidateError();
111567   }
111568
111569   nRead = getVarint(pCell, &nRecordBytes);
111570   assert( iCellOffset+nRead<=pCursor->nPageSize );
111571   pCursor->nRecordBytes = nRecordBytes;
111572
111573   nRead += getVarint(pCell + nRead, &iRowid);
111574   assert( iCellOffset+nRead<=pCursor->nPageSize );
111575   pCursor->iRowid = (i64)iRowid;
111576
111577   pCursor->iRecordOffset = iCellOffset + nRead;
111578
111579   /* Start overflow setup here because nLocalRecordBytes is needed to
111580    * check cell overlap.
111581    */
111582   rc = overflowMaybeCreate(pCursor->pPage, pCursor->nPageSize,
111583                            pCursor->iRecordOffset, pCursor->nRecordBytes,
111584                            &pCursor->nLocalRecordBytes,
111585                            &pCursor->pOverflow);
111586   if( rc!=SQLITE_OK ){
111587     return ValidateError();
111588   }
111589
111590   /* Check that no other cell starts within this cell. */
111591   iEndOffset = pCursor->iRecordOffset + pCursor->nLocalRecordBytes;
111592   for( i=0; i<pCursor->nCells && pCellOffsets + i*2 + 2 <= pPageEnd; ++i ){
111593     const unsigned iOtherOffset = decodeUnsigned16(pCellOffsets + i*2);
111594     if( iOtherOffset>iCellOffset && iOtherOffset<iEndOffset ){
111595       return ValidateError();
111596     }
111597   }
111598
111599   nRecordHeaderRead = getVarint(pCell + nRead, &nRecordHeaderBytes);
111600   assert( nRecordHeaderBytes<=nRecordBytes );
111601   pCursor->nRecordHeaderBytes = nRecordHeaderBytes;
111602
111603   /* Large headers could overflow if pages are small. */
111604   rc = overflowGetSegment(pCursor->pPage,
111605                           pCursor->iRecordOffset, pCursor->nLocalRecordBytes,
111606                           pCursor->pOverflow, 0, nRecordHeaderBytes,
111607                           &pCursor->pRecordHeader, &pCursor->bFreeRecordHeader);
111608   if( rc!=SQLITE_OK ){
111609     return ValidateError();
111610   }
111611
111612   /* Tally up the column count and size of data. */
111613   nRecordCols = 0;
111614   nRecordColBytes = 0;
111615   while( nRecordHeaderRead<nRecordHeaderBytes ){
111616     u64 iSerialType;  /* Type descriptor for current column. */
111617     if( !checkVarint(pCursor->pRecordHeader + nRecordHeaderRead,
111618                      nRecordHeaderBytes - nRecordHeaderRead) ){
111619       return ValidateError();
111620     }
111621     nRecordHeaderRead += getVarint(pCursor->pRecordHeader + nRecordHeaderRead,
111622                                    &iSerialType);
111623     if( iSerialType==10 || iSerialType==11 ){
111624       return ValidateError();
111625     }
111626     nRecordColBytes += SerialTypeLength(iSerialType);
111627     nRecordCols++;
111628   }
111629   pCursor->nRecordCols = nRecordCols;
111630
111631   /* Parsing the header used as many bytes as expected. */
111632   if( nRecordHeaderRead!=nRecordHeaderBytes ){
111633     return ValidateError();
111634   }
111635
111636   /* Calculated record is size of expected record. */
111637   if( nRecordHeaderBytes+nRecordColBytes!=nRecordBytes ){
111638     return ValidateError();
111639   }
111640
111641   return SQLITE_OK;
111642 }
111643
111644 static i64 leafCursorCellRowid(RecoverLeafCursor *pCursor){
111645   return pCursor->iRowid;
111646 }
111647
111648 static unsigned leafCursorCellColumns(RecoverLeafCursor *pCursor){
111649   return pCursor->nRecordCols;
111650 }
111651
111652 /* Get the column info for the cell.  Pass NULL for ppBase to prevent
111653  * retrieving the data segment.  If *pbFree is true, *ppBase must be
111654  * freed by the caller using sqlite3_free().
111655  */
111656 static int leafCursorCellColInfo(RecoverLeafCursor *pCursor,
111657                                  unsigned iCol, u64 *piColType,
111658                                  unsigned char **ppBase, int *pbFree){
111659   const unsigned char *pRecordHeader;  /* Current cell's header. */
111660   u64 nRecordHeaderBytes;              /* Bytes in pRecordHeader. */
111661   unsigned nRead;                      /* Bytes read from header. */
111662   u64 iColEndOffset;                   /* Offset to end of column in cell. */
111663   unsigned nColsSkipped;               /* Count columns as procesed. */
111664   u64 iSerialType;                     /* Type descriptor for current column. */
111665
111666   /* Implicit NULL for columns past the end.  This case happens when
111667    * rows have not been updated since an ALTER TABLE added columns.
111668    * It is more convenient to address here than in callers.
111669    */
111670   if( iCol>=pCursor->nRecordCols ){
111671     *piColType = 0;
111672     if( ppBase ){
111673       *ppBase = 0;
111674       *pbFree = 0;
111675     }
111676     return SQLITE_OK;
111677   }
111678
111679   /* Must be able to decode header size. */
111680   pRecordHeader = pCursor->pRecordHeader;
111681   if( !checkVarint(pRecordHeader, pCursor->nRecordHeaderBytes) ){
111682     return SQLITE_CORRUPT;
111683   }
111684
111685   /* Rather than caching the header size and how many bytes it took,
111686    * decode it every time.
111687    */
111688   nRead = getVarint(pRecordHeader, &nRecordHeaderBytes);
111689   assert( nRecordHeaderBytes==pCursor->nRecordHeaderBytes );
111690
111691   /* Scan forward to the indicated column.  Scans to _after_ column
111692    * for later range checking.
111693    */
111694   /* TODO(shess): This could get expensive for very wide tables.  An
111695    * array of iSerialType could be built in leafCursorCellDecode(), but
111696    * the number of columns is dynamic per row, so it would add memory
111697    * management complexity.  Enough info to efficiently forward
111698    * iterate could be kept, if all clients forward iterate
111699    * (recoverColumn() may not).
111700    */
111701   iColEndOffset = 0;
111702   nColsSkipped = 0;
111703   while( nColsSkipped<=iCol && nRead<nRecordHeaderBytes ){
111704     if( !checkVarint(pRecordHeader + nRead, nRecordHeaderBytes - nRead) ){
111705       return SQLITE_CORRUPT;
111706     }
111707     nRead += getVarint(pRecordHeader + nRead, &iSerialType);
111708     iColEndOffset += SerialTypeLength(iSerialType);
111709     nColsSkipped++;
111710   }
111711
111712   /* Column's data extends past record's end. */
111713   if( nRecordHeaderBytes+iColEndOffset>pCursor->nRecordBytes ){
111714     return SQLITE_CORRUPT;
111715   }
111716
111717   *piColType = iSerialType;
111718   if( ppBase ){
111719     const u32 nColBytes = SerialTypeLength(iSerialType);
111720
111721     /* Offset from start of record to beginning of column. */
111722     const unsigned iColOffset = nRecordHeaderBytes+iColEndOffset-nColBytes;
111723
111724     return overflowGetSegment(pCursor->pPage, pCursor->iRecordOffset,
111725                               pCursor->nLocalRecordBytes, pCursor->pOverflow,
111726                               iColOffset, nColBytes, ppBase, pbFree);
111727   }
111728   return SQLITE_OK;
111729 }
111730
111731 static int leafCursorNextValidCell(RecoverLeafCursor *pCursor){
111732   while( 1 ){
111733     int rc;
111734
111735     /* Move to the next cell. */
111736     pCursor->iCell++;
111737
111738     /* No more cells, get the next leaf. */
111739     if( pCursor->iCell>=pCursor->nCells ){
111740       rc = leafCursorNextPage(pCursor);
111741       if( rc!=SQLITE_ROW ){
111742         return rc;
111743       }
111744       assert( pCursor->iCell==0 );
111745     }
111746
111747     /* If the cell is valid, indicate that a row is available. */
111748     rc = leafCursorCellDecode(pCursor);
111749     if( rc==SQLITE_OK ){
111750       return SQLITE_ROW;
111751     }
111752
111753     /* Iterate until done or a valid row is found. */
111754     /* TODO(shess): Remove debugging output. */
111755     fprintf(stderr, "Skipping invalid cell\n");
111756   }
111757   return SQLITE_ERROR;
111758 }
111759
111760 typedef struct Recover Recover;
111761 struct Recover {
111762   sqlite3_vtab base;
111763   sqlite3 *db;                /* Host database connection */
111764   char *zDb;                  /* Database containing target table */
111765   char *zTable;               /* Target table */
111766   unsigned nCols;             /* Number of columns in target table */
111767   unsigned char *pTypes;      /* Types of columns in target table */
111768 };
111769
111770 /* Internal helper for deleting the module. */
111771 static void recoverRelease(Recover *pRecover){
111772   sqlite3_free(pRecover->zDb);
111773   sqlite3_free(pRecover->zTable);
111774   sqlite3_free(pRecover->pTypes);
111775   memset(pRecover, 0xA5, sizeof(*pRecover));
111776   sqlite3_free(pRecover);
111777 }
111778
111779 /* Helper function for initializing the module.  Forward-declared so
111780  * recoverCreate() and recoverConnect() can see it.
111781  */
111782 static int recoverInit(
111783   sqlite3 *, void *, int, const char *const*, sqlite3_vtab **, char **
111784 );
111785
111786 static int recoverCreate(
111787   sqlite3 *db,
111788   void *pAux,
111789   int argc, const char *const*argv,
111790   sqlite3_vtab **ppVtab,
111791   char **pzErr
111792 ){
111793   FNENTRY();
111794   return recoverInit(db, pAux, argc, argv, ppVtab, pzErr);
111795 }
111796
111797 /* This should never be called. */
111798 static int recoverConnect(
111799   sqlite3 *db,
111800   void *pAux,
111801   int argc, const char *const*argv,
111802   sqlite3_vtab **ppVtab,
111803   char **pzErr
111804 ){
111805   FNENTRY();
111806   return recoverInit(db, pAux, argc, argv, ppVtab, pzErr);
111807 }
111808
111809 /* No indices supported. */
111810 static int recoverBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
111811   FNENTRY();
111812   return SQLITE_OK;
111813 }
111814
111815 /* Logically, this should never be called. */
111816 static int recoverDisconnect(sqlite3_vtab *pVtab){
111817   FNENTRY();
111818   recoverRelease((Recover*)pVtab);
111819   return SQLITE_OK;
111820 }
111821
111822 static int recoverDestroy(sqlite3_vtab *pVtab){
111823   FNENTRY();
111824   recoverRelease((Recover*)pVtab);
111825   return SQLITE_OK;
111826 }
111827
111828 typedef struct RecoverCursor RecoverCursor;
111829 struct RecoverCursor {
111830   sqlite3_vtab_cursor base;
111831   RecoverLeafCursor *pLeafCursor;
111832   int iEncoding;
111833   int bEOF;
111834 };
111835
111836 static int recoverOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){
111837   Recover *pRecover = (Recover*)pVTab;
111838   u32 iRootPage;                   /* Root page of the backing table. */
111839   int iEncoding;                   /* UTF encoding for backing database. */
111840   unsigned nPageSize;              /* Size of pages in backing database. */
111841   Pager *pPager;                   /* Backing database pager. */
111842   RecoverLeafCursor *pLeafCursor;  /* Cursor to read table's leaf pages. */
111843   RecoverCursor *pCursor;          /* Cursor to read rows from leaves. */
111844   int rc;
111845
111846   FNENTRY();
111847
111848   iRootPage = 0;
111849   rc = getRootPage(pRecover->db, pRecover->zDb, pRecover->zTable,
111850                    &iRootPage);
111851   if( rc!=SQLITE_OK ){
111852     return rc;
111853   }
111854
111855   iEncoding = 0;
111856   rc = getEncoding(pRecover->db, pRecover->zDb, &iEncoding);
111857   if( rc!=SQLITE_OK ){
111858     return rc;
111859   }
111860
111861   rc = GetPager(pRecover->db, pRecover->zDb, &pPager, &nPageSize);
111862   if( rc!=SQLITE_OK ){
111863     return rc;
111864   }
111865
111866   rc = leafCursorCreate(pPager, nPageSize, iRootPage, &pLeafCursor);
111867   if( rc!=SQLITE_OK ){
111868     return rc;
111869   }
111870
111871   pCursor = sqlite3_malloc(sizeof(RecoverCursor));
111872   if( !pCursor ){
111873     leafCursorDestroy(pLeafCursor);
111874     return SQLITE_NOMEM;
111875   }
111876   memset(pCursor, 0, sizeof(*pCursor));
111877   pCursor->base.pVtab = pVTab;
111878   pCursor->pLeafCursor = pLeafCursor;
111879   pCursor->iEncoding = iEncoding;
111880
111881   /* If no leaf pages were found, empty result set. */
111882   /* TODO(shess): leafCursorNextValidCell() would return SQLITE_ROW or
111883    * SQLITE_DONE to indicate whether there is further data to consider.
111884    */
111885   pCursor->bEOF = (pLeafCursor->pPage==NULL);
111886
111887   *ppCursor = (sqlite3_vtab_cursor*)pCursor;
111888   return SQLITE_OK;
111889 }
111890
111891 static int recoverClose(sqlite3_vtab_cursor *cur){
111892   RecoverCursor *pCursor = (RecoverCursor*)cur;
111893   FNENTRY();
111894   if( pCursor->pLeafCursor ){
111895     leafCursorDestroy(pCursor->pLeafCursor);
111896     pCursor->pLeafCursor = NULL;
111897   }
111898   memset(pCursor, 0xA5, sizeof(*pCursor));
111899   sqlite3_free(cur);
111900   return SQLITE_OK;
111901 }
111902
111903 /* Helpful place to set a breakpoint. */
111904 static int RecoverInvalidCell(){
111905   return SQLITE_ERROR;
111906 }
111907
111908 /* Returns SQLITE_OK if the cell has an appropriate number of columns
111909  * with the appropriate types of data.
111910  */
111911 static int recoverValidateLeafCell(Recover *pRecover, RecoverCursor *pCursor){
111912   unsigned i;
111913
111914   /* If the row's storage has too many columns, skip it. */
111915   if( leafCursorCellColumns(pCursor->pLeafCursor)>pRecover->nCols ){
111916     return RecoverInvalidCell();
111917   }
111918
111919   /* Skip rows with unexpected types. */
111920   for( i=0; i<pRecover->nCols; ++i ){
111921     u64 iType;  /* Storage type of column i. */
111922     int rc;
111923
111924     /* ROWID alias. */
111925     if( (pRecover->pTypes[i]&MASK_ROWID) ){
111926       continue;
111927     }
111928
111929     rc = leafCursorCellColInfo(pCursor->pLeafCursor, i, &iType, NULL, NULL);
111930     assert( rc==SQLITE_OK );
111931     if( rc!=SQLITE_OK || !SerialTypeIsCompatible(iType, pRecover->pTypes[i]) ){
111932       return RecoverInvalidCell();
111933     }
111934   }
111935
111936   return SQLITE_OK;
111937 }
111938
111939 static int recoverNext(sqlite3_vtab_cursor *pVtabCursor){
111940   RecoverCursor *pCursor = (RecoverCursor*)pVtabCursor;
111941   Recover *pRecover = (Recover*)pCursor->base.pVtab;
111942   int rc;
111943
111944   FNENTRY();
111945
111946   /* Scan forward to the next cell with valid storage, then check that
111947    * the stored data matches the schema.
111948    */
111949   while( (rc = leafCursorNextValidCell(pCursor->pLeafCursor))==SQLITE_ROW ){
111950     if( recoverValidateLeafCell(pRecover, pCursor)==SQLITE_OK ){
111951       return SQLITE_OK;
111952     }
111953   }
111954
111955   if( rc==SQLITE_DONE ){
111956     pCursor->bEOF = 1;
111957     return SQLITE_OK;
111958   }
111959
111960   assert( rc!=SQLITE_OK );
111961   return rc;
111962 }
111963
111964 static int recoverFilter(
111965   sqlite3_vtab_cursor *pVtabCursor,
111966   int idxNum, const char *idxStr,
111967   int argc, sqlite3_value **argv
111968 ){
111969   RecoverCursor *pCursor = (RecoverCursor*)pVtabCursor;
111970   Recover *pRecover = (Recover*)pCursor->base.pVtab;
111971   int rc;
111972
111973   FNENTRY();
111974
111975   /* There were no valid leaf pages in the table. */
111976   if( pCursor->bEOF ){
111977     return SQLITE_OK;
111978   }
111979
111980   /* Load the first cell, and iterate forward if it's not valid.  If no cells at
111981    * all are valid, recoverNext() sets bEOF and returns appropriately.
111982    */
111983   rc = leafCursorCellDecode(pCursor->pLeafCursor);
111984   if( rc!=SQLITE_OK || recoverValidateLeafCell(pRecover, pCursor)!=SQLITE_OK ){
111985     return recoverNext(pVtabCursor);
111986   }
111987
111988   return SQLITE_OK;
111989 }
111990
111991 static int recoverEof(sqlite3_vtab_cursor *pVtabCursor){
111992   RecoverCursor *pCursor = (RecoverCursor*)pVtabCursor;
111993   FNENTRY();
111994   return pCursor->bEOF;
111995 }
111996
111997 static int recoverColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){
111998   RecoverCursor *pCursor = (RecoverCursor*)cur;
111999   Recover *pRecover = (Recover*)pCursor->base.pVtab;
112000   u64 iColType;             /* Storage type of column i. */
112001   unsigned char *pColData;  /* Column i's data. */
112002   int shouldFree;           /* Non-zero if pColData should be freed. */
112003   int rc;
112004
112005   FNENTRY();
112006
112007   if( i>=pRecover->nCols ){
112008     return SQLITE_ERROR;
112009   }
112010
112011   /* ROWID alias. */
112012   if( (pRecover->pTypes[i]&MASK_ROWID) ){
112013     sqlite3_result_int64(ctx, leafCursorCellRowid(pCursor->pLeafCursor));
112014     return SQLITE_OK;
112015   }
112016
112017   pColData = NULL;
112018   shouldFree = 0;
112019   rc = leafCursorCellColInfo(pCursor->pLeafCursor, i, &iColType,
112020                              &pColData, &shouldFree);
112021   if( rc!=SQLITE_OK ){
112022     return rc;
112023   }
112024   /* recoverValidateLeafCell() should guarantee that this will never
112025    * occur.
112026    */
112027   if( !SerialTypeIsCompatible(iColType, pRecover->pTypes[i]) ){
112028     if( shouldFree ){
112029       sqlite3_free(pColData);
112030     }
112031     return SQLITE_ERROR;
112032   }
112033
112034   switch( iColType ){
112035     case 0 : sqlite3_result_null(ctx); break;
112036     case 1 : sqlite3_result_int64(ctx, decodeSigned(pColData, 1)); break;
112037     case 2 : sqlite3_result_int64(ctx, decodeSigned(pColData, 2)); break;
112038     case 3 : sqlite3_result_int64(ctx, decodeSigned(pColData, 3)); break;
112039     case 4 : sqlite3_result_int64(ctx, decodeSigned(pColData, 4)); break;
112040     case 5 : sqlite3_result_int64(ctx, decodeSigned(pColData, 6)); break;
112041     case 6 : sqlite3_result_int64(ctx, decodeSigned(pColData, 8)); break;
112042     case 7 : sqlite3_result_double(ctx, decodeFloat64(pColData)); break;
112043     case 8 : sqlite3_result_int(ctx, 0); break;
112044     case 9 : sqlite3_result_int(ctx, 1); break;
112045     case 10 : assert( iColType!=10 ); break;
112046     case 11 : assert( iColType!=11 ); break;
112047
112048     default : {
112049       u32 l = SerialTypeLength(iColType);
112050
112051       /* If pColData was already allocated, arrange to pass ownership. */
112052       sqlite3_destructor_type pFn = SQLITE_TRANSIENT;
112053       if( shouldFree ){
112054         pFn = sqlite3_free;
112055         shouldFree = 0;
112056       }
112057
112058       if( SerialTypeIsBlob(iColType) ){
112059         sqlite3_result_blob(ctx, pColData, l, pFn);
112060       }else{
112061         if( pCursor->iEncoding==SQLITE_UTF16LE ){
112062           sqlite3_result_text16le(ctx, (const void*)pColData, l, pFn);
112063         }else if( pCursor->iEncoding==SQLITE_UTF16BE ){
112064           sqlite3_result_text16be(ctx, (const void*)pColData, l, pFn);
112065         }else{
112066           sqlite3_result_text(ctx, (const char*)pColData, l, pFn);
112067         }
112068       }
112069     } break;
112070   }
112071   if( shouldFree ){
112072     sqlite3_free(pColData);
112073   }
112074   return SQLITE_OK;
112075 }
112076
112077 static int recoverRowid(sqlite3_vtab_cursor *pVtabCursor, sqlite_int64 *pRowid){
112078   RecoverCursor *pCursor = (RecoverCursor*)pVtabCursor;
112079   FNENTRY();
112080   *pRowid = leafCursorCellRowid(pCursor->pLeafCursor);
112081   return SQLITE_OK;
112082 }
112083
112084 static sqlite3_module recoverModule = {
112085   0,                         /* iVersion */
112086   recoverCreate,             /* xCreate - create a table */
112087   recoverConnect,            /* xConnect - connect to an existing table */
112088   recoverBestIndex,          /* xBestIndex - Determine search strategy */
112089   recoverDisconnect,         /* xDisconnect - Disconnect from a table */
112090   recoverDestroy,            /* xDestroy - Drop a table */
112091   recoverOpen,               /* xOpen - open a cursor */
112092   recoverClose,              /* xClose - close a cursor */
112093   recoverFilter,             /* xFilter - configure scan constraints */
112094   recoverNext,               /* xNext - advance a cursor */
112095   recoverEof,                /* xEof */
112096   recoverColumn,             /* xColumn - read data */
112097   recoverRowid,              /* xRowid - read data */
112098   0,                         /* xUpdate - write data */
112099   0,                         /* xBegin - begin transaction */
112100   0,                         /* xSync - sync transaction */
112101   0,                         /* xCommit - commit transaction */
112102   0,                         /* xRollback - rollback transaction */
112103   0,                         /* xFindFunction - function overloading */
112104   0,                         /* xRename - rename the table */
112105 };
112106
112107 int recoverVtableInit(sqlite3 *db){
112108   return sqlite3_create_module_v2(db, "recover", &recoverModule, NULL, 0);
112109 }
112110
112111 /* This section of code is for parsing the create input and
112112  * initializing the module.
112113  */
112114
112115 /* Find the next word in zText and place the endpoints in pzWord*.
112116  * Returns true if the word is non-empty.  "Word" is defined as
112117  * ASCII alphanumeric plus '_' at this time.
112118  */
112119 static int findWord(const char *zText,
112120                     const char **pzWordStart, const char **pzWordEnd){
112121   int r;
112122   while( ascii_isspace(*zText) ){
112123     zText++;
112124   }
112125   *pzWordStart = zText;
112126   while( ascii_isalnum(*zText) || *zText=='_' ){
112127     zText++;
112128   }
112129   r = zText>*pzWordStart;  /* In case pzWordStart==pzWordEnd */
112130   *pzWordEnd = zText;
112131   return r;
112132 }
112133
112134 /* Return true if the next word in zText is zWord, also setting
112135  * *pzContinue to the character after the word.
112136  */
112137 static int expectWord(const char *zText, const char *zWord,
112138                       const char **pzContinue){
112139   const char *zWordStart, *zWordEnd;
112140   if( findWord(zText, &zWordStart, &zWordEnd) &&
112141       ascii_strncasecmp(zWord, zWordStart, zWordEnd - zWordStart)==0 ){
112142     *pzContinue = zWordEnd;
112143     return 1;
112144   }
112145   return 0;
112146 }
112147
112148 /* Parse the name and type information out of parameter.  In case of
112149  * success, *pzNameStart/End contain the name of the column,
112150  * *pzTypeStart/End contain the top-level type, and *pTypeMask has the
112151  * type mask to use for the column.
112152  */
112153 static int findNameAndType(const char *parameter,
112154                            const char **pzNameStart, const char **pzNameEnd,
112155                            const char **pzTypeStart, const char **pzTypeEnd,
112156                            unsigned char *pTypeMask){
112157   unsigned nNameLen;   /* Length of found name. */
112158   const char *zEnd;    /* Current end of parsed column information. */
112159   int bNotNull;        /* Non-zero if NULL is not allowed for name. */
112160   int bStrict;         /* Non-zero if column requires exact type match. */
112161   const char *zDummy;  /* Dummy parameter, result unused. */
112162   unsigned i;
112163
112164   /* strictMask is used for STRICT, strictMask|otherMask if STRICT is
112165    * not supplied.  zReplace provides an alternate type to expose to
112166    * the caller.
112167    */
112168   static struct {
112169     const char *zName;
112170     unsigned char strictMask;
112171     unsigned char otherMask;
112172     const char *zReplace;
112173   } kTypeInfo[] = {
112174     { "ANY",
112175       MASK_INTEGER | MASK_FLOAT | MASK_BLOB | MASK_TEXT | MASK_NULL,
112176       0, "",
112177     },
112178     { "ROWID",   MASK_INTEGER | MASK_ROWID,             0, "INTEGER", },
112179     { "INTEGER", MASK_INTEGER | MASK_NULL,              0, NULL, },
112180     { "FLOAT",   MASK_FLOAT | MASK_NULL,                MASK_INTEGER, NULL, },
112181     { "NUMERIC", MASK_INTEGER | MASK_FLOAT | MASK_NULL, MASK_TEXT, NULL, },
112182     { "TEXT",    MASK_TEXT | MASK_NULL,                 MASK_BLOB, NULL, },
112183     { "BLOB",    MASK_BLOB | MASK_NULL,                 0, NULL, },
112184   };
112185
112186   if( !findWord(parameter, pzNameStart, pzNameEnd) ){
112187     return SQLITE_MISUSE;
112188   }
112189
112190   /* Manifest typing, accept any storage type. */
112191   if( !findWord(*pzNameEnd, pzTypeStart, pzTypeEnd) ){
112192     *pzTypeEnd = *pzTypeStart = "";
112193     *pTypeMask = MASK_INTEGER | MASK_FLOAT | MASK_BLOB | MASK_TEXT | MASK_NULL;
112194     return SQLITE_OK;
112195   }
112196
112197   nNameLen = *pzTypeEnd - *pzTypeStart;
112198   for( i=0; i<ArraySize(kTypeInfo); ++i ){
112199     if( ascii_strncasecmp(kTypeInfo[i].zName, *pzTypeStart, nNameLen)==0 ){
112200       break;
112201     }
112202   }
112203   if( i==ArraySize(kTypeInfo) ){
112204     return SQLITE_MISUSE;
112205   }
112206
112207   zEnd = *pzTypeEnd;
112208   bStrict = 0;
112209   if( expectWord(zEnd, "STRICT", &zEnd) ){
112210     /* TODO(shess): Ick.  But I don't want another single-purpose
112211      * flag, either.
112212      */
112213     if( kTypeInfo[i].zReplace && !kTypeInfo[i].zReplace[0] ){
112214       return SQLITE_MISUSE;
112215     }
112216     bStrict = 1;
112217   }
112218
112219   bNotNull = 0;
112220   if( expectWord(zEnd, "NOT", &zEnd) ){
112221     if( expectWord(zEnd, "NULL", &zEnd) ){
112222       bNotNull = 1;
112223     }else{
112224       /* Anything other than NULL after NOT is an error. */
112225       return SQLITE_MISUSE;
112226     }
112227   }
112228
112229   /* Anything else is an error. */
112230   if( findWord(zEnd, &zDummy, &zDummy) ){
112231     return SQLITE_MISUSE;
112232   }
112233
112234   *pTypeMask = kTypeInfo[i].strictMask;
112235   if( !bStrict ){
112236     *pTypeMask |= kTypeInfo[i].otherMask;
112237   }
112238   if( bNotNull ){
112239     *pTypeMask &= ~MASK_NULL;
112240   }
112241   if( kTypeInfo[i].zReplace ){
112242     *pzTypeStart = kTypeInfo[i].zReplace;
112243     *pzTypeEnd = *pzTypeStart + strlen(*pzTypeStart);
112244   }
112245   return SQLITE_OK;
112246 }
112247
112248 /* Parse the arguments, placing type masks in *pTypes and the exposed
112249  * schema in *pzCreateSql (for sqlite3_declare_vtab).
112250  */
112251 static int ParseColumnsAndGenerateCreate(unsigned nCols,
112252                                          const char *const *pCols,
112253                                          char **pzCreateSql,
112254                                          unsigned char *pTypes,
112255                                          char **pzErr){
112256   unsigned i;
112257   char *zCreateSql = sqlite3_mprintf("CREATE TABLE x(");
112258   if( !zCreateSql ){
112259     return SQLITE_NOMEM;
112260   }
112261
112262   for( i=0; i<nCols; i++ ){
112263     const char *zSep = (i < nCols - 1 ? ", " : ")");
112264     const char *zNotNull = "";
112265     const char *zNameStart, *zNameEnd;
112266     const char *zTypeStart, *zTypeEnd;
112267     int rc = findNameAndType(pCols[i],
112268                              &zNameStart, &zNameEnd,
112269                              &zTypeStart, &zTypeEnd,
112270                              &pTypes[i]);
112271     if( rc!=SQLITE_OK ){
112272       *pzErr = sqlite3_mprintf("unable to parse column %d", i);
112273       sqlite3_free(zCreateSql);
112274       return rc;
112275     }
112276
112277     if( !(pTypes[i]&MASK_NULL) ){
112278       zNotNull = " NOT NULL";
112279     }
112280
112281     /* Add name and type to the create statement. */
112282     zCreateSql = sqlite3_mprintf("%z%.*s %.*s%s%s",
112283                                  zCreateSql,
112284                                  zNameEnd - zNameStart, zNameStart,
112285                                  zTypeEnd - zTypeStart, zTypeStart,
112286                                  zNotNull, zSep);
112287     if( !zCreateSql ){
112288       return SQLITE_NOMEM;
112289     }
112290   }
112291
112292   *pzCreateSql = zCreateSql;
112293   return SQLITE_OK;
112294 }
112295
112296 /* Helper function for initializing the module. */
112297 /* argv[0] module name
112298  * argv[1] db name for virtual table
112299  * argv[2] virtual table name
112300  * argv[3] backing table name
112301  * argv[4] columns
112302  */
112303 /* TODO(shess): Since connect isn't supported, could inline into
112304  * recoverCreate().
112305  */
112306 /* TODO(shess): Explore cases where it would make sense to set *pzErr. */
112307 static int recoverInit(
112308   sqlite3 *db,                        /* Database connection */
112309   void *pAux,                         /* unused */
112310   int argc, const char *const*argv,   /* Parameters to CREATE TABLE statement */
112311   sqlite3_vtab **ppVtab,              /* OUT: New virtual table */
112312   char **pzErr                        /* OUT: Error message, if any */
112313 ){
112314   const unsigned kTypeCol = 4;  /* First argument with column type info. */
112315   Recover *pRecover;            /* Virtual table structure being created. */
112316   char *zDot;                   /* Any dot found in "db.table" backing. */
112317   u32 iRootPage;                /* Root page of backing table. */
112318   char *zCreateSql;             /* Schema of created virtual table. */
112319   int rc;
112320
112321   /* Require to be in the temp database. */
112322   if( ascii_strcasecmp(argv[1], "temp")!=0 ){
112323     *pzErr = sqlite3_mprintf("recover table must be in temp database");
112324     return SQLITE_MISUSE;
112325   }
112326
112327   /* Need the backing table and at least one column. */
112328   if( argc<=kTypeCol ){
112329     *pzErr = sqlite3_mprintf("no columns specified");
112330     return SQLITE_MISUSE;
112331   }
112332
112333   pRecover = sqlite3_malloc(sizeof(Recover));
112334   if( !pRecover ){
112335     return SQLITE_NOMEM;
112336   }
112337   memset(pRecover, 0, sizeof(*pRecover));
112338   pRecover->base.pModule = &recoverModule;
112339   pRecover->db = db;
112340
112341   /* Parse out db.table, assuming main if no dot. */
112342   zDot = strchr(argv[3], '.');
112343   if( !zDot ){
112344     pRecover->zDb = sqlite3_strdup(db->aDb[0].zName);
112345     pRecover->zTable = sqlite3_strdup(argv[3]);
112346   }else if( zDot>argv[3] && zDot[1]!='\0' ){
112347     pRecover->zDb = sqlite3_strndup(argv[3], zDot - argv[3]);
112348     pRecover->zTable = sqlite3_strdup(zDot + 1);
112349   }else{
112350     /* ".table" or "db." not allowed. */
112351     *pzErr = sqlite3_mprintf("ill-formed table specifier");
112352     recoverRelease(pRecover);
112353     return SQLITE_ERROR;
112354   }
112355
112356   pRecover->nCols = argc - kTypeCol;
112357   pRecover->pTypes = sqlite3_malloc(pRecover->nCols);
112358   if( !pRecover->zDb || !pRecover->zTable || !pRecover->pTypes ){
112359     recoverRelease(pRecover);
112360     return SQLITE_NOMEM;
112361   }
112362
112363   /* Require the backing table to exist. */
112364   /* TODO(shess): Be more pedantic about the form of the descriptor
112365    * string.  This already fails for poorly-formed strings, simply
112366    * because there won't be a root page, but it would make more sense
112367    * to be explicit.
112368    */
112369   rc = getRootPage(pRecover->db, pRecover->zDb, pRecover->zTable, &iRootPage);
112370   if( rc!=SQLITE_OK ){
112371     *pzErr = sqlite3_mprintf("unable to find backing table");
112372     recoverRelease(pRecover);
112373     return rc;
112374   }
112375
112376   /* Parse the column definitions. */
112377   rc = ParseColumnsAndGenerateCreate(pRecover->nCols, argv + kTypeCol,
112378                                      &zCreateSql, pRecover->pTypes, pzErr);
112379   if( rc!=SQLITE_OK ){
112380     recoverRelease(pRecover);
112381     return rc;
112382   }
112383
112384   rc = sqlite3_declare_vtab(db, zCreateSql);
112385   sqlite3_free(zCreateSql);
112386   if( rc!=SQLITE_OK ){
112387     recoverRelease(pRecover);
112388     return rc;
112389   }
112390
112391   *ppVtab = (sqlite3_vtab *)pRecover;
112392   return SQLITE_OK;
112393 }
112394
112395 /************** End of recover.c *********************************************/
112396 /************** Begin file fts3.c ********************************************/
112397 /*
112398 ** 2006 Oct 10
112399 **
112400 ** The author disclaims copyright to this source code.  In place of
112401 ** a legal notice, here is a blessing:
112402 **
112403 **    May you do good and not evil.
112404 **    May you find forgiveness for yourself and forgive others.
112405 **    May you share freely, never taking more than you give.
112406 **
112407 ******************************************************************************
112408 **
112409 ** This is an SQLite module implementing full-text search.
112410 */
112411
112412 /*
112413 ** The code in this file is only compiled if:
112414 **
112415 **     * The FTS3 module is being built as an extension
112416 **       (in which case SQLITE_CORE is not defined), or
112417 **
112418 **     * The FTS3 module is being built into the core of
112419 **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
112420 */
112421
112422 /* The full-text index is stored in a series of b+tree (-like)
112423 ** structures called segments which map terms to doclists.  The
112424 ** structures are like b+trees in layout, but are constructed from the
112425 ** bottom up in optimal fashion and are not updatable.  Since trees
112426 ** are built from the bottom up, things will be described from the
112427 ** bottom up.
112428 **
112429 **
112430 **** Varints ****
112431 ** The basic unit of encoding is a variable-length integer called a
112432 ** varint.  We encode variable-length integers in little-endian order
112433 ** using seven bits * per byte as follows:
112434 **
112435 ** KEY:
112436 **         A = 0xxxxxxx    7 bits of data and one flag bit
112437 **         B = 1xxxxxxx    7 bits of data and one flag bit
112438 **
112439 **  7 bits - A
112440 ** 14 bits - BA
112441 ** 21 bits - BBA
112442 ** and so on.
112443 **
112444 ** This is similar in concept to how sqlite encodes "varints" but
112445 ** the encoding is not the same.  SQLite varints are big-endian
112446 ** are are limited to 9 bytes in length whereas FTS3 varints are
112447 ** little-endian and can be up to 10 bytes in length (in theory).
112448 **
112449 ** Example encodings:
112450 **
112451 **     1:    0x01
112452 **   127:    0x7f
112453 **   128:    0x81 0x00
112454 **
112455 **
112456 **** Document lists ****
112457 ** A doclist (document list) holds a docid-sorted list of hits for a
112458 ** given term.  Doclists hold docids and associated token positions.
112459 ** A docid is the unique integer identifier for a single document.
112460 ** A position is the index of a word within the document.  The first 
112461 ** word of the document has a position of 0.
112462 **
112463 ** FTS3 used to optionally store character offsets using a compile-time
112464 ** option.  But that functionality is no longer supported.
112465 **
112466 ** A doclist is stored like this:
112467 **
112468 ** array {
112469 **   varint docid;
112470 **   array {                (position list for column 0)
112471 **     varint position;     (2 more than the delta from previous position)
112472 **   }
112473 **   array {
112474 **     varint POS_COLUMN;   (marks start of position list for new column)
112475 **     varint column;       (index of new column)
112476 **     array {
112477 **       varint position;   (2 more than the delta from previous position)
112478 **     }
112479 **   }
112480 **   varint POS_END;        (marks end of positions for this document.
112481 ** }
112482 **
112483 ** Here, array { X } means zero or more occurrences of X, adjacent in
112484 ** memory.  A "position" is an index of a token in the token stream
112485 ** generated by the tokenizer. Note that POS_END and POS_COLUMN occur 
112486 ** in the same logical place as the position element, and act as sentinals
112487 ** ending a position list array.  POS_END is 0.  POS_COLUMN is 1.
112488 ** The positions numbers are not stored literally but rather as two more
112489 ** than the difference from the prior position, or the just the position plus
112490 ** 2 for the first position.  Example:
112491 **
112492 **   label:       A B C D E  F  G H   I  J K
112493 **   value:     123 5 9 1 1 14 35 0 234 72 0
112494 **
112495 ** The 123 value is the first docid.  For column zero in this document
112496 ** there are two matches at positions 3 and 10 (5-2 and 9-2+3).  The 1
112497 ** at D signals the start of a new column; the 1 at E indicates that the
112498 ** new column is column number 1.  There are two positions at 12 and 45
112499 ** (14-2 and 35-2+12).  The 0 at H indicate the end-of-document.  The
112500 ** 234 at I is the next docid.  It has one position 72 (72-2) and then
112501 ** terminates with the 0 at K.
112502 **
112503 ** A "position-list" is the list of positions for multiple columns for
112504 ** a single docid.  A "column-list" is the set of positions for a single
112505 ** column.  Hence, a position-list consists of one or more column-lists,
112506 ** a document record consists of a docid followed by a position-list and
112507 ** a doclist consists of one or more document records.
112508 **
112509 ** A bare doclist omits the position information, becoming an 
112510 ** array of varint-encoded docids.
112511 **
112512 **** Segment leaf nodes ****
112513 ** Segment leaf nodes store terms and doclists, ordered by term.  Leaf
112514 ** nodes are written using LeafWriter, and read using LeafReader (to
112515 ** iterate through a single leaf node's data) and LeavesReader (to
112516 ** iterate through a segment's entire leaf layer).  Leaf nodes have
112517 ** the format:
112518 **
112519 ** varint iHeight;             (height from leaf level, always 0)
112520 ** varint nTerm;               (length of first term)
112521 ** char pTerm[nTerm];          (content of first term)
112522 ** varint nDoclist;            (length of term's associated doclist)
112523 ** char pDoclist[nDoclist];    (content of doclist)
112524 ** array {
112525 **                             (further terms are delta-encoded)
112526 **   varint nPrefix;           (length of prefix shared with previous term)
112527 **   varint nSuffix;           (length of unshared suffix)
112528 **   char pTermSuffix[nSuffix];(unshared suffix of next term)
112529 **   varint nDoclist;          (length of term's associated doclist)
112530 **   char pDoclist[nDoclist];  (content of doclist)
112531 ** }
112532 **
112533 ** Here, array { X } means zero or more occurrences of X, adjacent in
112534 ** memory.
112535 **
112536 ** Leaf nodes are broken into blocks which are stored contiguously in
112537 ** the %_segments table in sorted order.  This means that when the end
112538 ** of a node is reached, the next term is in the node with the next
112539 ** greater node id.
112540 **
112541 ** New data is spilled to a new leaf node when the current node
112542 ** exceeds LEAF_MAX bytes (default 2048).  New data which itself is
112543 ** larger than STANDALONE_MIN (default 1024) is placed in a standalone
112544 ** node (a leaf node with a single term and doclist).  The goal of
112545 ** these settings is to pack together groups of small doclists while
112546 ** making it efficient to directly access large doclists.  The
112547 ** assumption is that large doclists represent terms which are more
112548 ** likely to be query targets.
112549 **
112550 ** TODO(shess) It may be useful for blocking decisions to be more
112551 ** dynamic.  For instance, it may make more sense to have a 2.5k leaf
112552 ** node rather than splitting into 2k and .5k nodes.  My intuition is
112553 ** that this might extend through 2x or 4x the pagesize.
112554 **
112555 **
112556 **** Segment interior nodes ****
112557 ** Segment interior nodes store blockids for subtree nodes and terms
112558 ** to describe what data is stored by the each subtree.  Interior
112559 ** nodes are written using InteriorWriter, and read using
112560 ** InteriorReader.  InteriorWriters are created as needed when
112561 ** SegmentWriter creates new leaf nodes, or when an interior node
112562 ** itself grows too big and must be split.  The format of interior
112563 ** nodes:
112564 **
112565 ** varint iHeight;           (height from leaf level, always >0)
112566 ** varint iBlockid;          (block id of node's leftmost subtree)
112567 ** optional {
112568 **   varint nTerm;           (length of first term)
112569 **   char pTerm[nTerm];      (content of first term)
112570 **   array {
112571 **                                (further terms are delta-encoded)
112572 **     varint nPrefix;            (length of shared prefix with previous term)
112573 **     varint nSuffix;            (length of unshared suffix)
112574 **     char pTermSuffix[nSuffix]; (unshared suffix of next term)
112575 **   }
112576 ** }
112577 **
112578 ** Here, optional { X } means an optional element, while array { X }
112579 ** means zero or more occurrences of X, adjacent in memory.
112580 **
112581 ** An interior node encodes n terms separating n+1 subtrees.  The
112582 ** subtree blocks are contiguous, so only the first subtree's blockid
112583 ** is encoded.  The subtree at iBlockid will contain all terms less
112584 ** than the first term encoded (or all terms if no term is encoded).
112585 ** Otherwise, for terms greater than or equal to pTerm[i] but less
112586 ** than pTerm[i+1], the subtree for that term will be rooted at
112587 ** iBlockid+i.  Interior nodes only store enough term data to
112588 ** distinguish adjacent children (if the rightmost term of the left
112589 ** child is "something", and the leftmost term of the right child is
112590 ** "wicked", only "w" is stored).
112591 **
112592 ** New data is spilled to a new interior node at the same height when
112593 ** the current node exceeds INTERIOR_MAX bytes (default 2048).
112594 ** INTERIOR_MIN_TERMS (default 7) keeps large terms from monopolizing
112595 ** interior nodes and making the tree too skinny.  The interior nodes
112596 ** at a given height are naturally tracked by interior nodes at
112597 ** height+1, and so on.
112598 **
112599 **
112600 **** Segment directory ****
112601 ** The segment directory in table %_segdir stores meta-information for
112602 ** merging and deleting segments, and also the root node of the
112603 ** segment's tree.
112604 **
112605 ** The root node is the top node of the segment's tree after encoding
112606 ** the entire segment, restricted to ROOT_MAX bytes (default 1024).
112607 ** This could be either a leaf node or an interior node.  If the top
112608 ** node requires more than ROOT_MAX bytes, it is flushed to %_segments
112609 ** and a new root interior node is generated (which should always fit
112610 ** within ROOT_MAX because it only needs space for 2 varints, the
112611 ** height and the blockid of the previous root).
112612 **
112613 ** The meta-information in the segment directory is:
112614 **   level               - segment level (see below)
112615 **   idx                 - index within level
112616 **                       - (level,idx uniquely identify a segment)
112617 **   start_block         - first leaf node
112618 **   leaves_end_block    - last leaf node
112619 **   end_block           - last block (including interior nodes)
112620 **   root                - contents of root node
112621 **
112622 ** If the root node is a leaf node, then start_block,
112623 ** leaves_end_block, and end_block are all 0.
112624 **
112625 **
112626 **** Segment merging ****
112627 ** To amortize update costs, segments are grouped into levels and
112628 ** merged in batches.  Each increase in level represents exponentially
112629 ** more documents.
112630 **
112631 ** New documents (actually, document updates) are tokenized and
112632 ** written individually (using LeafWriter) to a level 0 segment, with
112633 ** incrementing idx.  When idx reaches MERGE_COUNT (default 16), all
112634 ** level 0 segments are merged into a single level 1 segment.  Level 1
112635 ** is populated like level 0, and eventually MERGE_COUNT level 1
112636 ** segments are merged to a single level 2 segment (representing
112637 ** MERGE_COUNT^2 updates), and so on.
112638 **
112639 ** A segment merge traverses all segments at a given level in
112640 ** parallel, performing a straightforward sorted merge.  Since segment
112641 ** leaf nodes are written in to the %_segments table in order, this
112642 ** merge traverses the underlying sqlite disk structures efficiently.
112643 ** After the merge, all segment blocks from the merged level are
112644 ** deleted.
112645 **
112646 ** MERGE_COUNT controls how often we merge segments.  16 seems to be
112647 ** somewhat of a sweet spot for insertion performance.  32 and 64 show
112648 ** very similar performance numbers to 16 on insertion, though they're
112649 ** a tiny bit slower (perhaps due to more overhead in merge-time
112650 ** sorting).  8 is about 20% slower than 16, 4 about 50% slower than
112651 ** 16, 2 about 66% slower than 16.
112652 **
112653 ** At query time, high MERGE_COUNT increases the number of segments
112654 ** which need to be scanned and merged.  For instance, with 100k docs
112655 ** inserted:
112656 **
112657 **    MERGE_COUNT   segments
112658 **       16           25
112659 **        8           12
112660 **        4           10
112661 **        2            6
112662 **
112663 ** This appears to have only a moderate impact on queries for very
112664 ** frequent terms (which are somewhat dominated by segment merge
112665 ** costs), and infrequent and non-existent terms still seem to be fast
112666 ** even with many segments.
112667 **
112668 ** TODO(shess) That said, it would be nice to have a better query-side
112669 ** argument for MERGE_COUNT of 16.  Also, it is possible/likely that
112670 ** optimizations to things like doclist merging will swing the sweet
112671 ** spot around.
112672 **
112673 **
112674 **
112675 **** Handling of deletions and updates ****
112676 ** Since we're using a segmented structure, with no docid-oriented
112677 ** index into the term index, we clearly cannot simply update the term
112678 ** index when a document is deleted or updated.  For deletions, we
112679 ** write an empty doclist (varint(docid) varint(POS_END)), for updates
112680 ** we simply write the new doclist.  Segment merges overwrite older
112681 ** data for a particular docid with newer data, so deletes or updates
112682 ** will eventually overtake the earlier data and knock it out.  The
112683 ** query logic likewise merges doclists so that newer data knocks out
112684 ** older data.
112685 **
112686 ** TODO(shess) Provide a VACUUM type operation to clear out all
112687 ** deletions and duplications.  This would basically be a forced merge
112688 ** into a single segment.
112689 */
112690 #define CHROMIUM_FTS3_CHANGES 1
112691
112692 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
112693
112694 #if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE)
112695 # define SQLITE_CORE 1
112696 #endif
112697
112698 /************** Include fts3Int.h in the middle of fts3.c ********************/
112699 /************** Begin file fts3Int.h *****************************************/
112700 /*
112701 ** 2009 Nov 12
112702 **
112703 ** The author disclaims copyright to this source code.  In place of
112704 ** a legal notice, here is a blessing:
112705 **
112706 **    May you do good and not evil.
112707 **    May you find forgiveness for yourself and forgive others.
112708 **    May you share freely, never taking more than you give.
112709 **
112710 ******************************************************************************
112711 **
112712 */
112713
112714 #ifndef _FTSINT_H
112715 #define _FTSINT_H
112716
112717 #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
112718 # define NDEBUG 1
112719 #endif
112720
112721 /************** Include fts3_tokenizer.h in the middle of fts3Int.h **********/
112722 /************** Begin file fts3_tokenizer.h **********************************/
112723 /*
112724 ** 2006 July 10
112725 **
112726 ** The author disclaims copyright to this source code.
112727 **
112728 *************************************************************************
112729 ** Defines the interface to tokenizers used by fulltext-search.  There
112730 ** are three basic components:
112731 **
112732 ** sqlite3_tokenizer_module is a singleton defining the tokenizer
112733 ** interface functions.  This is essentially the class structure for
112734 ** tokenizers.
112735 **
112736 ** sqlite3_tokenizer is used to define a particular tokenizer, perhaps
112737 ** including customization information defined at creation time.
112738 **
112739 ** sqlite3_tokenizer_cursor is generated by a tokenizer to generate
112740 ** tokens from a particular input.
112741 */
112742 #ifndef _FTS3_TOKENIZER_H_
112743 #define _FTS3_TOKENIZER_H_
112744
112745 /* TODO(shess) Only used for SQLITE_OK and SQLITE_DONE at this time.
112746 ** If tokenizers are to be allowed to call sqlite3_*() functions, then
112747 ** we will need a way to register the API consistently.
112748 */
112749
112750 /*
112751 ** Structures used by the tokenizer interface. When a new tokenizer
112752 ** implementation is registered, the caller provides a pointer to
112753 ** an sqlite3_tokenizer_module containing pointers to the callback
112754 ** functions that make up an implementation.
112755 **
112756 ** When an fts3 table is created, it passes any arguments passed to
112757 ** the tokenizer clause of the CREATE VIRTUAL TABLE statement to the
112758 ** sqlite3_tokenizer_module.xCreate() function of the requested tokenizer
112759 ** implementation. The xCreate() function in turn returns an 
112760 ** sqlite3_tokenizer structure representing the specific tokenizer to
112761 ** be used for the fts3 table (customized by the tokenizer clause arguments).
112762 **
112763 ** To tokenize an input buffer, the sqlite3_tokenizer_module.xOpen()
112764 ** method is called. It returns an sqlite3_tokenizer_cursor object
112765 ** that may be used to tokenize a specific input buffer based on
112766 ** the tokenization rules supplied by a specific sqlite3_tokenizer
112767 ** object.
112768 */
112769 typedef struct sqlite3_tokenizer_module sqlite3_tokenizer_module;
112770 typedef struct sqlite3_tokenizer sqlite3_tokenizer;
112771 typedef struct sqlite3_tokenizer_cursor sqlite3_tokenizer_cursor;
112772
112773 struct sqlite3_tokenizer_module {
112774
112775   /*
112776   ** Structure version. Should always be set to 0.
112777   */
112778   int iVersion;
112779
112780   /*
112781   ** Create a new tokenizer. The values in the argv[] array are the
112782   ** arguments passed to the "tokenizer" clause of the CREATE VIRTUAL
112783   ** TABLE statement that created the fts3 table. For example, if
112784   ** the following SQL is executed:
112785   **
112786   **   CREATE .. USING fts3( ... , tokenizer <tokenizer-name> arg1 arg2)
112787   **
112788   ** then argc is set to 2, and the argv[] array contains pointers
112789   ** to the strings "arg1" and "arg2".
112790   **
112791   ** This method should return either SQLITE_OK (0), or an SQLite error 
112792   ** code. If SQLITE_OK is returned, then *ppTokenizer should be set
112793   ** to point at the newly created tokenizer structure. The generic
112794   ** sqlite3_tokenizer.pModule variable should not be initialised by
112795   ** this callback. The caller will do so.
112796   */
112797   int (*xCreate)(
112798     int argc,                           /* Size of argv array */
112799     const char *const*argv,             /* Tokenizer argument strings */
112800     sqlite3_tokenizer **ppTokenizer     /* OUT: Created tokenizer */
112801   );
112802
112803   /*
112804   ** Destroy an existing tokenizer. The fts3 module calls this method
112805   ** exactly once for each successful call to xCreate().
112806   */
112807   int (*xDestroy)(sqlite3_tokenizer *pTokenizer);
112808
112809   /*
112810   ** Create a tokenizer cursor to tokenize an input buffer. The caller
112811   ** is responsible for ensuring that the input buffer remains valid
112812   ** until the cursor is closed (using the xClose() method). 
112813   */
112814   int (*xOpen)(
112815     sqlite3_tokenizer *pTokenizer,       /* Tokenizer object */
112816     const char *pInput, int nBytes,      /* Input buffer */
112817     sqlite3_tokenizer_cursor **ppCursor  /* OUT: Created tokenizer cursor */
112818   );
112819
112820   /*
112821   ** Destroy an existing tokenizer cursor. The fts3 module calls this 
112822   ** method exactly once for each successful call to xOpen().
112823   */
112824   int (*xClose)(sqlite3_tokenizer_cursor *pCursor);
112825
112826   /*
112827   ** Retrieve the next token from the tokenizer cursor pCursor. This
112828   ** method should either return SQLITE_OK and set the values of the
112829   ** "OUT" variables identified below, or SQLITE_DONE to indicate that
112830   ** the end of the buffer has been reached, or an SQLite error code.
112831   **
112832   ** *ppToken should be set to point at a buffer containing the 
112833   ** normalized version of the token (i.e. after any case-folding and/or
112834   ** stemming has been performed). *pnBytes should be set to the length
112835   ** of this buffer in bytes. The input text that generated the token is
112836   ** identified by the byte offsets returned in *piStartOffset and
112837   ** *piEndOffset. *piStartOffset should be set to the index of the first
112838   ** byte of the token in the input buffer. *piEndOffset should be set
112839   ** to the index of the first byte just past the end of the token in
112840   ** the input buffer.
112841   **
112842   ** The buffer *ppToken is set to point at is managed by the tokenizer
112843   ** implementation. It is only required to be valid until the next call
112844   ** to xNext() or xClose(). 
112845   */
112846   /* TODO(shess) current implementation requires pInput to be
112847   ** nul-terminated.  This should either be fixed, or pInput/nBytes
112848   ** should be converted to zInput.
112849   */
112850   int (*xNext)(
112851     sqlite3_tokenizer_cursor *pCursor,   /* Tokenizer cursor */
112852     const char **ppToken, int *pnBytes,  /* OUT: Normalized text for token */
112853     int *piStartOffset,  /* OUT: Byte offset of token in input buffer */
112854     int *piEndOffset,    /* OUT: Byte offset of end of token in input buffer */
112855     int *piPosition      /* OUT: Number of tokens returned before this one */
112856   );
112857 };
112858
112859 struct sqlite3_tokenizer {
112860   const sqlite3_tokenizer_module *pModule;  /* The module for this tokenizer */
112861   /* Tokenizer implementations will typically add additional fields */
112862 };
112863
112864 struct sqlite3_tokenizer_cursor {
112865   sqlite3_tokenizer *pTokenizer;       /* Tokenizer for this cursor. */
112866   /* Tokenizer implementations will typically add additional fields */
112867 };
112868
112869 int fts3_global_term_cnt(int iTerm, int iCol);
112870 int fts3_term_cnt(int iTerm, int iCol);
112871
112872
112873 #endif /* _FTS3_TOKENIZER_H_ */
112874
112875 /************** End of fts3_tokenizer.h **************************************/
112876 /************** Continuing where we left off in fts3Int.h ********************/
112877 /************** Include fts3_hash.h in the middle of fts3Int.h ***************/
112878 /************** Begin file fts3_hash.h ***************************************/
112879 /*
112880 ** 2001 September 22
112881 **
112882 ** The author disclaims copyright to this source code.  In place of
112883 ** a legal notice, here is a blessing:
112884 **
112885 **    May you do good and not evil.
112886 **    May you find forgiveness for yourself and forgive others.
112887 **    May you share freely, never taking more than you give.
112888 **
112889 *************************************************************************
112890 ** This is the header file for the generic hash-table implemenation
112891 ** used in SQLite.  We've modified it slightly to serve as a standalone
112892 ** hash table implementation for the full-text indexing module.
112893 **
112894 */
112895 #ifndef _FTS3_HASH_H_
112896 #define _FTS3_HASH_H_
112897
112898 /* Forward declarations of structures. */
112899 typedef struct Fts3Hash Fts3Hash;
112900 typedef struct Fts3HashElem Fts3HashElem;
112901
112902 /* A complete hash table is an instance of the following structure.
112903 ** The internals of this structure are intended to be opaque -- client
112904 ** code should not attempt to access or modify the fields of this structure
112905 ** directly.  Change this structure only by using the routines below.
112906 ** However, many of the "procedures" and "functions" for modifying and
112907 ** accessing this structure are really macros, so we can't really make
112908 ** this structure opaque.
112909 */
112910 struct Fts3Hash {
112911   char keyClass;          /* HASH_INT, _POINTER, _STRING, _BINARY */
112912   char copyKey;           /* True if copy of key made on insert */
112913   int count;              /* Number of entries in this table */
112914   Fts3HashElem *first;    /* The first element of the array */
112915   int htsize;             /* Number of buckets in the hash table */
112916   struct _fts3ht {        /* the hash table */
112917     int count;               /* Number of entries with this hash */
112918     Fts3HashElem *chain;     /* Pointer to first entry with this hash */
112919   } *ht;
112920 };
112921
112922 /* Each element in the hash table is an instance of the following 
112923 ** structure.  All elements are stored on a single doubly-linked list.
112924 **
112925 ** Again, this structure is intended to be opaque, but it can't really
112926 ** be opaque because it is used by macros.
112927 */
112928 struct Fts3HashElem {
112929   Fts3HashElem *next, *prev; /* Next and previous elements in the table */
112930   void *data;                /* Data associated with this element */
112931   void *pKey; int nKey;      /* Key associated with this element */
112932 };
112933
112934 /*
112935 ** There are 2 different modes of operation for a hash table:
112936 **
112937 **   FTS3_HASH_STRING        pKey points to a string that is nKey bytes long
112938 **                           (including the null-terminator, if any).  Case
112939 **                           is respected in comparisons.
112940 **
112941 **   FTS3_HASH_BINARY        pKey points to binary data nKey bytes long. 
112942 **                           memcmp() is used to compare keys.
112943 **
112944 ** A copy of the key is made if the copyKey parameter to fts3HashInit is 1.  
112945 */
112946 #define FTS3_HASH_STRING    1
112947 #define FTS3_HASH_BINARY    2
112948
112949 /*
112950 ** Access routines.  To delete, insert a NULL pointer.
112951 */
112952 SQLITE_PRIVATE void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey);
112953 SQLITE_PRIVATE void *sqlite3Fts3HashInsert(Fts3Hash*, const void *pKey, int nKey, void *pData);
112954 SQLITE_PRIVATE void *sqlite3Fts3HashFind(const Fts3Hash*, const void *pKey, int nKey);
112955 SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash*);
112956 SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem(const Fts3Hash *, const void *, int);
112957
112958 /*
112959 ** Shorthand for the functions above
112960 */
112961 #define fts3HashInit     sqlite3Fts3HashInit
112962 #define fts3HashInsert   sqlite3Fts3HashInsert
112963 #define fts3HashFind     sqlite3Fts3HashFind
112964 #define fts3HashClear    sqlite3Fts3HashClear
112965 #define fts3HashFindElem sqlite3Fts3HashFindElem
112966
112967 /*
112968 ** Macros for looping over all elements of a hash table.  The idiom is
112969 ** like this:
112970 **
112971 **   Fts3Hash h;
112972 **   Fts3HashElem *p;
112973 **   ...
112974 **   for(p=fts3HashFirst(&h); p; p=fts3HashNext(p)){
112975 **     SomeStructure *pData = fts3HashData(p);
112976 **     // do something with pData
112977 **   }
112978 */
112979 #define fts3HashFirst(H)  ((H)->first)
112980 #define fts3HashNext(E)   ((E)->next)
112981 #define fts3HashData(E)   ((E)->data)
112982 #define fts3HashKey(E)    ((E)->pKey)
112983 #define fts3HashKeysize(E) ((E)->nKey)
112984
112985 /*
112986 ** Number of entries in a hash table
112987 */
112988 #define fts3HashCount(H)  ((H)->count)
112989
112990 #endif /* _FTS3_HASH_H_ */
112991
112992 /************** End of fts3_hash.h *******************************************/
112993 /************** Continuing where we left off in fts3Int.h ********************/
112994
112995 /*
112996 ** This constant controls how often segments are merged. Once there are
112997 ** FTS3_MERGE_COUNT segments of level N, they are merged into a single
112998 ** segment of level N+1.
112999 */
113000 #define FTS3_MERGE_COUNT 16
113001
113002 /*
113003 ** This is the maximum amount of data (in bytes) to store in the 
113004 ** Fts3Table.pendingTerms hash table. Normally, the hash table is
113005 ** populated as documents are inserted/updated/deleted in a transaction
113006 ** and used to create a new segment when the transaction is committed.
113007 ** However if this limit is reached midway through a transaction, a new 
113008 ** segment is created and the hash table cleared immediately.
113009 */
113010 #define FTS3_MAX_PENDING_DATA (1*1024*1024)
113011
113012 /*
113013 ** Macro to return the number of elements in an array. SQLite has a
113014 ** similar macro called ArraySize(). Use a different name to avoid
113015 ** a collision when building an amalgamation with built-in FTS3.
113016 */
113017 #define SizeofArray(X) ((int)(sizeof(X)/sizeof(X[0])))
113018
113019 /*
113020 ** Maximum length of a varint encoded integer. The varint format is different
113021 ** from that used by SQLite, so the maximum length is 10, not 9.
113022 */
113023 #define FTS3_VARINT_MAX 10
113024
113025 /*
113026 ** The testcase() macro is only used by the amalgamation.  If undefined,
113027 ** make it a no-op.
113028 */
113029 #ifndef testcase
113030 # define testcase(X)
113031 #endif
113032
113033 /*
113034 ** Terminator values for position-lists and column-lists.
113035 */
113036 #define POS_COLUMN  (1)     /* Column-list terminator */
113037 #define POS_END     (0)     /* Position-list terminator */ 
113038
113039 /*
113040 ** This section provides definitions to allow the
113041 ** FTS3 extension to be compiled outside of the 
113042 ** amalgamation.
113043 */
113044 #ifndef SQLITE_AMALGAMATION
113045 /*
113046 ** Macros indicating that conditional expressions are always true or
113047 ** false.
113048 */
113049 #ifdef SQLITE_COVERAGE_TEST
113050 # define ALWAYS(x) (1)
113051 # define NEVER(X)  (0)
113052 #else
113053 # define ALWAYS(x) (x)
113054 # define NEVER(X)  (x)
113055 #endif
113056
113057 /*
113058 ** Internal types used by SQLite.
113059 */
113060 typedef unsigned char u8;         /* 1-byte (or larger) unsigned integer */
113061 typedef short int i16;            /* 2-byte (or larger) signed integer */
113062 typedef unsigned int u32;         /* 4-byte unsigned integer */
113063 typedef sqlite3_uint64 u64;       /* 8-byte unsigned integer */
113064 /*
113065 ** Macro used to suppress compiler warnings for unused parameters.
113066 */
113067 #define UNUSED_PARAMETER(x) (void)(x)
113068 #endif
113069
113070 typedef struct Fts3Table Fts3Table;
113071 typedef struct Fts3Cursor Fts3Cursor;
113072 typedef struct Fts3Expr Fts3Expr;
113073 typedef struct Fts3Phrase Fts3Phrase;
113074 typedef struct Fts3PhraseToken Fts3PhraseToken;
113075
113076 typedef struct Fts3SegFilter Fts3SegFilter;
113077 typedef struct Fts3DeferredToken Fts3DeferredToken;
113078 typedef struct Fts3SegReader Fts3SegReader;
113079 typedef struct Fts3SegReaderCursor Fts3SegReaderCursor;
113080
113081 /*
113082 ** A connection to a fulltext index is an instance of the following
113083 ** structure. The xCreate and xConnect methods create an instance
113084 ** of this structure and xDestroy and xDisconnect free that instance.
113085 ** All other methods receive a pointer to the structure as one of their
113086 ** arguments.
113087 */
113088 struct Fts3Table {
113089   sqlite3_vtab base;              /* Base class used by SQLite core */
113090   sqlite3 *db;                    /* The database connection */
113091   const char *zDb;                /* logical database name */
113092   const char *zName;              /* virtual table name */
113093   int nColumn;                    /* number of named columns in virtual table */
113094   char **azColumn;                /* column names.  malloced */
113095   sqlite3_tokenizer *pTokenizer;  /* tokenizer for inserts and queries */
113096
113097   /* Precompiled statements used by the implementation. Each of these 
113098   ** statements is run and reset within a single virtual table API call. 
113099   */
113100   sqlite3_stmt *aStmt[24];
113101
113102   char *zReadExprlist;
113103   char *zWriteExprlist;
113104
113105   int nNodeSize;                  /* Soft limit for node size */
113106   u8 bHasStat;                    /* True if %_stat table exists */
113107   u8 bHasDocsize;                 /* True if %_docsize table exists */
113108   int nPgsz;                      /* Page size for host database */
113109   char *zSegmentsTbl;             /* Name of %_segments table */
113110   sqlite3_blob *pSegments;        /* Blob handle open on %_segments table */
113111
113112   /* The following hash table is used to buffer pending index updates during
113113   ** transactions. Variable nPendingData estimates the memory size of the 
113114   ** pending data, including hash table overhead, but not malloc overhead. 
113115   ** When nPendingData exceeds nMaxPendingData, the buffer is flushed 
113116   ** automatically. Variable iPrevDocid is the docid of the most recently
113117   ** inserted record.
113118   */
113119   int nMaxPendingData;
113120   int nPendingData;
113121   sqlite_int64 iPrevDocid;
113122   Fts3Hash pendingTerms;
113123 };
113124
113125 /*
113126 ** When the core wants to read from the virtual table, it creates a
113127 ** virtual table cursor (an instance of the following structure) using
113128 ** the xOpen method. Cursors are destroyed using the xClose method.
113129 */
113130 struct Fts3Cursor {
113131   sqlite3_vtab_cursor base;       /* Base class used by SQLite core */
113132   i16 eSearch;                    /* Search strategy (see below) */
113133   u8 isEof;                       /* True if at End Of Results */
113134   u8 isRequireSeek;               /* True if must seek pStmt to %_content row */
113135   sqlite3_stmt *pStmt;            /* Prepared statement in use by the cursor */
113136   Fts3Expr *pExpr;                /* Parsed MATCH query string */
113137   int nPhrase;                    /* Number of matchable phrases in query */
113138   Fts3DeferredToken *pDeferred;   /* Deferred search tokens, if any */
113139   sqlite3_int64 iPrevId;          /* Previous id read from aDoclist */
113140   char *pNextId;                  /* Pointer into the body of aDoclist */
113141   char *aDoclist;                 /* List of docids for full-text queries */
113142   int nDoclist;                   /* Size of buffer at aDoclist */
113143   int eEvalmode;                  /* An FTS3_EVAL_XX constant */
113144   int nRowAvg;                    /* Average size of database rows, in pages */
113145
113146   int isMatchinfoNeeded;          /* True when aMatchinfo[] needs filling in */
113147   u32 *aMatchinfo;                /* Information about most recent match */
113148   int nMatchinfo;                 /* Number of elements in aMatchinfo[] */
113149   char *zMatchinfo;               /* Matchinfo specification */
113150 };
113151
113152 #define FTS3_EVAL_FILTER    0
113153 #define FTS3_EVAL_NEXT      1
113154 #define FTS3_EVAL_MATCHINFO 2
113155
113156 /*
113157 ** The Fts3Cursor.eSearch member is always set to one of the following.
113158 ** Actualy, Fts3Cursor.eSearch can be greater than or equal to
113159 ** FTS3_FULLTEXT_SEARCH.  If so, then Fts3Cursor.eSearch - 2 is the index
113160 ** of the column to be searched.  For example, in
113161 **
113162 **     CREATE VIRTUAL TABLE ex1 USING fts3(a,b,c,d);
113163 **     SELECT docid FROM ex1 WHERE b MATCH 'one two three';
113164 ** 
113165 ** Because the LHS of the MATCH operator is 2nd column "b",
113166 ** Fts3Cursor.eSearch will be set to FTS3_FULLTEXT_SEARCH+1.  (+0 for a,
113167 ** +1 for b, +2 for c, +3 for d.)  If the LHS of MATCH were "ex1" 
113168 ** indicating that all columns should be searched,
113169 ** then eSearch would be set to FTS3_FULLTEXT_SEARCH+4.
113170 */
113171 #define FTS3_FULLSCAN_SEARCH 0    /* Linear scan of %_content table */
113172 #define FTS3_DOCID_SEARCH    1    /* Lookup by rowid on %_content table */
113173 #define FTS3_FULLTEXT_SEARCH 2    /* Full-text index search */
113174
113175 /*
113176 ** A "phrase" is a sequence of one or more tokens that must match in
113177 ** sequence.  A single token is the base case and the most common case.
113178 ** For a sequence of tokens contained in double-quotes (i.e. "one two three")
113179 ** nToken will be the number of tokens in the string.
113180 **
113181 ** The nDocMatch and nMatch variables contain data that may be used by the
113182 ** matchinfo() function. They are populated when the full-text index is 
113183 ** queried for hits on the phrase. If one or more tokens in the phrase
113184 ** are deferred, the nDocMatch and nMatch variables are populated based
113185 ** on the assumption that the 
113186 */
113187 struct Fts3PhraseToken {
113188   char *z;                        /* Text of the token */
113189   int n;                          /* Number of bytes in buffer z */
113190   int isPrefix;                   /* True if token ends with a "*" character */
113191   int bFulltext;                  /* True if full-text index was used */
113192   Fts3SegReaderCursor *pSegcsr;   /* Segment-reader for this token */
113193   Fts3DeferredToken *pDeferred;   /* Deferred token object for this token */
113194 };
113195
113196 struct Fts3Phrase {
113197   /* Variables populated by fts3_expr.c when parsing a MATCH expression */
113198   int nToken;                /* Number of tokens in the phrase */
113199   int iColumn;               /* Index of column this phrase must match */
113200   int isNot;                 /* Phrase prefixed by unary not (-) operator */
113201   Fts3PhraseToken aToken[1]; /* One entry for each token in the phrase */
113202 };
113203
113204 /*
113205 ** A tree of these objects forms the RHS of a MATCH operator.
113206 **
113207 ** If Fts3Expr.eType is either FTSQUERY_NEAR or FTSQUERY_PHRASE and isLoaded
113208 ** is true, then aDoclist points to a malloced buffer, size nDoclist bytes, 
113209 ** containing the results of the NEAR or phrase query in FTS3 doclist
113210 ** format. As usual, the initial "Length" field found in doclists stored
113211 ** on disk is omitted from this buffer.
113212 **
113213 ** Variable pCurrent always points to the start of a docid field within
113214 ** aDoclist. Since the doclist is usually scanned in docid order, this can
113215 ** be used to accelerate seeking to the required docid within the doclist.
113216 */
113217 struct Fts3Expr {
113218   int eType;                 /* One of the FTSQUERY_XXX values defined below */
113219   int nNear;                 /* Valid if eType==FTSQUERY_NEAR */
113220   Fts3Expr *pParent;         /* pParent->pLeft==this or pParent->pRight==this */
113221   Fts3Expr *pLeft;           /* Left operand */
113222   Fts3Expr *pRight;          /* Right operand */
113223   Fts3Phrase *pPhrase;       /* Valid if eType==FTSQUERY_PHRASE */
113224
113225   int isLoaded;              /* True if aDoclist/nDoclist are initialized. */
113226   char *aDoclist;            /* Buffer containing doclist */
113227   int nDoclist;              /* Size of aDoclist in bytes */
113228
113229   sqlite3_int64 iCurrent;
113230   char *pCurrent;
113231 };
113232
113233 /*
113234 ** Candidate values for Fts3Query.eType. Note that the order of the first
113235 ** four values is in order of precedence when parsing expressions. For 
113236 ** example, the following:
113237 **
113238 **   "a OR b AND c NOT d NEAR e"
113239 **
113240 ** is equivalent to:
113241 **
113242 **   "a OR (b AND (c NOT (d NEAR e)))"
113243 */
113244 #define FTSQUERY_NEAR   1
113245 #define FTSQUERY_NOT    2
113246 #define FTSQUERY_AND    3
113247 #define FTSQUERY_OR     4
113248 #define FTSQUERY_PHRASE 5
113249
113250
113251 /* fts3_write.c */
113252 SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(sqlite3_vtab*,int,sqlite3_value**,sqlite3_int64*);
113253 SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *);
113254 SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *);
113255 SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *);
113256 SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(int, sqlite3_int64,
113257   sqlite3_int64, sqlite3_int64, const char *, int, Fts3SegReader**);
113258 SQLITE_PRIVATE int sqlite3Fts3SegReaderPending(Fts3Table*,const char*,int,int,Fts3SegReader**);
113259 SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *);
113260 SQLITE_PRIVATE int sqlite3Fts3SegReaderCost(Fts3Cursor *, Fts3SegReader *, int *);
113261 SQLITE_PRIVATE int sqlite3Fts3AllSegdirs(Fts3Table*, int, sqlite3_stmt **);
113262 SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *);
113263 SQLITE_PRIVATE int sqlite3Fts3ReadBlock(Fts3Table*, sqlite3_int64, char **, int*);
113264
113265 SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal(Fts3Table *, sqlite3_stmt **);
113266 SQLITE_PRIVATE int sqlite3Fts3SelectDocsize(Fts3Table *, sqlite3_int64, sqlite3_stmt **);
113267
113268 SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *);
113269 SQLITE_PRIVATE int sqlite3Fts3DeferToken(Fts3Cursor *, Fts3PhraseToken *, int);
113270 SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *);
113271 SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *);
113272 SQLITE_PRIVATE char *sqlite3Fts3DeferredDoclist(Fts3DeferredToken *, int *);
113273 SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *);
113274
113275 #define FTS3_SEGCURSOR_PENDING -1
113276 #define FTS3_SEGCURSOR_ALL     -2
113277
113278 SQLITE_PRIVATE int sqlite3Fts3SegReaderStart(Fts3Table*, Fts3SegReaderCursor*, Fts3SegFilter*);
113279 SQLITE_PRIVATE int sqlite3Fts3SegReaderStep(Fts3Table *, Fts3SegReaderCursor *);
113280 SQLITE_PRIVATE void sqlite3Fts3SegReaderFinish(Fts3SegReaderCursor *);
113281 SQLITE_PRIVATE int sqlite3Fts3SegReaderCursor(
113282     Fts3Table *, int, const char *, int, int, int, Fts3SegReaderCursor *);
113283
113284 /* Flags allowed as part of the 4th argument to SegmentReaderIterate() */
113285 #define FTS3_SEGMENT_REQUIRE_POS   0x00000001
113286 #define FTS3_SEGMENT_IGNORE_EMPTY  0x00000002
113287 #define FTS3_SEGMENT_COLUMN_FILTER 0x00000004
113288 #define FTS3_SEGMENT_PREFIX        0x00000008
113289 #define FTS3_SEGMENT_SCAN          0x00000010
113290
113291 /* Type passed as 4th argument to SegmentReaderIterate() */
113292 struct Fts3SegFilter {
113293   const char *zTerm;
113294   int nTerm;
113295   int iCol;
113296   int flags;
113297 };
113298
113299 struct Fts3SegReaderCursor {
113300   /* Used internally by sqlite3Fts3SegReaderXXX() calls */
113301   Fts3SegReader **apSegment;      /* Array of Fts3SegReader objects */
113302   int nSegment;                   /* Size of apSegment array */
113303   int nAdvance;                   /* How many seg-readers to advance */
113304   Fts3SegFilter *pFilter;         /* Pointer to filter object */
113305   char *aBuffer;                  /* Buffer to merge doclists in */
113306   int nBuffer;                    /* Allocated size of aBuffer[] in bytes */
113307
113308   /* Cost of running this iterator. Used by fts3.c only. */
113309   int nCost;
113310
113311   /* Output values. Valid only after Fts3SegReaderStep() returns SQLITE_ROW. */
113312   char *zTerm;                    /* Pointer to term buffer */
113313   int nTerm;                      /* Size of zTerm in bytes */
113314   char *aDoclist;                 /* Pointer to doclist buffer */
113315   int nDoclist;                   /* Size of aDoclist[] in bytes */
113316 };
113317
113318 /* fts3.c */
113319 SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *, sqlite3_int64);
113320 SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *, sqlite_int64 *);
113321 SQLITE_PRIVATE int sqlite3Fts3GetVarint32(const char *, int *);
113322 SQLITE_PRIVATE int sqlite3Fts3VarintLen(sqlite3_uint64);
113323 SQLITE_PRIVATE void sqlite3Fts3Dequote(char *);
113324
113325 SQLITE_PRIVATE char *sqlite3Fts3FindPositions(Fts3Expr *, sqlite3_int64, int);
113326 SQLITE_PRIVATE int sqlite3Fts3ExprLoadDoclist(Fts3Cursor *, Fts3Expr *);
113327 SQLITE_PRIVATE int sqlite3Fts3ExprLoadFtDoclist(Fts3Cursor *, Fts3Expr *, char **, int *);
113328 SQLITE_PRIVATE int sqlite3Fts3ExprNearTrim(Fts3Expr *, Fts3Expr *, int);
113329
113330 /* fts3_tokenizer.c */
113331 SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *, int *);
113332 SQLITE_PRIVATE int sqlite3Fts3InitHashTable(sqlite3 *, Fts3Hash *, const char *);
113333 SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(Fts3Hash *pHash, const char *, 
113334     sqlite3_tokenizer **, char **
113335 );
113336 SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char);
113337
113338 /* fts3_snippet.c */
113339 SQLITE_PRIVATE void sqlite3Fts3Offsets(sqlite3_context*, Fts3Cursor*);
113340 SQLITE_PRIVATE void sqlite3Fts3Snippet(sqlite3_context *, Fts3Cursor *, const char *,
113341   const char *, const char *, int, int
113342 );
113343 SQLITE_PRIVATE void sqlite3Fts3Matchinfo(sqlite3_context *, Fts3Cursor *, const char *);
113344
113345 /* fts3_expr.c */
113346 SQLITE_PRIVATE int sqlite3Fts3ExprParse(sqlite3_tokenizer *, 
113347   char **, int, int, const char *, int, Fts3Expr **
113348 );
113349 SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *);
113350 #ifdef SQLITE_TEST
113351 SQLITE_PRIVATE int sqlite3Fts3ExprInitTestInterface(sqlite3 *db);
113352 #endif
113353
113354 /* fts3_aux.c */
113355 SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db);
113356
113357 #endif /* _FTSINT_H */
113358
113359 /************** End of fts3Int.h *********************************************/
113360 /************** Continuing where we left off in fts3.c ***********************/
113361
113362
113363 #ifndef SQLITE_CORE 
113364   SQLITE_EXTENSION_INIT1
113365 #endif
113366
113367 /* 
113368 ** Write a 64-bit variable-length integer to memory starting at p[0].
113369 ** The length of data written will be between 1 and FTS3_VARINT_MAX bytes.
113370 ** The number of bytes written is returned.
113371 */
113372 SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *p, sqlite_int64 v){
113373   unsigned char *q = (unsigned char *) p;
113374   sqlite_uint64 vu = v;
113375   do{
113376     *q++ = (unsigned char) ((vu & 0x7f) | 0x80);
113377     vu >>= 7;
113378   }while( vu!=0 );
113379   q[-1] &= 0x7f;  /* turn off high bit in final byte */
113380   assert( q - (unsigned char *)p <= FTS3_VARINT_MAX );
113381   return (int) (q - (unsigned char *)p);
113382 }
113383
113384 /* 
113385 ** Read a 64-bit variable-length integer from memory starting at p[0].
113386 ** Return the number of bytes read, or 0 on error.
113387 ** The value is stored in *v.
113388 */
113389 SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *p, sqlite_int64 *v){
113390   const unsigned char *q = (const unsigned char *) p;
113391   sqlite_uint64 x = 0, y = 1;
113392   while( (*q&0x80)==0x80 && q-(unsigned char *)p<FTS3_VARINT_MAX ){
113393     x += y * (*q++ & 0x7f);
113394     y <<= 7;
113395   }
113396   x += y * (*q++);
113397   *v = (sqlite_int64) x;
113398   return (int) (q - (unsigned char *)p);
113399 }
113400
113401 /*
113402 ** Similar to sqlite3Fts3GetVarint(), except that the output is truncated to a
113403 ** 32-bit integer before it is returned.
113404 */
113405 SQLITE_PRIVATE int sqlite3Fts3GetVarint32(const char *p, int *pi){
113406  sqlite_int64 i;
113407  int ret = sqlite3Fts3GetVarint(p, &i);
113408  *pi = (int) i;
113409  return ret;
113410 }
113411
113412 /*
113413 ** Return the number of bytes required to encode v as a varint
113414 */
113415 SQLITE_PRIVATE int sqlite3Fts3VarintLen(sqlite3_uint64 v){
113416   int i = 0;
113417   do{
113418     i++;
113419     v >>= 7;
113420   }while( v!=0 );
113421   return i;
113422 }
113423
113424 /*
113425 ** Convert an SQL-style quoted string into a normal string by removing
113426 ** the quote characters.  The conversion is done in-place.  If the
113427 ** input does not begin with a quote character, then this routine
113428 ** is a no-op.
113429 **
113430 ** Examples:
113431 **
113432 **     "abc"   becomes   abc
113433 **     'xyz'   becomes   xyz
113434 **     [pqr]   becomes   pqr
113435 **     `mno`   becomes   mno
113436 **
113437 */
113438 SQLITE_PRIVATE void sqlite3Fts3Dequote(char *z){
113439   char quote;                     /* Quote character (if any ) */
113440
113441   quote = z[0];
113442   if( quote=='[' || quote=='\'' || quote=='"' || quote=='`' ){
113443     int iIn = 1;                  /* Index of next byte to read from input */
113444     int iOut = 0;                 /* Index of next byte to write to output */
113445
113446     /* If the first byte was a '[', then the close-quote character is a ']' */
113447     if( quote=='[' ) quote = ']';  
113448
113449     while( ALWAYS(z[iIn]) ){
113450       if( z[iIn]==quote ){
113451         if( z[iIn+1]!=quote ) break;
113452         z[iOut++] = quote;
113453         iIn += 2;
113454       }else{
113455         z[iOut++] = z[iIn++];
113456       }
113457     }
113458     z[iOut] = '\0';
113459   }
113460 }
113461
113462 /*
113463 ** Read a single varint from the doclist at *pp and advance *pp to point
113464 ** to the first byte past the end of the varint.  Add the value of the varint
113465 ** to *pVal.
113466 */
113467 static void fts3GetDeltaVarint(char **pp, sqlite3_int64 *pVal){
113468   sqlite3_int64 iVal;
113469   *pp += sqlite3Fts3GetVarint(*pp, &iVal);
113470   *pVal += iVal;
113471 }
113472
113473 /*
113474 ** As long as *pp has not reached its end (pEnd), then do the same
113475 ** as fts3GetDeltaVarint(): read a single varint and add it to *pVal.
113476 ** But if we have reached the end of the varint, just set *pp=0 and
113477 ** leave *pVal unchanged.
113478 */
113479 static void fts3GetDeltaVarint2(char **pp, char *pEnd, sqlite3_int64 *pVal){
113480   if( *pp>=pEnd ){
113481     *pp = 0;
113482   }else{
113483     fts3GetDeltaVarint(pp, pVal);
113484   }
113485 }
113486
113487 /*
113488 ** The xDisconnect() virtual table method.
113489 */
113490 static int fts3DisconnectMethod(sqlite3_vtab *pVtab){
113491   Fts3Table *p = (Fts3Table *)pVtab;
113492   int i;
113493
113494   assert( p->nPendingData==0 );
113495   assert( p->pSegments==0 );
113496
113497   /* Free any prepared statements held */
113498   for(i=0; i<SizeofArray(p->aStmt); i++){
113499     sqlite3_finalize(p->aStmt[i]);
113500   }
113501   sqlite3_free(p->zSegmentsTbl);
113502   sqlite3_free(p->zReadExprlist);
113503   sqlite3_free(p->zWriteExprlist);
113504
113505   /* Invoke the tokenizer destructor to free the tokenizer. */
113506   p->pTokenizer->pModule->xDestroy(p->pTokenizer);
113507
113508   sqlite3_free(p);
113509   return SQLITE_OK;
113510 }
113511
113512 /*
113513 ** Construct one or more SQL statements from the format string given
113514 ** and then evaluate those statements. The success code is written
113515 ** into *pRc.
113516 **
113517 ** If *pRc is initially non-zero then this routine is a no-op.
113518 */
113519 static void fts3DbExec(
113520   int *pRc,              /* Success code */
113521   sqlite3 *db,           /* Database in which to run SQL */
113522   const char *zFormat,   /* Format string for SQL */
113523   ...                    /* Arguments to the format string */
113524 ){
113525   va_list ap;
113526   char *zSql;
113527   if( *pRc ) return;
113528   va_start(ap, zFormat);
113529   zSql = sqlite3_vmprintf(zFormat, ap);
113530   va_end(ap);
113531   if( zSql==0 ){
113532     *pRc = SQLITE_NOMEM;
113533   }else{
113534     *pRc = sqlite3_exec(db, zSql, 0, 0, 0);
113535     sqlite3_free(zSql);
113536   }
113537 }
113538
113539 /*
113540 ** The xDestroy() virtual table method.
113541 */
113542 static int fts3DestroyMethod(sqlite3_vtab *pVtab){
113543   int rc = SQLITE_OK;              /* Return code */
113544   Fts3Table *p = (Fts3Table *)pVtab;
113545   sqlite3 *db = p->db;
113546
113547   /* Drop the shadow tables */
113548   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_content'", p->zDb, p->zName);
113549   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_segments'", p->zDb,p->zName);
113550   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_segdir'", p->zDb, p->zName);
113551   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_docsize'", p->zDb, p->zName);
113552   fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_stat'", p->zDb, p->zName);
113553
113554   /* If everything has worked, invoke fts3DisconnectMethod() to free the
113555   ** memory associated with the Fts3Table structure and return SQLITE_OK.
113556   ** Otherwise, return an SQLite error code.
113557   */
113558   return (rc==SQLITE_OK ? fts3DisconnectMethod(pVtab) : rc);
113559 }
113560
113561
113562 /*
113563 ** Invoke sqlite3_declare_vtab() to declare the schema for the FTS3 table
113564 ** passed as the first argument. This is done as part of the xConnect()
113565 ** and xCreate() methods.
113566 **
113567 ** If *pRc is non-zero when this function is called, it is a no-op. 
113568 ** Otherwise, if an error occurs, an SQLite error code is stored in *pRc
113569 ** before returning.
113570 */
113571 static void fts3DeclareVtab(int *pRc, Fts3Table *p){
113572   if( *pRc==SQLITE_OK ){
113573     int i;                        /* Iterator variable */
113574     int rc;                       /* Return code */
113575     char *zSql;                   /* SQL statement passed to declare_vtab() */
113576     char *zCols;                  /* List of user defined columns */
113577
113578     /* Create a list of user columns for the virtual table */
113579     zCols = sqlite3_mprintf("%Q, ", p->azColumn[0]);
113580     for(i=1; zCols && i<p->nColumn; i++){
113581       zCols = sqlite3_mprintf("%z%Q, ", zCols, p->azColumn[i]);
113582     }
113583
113584     /* Create the whole "CREATE TABLE" statement to pass to SQLite */
113585     zSql = sqlite3_mprintf(
113586         "CREATE TABLE x(%s %Q HIDDEN, docid HIDDEN)", zCols, p->zName
113587     );
113588     if( !zCols || !zSql ){
113589       rc = SQLITE_NOMEM;
113590     }else{
113591       rc = sqlite3_declare_vtab(p->db, zSql);
113592     }
113593
113594     sqlite3_free(zSql);
113595     sqlite3_free(zCols);
113596     *pRc = rc;
113597   }
113598 }
113599
113600 /*
113601 ** Create the backing store tables (%_content, %_segments and %_segdir)
113602 ** required by the FTS3 table passed as the only argument. This is done
113603 ** as part of the vtab xCreate() method.
113604 **
113605 ** If the p->bHasDocsize boolean is true (indicating that this is an
113606 ** FTS4 table, not an FTS3 table) then also create the %_docsize and
113607 ** %_stat tables required by FTS4.
113608 */
113609 static int fts3CreateTables(Fts3Table *p){
113610   int rc = SQLITE_OK;             /* Return code */
113611   int i;                          /* Iterator variable */
113612   char *zContentCols;             /* Columns of %_content table */
113613   sqlite3 *db = p->db;            /* The database connection */
113614
113615   /* Create a list of user columns for the content table */
113616   zContentCols = sqlite3_mprintf("docid INTEGER PRIMARY KEY");
113617   for(i=0; zContentCols && i<p->nColumn; i++){
113618     char *z = p->azColumn[i];
113619     zContentCols = sqlite3_mprintf("%z, 'c%d%q'", zContentCols, i, z);
113620   }
113621   if( zContentCols==0 ) rc = SQLITE_NOMEM;
113622
113623   /* Create the content table */
113624   fts3DbExec(&rc, db, 
113625      "CREATE TABLE %Q.'%q_content'(%s)",
113626      p->zDb, p->zName, zContentCols
113627   );
113628   sqlite3_free(zContentCols);
113629   /* Create other tables */
113630   fts3DbExec(&rc, db, 
113631       "CREATE TABLE %Q.'%q_segments'(blockid INTEGER PRIMARY KEY, block BLOB);",
113632       p->zDb, p->zName
113633   );
113634   fts3DbExec(&rc, db, 
113635       "CREATE TABLE %Q.'%q_segdir'("
113636         "level INTEGER,"
113637         "idx INTEGER,"
113638         "start_block INTEGER,"
113639         "leaves_end_block INTEGER,"
113640         "end_block INTEGER,"
113641         "root BLOB,"
113642         "PRIMARY KEY(level, idx)"
113643       ");",
113644       p->zDb, p->zName
113645   );
113646   if( p->bHasDocsize ){
113647     fts3DbExec(&rc, db, 
113648         "CREATE TABLE %Q.'%q_docsize'(docid INTEGER PRIMARY KEY, size BLOB);",
113649         p->zDb, p->zName
113650     );
113651   }
113652   if( p->bHasStat ){
113653     fts3DbExec(&rc, db, 
113654         "CREATE TABLE %Q.'%q_stat'(id INTEGER PRIMARY KEY, value BLOB);",
113655         p->zDb, p->zName
113656     );
113657   }
113658   return rc;
113659 }
113660
113661 /*
113662 ** Store the current database page-size in bytes in p->nPgsz.
113663 **
113664 ** If *pRc is non-zero when this function is called, it is a no-op. 
113665 ** Otherwise, if an error occurs, an SQLite error code is stored in *pRc
113666 ** before returning.
113667 */
113668 static void fts3DatabasePageSize(int *pRc, Fts3Table *p){
113669   if( *pRc==SQLITE_OK ){
113670     int rc;                       /* Return code */
113671     char *zSql;                   /* SQL text "PRAGMA %Q.page_size" */
113672     sqlite3_stmt *pStmt;          /* Compiled "PRAGMA %Q.page_size" statement */
113673   
113674     zSql = sqlite3_mprintf("PRAGMA %Q.page_size", p->zDb);
113675     if( !zSql ){
113676       rc = SQLITE_NOMEM;
113677     }else{
113678       rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
113679       if( rc==SQLITE_OK ){
113680         sqlite3_step(pStmt);
113681         p->nPgsz = sqlite3_column_int(pStmt, 0);
113682         rc = sqlite3_finalize(pStmt);
113683       }else if( rc==SQLITE_AUTH ){
113684         p->nPgsz = 1024;
113685         rc = SQLITE_OK;
113686       }
113687     }
113688     assert( p->nPgsz>0 || rc!=SQLITE_OK );
113689     sqlite3_free(zSql);
113690     *pRc = rc;
113691   }
113692 }
113693
113694 /*
113695 ** "Special" FTS4 arguments are column specifications of the following form:
113696 **
113697 **   <key> = <value>
113698 **
113699 ** There may not be whitespace surrounding the "=" character. The <value> 
113700 ** term may be quoted, but the <key> may not.
113701 */
113702 static int fts3IsSpecialColumn(
113703   const char *z, 
113704   int *pnKey,
113705   char **pzValue
113706 ){
113707   char *zValue;
113708   const char *zCsr = z;
113709
113710   while( *zCsr!='=' ){
113711     if( *zCsr=='\0' ) return 0;
113712     zCsr++;
113713   }
113714
113715   *pnKey = (int)(zCsr-z);
113716   zValue = sqlite3_mprintf("%s", &zCsr[1]);
113717   if( zValue ){
113718     sqlite3Fts3Dequote(zValue);
113719   }
113720   *pzValue = zValue;
113721   return 1;
113722 }
113723
113724 /*
113725 ** Append the output of a printf() style formatting to an existing string.
113726 */
113727 static void fts3Appendf(
113728   int *pRc,                       /* IN/OUT: Error code */
113729   char **pz,                      /* IN/OUT: Pointer to string buffer */
113730   const char *zFormat,            /* Printf format string to append */
113731   ...                             /* Arguments for printf format string */
113732 ){
113733   if( *pRc==SQLITE_OK ){
113734     va_list ap;
113735     char *z;
113736     va_start(ap, zFormat);
113737     z = sqlite3_vmprintf(zFormat, ap);
113738     if( z && *pz ){
113739       char *z2 = sqlite3_mprintf("%s%s", *pz, z);
113740       sqlite3_free(z);
113741       z = z2;
113742     }
113743     if( z==0 ) *pRc = SQLITE_NOMEM;
113744     sqlite3_free(*pz);
113745     *pz = z;
113746   }
113747 }
113748
113749 /*
113750 ** Return a copy of input string zInput enclosed in double-quotes (") and
113751 ** with all double quote characters escaped. For example:
113752 **
113753 **     fts3QuoteId("un \"zip\"")   ->    "un \"\"zip\"\""
113754 **
113755 ** The pointer returned points to memory obtained from sqlite3_malloc(). It
113756 ** is the callers responsibility to call sqlite3_free() to release this
113757 ** memory.
113758 */
113759 static char *fts3QuoteId(char const *zInput){
113760   int nRet;
113761   char *zRet;
113762   nRet = 2 + strlen(zInput)*2 + 1;
113763   zRet = sqlite3_malloc(nRet);
113764   if( zRet ){
113765     int i;
113766     char *z = zRet;
113767     *(z++) = '"';
113768     for(i=0; zInput[i]; i++){
113769       if( zInput[i]=='"' ) *(z++) = '"';
113770       *(z++) = zInput[i];
113771     }
113772     *(z++) = '"';
113773     *(z++) = '\0';
113774   }
113775   return zRet;
113776 }
113777
113778 /*
113779 ** Return a list of comma separated SQL expressions that could be used
113780 ** in a SELECT statement such as the following:
113781 **
113782 **     SELECT <list of expressions> FROM %_content AS x ...
113783 **
113784 ** to return the docid, followed by each column of text data in order
113785 ** from left to write. If parameter zFunc is not NULL, then instead of
113786 ** being returned directly each column of text data is passed to an SQL
113787 ** function named zFunc first. For example, if zFunc is "unzip" and the
113788 ** table has the three user-defined columns "a", "b", and "c", the following
113789 ** string is returned:
113790 **
113791 **     "docid, unzip(x.'a'), unzip(x.'b'), unzip(x.'c')"
113792 **
113793 ** The pointer returned points to a buffer allocated by sqlite3_malloc(). It
113794 ** is the responsibility of the caller to eventually free it.
113795 **
113796 ** If *pRc is not SQLITE_OK when this function is called, it is a no-op (and
113797 ** a NULL pointer is returned). Otherwise, if an OOM error is encountered
113798 ** by this function, NULL is returned and *pRc is set to SQLITE_NOMEM. If
113799 ** no error occurs, *pRc is left unmodified.
113800 */
113801 static char *fts3ReadExprList(Fts3Table *p, const char *zFunc, int *pRc){
113802   char *zRet = 0;
113803   char *zFree = 0;
113804   char *zFunction;
113805   int i;
113806
113807   if( !zFunc ){
113808     zFunction = "";
113809   }else{
113810     zFree = zFunction = fts3QuoteId(zFunc);
113811   }
113812   fts3Appendf(pRc, &zRet, "docid");
113813   for(i=0; i<p->nColumn; i++){
113814     fts3Appendf(pRc, &zRet, ",%s(x.'c%d%q')", zFunction, i, p->azColumn[i]);
113815   }
113816   sqlite3_free(zFree);
113817   return zRet;
113818 }
113819
113820 /*
113821 ** Return a list of N comma separated question marks, where N is the number
113822 ** of columns in the %_content table (one for the docid plus one for each
113823 ** user-defined text column).
113824 **
113825 ** If argument zFunc is not NULL, then all but the first question mark
113826 ** is preceded by zFunc and an open bracket, and followed by a closed
113827 ** bracket. For example, if zFunc is "zip" and the FTS3 table has three 
113828 ** user-defined text columns, the following string is returned:
113829 **
113830 **     "?, zip(?), zip(?), zip(?)"
113831 **
113832 ** The pointer returned points to a buffer allocated by sqlite3_malloc(). It
113833 ** is the responsibility of the caller to eventually free it.
113834 **
113835 ** If *pRc is not SQLITE_OK when this function is called, it is a no-op (and
113836 ** a NULL pointer is returned). Otherwise, if an OOM error is encountered
113837 ** by this function, NULL is returned and *pRc is set to SQLITE_NOMEM. If
113838 ** no error occurs, *pRc is left unmodified.
113839 */
113840 static char *fts3WriteExprList(Fts3Table *p, const char *zFunc, int *pRc){
113841   char *zRet = 0;
113842   char *zFree = 0;
113843   char *zFunction;
113844   int i;
113845
113846   if( !zFunc ){
113847     zFunction = "";
113848   }else{
113849     zFree = zFunction = fts3QuoteId(zFunc);
113850   }
113851   fts3Appendf(pRc, &zRet, "?");
113852   for(i=0; i<p->nColumn; i++){
113853     fts3Appendf(pRc, &zRet, ",%s(?)", zFunction);
113854   }
113855   sqlite3_free(zFree);
113856   return zRet;
113857 }
113858
113859 /*
113860 ** This function is the implementation of both the xConnect and xCreate
113861 ** methods of the FTS3 virtual table.
113862 **
113863 ** The argv[] array contains the following:
113864 **
113865 **   argv[0]   -> module name  ("fts3" or "fts4")
113866 **   argv[1]   -> database name
113867 **   argv[2]   -> table name
113868 **   argv[...] -> "column name" and other module argument fields.
113869 */
113870 static int fts3InitVtab(
113871   int isCreate,                   /* True for xCreate, false for xConnect */
113872   sqlite3 *db,                    /* The SQLite database connection */
113873   void *pAux,                     /* Hash table containing tokenizers */
113874   int argc,                       /* Number of elements in argv array */
113875   const char * const *argv,       /* xCreate/xConnect argument array */
113876   sqlite3_vtab **ppVTab,          /* Write the resulting vtab structure here */
113877   char **pzErr                    /* Write any error message here */
113878 ){
113879   Fts3Hash *pHash = (Fts3Hash *)pAux;
113880   Fts3Table *p = 0;               /* Pointer to allocated vtab */
113881   int rc = SQLITE_OK;             /* Return code */
113882   int i;                          /* Iterator variable */
113883   int nByte;                      /* Size of allocation used for *p */
113884   int iCol;                       /* Column index */
113885   int nString = 0;                /* Bytes required to hold all column names */
113886   int nCol = 0;                   /* Number of columns in the FTS table */
113887   char *zCsr;                     /* Space for holding column names */
113888   int nDb;                        /* Bytes required to hold database name */
113889   int nName;                      /* Bytes required to hold table name */
113890   int isFts4 = (argv[0][3]=='4'); /* True for FTS4, false for FTS3 */
113891   int bNoDocsize = 0;             /* True to omit %_docsize table */
113892   const char **aCol;              /* Array of column names */
113893   sqlite3_tokenizer *pTokenizer = 0;        /* Tokenizer for this table */
113894
113895   char *zCompress = 0;
113896   char *zUncompress = 0;
113897
113898   assert( strlen(argv[0])==4 );
113899   assert( (sqlite3_strnicmp(argv[0], "fts4", 4)==0 && isFts4)
113900        || (sqlite3_strnicmp(argv[0], "fts3", 4)==0 && !isFts4)
113901   );
113902
113903   nDb = (int)strlen(argv[1]) + 1;
113904   nName = (int)strlen(argv[2]) + 1;
113905
113906   aCol = (const char **)sqlite3_malloc(sizeof(const char *) * (argc-2) );
113907   if( !aCol ) return SQLITE_NOMEM;
113908   memset((void *)aCol, 0, sizeof(const char *) * (argc-2));
113909
113910   /* Loop through all of the arguments passed by the user to the FTS3/4
113911   ** module (i.e. all the column names and special arguments). This loop
113912   ** does the following:
113913   **
113914   **   + Figures out the number of columns the FTSX table will have, and
113915   **     the number of bytes of space that must be allocated to store copies
113916   **     of the column names.
113917   **
113918   **   + If there is a tokenizer specification included in the arguments,
113919   **     initializes the tokenizer pTokenizer.
113920   */
113921   for(i=3; rc==SQLITE_OK && i<argc; i++){
113922     char const *z = argv[i];
113923     int nKey;
113924     char *zVal;
113925
113926     /* Check if this is a tokenizer specification */
113927     if( !pTokenizer 
113928      && strlen(z)>8
113929      && 0==sqlite3_strnicmp(z, "tokenize", 8) 
113930      && 0==sqlite3Fts3IsIdChar(z[8])
113931     ){
113932       rc = sqlite3Fts3InitTokenizer(pHash, &z[9], &pTokenizer, pzErr);
113933     }
113934
113935     /* Check if it is an FTS4 special argument. */
113936     else if( isFts4 && fts3IsSpecialColumn(z, &nKey, &zVal) ){
113937       if( !zVal ){
113938         rc = SQLITE_NOMEM;
113939         goto fts3_init_out;
113940       }
113941       if( nKey==9 && 0==sqlite3_strnicmp(z, "matchinfo", 9) ){
113942         if( strlen(zVal)==4 && 0==sqlite3_strnicmp(zVal, "fts3", 4) ){
113943           bNoDocsize = 1;
113944         }else{
113945           *pzErr = sqlite3_mprintf("unrecognized matchinfo: %s", zVal);
113946           rc = SQLITE_ERROR;
113947         }
113948       }else if( nKey==8 && 0==sqlite3_strnicmp(z, "compress", 8) ){
113949         zCompress = zVal;
113950         zVal = 0;
113951       }else if( nKey==10 && 0==sqlite3_strnicmp(z, "uncompress", 10) ){
113952         zUncompress = zVal;
113953         zVal = 0;
113954       }else{
113955         *pzErr = sqlite3_mprintf("unrecognized parameter: %s", z);
113956         rc = SQLITE_ERROR;
113957       }
113958       sqlite3_free(zVal);
113959     }
113960
113961     /* Otherwise, the argument is a column name. */
113962     else {
113963       nString += (int)(strlen(z) + 1);
113964       aCol[nCol++] = z;
113965     }
113966   }
113967   if( rc!=SQLITE_OK ) goto fts3_init_out;
113968
113969   if( nCol==0 ){
113970     assert( nString==0 );
113971     aCol[0] = "content";
113972     nString = 8;
113973     nCol = 1;
113974   }
113975
113976   if( pTokenizer==0 ){
113977     rc = sqlite3Fts3InitTokenizer(pHash, "simple", &pTokenizer, pzErr);
113978     if( rc!=SQLITE_OK ) goto fts3_init_out;
113979   }
113980   assert( pTokenizer );
113981
113982
113983   /* Allocate and populate the Fts3Table structure. */
113984   nByte = sizeof(Fts3Table) +              /* Fts3Table */
113985           nCol * sizeof(char *) +              /* azColumn */
113986           nName +                              /* zName */
113987           nDb +                                /* zDb */
113988           nString;                             /* Space for azColumn strings */
113989   p = (Fts3Table*)sqlite3_malloc(nByte);
113990   if( p==0 ){
113991     rc = SQLITE_NOMEM;
113992     goto fts3_init_out;
113993   }
113994   memset(p, 0, nByte);
113995   p->db = db;
113996   p->nColumn = nCol;
113997   p->nPendingData = 0;
113998   p->azColumn = (char **)&p[1];
113999   p->pTokenizer = pTokenizer;
114000   p->nNodeSize = 1000;
114001   p->nMaxPendingData = FTS3_MAX_PENDING_DATA;
114002   p->bHasDocsize = (isFts4 && bNoDocsize==0);
114003   p->bHasStat = isFts4;
114004   fts3HashInit(&p->pendingTerms, FTS3_HASH_STRING, 1);
114005
114006   /* Fill in the zName and zDb fields of the vtab structure. */
114007   zCsr = (char *)&p->azColumn[nCol];
114008   p->zName = zCsr;
114009   memcpy(zCsr, argv[2], nName);
114010   zCsr += nName;
114011   p->zDb = zCsr;
114012   memcpy(zCsr, argv[1], nDb);
114013   zCsr += nDb;
114014
114015   /* Fill in the azColumn array */
114016   for(iCol=0; iCol<nCol; iCol++){
114017     char *z; 
114018     int n;
114019     z = (char *)sqlite3Fts3NextToken(aCol[iCol], &n);
114020     memcpy(zCsr, z, n);
114021     zCsr[n] = '\0';
114022     sqlite3Fts3Dequote(zCsr);
114023     p->azColumn[iCol] = zCsr;
114024     zCsr += n+1;
114025     assert( zCsr <= &((char *)p)[nByte] );
114026   }
114027
114028   if( (zCompress==0)!=(zUncompress==0) ){
114029     char const *zMiss = (zCompress==0 ? "compress" : "uncompress");
114030     rc = SQLITE_ERROR;
114031     *pzErr = sqlite3_mprintf("missing %s parameter in fts4 constructor", zMiss);
114032   }
114033   p->zReadExprlist = fts3ReadExprList(p, zUncompress, &rc);
114034   p->zWriteExprlist = fts3WriteExprList(p, zCompress, &rc);
114035   if( rc!=SQLITE_OK ) goto fts3_init_out;
114036
114037   /* If this is an xCreate call, create the underlying tables in the 
114038   ** database. TODO: For xConnect(), it could verify that said tables exist.
114039   */
114040   if( isCreate ){
114041     rc = fts3CreateTables(p);
114042   }
114043
114044   /* Figure out the page-size for the database. This is required in order to
114045   ** estimate the cost of loading large doclists from the database (see 
114046   ** function sqlite3Fts3SegReaderCost() for details).
114047   */
114048   fts3DatabasePageSize(&rc, p);
114049
114050   /* Declare the table schema to SQLite. */
114051   fts3DeclareVtab(&rc, p);
114052
114053 fts3_init_out:
114054   sqlite3_free(zCompress);
114055   sqlite3_free(zUncompress);
114056   sqlite3_free((void *)aCol);
114057   if( rc!=SQLITE_OK ){
114058     if( p ){
114059       fts3DisconnectMethod((sqlite3_vtab *)p);
114060     }else if( pTokenizer ){
114061       pTokenizer->pModule->xDestroy(pTokenizer);
114062     }
114063   }else{
114064     *ppVTab = &p->base;
114065   }
114066   return rc;
114067 }
114068
114069 /*
114070 ** The xConnect() and xCreate() methods for the virtual table. All the
114071 ** work is done in function fts3InitVtab().
114072 */
114073 static int fts3ConnectMethod(
114074   sqlite3 *db,                    /* Database connection */
114075   void *pAux,                     /* Pointer to tokenizer hash table */
114076   int argc,                       /* Number of elements in argv array */
114077   const char * const *argv,       /* xCreate/xConnect argument array */
114078   sqlite3_vtab **ppVtab,          /* OUT: New sqlite3_vtab object */
114079   char **pzErr                    /* OUT: sqlite3_malloc'd error message */
114080 ){
114081   return fts3InitVtab(0, db, pAux, argc, argv, ppVtab, pzErr);
114082 }
114083 static int fts3CreateMethod(
114084   sqlite3 *db,                    /* Database connection */
114085   void *pAux,                     /* Pointer to tokenizer hash table */
114086   int argc,                       /* Number of elements in argv array */
114087   const char * const *argv,       /* xCreate/xConnect argument array */
114088   sqlite3_vtab **ppVtab,          /* OUT: New sqlite3_vtab object */
114089   char **pzErr                    /* OUT: sqlite3_malloc'd error message */
114090 ){
114091   return fts3InitVtab(1, db, pAux, argc, argv, ppVtab, pzErr);
114092 }
114093
114094 /* 
114095 ** Implementation of the xBestIndex method for FTS3 tables. There
114096 ** are three possible strategies, in order of preference:
114097 **
114098 **   1. Direct lookup by rowid or docid. 
114099 **   2. Full-text search using a MATCH operator on a non-docid column.
114100 **   3. Linear scan of %_content table.
114101 */
114102 static int fts3BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){
114103   Fts3Table *p = (Fts3Table *)pVTab;
114104   int i;                          /* Iterator variable */
114105   int iCons = -1;                 /* Index of constraint to use */
114106
114107   /* By default use a full table scan. This is an expensive option,
114108   ** so search through the constraints to see if a more efficient 
114109   ** strategy is possible.
114110   */
114111   pInfo->idxNum = FTS3_FULLSCAN_SEARCH;
114112   pInfo->estimatedCost = 500000;
114113   for(i=0; i<pInfo->nConstraint; i++){
114114     struct sqlite3_index_constraint *pCons = &pInfo->aConstraint[i];
114115     if( pCons->usable==0 ) continue;
114116
114117     /* A direct lookup on the rowid or docid column. Assign a cost of 1.0. */
114118     if( pCons->op==SQLITE_INDEX_CONSTRAINT_EQ 
114119      && (pCons->iColumn<0 || pCons->iColumn==p->nColumn+1 )
114120     ){
114121       pInfo->idxNum = FTS3_DOCID_SEARCH;
114122       pInfo->estimatedCost = 1.0;
114123       iCons = i;
114124     }
114125
114126     /* A MATCH constraint. Use a full-text search.
114127     **
114128     ** If there is more than one MATCH constraint available, use the first
114129     ** one encountered. If there is both a MATCH constraint and a direct
114130     ** rowid/docid lookup, prefer the MATCH strategy. This is done even 
114131     ** though the rowid/docid lookup is faster than a MATCH query, selecting
114132     ** it would lead to an "unable to use function MATCH in the requested 
114133     ** context" error.
114134     */
114135     if( pCons->op==SQLITE_INDEX_CONSTRAINT_MATCH 
114136      && pCons->iColumn>=0 && pCons->iColumn<=p->nColumn
114137     ){
114138       pInfo->idxNum = FTS3_FULLTEXT_SEARCH + pCons->iColumn;
114139       pInfo->estimatedCost = 2.0;
114140       iCons = i;
114141       break;
114142     }
114143   }
114144
114145   if( iCons>=0 ){
114146     pInfo->aConstraintUsage[iCons].argvIndex = 1;
114147     pInfo->aConstraintUsage[iCons].omit = 1;
114148   } 
114149   return SQLITE_OK;
114150 }
114151
114152 /*
114153 ** Implementation of xOpen method.
114154 */
114155 static int fts3OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
114156   sqlite3_vtab_cursor *pCsr;               /* Allocated cursor */
114157
114158   UNUSED_PARAMETER(pVTab);
114159
114160   /* Allocate a buffer large enough for an Fts3Cursor structure. If the
114161   ** allocation succeeds, zero it and return SQLITE_OK. Otherwise, 
114162   ** if the allocation fails, return SQLITE_NOMEM.
114163   */
114164   *ppCsr = pCsr = (sqlite3_vtab_cursor *)sqlite3_malloc(sizeof(Fts3Cursor));
114165   if( !pCsr ){
114166     return SQLITE_NOMEM;
114167   }
114168   memset(pCsr, 0, sizeof(Fts3Cursor));
114169   return SQLITE_OK;
114170 }
114171
114172 /*
114173 ** Close the cursor.  For additional information see the documentation
114174 ** on the xClose method of the virtual table interface.
114175 */
114176 static int fts3CloseMethod(sqlite3_vtab_cursor *pCursor){
114177   Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
114178   assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
114179   sqlite3_finalize(pCsr->pStmt);
114180   sqlite3Fts3ExprFree(pCsr->pExpr);
114181   sqlite3Fts3FreeDeferredTokens(pCsr);
114182   sqlite3_free(pCsr->aDoclist);
114183   sqlite3_free(pCsr->aMatchinfo);
114184   sqlite3_free(pCsr);
114185   return SQLITE_OK;
114186 }
114187
114188 /*
114189 ** Position the pCsr->pStmt statement so that it is on the row
114190 ** of the %_content table that contains the last match.  Return
114191 ** SQLITE_OK on success.  
114192 */
114193 static int fts3CursorSeek(sqlite3_context *pContext, Fts3Cursor *pCsr){
114194   if( pCsr->isRequireSeek ){
114195     pCsr->isRequireSeek = 0;
114196     sqlite3_bind_int64(pCsr->pStmt, 1, pCsr->iPrevId);
114197     if( SQLITE_ROW==sqlite3_step(pCsr->pStmt) ){
114198       return SQLITE_OK;
114199     }else{
114200       int rc = sqlite3_reset(pCsr->pStmt);
114201       if( rc==SQLITE_OK ){
114202         /* If no row was found and no error has occured, then the %_content
114203         ** table is missing a row that is present in the full-text index.
114204         ** The data structures are corrupt.
114205         */
114206         rc = SQLITE_CORRUPT;
114207       }
114208       pCsr->isEof = 1;
114209       if( pContext ){
114210         sqlite3_result_error_code(pContext, rc);
114211       }
114212       return rc;
114213     }
114214   }else{
114215     return SQLITE_OK;
114216   }
114217 }
114218
114219 /*
114220 ** This function is used to process a single interior node when searching
114221 ** a b-tree for a term or term prefix. The node data is passed to this 
114222 ** function via the zNode/nNode parameters. The term to search for is
114223 ** passed in zTerm/nTerm.
114224 **
114225 ** If piFirst is not NULL, then this function sets *piFirst to the blockid
114226 ** of the child node that heads the sub-tree that may contain the term.
114227 **
114228 ** If piLast is not NULL, then *piLast is set to the right-most child node
114229 ** that heads a sub-tree that may contain a term for which zTerm/nTerm is
114230 ** a prefix.
114231 **
114232 ** If an OOM error occurs, SQLITE_NOMEM is returned. Otherwise, SQLITE_OK.
114233 */
114234 static int fts3ScanInteriorNode(
114235   const char *zTerm,              /* Term to select leaves for */
114236   int nTerm,                      /* Size of term zTerm in bytes */
114237   const char *zNode,              /* Buffer containing segment interior node */
114238   int nNode,                      /* Size of buffer at zNode */
114239   sqlite3_int64 *piFirst,         /* OUT: Selected child node */
114240   sqlite3_int64 *piLast           /* OUT: Selected child node */
114241 ){
114242   int rc = SQLITE_OK;             /* Return code */
114243   const char *zCsr = zNode;       /* Cursor to iterate through node */
114244   const char *zEnd = &zCsr[nNode];/* End of interior node buffer */
114245   char *zBuffer = 0;              /* Buffer to load terms into */
114246   int nAlloc = 0;                 /* Size of allocated buffer */
114247   int isFirstTerm = 1;            /* True when processing first term on page */
114248   sqlite3_int64 iChild;           /* Block id of child node to descend to */
114249
114250   /* Skip over the 'height' varint that occurs at the start of every 
114251   ** interior node. Then load the blockid of the left-child of the b-tree
114252   ** node into variable iChild.  
114253   **
114254   ** Even if the data structure on disk is corrupted, this (reading two
114255   ** varints from the buffer) does not risk an overread. If zNode is a
114256   ** root node, then the buffer comes from a SELECT statement. SQLite does
114257   ** not make this guarantee explicitly, but in practice there are always
114258   ** either more than 20 bytes of allocated space following the nNode bytes of
114259   ** contents, or two zero bytes. Or, if the node is read from the %_segments
114260   ** table, then there are always 20 bytes of zeroed padding following the
114261   ** nNode bytes of content (see sqlite3Fts3ReadBlock() for details).
114262   */
114263   zCsr += sqlite3Fts3GetVarint(zCsr, &iChild);
114264   zCsr += sqlite3Fts3GetVarint(zCsr, &iChild);
114265   if( zCsr>zEnd ){
114266     return SQLITE_CORRUPT;
114267   }
114268   
114269   while( zCsr<zEnd && (piFirst || piLast) ){
114270     int cmp;                      /* memcmp() result */
114271     int nSuffix;                  /* Size of term suffix */
114272     int nPrefix = 0;              /* Size of term prefix */
114273     int nBuffer;                  /* Total term size */
114274   
114275     /* Load the next term on the node into zBuffer. Use realloc() to expand
114276     ** the size of zBuffer if required.  */
114277     if( !isFirstTerm ){
114278       zCsr += sqlite3Fts3GetVarint32(zCsr, &nPrefix);
114279     }
114280     isFirstTerm = 0;
114281     zCsr += sqlite3Fts3GetVarint32(zCsr, &nSuffix);
114282     
114283     /* NOTE(shess): Previous code checked for negative nPrefix and
114284     ** nSuffix and suffix overrunning zEnd.  Additionally corrupt if
114285     ** the prefix is longer than the previous term, or if the suffix
114286     ** causes overflow.
114287     */
114288     if( nPrefix<0 || nSuffix<0 /* || nPrefix>nBuffer */
114289      || &zCsr[nSuffix]<zCsr || &zCsr[nSuffix]>zEnd ){
114290       rc = SQLITE_CORRUPT;
114291       goto finish_scan;
114292     }
114293     if( nPrefix+nSuffix>nAlloc ){
114294       char *zNew;
114295       nAlloc = (nPrefix+nSuffix) * 2;
114296       zNew = (char *)sqlite3_realloc(zBuffer, nAlloc);
114297       if( !zNew ){
114298         rc = SQLITE_NOMEM;
114299         goto finish_scan;
114300       }
114301       zBuffer = zNew;
114302     }
114303     memcpy(&zBuffer[nPrefix], zCsr, nSuffix);
114304     nBuffer = nPrefix + nSuffix;
114305     zCsr += nSuffix;
114306
114307     /* Compare the term we are searching for with the term just loaded from
114308     ** the interior node. If the specified term is greater than or equal
114309     ** to the term from the interior node, then all terms on the sub-tree 
114310     ** headed by node iChild are smaller than zTerm. No need to search 
114311     ** iChild.
114312     **
114313     ** If the interior node term is larger than the specified term, then
114314     ** the tree headed by iChild may contain the specified term.
114315     */
114316     cmp = memcmp(zTerm, zBuffer, (nBuffer>nTerm ? nTerm : nBuffer));
114317     if( piFirst && (cmp<0 || (cmp==0 && nBuffer>nTerm)) ){
114318       *piFirst = iChild;
114319       piFirst = 0;
114320     }
114321
114322     if( piLast && cmp<0 ){
114323       *piLast = iChild;
114324       piLast = 0;
114325     }
114326
114327     iChild++;
114328   };
114329
114330   if( piFirst ) *piFirst = iChild;
114331   if( piLast ) *piLast = iChild;
114332
114333  finish_scan:
114334   sqlite3_free(zBuffer);
114335   return rc;
114336 }
114337
114338
114339 /*
114340 ** The buffer pointed to by argument zNode (size nNode bytes) contains an
114341 ** interior node of a b-tree segment. The zTerm buffer (size nTerm bytes)
114342 ** contains a term. This function searches the sub-tree headed by the zNode
114343 ** node for the range of leaf nodes that may contain the specified term
114344 ** or terms for which the specified term is a prefix.
114345 **
114346 ** If piLeaf is not NULL, then *piLeaf is set to the blockid of the 
114347 ** left-most leaf node in the tree that may contain the specified term.
114348 ** If piLeaf2 is not NULL, then *piLeaf2 is set to the blockid of the
114349 ** right-most leaf node that may contain a term for which the specified
114350 ** term is a prefix.
114351 **
114352 ** It is possible that the range of returned leaf nodes does not contain 
114353 ** the specified term or any terms for which it is a prefix. However, if the 
114354 ** segment does contain any such terms, they are stored within the identified
114355 ** range. Because this function only inspects interior segment nodes (and
114356 ** never loads leaf nodes into memory), it is not possible to be sure.
114357 **
114358 ** If an error occurs, an error code other than SQLITE_OK is returned.
114359 */ 
114360 static int fts3SelectLeaf(
114361   Fts3Table *p,                   /* Virtual table handle */
114362   const char *zTerm,              /* Term to select leaves for */
114363   int nTerm,                      /* Size of term zTerm in bytes */
114364   const char *zNode,              /* Buffer containing segment interior node */
114365   int nNode,                      /* Size of buffer at zNode */
114366   sqlite3_int64 *piLeaf,          /* Selected leaf node */
114367   sqlite3_int64 *piLeaf2          /* Selected leaf node */
114368 ){
114369   int rc;                         /* Return code */
114370   int iHeight;                    /* Height of this node in tree */
114371
114372   assert( piLeaf || piLeaf2 );
114373
114374   sqlite3Fts3GetVarint32(zNode, &iHeight);
114375   rc = fts3ScanInteriorNode(zTerm, nTerm, zNode, nNode, piLeaf, piLeaf2);
114376   assert( !piLeaf2 || !piLeaf || rc!=SQLITE_OK || (*piLeaf<=*piLeaf2) );
114377
114378   if( rc==SQLITE_OK && iHeight>1 ){
114379     char *zBlob = 0;              /* Blob read from %_segments table */
114380     int nBlob;                    /* Size of zBlob in bytes */
114381
114382     if( piLeaf && piLeaf2 && (*piLeaf!=*piLeaf2) ){
114383       rc = sqlite3Fts3ReadBlock(p, *piLeaf, &zBlob, &nBlob);
114384       if( rc==SQLITE_OK ){
114385         rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, 0);
114386       }
114387       sqlite3_free(zBlob);
114388       piLeaf = 0;
114389       zBlob = 0;
114390     }
114391
114392     if( rc==SQLITE_OK ){
114393       rc = sqlite3Fts3ReadBlock(p, piLeaf ? *piLeaf : *piLeaf2, &zBlob, &nBlob);
114394     }
114395     if( rc==SQLITE_OK ){
114396       rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, piLeaf2);
114397     }
114398     sqlite3_free(zBlob);
114399   }
114400
114401   return rc;
114402 }
114403
114404 /*
114405 ** This function is used to create delta-encoded serialized lists of FTS3 
114406 ** varints. Each call to this function appends a single varint to a list.
114407 */
114408 static void fts3PutDeltaVarint(
114409   char **pp,                      /* IN/OUT: Output pointer */
114410   sqlite3_int64 *piPrev,          /* IN/OUT: Previous value written to list */
114411   sqlite3_int64 iVal              /* Write this value to the list */
114412 ){
114413   assert( iVal-*piPrev > 0 || (*piPrev==0 && iVal==0) );
114414   *pp += sqlite3Fts3PutVarint(*pp, iVal-*piPrev);
114415   *piPrev = iVal;
114416 }
114417
114418 /*
114419 ** When this function is called, *ppPoslist is assumed to point to the 
114420 ** start of a position-list. After it returns, *ppPoslist points to the
114421 ** first byte after the position-list.
114422 **
114423 ** A position list is list of positions (delta encoded) and columns for 
114424 ** a single document record of a doclist.  So, in other words, this
114425 ** routine advances *ppPoslist so that it points to the next docid in
114426 ** the doclist, or to the first byte past the end of the doclist.
114427 **
114428 ** If pp is not NULL, then the contents of the position list are copied
114429 ** to *pp. *pp is set to point to the first byte past the last byte copied
114430 ** before this function returns.
114431 */
114432 static void fts3PoslistCopy(char **pp, char **ppPoslist){
114433   char *pEnd = *ppPoslist;
114434   char c = 0;
114435
114436   /* The end of a position list is marked by a zero encoded as an FTS3 
114437   ** varint. A single POS_END (0) byte. Except, if the 0 byte is preceded by
114438   ** a byte with the 0x80 bit set, then it is not a varint 0, but the tail
114439   ** of some other, multi-byte, value.
114440   **
114441   ** The following while-loop moves pEnd to point to the first byte that is not 
114442   ** immediately preceded by a byte with the 0x80 bit set. Then increments
114443   ** pEnd once more so that it points to the byte immediately following the
114444   ** last byte in the position-list.
114445   */
114446   while( *pEnd | c ){
114447     c = *pEnd++ & 0x80;
114448     testcase( c!=0 && (*pEnd)==0 );
114449   }
114450   pEnd++;  /* Advance past the POS_END terminator byte */
114451
114452   if( pp ){
114453     int n = (int)(pEnd - *ppPoslist);
114454     char *p = *pp;
114455     memcpy(p, *ppPoslist, n);
114456     p += n;
114457     *pp = p;
114458   }
114459   *ppPoslist = pEnd;
114460 }
114461
114462 /*
114463 ** When this function is called, *ppPoslist is assumed to point to the 
114464 ** start of a column-list. After it returns, *ppPoslist points to the
114465 ** to the terminator (POS_COLUMN or POS_END) byte of the column-list.
114466 **
114467 ** A column-list is list of delta-encoded positions for a single column
114468 ** within a single document within a doclist.
114469 **
114470 ** The column-list is terminated either by a POS_COLUMN varint (1) or
114471 ** a POS_END varint (0).  This routine leaves *ppPoslist pointing to
114472 ** the POS_COLUMN or POS_END that terminates the column-list.
114473 **
114474 ** If pp is not NULL, then the contents of the column-list are copied
114475 ** to *pp. *pp is set to point to the first byte past the last byte copied
114476 ** before this function returns.  The POS_COLUMN or POS_END terminator
114477 ** is not copied into *pp.
114478 */
114479 static void fts3ColumnlistCopy(char **pp, char **ppPoslist){
114480   char *pEnd = *ppPoslist;
114481   char c = 0;
114482
114483   /* A column-list is terminated by either a 0x01 or 0x00 byte that is
114484   ** not part of a multi-byte varint.
114485   */
114486   while( 0xFE & (*pEnd | c) ){
114487     c = *pEnd++ & 0x80;
114488     testcase( c!=0 && ((*pEnd)&0xfe)==0 );
114489   }
114490   if( pp ){
114491     int n = (int)(pEnd - *ppPoslist);
114492     char *p = *pp;
114493     memcpy(p, *ppPoslist, n);
114494     p += n;
114495     *pp = p;
114496   }
114497   *ppPoslist = pEnd;
114498 }
114499
114500 /*
114501 ** Value used to signify the end of an position-list. This is safe because
114502 ** it is not possible to have a document with 2^31 terms.
114503 */
114504 #define POSITION_LIST_END 0x7fffffff
114505
114506 /*
114507 ** This function is used to help parse position-lists. When this function is
114508 ** called, *pp may point to the start of the next varint in the position-list
114509 ** being parsed, or it may point to 1 byte past the end of the position-list
114510 ** (in which case **pp will be a terminator bytes POS_END (0) or
114511 ** (1)).
114512 **
114513 ** If *pp points past the end of the current position-list, set *pi to 
114514 ** POSITION_LIST_END and return. Otherwise, read the next varint from *pp,
114515 ** increment the current value of *pi by the value read, and set *pp to
114516 ** point to the next value before returning.
114517 **
114518 ** Before calling this routine *pi must be initialized to the value of
114519 ** the previous position, or zero if we are reading the first position
114520 ** in the position-list.  Because positions are delta-encoded, the value
114521 ** of the previous position is needed in order to compute the value of
114522 ** the next position.
114523 */
114524 static void fts3ReadNextPos(
114525   char **pp,                    /* IN/OUT: Pointer into position-list buffer */
114526   sqlite3_int64 *pi             /* IN/OUT: Value read from position-list */
114527 ){
114528   if( (**pp)&0xFE ){
114529     fts3GetDeltaVarint(pp, pi);
114530     *pi -= 2;
114531   }else{
114532     *pi = POSITION_LIST_END;
114533   }
114534 }
114535
114536 /*
114537 ** If parameter iCol is not 0, write an POS_COLUMN (1) byte followed by
114538 ** the value of iCol encoded as a varint to *pp.   This will start a new
114539 ** column list.
114540 **
114541 ** Set *pp to point to the byte just after the last byte written before 
114542 ** returning (do not modify it if iCol==0). Return the total number of bytes
114543 ** written (0 if iCol==0).
114544 */
114545 static int fts3PutColNumber(char **pp, int iCol){
114546   int n = 0;                      /* Number of bytes written */
114547   if( iCol ){
114548     char *p = *pp;                /* Output pointer */
114549     n = 1 + sqlite3Fts3PutVarint(&p[1], iCol);
114550     *p = 0x01;
114551     *pp = &p[n];
114552   }
114553   return n;
114554 }
114555
114556 /*
114557 ** Compute the union of two position lists.  The output written
114558 ** into *pp contains all positions of both *pp1 and *pp2 in sorted
114559 ** order and with any duplicates removed.  All pointers are
114560 ** updated appropriately.   The caller is responsible for insuring
114561 ** that there is enough space in *pp to hold the complete output.
114562 */
114563 static void fts3PoslistMerge(
114564   char **pp,                      /* Output buffer */
114565   char **pp1,                     /* Left input list */
114566   char **pp2                      /* Right input list */
114567 ){
114568   char *p = *pp;
114569   char *p1 = *pp1;
114570   char *p2 = *pp2;
114571
114572   while( *p1 || *p2 ){
114573     int iCol1;         /* The current column index in pp1 */
114574     int iCol2;         /* The current column index in pp2 */
114575
114576     if( *p1==POS_COLUMN ) sqlite3Fts3GetVarint32(&p1[1], &iCol1);
114577     else if( *p1==POS_END ) iCol1 = POSITION_LIST_END;
114578     else iCol1 = 0;
114579
114580     if( *p2==POS_COLUMN ) sqlite3Fts3GetVarint32(&p2[1], &iCol2);
114581     else if( *p2==POS_END ) iCol2 = POSITION_LIST_END;
114582     else iCol2 = 0;
114583
114584     if( iCol1==iCol2 ){
114585       sqlite3_int64 i1 = 0;       /* Last position from pp1 */
114586       sqlite3_int64 i2 = 0;       /* Last position from pp2 */
114587       sqlite3_int64 iPrev = 0;
114588       int n = fts3PutColNumber(&p, iCol1);
114589       p1 += n;
114590       p2 += n;
114591
114592       /* At this point, both p1 and p2 point to the start of column-lists
114593       ** for the same column (the column with index iCol1 and iCol2).
114594       ** A column-list is a list of non-negative delta-encoded varints, each 
114595       ** incremented by 2 before being stored. Each list is terminated by a
114596       ** POS_END (0) or POS_COLUMN (1). The following block merges the two lists
114597       ** and writes the results to buffer p. p is left pointing to the byte
114598       ** after the list written. No terminator (POS_END or POS_COLUMN) is
114599       ** written to the output.
114600       */
114601       fts3GetDeltaVarint(&p1, &i1);
114602       fts3GetDeltaVarint(&p2, &i2);
114603       do {
114604         fts3PutDeltaVarint(&p, &iPrev, (i1<i2) ? i1 : i2); 
114605         iPrev -= 2;
114606         if( i1==i2 ){
114607           fts3ReadNextPos(&p1, &i1);
114608           fts3ReadNextPos(&p2, &i2);
114609         }else if( i1<i2 ){
114610           fts3ReadNextPos(&p1, &i1);
114611         }else{
114612           fts3ReadNextPos(&p2, &i2);
114613         }
114614       }while( i1!=POSITION_LIST_END || i2!=POSITION_LIST_END );
114615     }else if( iCol1<iCol2 ){
114616       p1 += fts3PutColNumber(&p, iCol1);
114617       fts3ColumnlistCopy(&p, &p1);
114618     }else{
114619       p2 += fts3PutColNumber(&p, iCol2);
114620       fts3ColumnlistCopy(&p, &p2);
114621     }
114622   }
114623
114624   *p++ = POS_END;
114625   *pp = p;
114626   *pp1 = p1 + 1;
114627   *pp2 = p2 + 1;
114628 }
114629
114630 /*
114631 ** nToken==1 searches for adjacent positions.
114632 **
114633 ** This function is used to merge two position lists into one. When it is
114634 ** called, *pp1 and *pp2 must both point to position lists. A position-list is
114635 ** the part of a doclist that follows each document id. For example, if a row
114636 ** contains:
114637 **
114638 **     'a b c'|'x y z'|'a b b a'
114639 **
114640 ** Then the position list for this row for token 'b' would consist of:
114641 **
114642 **     0x02 0x01 0x02 0x03 0x03 0x00
114643 **
114644 ** When this function returns, both *pp1 and *pp2 are left pointing to the
114645 ** byte following the 0x00 terminator of their respective position lists.
114646 **
114647 ** If isSaveLeft is 0, an entry is added to the output position list for 
114648 ** each position in *pp2 for which there exists one or more positions in
114649 ** *pp1 so that (pos(*pp2)>pos(*pp1) && pos(*pp2)-pos(*pp1)<=nToken). i.e.
114650 ** when the *pp1 token appears before the *pp2 token, but not more than nToken
114651 ** slots before it.
114652 */
114653 static int fts3PoslistPhraseMerge(
114654   char **pp,                      /* IN/OUT: Preallocated output buffer */
114655   int nToken,                     /* Maximum difference in token positions */
114656   int isSaveLeft,                 /* Save the left position */
114657   int isExact,                    /* If *pp1 is exactly nTokens before *pp2 */
114658   char **pp1,                     /* IN/OUT: Left input list */
114659   char **pp2                      /* IN/OUT: Right input list */
114660 ){
114661   char *p = (pp ? *pp : 0);
114662   char *p1 = *pp1;
114663   char *p2 = *pp2;
114664   int iCol1 = 0;
114665   int iCol2 = 0;
114666
114667   /* Never set both isSaveLeft and isExact for the same invocation. */
114668   assert( isSaveLeft==0 || isExact==0 );
114669
114670   assert( *p1!=0 && *p2!=0 );
114671   if( *p1==POS_COLUMN ){ 
114672     p1++;
114673     p1 += sqlite3Fts3GetVarint32(p1, &iCol1);
114674   }
114675   if( *p2==POS_COLUMN ){ 
114676     p2++;
114677     p2 += sqlite3Fts3GetVarint32(p2, &iCol2);
114678   }
114679
114680   while( 1 ){
114681     if( iCol1==iCol2 ){
114682       char *pSave = p;
114683       sqlite3_int64 iPrev = 0;
114684       sqlite3_int64 iPos1 = 0;
114685       sqlite3_int64 iPos2 = 0;
114686
114687       if( pp && iCol1 ){
114688         *p++ = POS_COLUMN;
114689         p += sqlite3Fts3PutVarint(p, iCol1);
114690       }
114691
114692       assert( *p1!=POS_END && *p1!=POS_COLUMN );
114693       assert( *p2!=POS_END && *p2!=POS_COLUMN );
114694       fts3GetDeltaVarint(&p1, &iPos1); iPos1 -= 2;
114695       fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2;
114696
114697       while( 1 ){
114698         if( iPos2==iPos1+nToken 
114699          || (isExact==0 && iPos2>iPos1 && iPos2<=iPos1+nToken) 
114700         ){
114701           sqlite3_int64 iSave;
114702           if( !pp ){
114703             fts3PoslistCopy(0, &p2);
114704             fts3PoslistCopy(0, &p1);
114705             *pp1 = p1;
114706             *pp2 = p2;
114707             return 1;
114708           }
114709           iSave = isSaveLeft ? iPos1 : iPos2;
114710           fts3PutDeltaVarint(&p, &iPrev, iSave+2); iPrev -= 2;
114711           pSave = 0;
114712         }
114713         if( (!isSaveLeft && iPos2<=(iPos1+nToken)) || iPos2<=iPos1 ){
114714           if( (*p2&0xFE)==0 ) break;
114715           fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2;
114716         }else{
114717           if( (*p1&0xFE)==0 ) break;
114718           fts3GetDeltaVarint(&p1, &iPos1); iPos1 -= 2;
114719         }
114720       }
114721
114722       if( pSave ){
114723         assert( pp && p );
114724         p = pSave;
114725       }
114726
114727       fts3ColumnlistCopy(0, &p1);
114728       fts3ColumnlistCopy(0, &p2);
114729       assert( (*p1&0xFE)==0 && (*p2&0xFE)==0 );
114730       if( 0==*p1 || 0==*p2 ) break;
114731
114732       p1++;
114733       p1 += sqlite3Fts3GetVarint32(p1, &iCol1);
114734       p2++;
114735       p2 += sqlite3Fts3GetVarint32(p2, &iCol2);
114736     }
114737
114738     /* Advance pointer p1 or p2 (whichever corresponds to the smaller of
114739     ** iCol1 and iCol2) so that it points to either the 0x00 that marks the
114740     ** end of the position list, or the 0x01 that precedes the next 
114741     ** column-number in the position list. 
114742     */
114743     else if( iCol1<iCol2 ){
114744       fts3ColumnlistCopy(0, &p1);
114745       if( 0==*p1 ) break;
114746       p1++;
114747       p1 += sqlite3Fts3GetVarint32(p1, &iCol1);
114748     }else{
114749       fts3ColumnlistCopy(0, &p2);
114750       if( 0==*p2 ) break;
114751       p2++;
114752       p2 += sqlite3Fts3GetVarint32(p2, &iCol2);
114753     }
114754   }
114755
114756   fts3PoslistCopy(0, &p2);
114757   fts3PoslistCopy(0, &p1);
114758   *pp1 = p1;
114759   *pp2 = p2;
114760   if( !pp || *pp==p ){
114761     return 0;
114762   }
114763   *p++ = 0x00;
114764   *pp = p;
114765   return 1;
114766 }
114767
114768 /*
114769 ** Merge two position-lists as required by the NEAR operator.
114770 */
114771 static int fts3PoslistNearMerge(
114772   char **pp,                      /* Output buffer */
114773   char *aTmp,                     /* Temporary buffer space */
114774   int nRight,                     /* Maximum difference in token positions */
114775   int nLeft,                      /* Maximum difference in token positions */
114776   char **pp1,                     /* IN/OUT: Left input list */
114777   char **pp2                      /* IN/OUT: Right input list */
114778 ){
114779   char *p1 = *pp1;
114780   char *p2 = *pp2;
114781
114782   if( !pp ){
114783     if( fts3PoslistPhraseMerge(0, nRight, 0, 0, pp1, pp2) ) return 1;
114784     *pp1 = p1;
114785     *pp2 = p2;
114786     return fts3PoslistPhraseMerge(0, nLeft, 0, 0, pp2, pp1);
114787   }else{
114788     char *pTmp1 = aTmp;
114789     char *pTmp2;
114790     char *aTmp2;
114791     int res = 1;
114792
114793     fts3PoslistPhraseMerge(&pTmp1, nRight, 0, 0, pp1, pp2);
114794     aTmp2 = pTmp2 = pTmp1;
114795     *pp1 = p1;
114796     *pp2 = p2;
114797     fts3PoslistPhraseMerge(&pTmp2, nLeft, 1, 0, pp2, pp1);
114798     if( pTmp1!=aTmp && pTmp2!=aTmp2 ){
114799       fts3PoslistMerge(pp, &aTmp, &aTmp2);
114800     }else if( pTmp1!=aTmp ){
114801       fts3PoslistCopy(pp, &aTmp);
114802     }else if( pTmp2!=aTmp2 ){
114803       fts3PoslistCopy(pp, &aTmp2);
114804     }else{
114805       res = 0;
114806     }
114807
114808     return res;
114809   }
114810 }
114811
114812 /*
114813 ** Values that may be used as the first parameter to fts3DoclistMerge().
114814 */
114815 #define MERGE_NOT        2        /* D + D -> D */
114816 #define MERGE_AND        3        /* D + D -> D */
114817 #define MERGE_OR         4        /* D + D -> D */
114818 #define MERGE_POS_OR     5        /* P + P -> P */
114819 #define MERGE_PHRASE     6        /* P + P -> D */
114820 #define MERGE_POS_PHRASE 7        /* P + P -> P */
114821 #define MERGE_NEAR       8        /* P + P -> D */
114822 #define MERGE_POS_NEAR   9        /* P + P -> P */
114823
114824 /*
114825 ** Merge the two doclists passed in buffer a1 (size n1 bytes) and a2
114826 ** (size n2 bytes). The output is written to pre-allocated buffer aBuffer,
114827 ** which is guaranteed to be large enough to hold the results. The number
114828 ** of bytes written to aBuffer is stored in *pnBuffer before returning.
114829 **
114830 ** If successful, SQLITE_OK is returned. Otherwise, if a malloc error
114831 ** occurs while allocating a temporary buffer as part of the merge operation,
114832 ** SQLITE_NOMEM is returned.
114833 */
114834 static int fts3DoclistMerge(
114835   int mergetype,                  /* One of the MERGE_XXX constants */
114836   int nParam1,                    /* Used by MERGE_NEAR and MERGE_POS_NEAR */
114837   int nParam2,                    /* Used by MERGE_NEAR and MERGE_POS_NEAR */
114838   char *aBuffer,                  /* Pre-allocated output buffer */
114839   int *pnBuffer,                  /* OUT: Bytes written to aBuffer */
114840   char *a1,                       /* Buffer containing first doclist */
114841   int n1,                         /* Size of buffer a1 */
114842   char *a2,                       /* Buffer containing second doclist */
114843   int n2,                         /* Size of buffer a2 */
114844   int *pnDoc                      /* OUT: Number of docids in output */
114845 ){
114846   sqlite3_int64 i1 = 0;
114847   sqlite3_int64 i2 = 0;
114848   sqlite3_int64 iPrev = 0;
114849
114850   char *p = aBuffer;
114851   char *p1 = a1;
114852   char *p2 = a2;
114853   char *pEnd1 = &a1[n1];
114854   char *pEnd2 = &a2[n2];
114855   int nDoc = 0;
114856
114857   assert( mergetype==MERGE_OR     || mergetype==MERGE_POS_OR 
114858        || mergetype==MERGE_AND    || mergetype==MERGE_NOT
114859        || mergetype==MERGE_PHRASE || mergetype==MERGE_POS_PHRASE
114860        || mergetype==MERGE_NEAR   || mergetype==MERGE_POS_NEAR
114861   );
114862
114863   if( !aBuffer ){
114864     *pnBuffer = 0;
114865     return SQLITE_NOMEM;
114866   }
114867
114868   /* Read the first docid from each doclist */
114869   fts3GetDeltaVarint2(&p1, pEnd1, &i1);
114870   fts3GetDeltaVarint2(&p2, pEnd2, &i2);
114871
114872   switch( mergetype ){
114873     case MERGE_OR:
114874     case MERGE_POS_OR:
114875       while( p1 || p2 ){
114876         if( p2 && p1 && i1==i2 ){
114877           fts3PutDeltaVarint(&p, &iPrev, i1);
114878           if( mergetype==MERGE_POS_OR ) fts3PoslistMerge(&p, &p1, &p2);
114879           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
114880           fts3GetDeltaVarint2(&p2, pEnd2, &i2);
114881         }else if( !p2 || (p1 && i1<i2) ){
114882           fts3PutDeltaVarint(&p, &iPrev, i1);
114883           if( mergetype==MERGE_POS_OR ) fts3PoslistCopy(&p, &p1);
114884           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
114885         }else{
114886           fts3PutDeltaVarint(&p, &iPrev, i2);
114887           if( mergetype==MERGE_POS_OR ) fts3PoslistCopy(&p, &p2);
114888           fts3GetDeltaVarint2(&p2, pEnd2, &i2);
114889         }
114890       }
114891       break;
114892
114893     case MERGE_AND:
114894       while( p1 && p2 ){
114895         if( i1==i2 ){
114896           fts3PutDeltaVarint(&p, &iPrev, i1);
114897           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
114898           fts3GetDeltaVarint2(&p2, pEnd2, &i2);
114899           nDoc++;
114900         }else if( i1<i2 ){
114901           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
114902         }else{
114903           fts3GetDeltaVarint2(&p2, pEnd2, &i2);
114904         }
114905       }
114906       break;
114907
114908     case MERGE_NOT:
114909       while( p1 ){
114910         if( p2 && i1==i2 ){
114911           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
114912           fts3GetDeltaVarint2(&p2, pEnd2, &i2);
114913         }else if( !p2 || i1<i2 ){
114914           fts3PutDeltaVarint(&p, &iPrev, i1);
114915           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
114916         }else{
114917           fts3GetDeltaVarint2(&p2, pEnd2, &i2);
114918         }
114919       }
114920       break;
114921
114922     case MERGE_POS_PHRASE:
114923     case MERGE_PHRASE: {
114924       char **ppPos = (mergetype==MERGE_PHRASE ? 0 : &p);
114925       while( p1 && p2 ){
114926         if( i1==i2 ){
114927           char *pSave = p;
114928           sqlite3_int64 iPrevSave = iPrev;
114929           fts3PutDeltaVarint(&p, &iPrev, i1);
114930           if( 0==fts3PoslistPhraseMerge(ppPos, nParam1, 0, 1, &p1, &p2) ){
114931             p = pSave;
114932             iPrev = iPrevSave;
114933           }else{
114934             nDoc++;
114935           }
114936           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
114937           fts3GetDeltaVarint2(&p2, pEnd2, &i2);
114938         }else if( i1<i2 ){
114939           fts3PoslistCopy(0, &p1);
114940           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
114941         }else{
114942           fts3PoslistCopy(0, &p2);
114943           fts3GetDeltaVarint2(&p2, pEnd2, &i2);
114944         }
114945       }
114946       break;
114947     }
114948
114949     default: assert( mergetype==MERGE_POS_NEAR || mergetype==MERGE_NEAR ); {
114950       char *aTmp = 0;
114951       char **ppPos = 0;
114952
114953       if( mergetype==MERGE_POS_NEAR ){
114954         ppPos = &p;
114955         aTmp = sqlite3_malloc(2*(n1+n2+1));
114956         if( !aTmp ){
114957           return SQLITE_NOMEM;
114958         }
114959       }
114960
114961       while( p1 && p2 ){
114962         if( i1==i2 ){
114963           char *pSave = p;
114964           sqlite3_int64 iPrevSave = iPrev;
114965           fts3PutDeltaVarint(&p, &iPrev, i1);
114966
114967           if( !fts3PoslistNearMerge(ppPos, aTmp, nParam1, nParam2, &p1, &p2) ){
114968             iPrev = iPrevSave;
114969             p = pSave;
114970           }
114971
114972           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
114973           fts3GetDeltaVarint2(&p2, pEnd2, &i2);
114974         }else if( i1<i2 ){
114975           fts3PoslistCopy(0, &p1);
114976           fts3GetDeltaVarint2(&p1, pEnd1, &i1);
114977         }else{
114978           fts3PoslistCopy(0, &p2);
114979           fts3GetDeltaVarint2(&p2, pEnd2, &i2);
114980         }
114981       }
114982       sqlite3_free(aTmp);
114983       break;
114984     }
114985   }
114986
114987   if( pnDoc ) *pnDoc = nDoc;
114988   *pnBuffer = (int)(p-aBuffer);
114989   return SQLITE_OK;
114990 }
114991
114992 /* 
114993 ** A pointer to an instance of this structure is used as the context 
114994 ** argument to sqlite3Fts3SegReaderIterate()
114995 */
114996 typedef struct TermSelect TermSelect;
114997 struct TermSelect {
114998   int isReqPos;
114999   char *aaOutput[16];             /* Malloc'd output buffer */
115000   int anOutput[16];               /* Size of output in bytes */
115001 };
115002
115003 /*
115004 ** Merge all doclists in the TermSelect.aaOutput[] array into a single
115005 ** doclist stored in TermSelect.aaOutput[0]. If successful, delete all
115006 ** other doclists (except the aaOutput[0] one) and return SQLITE_OK.
115007 **
115008 ** If an OOM error occurs, return SQLITE_NOMEM. In this case it is
115009 ** the responsibility of the caller to free any doclists left in the
115010 ** TermSelect.aaOutput[] array.
115011 */
115012 static int fts3TermSelectMerge(TermSelect *pTS){
115013   int mergetype = (pTS->isReqPos ? MERGE_POS_OR : MERGE_OR);
115014   char *aOut = 0;
115015   int nOut = 0;
115016   int i;
115017
115018   /* Loop through the doclists in the aaOutput[] array. Merge them all
115019   ** into a single doclist.
115020   */
115021   for(i=0; i<SizeofArray(pTS->aaOutput); i++){
115022     if( pTS->aaOutput[i] ){
115023       if( !aOut ){
115024         aOut = pTS->aaOutput[i];
115025         nOut = pTS->anOutput[i];
115026         pTS->aaOutput[i] = 0;
115027       }else{
115028         int nNew = nOut + pTS->anOutput[i];
115029         char *aNew = sqlite3_malloc(nNew);
115030         if( !aNew ){
115031           sqlite3_free(aOut);
115032           return SQLITE_NOMEM;
115033         }
115034         fts3DoclistMerge(mergetype, 0, 0,
115035             aNew, &nNew, pTS->aaOutput[i], pTS->anOutput[i], aOut, nOut, 0
115036         );
115037         sqlite3_free(pTS->aaOutput[i]);
115038         sqlite3_free(aOut);
115039         pTS->aaOutput[i] = 0;
115040         aOut = aNew;
115041         nOut = nNew;
115042       }
115043     }
115044   }
115045
115046   pTS->aaOutput[0] = aOut;
115047   pTS->anOutput[0] = nOut;
115048   return SQLITE_OK;
115049 }
115050
115051 /*
115052 ** This function is used as the sqlite3Fts3SegReaderIterate() callback when
115053 ** querying the full-text index for a doclist associated with a term or
115054 ** term-prefix.
115055 */
115056 static int fts3TermSelectCb(
115057   Fts3Table *p,                   /* Virtual table object */
115058   void *pContext,                 /* Pointer to TermSelect structure */
115059   char *zTerm,
115060   int nTerm,
115061   char *aDoclist,
115062   int nDoclist
115063 ){
115064   TermSelect *pTS = (TermSelect *)pContext;
115065
115066   UNUSED_PARAMETER(p);
115067   UNUSED_PARAMETER(zTerm);
115068   UNUSED_PARAMETER(nTerm);
115069
115070   if( pTS->aaOutput[0]==0 ){
115071     /* If this is the first term selected, copy the doclist to the output
115072     ** buffer using memcpy(). TODO: Add a way to transfer control of the
115073     ** aDoclist buffer from the caller so as to avoid the memcpy().
115074     */
115075     pTS->aaOutput[0] = sqlite3_malloc(nDoclist);
115076     pTS->anOutput[0] = nDoclist;
115077     if( pTS->aaOutput[0] ){
115078       memcpy(pTS->aaOutput[0], aDoclist, nDoclist);
115079     }else{
115080       return SQLITE_NOMEM;
115081     }
115082   }else{
115083     int mergetype = (pTS->isReqPos ? MERGE_POS_OR : MERGE_OR);
115084     char *aMerge = aDoclist;
115085     int nMerge = nDoclist;
115086     int iOut;
115087
115088     for(iOut=0; iOut<SizeofArray(pTS->aaOutput); iOut++){
115089       char *aNew;
115090       int nNew;
115091       if( pTS->aaOutput[iOut]==0 ){
115092         assert( iOut>0 );
115093         pTS->aaOutput[iOut] = aMerge;
115094         pTS->anOutput[iOut] = nMerge;
115095         break;
115096       }
115097
115098       nNew = nMerge + pTS->anOutput[iOut];
115099       aNew = sqlite3_malloc(nNew);
115100       if( !aNew ){
115101         if( aMerge!=aDoclist ){
115102           sqlite3_free(aMerge);
115103         }
115104         return SQLITE_NOMEM;
115105       }
115106       fts3DoclistMerge(mergetype, 0, 0, aNew, &nNew, 
115107           pTS->aaOutput[iOut], pTS->anOutput[iOut], aMerge, nMerge, 0
115108       );
115109
115110       if( iOut>0 ) sqlite3_free(aMerge);
115111       sqlite3_free(pTS->aaOutput[iOut]);
115112       pTS->aaOutput[iOut] = 0;
115113
115114       aMerge = aNew;
115115       nMerge = nNew;
115116       if( (iOut+1)==SizeofArray(pTS->aaOutput) ){
115117         pTS->aaOutput[iOut] = aMerge;
115118         pTS->anOutput[iOut] = nMerge;
115119       }
115120     }
115121   }
115122   return SQLITE_OK;
115123 }
115124
115125 static int fts3DeferredTermSelect(
115126   Fts3DeferredToken *pToken,      /* Phrase token */
115127   int isTermPos,                  /* True to include positions */
115128   int *pnOut,                     /* OUT: Size of list */
115129   char **ppOut                    /* OUT: Body of list */
115130 ){
115131   char *aSource;
115132   int nSource;
115133
115134   aSource = sqlite3Fts3DeferredDoclist(pToken, &nSource);
115135   if( !aSource ){
115136     *pnOut = 0;
115137     *ppOut = 0;
115138   }else if( isTermPos ){
115139     *ppOut = sqlite3_malloc(nSource);
115140     if( !*ppOut ) return SQLITE_NOMEM;
115141     memcpy(*ppOut, aSource, nSource);
115142     *pnOut = nSource;
115143   }else{
115144     sqlite3_int64 docid;
115145     *pnOut = sqlite3Fts3GetVarint(aSource, &docid);
115146     *ppOut = sqlite3_malloc(*pnOut);
115147     if( !*ppOut ) return SQLITE_NOMEM;
115148     sqlite3Fts3PutVarint(*ppOut, docid);
115149   }
115150
115151   return SQLITE_OK;
115152 }
115153
115154 SQLITE_PRIVATE int sqlite3Fts3SegReaderCursor(
115155   Fts3Table *p,                   /* FTS3 table handle */
115156   int iLevel,                     /* Level of segments to scan */
115157   const char *zTerm,              /* Term to query for */
115158   int nTerm,                      /* Size of zTerm in bytes */
115159   int isPrefix,                   /* True for a prefix search */
115160   int isScan,                     /* True to scan from zTerm to EOF */
115161   Fts3SegReaderCursor *pCsr       /* Cursor object to populate */
115162 ){
115163   int rc = SQLITE_OK;
115164   int rc2;
115165   int iAge = 0;
115166   sqlite3_stmt *pStmt = 0;
115167   Fts3SegReader *pPending = 0;
115168
115169   assert( iLevel==FTS3_SEGCURSOR_ALL 
115170       ||  iLevel==FTS3_SEGCURSOR_PENDING 
115171       ||  iLevel>=0
115172   );
115173   assert( FTS3_SEGCURSOR_PENDING<0 );
115174   assert( FTS3_SEGCURSOR_ALL<0 );
115175   assert( iLevel==FTS3_SEGCURSOR_ALL || (zTerm==0 && isPrefix==1) );
115176   assert( isPrefix==0 || isScan==0 );
115177
115178
115179   memset(pCsr, 0, sizeof(Fts3SegReaderCursor));
115180
115181   /* If iLevel is less than 0, include a seg-reader for the pending-terms. */
115182   assert( isScan==0 || fts3HashCount(&p->pendingTerms)==0 );
115183   if( iLevel<0 && isScan==0 ){
115184     rc = sqlite3Fts3SegReaderPending(p, zTerm, nTerm, isPrefix, &pPending);
115185     if( rc==SQLITE_OK && pPending ){
115186       int nByte = (sizeof(Fts3SegReader *) * 16);
115187       pCsr->apSegment = (Fts3SegReader **)sqlite3_malloc(nByte);
115188       if( pCsr->apSegment==0 ){
115189         rc = SQLITE_NOMEM;
115190       }else{
115191         pCsr->apSegment[0] = pPending;
115192         pCsr->nSegment = 1;
115193         pPending = 0;
115194       }
115195     }
115196   }
115197
115198   if( iLevel!=FTS3_SEGCURSOR_PENDING ){
115199     if( rc==SQLITE_OK ){
115200       rc = sqlite3Fts3AllSegdirs(p, iLevel, &pStmt);
115201     }
115202     while( rc==SQLITE_OK && SQLITE_ROW==(rc = sqlite3_step(pStmt)) ){
115203
115204       /* Read the values returned by the SELECT into local variables. */
115205       sqlite3_int64 iStartBlock = sqlite3_column_int64(pStmt, 1);
115206       sqlite3_int64 iLeavesEndBlock = sqlite3_column_int64(pStmt, 2);
115207       sqlite3_int64 iEndBlock = sqlite3_column_int64(pStmt, 3);
115208       int nRoot = sqlite3_column_bytes(pStmt, 4);
115209       char const *zRoot = sqlite3_column_blob(pStmt, 4);
115210
115211       /* If nSegment is a multiple of 16 the array needs to be extended. */
115212       if( (pCsr->nSegment%16)==0 ){
115213         Fts3SegReader **apNew;
115214         int nByte = (pCsr->nSegment + 16)*sizeof(Fts3SegReader*);
115215         apNew = (Fts3SegReader **)sqlite3_realloc(pCsr->apSegment, nByte);
115216         if( !apNew ){
115217           rc = SQLITE_NOMEM;
115218           goto finished;
115219         }
115220         pCsr->apSegment = apNew;
115221       }
115222
115223       /* If zTerm is not NULL, and this segment is not stored entirely on its
115224       ** root node, the range of leaves scanned can be reduced. Do this. */
115225       if( iStartBlock && zTerm ){
115226         sqlite3_int64 *pi = (isPrefix ? &iLeavesEndBlock : 0);
115227         rc = fts3SelectLeaf(p, zTerm, nTerm, zRoot, nRoot, &iStartBlock, pi);
115228         if( rc!=SQLITE_OK ) goto finished;
115229         if( isPrefix==0 && isScan==0 ) iLeavesEndBlock = iStartBlock;
115230       }
115231  
115232       rc = sqlite3Fts3SegReaderNew(iAge, iStartBlock, iLeavesEndBlock,
115233           iEndBlock, zRoot, nRoot, &pCsr->apSegment[pCsr->nSegment]
115234       );
115235       if( rc!=SQLITE_OK ) goto finished;
115236       pCsr->nSegment++;
115237       iAge++;
115238     }
115239   }
115240
115241  finished:
115242   rc2 = sqlite3_reset(pStmt);
115243   if( rc==SQLITE_DONE ) rc = rc2;
115244   sqlite3Fts3SegReaderFree(pPending);
115245
115246   return rc;
115247 }
115248
115249
115250 static int fts3TermSegReaderCursor(
115251   Fts3Cursor *pCsr,               /* Virtual table cursor handle */
115252   const char *zTerm,              /* Term to query for */
115253   int nTerm,                      /* Size of zTerm in bytes */
115254   int isPrefix,                   /* True for a prefix search */
115255   Fts3SegReaderCursor **ppSegcsr  /* OUT: Allocated seg-reader cursor */
115256 ){
115257   Fts3SegReaderCursor *pSegcsr;   /* Object to allocate and return */
115258   int rc = SQLITE_NOMEM;          /* Return code */
115259
115260   pSegcsr = sqlite3_malloc(sizeof(Fts3SegReaderCursor));
115261   if( pSegcsr ){
115262     Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
115263     int i;
115264     int nCost = 0;
115265     rc = sqlite3Fts3SegReaderCursor(
115266         p, FTS3_SEGCURSOR_ALL, zTerm, nTerm, isPrefix, 0, pSegcsr);
115267   
115268     for(i=0; rc==SQLITE_OK && i<pSegcsr->nSegment; i++){
115269       rc = sqlite3Fts3SegReaderCost(pCsr, pSegcsr->apSegment[i], &nCost);
115270     }
115271     pSegcsr->nCost = nCost;
115272   }
115273
115274   *ppSegcsr = pSegcsr;
115275   return rc;
115276 }
115277
115278 static void fts3SegReaderCursorFree(Fts3SegReaderCursor *pSegcsr){
115279   sqlite3Fts3SegReaderFinish(pSegcsr);
115280   sqlite3_free(pSegcsr);
115281 }
115282
115283 /*
115284 ** This function retreives the doclist for the specified term (or term
115285 ** prefix) from the database. 
115286 **
115287 ** The returned doclist may be in one of two formats, depending on the 
115288 ** value of parameter isReqPos. If isReqPos is zero, then the doclist is
115289 ** a sorted list of delta-compressed docids (a bare doclist). If isReqPos
115290 ** is non-zero, then the returned list is in the same format as is stored 
115291 ** in the database without the found length specifier at the start of on-disk
115292 ** doclists.
115293 */
115294 static int fts3TermSelect(
115295   Fts3Table *p,                   /* Virtual table handle */
115296   Fts3PhraseToken *pTok,          /* Token to query for */
115297   int iColumn,                    /* Column to query (or -ve for all columns) */
115298   int isReqPos,                   /* True to include position lists in output */
115299   int *pnOut,                     /* OUT: Size of buffer at *ppOut */
115300   char **ppOut                    /* OUT: Malloced result buffer */
115301 ){
115302   int rc;                         /* Return code */
115303   Fts3SegReaderCursor *pSegcsr;   /* Seg-reader cursor for this term */
115304   TermSelect tsc;                 /* Context object for fts3TermSelectCb() */
115305   Fts3SegFilter filter;           /* Segment term filter configuration */
115306
115307   pSegcsr = pTok->pSegcsr;
115308   memset(&tsc, 0, sizeof(TermSelect));
115309   tsc.isReqPos = isReqPos;
115310
115311   filter.flags = FTS3_SEGMENT_IGNORE_EMPTY 
115312         | (pTok->isPrefix ? FTS3_SEGMENT_PREFIX : 0)
115313         | (isReqPos ? FTS3_SEGMENT_REQUIRE_POS : 0)
115314         | (iColumn<p->nColumn ? FTS3_SEGMENT_COLUMN_FILTER : 0);
115315   filter.iCol = iColumn;
115316   filter.zTerm = pTok->z;
115317   filter.nTerm = pTok->n;
115318
115319   rc = sqlite3Fts3SegReaderStart(p, pSegcsr, &filter);
115320   while( SQLITE_OK==rc
115321       && SQLITE_ROW==(rc = sqlite3Fts3SegReaderStep(p, pSegcsr)) 
115322   ){
115323     rc = fts3TermSelectCb(p, (void *)&tsc, 
115324         pSegcsr->zTerm, pSegcsr->nTerm, pSegcsr->aDoclist, pSegcsr->nDoclist
115325     );
115326   }
115327
115328   if( rc==SQLITE_OK ){
115329     rc = fts3TermSelectMerge(&tsc);
115330   }
115331   if( rc==SQLITE_OK ){
115332     *ppOut = tsc.aaOutput[0];
115333     *pnOut = tsc.anOutput[0];
115334   }else{
115335     int i;
115336     for(i=0; i<SizeofArray(tsc.aaOutput); i++){
115337       sqlite3_free(tsc.aaOutput[i]);
115338     }
115339   }
115340
115341   fts3SegReaderCursorFree(pSegcsr);
115342   pTok->pSegcsr = 0;
115343   return rc;
115344 }
115345
115346 /*
115347 ** This function counts the total number of docids in the doclist stored
115348 ** in buffer aList[], size nList bytes.
115349 **
115350 ** If the isPoslist argument is true, then it is assumed that the doclist
115351 ** contains a position-list following each docid. Otherwise, it is assumed
115352 ** that the doclist is simply a list of docids stored as delta encoded 
115353 ** varints.
115354 */
115355 static int fts3DoclistCountDocids(int isPoslist, char *aList, int nList){
115356   int nDoc = 0;                   /* Return value */
115357   if( aList ){
115358     char *aEnd = &aList[nList];   /* Pointer to one byte after EOF */
115359     char *p = aList;              /* Cursor */
115360     if( !isPoslist ){
115361       /* The number of docids in the list is the same as the number of 
115362       ** varints. In FTS3 a varint consists of a single byte with the 0x80 
115363       ** bit cleared and zero or more bytes with the 0x80 bit set. So to
115364       ** count the varints in the buffer, just count the number of bytes
115365       ** with the 0x80 bit clear.  */
115366       while( p<aEnd ) nDoc += (((*p++)&0x80)==0);
115367     }else{
115368       while( p<aEnd ){
115369         nDoc++;
115370         while( (*p++)&0x80 );     /* Skip docid varint */
115371         fts3PoslistCopy(0, &p);   /* Skip over position list */
115372       }
115373     }
115374   }
115375
115376   return nDoc;
115377 }
115378
115379 /*
115380 ** Call sqlite3Fts3DeferToken() for each token in the expression pExpr.
115381 */
115382 static int fts3DeferExpression(Fts3Cursor *pCsr, Fts3Expr *pExpr){
115383   int rc = SQLITE_OK;
115384   if( pExpr ){
115385     rc = fts3DeferExpression(pCsr, pExpr->pLeft);
115386     if( rc==SQLITE_OK ){
115387       rc = fts3DeferExpression(pCsr, pExpr->pRight);
115388     }
115389     if( pExpr->eType==FTSQUERY_PHRASE ){
115390       int iCol = pExpr->pPhrase->iColumn;
115391       int i;
115392       for(i=0; rc==SQLITE_OK && i<pExpr->pPhrase->nToken; i++){
115393         Fts3PhraseToken *pToken = &pExpr->pPhrase->aToken[i];
115394         if( pToken->pDeferred==0 ){
115395           rc = sqlite3Fts3DeferToken(pCsr, pToken, iCol);
115396         }
115397       }
115398     }
115399   }
115400   return rc;
115401 }
115402
115403 /*
115404 ** This function removes the position information from a doclist. When
115405 ** called, buffer aList (size *pnList bytes) contains a doclist that includes
115406 ** position information. This function removes the position information so
115407 ** that aList contains only docids, and adjusts *pnList to reflect the new
115408 ** (possibly reduced) size of the doclist.
115409 */
115410 static void fts3DoclistStripPositions(
115411   char *aList,                    /* IN/OUT: Buffer containing doclist */
115412   int *pnList                     /* IN/OUT: Size of doclist in bytes */
115413 ){
115414   if( aList ){
115415     char *aEnd = &aList[*pnList]; /* Pointer to one byte after EOF */
115416     char *p = aList;              /* Input cursor */
115417     char *pOut = aList;           /* Output cursor */
115418   
115419     while( p<aEnd ){
115420       sqlite3_int64 delta;
115421       p += sqlite3Fts3GetVarint(p, &delta);
115422       fts3PoslistCopy(0, &p);
115423       pOut += sqlite3Fts3PutVarint(pOut, delta);
115424     }
115425
115426     *pnList = (int)(pOut - aList);
115427   }
115428 }
115429
115430 /* 
115431 ** Return a DocList corresponding to the phrase *pPhrase.
115432 **
115433 ** If this function returns SQLITE_OK, but *pnOut is set to a negative value,
115434 ** then no tokens in the phrase were looked up in the full-text index. This
115435 ** is only possible when this function is called from within xFilter(). The
115436 ** caller should assume that all documents match the phrase. The actual
115437 ** filtering will take place in xNext().
115438 */
115439 static int fts3PhraseSelect(
115440   Fts3Cursor *pCsr,               /* Virtual table cursor handle */
115441   Fts3Phrase *pPhrase,            /* Phrase to return a doclist for */
115442   int isReqPos,                   /* True if output should contain positions */
115443   char **paOut,                   /* OUT: Pointer to malloc'd result buffer */
115444   int *pnOut                      /* OUT: Size of buffer at *paOut */
115445 ){
115446   char *pOut = 0;
115447   int nOut = 0;
115448   int rc = SQLITE_OK;
115449   int ii;
115450   int iCol = pPhrase->iColumn;
115451   int isTermPos = (pPhrase->nToken>1 || isReqPos);
115452   Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
115453   int isFirst = 1;
115454
115455   int iPrevTok = 0;
115456   int nDoc = 0;
115457
115458   /* If this is an xFilter() evaluation, create a segment-reader for each
115459   ** phrase token. Or, if this is an xNext() or snippet/offsets/matchinfo
115460   ** evaluation, only create segment-readers if there are no Fts3DeferredToken
115461   ** objects attached to the phrase-tokens.
115462   */
115463   for(ii=0; ii<pPhrase->nToken; ii++){
115464     Fts3PhraseToken *pTok = &pPhrase->aToken[ii];
115465     if( pTok->pSegcsr==0 ){
115466       if( (pCsr->eEvalmode==FTS3_EVAL_FILTER)
115467        || (pCsr->eEvalmode==FTS3_EVAL_NEXT && pCsr->pDeferred==0) 
115468        || (pCsr->eEvalmode==FTS3_EVAL_MATCHINFO && pTok->bFulltext) 
115469       ){
115470         rc = fts3TermSegReaderCursor(
115471             pCsr, pTok->z, pTok->n, pTok->isPrefix, &pTok->pSegcsr
115472         );
115473         if( rc!=SQLITE_OK ) return rc;
115474       }
115475     }
115476   }
115477
115478   for(ii=0; ii<pPhrase->nToken; ii++){
115479     Fts3PhraseToken *pTok;        /* Token to find doclist for */
115480     int iTok = 0;                 /* The token being queried this iteration */
115481     char *pList = 0;              /* Pointer to token doclist */
115482     int nList = 0;                /* Size of buffer at pList */
115483
115484     /* Select a token to process. If this is an xFilter() call, then tokens 
115485     ** are processed in order from least to most costly. Otherwise, tokens 
115486     ** are processed in the order in which they occur in the phrase.
115487     */
115488     if( pCsr->eEvalmode==FTS3_EVAL_MATCHINFO ){
115489       assert( isReqPos );
115490       iTok = ii;
115491       pTok = &pPhrase->aToken[iTok];
115492       if( pTok->bFulltext==0 ) continue;
115493     }else if( pCsr->eEvalmode==FTS3_EVAL_NEXT || isReqPos ){
115494       iTok = ii;
115495       pTok = &pPhrase->aToken[iTok];
115496     }else{
115497       int nMinCost = 0x7FFFFFFF;
115498       int jj;
115499
115500       /* Find the remaining token with the lowest cost. */
115501       for(jj=0; jj<pPhrase->nToken; jj++){
115502         Fts3SegReaderCursor *pSegcsr = pPhrase->aToken[jj].pSegcsr;
115503         if( pSegcsr && pSegcsr->nCost<nMinCost ){
115504           iTok = jj;
115505           nMinCost = pSegcsr->nCost;
115506         }
115507       }
115508       pTok = &pPhrase->aToken[iTok];
115509
115510       /* This branch is taken if it is determined that loading the doclist
115511       ** for the next token would require more IO than loading all documents
115512       ** currently identified by doclist pOut/nOut. No further doclists will
115513       ** be loaded from the full-text index for this phrase.
115514       */
115515       if( nMinCost>nDoc && ii>0 ){
115516         rc = fts3DeferExpression(pCsr, pCsr->pExpr);
115517         break;
115518       }
115519     }
115520
115521     if( pCsr->eEvalmode==FTS3_EVAL_NEXT && pTok->pDeferred ){
115522       rc = fts3DeferredTermSelect(pTok->pDeferred, isTermPos, &nList, &pList);
115523     }else{
115524       if( pTok->pSegcsr ){
115525         rc = fts3TermSelect(p, pTok, iCol, isTermPos, &nList, &pList);
115526       }
115527       pTok->bFulltext = 1;
115528     }
115529     assert( rc!=SQLITE_OK || pCsr->eEvalmode || pTok->pSegcsr==0 );
115530     if( rc!=SQLITE_OK ) break;
115531
115532     if( isFirst ){
115533       pOut = pList;
115534       nOut = nList;
115535       if( pCsr->eEvalmode==FTS3_EVAL_FILTER && pPhrase->nToken>1 ){
115536         nDoc = fts3DoclistCountDocids(1, pOut, nOut);
115537       }
115538       isFirst = 0;
115539       iPrevTok = iTok;
115540     }else{
115541       /* Merge the new term list and the current output. */
115542       char *aLeft, *aRight;
115543       int nLeft, nRight;
115544       int nDist;
115545       int mt;
115546
115547       /* If this is the final token of the phrase, and positions were not
115548       ** requested by the caller, use MERGE_PHRASE instead of POS_PHRASE.
115549       ** This drops the position information from the output list.
115550       */
115551       mt = MERGE_POS_PHRASE;
115552       if( ii==pPhrase->nToken-1 && !isReqPos ) mt = MERGE_PHRASE;
115553
115554       assert( iPrevTok!=iTok );
115555       if( iPrevTok<iTok ){
115556         aLeft = pOut;
115557         nLeft = nOut;
115558         aRight = pList;
115559         nRight = nList;
115560         nDist = iTok-iPrevTok;
115561         iPrevTok = iTok;
115562       }else{
115563         aRight = pOut;
115564         nRight = nOut;
115565         aLeft = pList;
115566         nLeft = nList;
115567         nDist = iPrevTok-iTok;
115568       }
115569       pOut = aRight;
115570       fts3DoclistMerge(
115571           mt, nDist, 0, pOut, &nOut, aLeft, nLeft, aRight, nRight, &nDoc
115572       );
115573       sqlite3_free(aLeft);
115574     }
115575     assert( nOut==0 || pOut!=0 );
115576   }
115577
115578   if( rc==SQLITE_OK ){
115579     if( ii!=pPhrase->nToken ){
115580       assert( pCsr->eEvalmode==FTS3_EVAL_FILTER && isReqPos==0 );
115581       fts3DoclistStripPositions(pOut, &nOut);
115582     }
115583     *paOut = pOut;
115584     *pnOut = nOut;
115585   }else{
115586     sqlite3_free(pOut);
115587   }
115588   return rc;
115589 }
115590
115591 /*
115592 ** This function merges two doclists according to the requirements of a
115593 ** NEAR operator.
115594 **
115595 ** Both input doclists must include position information. The output doclist 
115596 ** includes position information if the first argument to this function
115597 ** is MERGE_POS_NEAR, or does not if it is MERGE_NEAR.
115598 */
115599 static int fts3NearMerge(
115600   int mergetype,                  /* MERGE_POS_NEAR or MERGE_NEAR */
115601   int nNear,                      /* Parameter to NEAR operator */
115602   int nTokenLeft,                 /* Number of tokens in LHS phrase arg */
115603   char *aLeft,                    /* Doclist for LHS (incl. positions) */
115604   int nLeft,                      /* Size of LHS doclist in bytes */
115605   int nTokenRight,                /* As nTokenLeft */
115606   char *aRight,                   /* As aLeft */
115607   int nRight,                     /* As nRight */
115608   char **paOut,                   /* OUT: Results of merge (malloced) */
115609   int *pnOut                      /* OUT: Sized of output buffer */
115610 ){
115611   char *aOut;                     /* Buffer to write output doclist to */
115612   int rc;                         /* Return code */
115613
115614   assert( mergetype==MERGE_POS_NEAR || MERGE_NEAR );
115615
115616   aOut = sqlite3_malloc(nLeft+nRight+1);
115617   if( aOut==0 ){
115618     rc = SQLITE_NOMEM;
115619   }else{
115620     rc = fts3DoclistMerge(mergetype, nNear+nTokenRight, nNear+nTokenLeft, 
115621       aOut, pnOut, aLeft, nLeft, aRight, nRight, 0
115622     );
115623     if( rc!=SQLITE_OK ){
115624       sqlite3_free(aOut);
115625       aOut = 0;
115626     }
115627   }
115628
115629   *paOut = aOut;
115630   return rc;
115631 }
115632
115633 /*
115634 ** This function is used as part of the processing for the snippet() and
115635 ** offsets() functions.
115636 **
115637 ** Both pLeft and pRight are expression nodes of type FTSQUERY_PHRASE. Both
115638 ** have their respective doclists (including position information) loaded
115639 ** in Fts3Expr.aDoclist/nDoclist. This function removes all entries from
115640 ** each doclist that are not within nNear tokens of a corresponding entry
115641 ** in the other doclist.
115642 */
115643 SQLITE_PRIVATE int sqlite3Fts3ExprNearTrim(Fts3Expr *pLeft, Fts3Expr *pRight, int nNear){
115644   int rc;                         /* Return code */
115645
115646   assert( pLeft->eType==FTSQUERY_PHRASE );
115647   assert( pRight->eType==FTSQUERY_PHRASE );
115648   assert( pLeft->isLoaded && pRight->isLoaded );
115649
115650   if( pLeft->aDoclist==0 || pRight->aDoclist==0 ){
115651     sqlite3_free(pLeft->aDoclist);
115652     sqlite3_free(pRight->aDoclist);
115653     pRight->aDoclist = 0;
115654     pLeft->aDoclist = 0;
115655     rc = SQLITE_OK;
115656   }else{
115657     char *aOut;                   /* Buffer in which to assemble new doclist */
115658     int nOut;                     /* Size of buffer aOut in bytes */
115659
115660     rc = fts3NearMerge(MERGE_POS_NEAR, nNear, 
115661         pLeft->pPhrase->nToken, pLeft->aDoclist, pLeft->nDoclist,
115662         pRight->pPhrase->nToken, pRight->aDoclist, pRight->nDoclist,
115663         &aOut, &nOut
115664     );
115665     if( rc!=SQLITE_OK ) return rc;
115666     sqlite3_free(pRight->aDoclist);
115667     pRight->aDoclist = aOut;
115668     pRight->nDoclist = nOut;
115669
115670     rc = fts3NearMerge(MERGE_POS_NEAR, nNear, 
115671         pRight->pPhrase->nToken, pRight->aDoclist, pRight->nDoclist,
115672         pLeft->pPhrase->nToken, pLeft->aDoclist, pLeft->nDoclist,
115673         &aOut, &nOut
115674     );
115675     sqlite3_free(pLeft->aDoclist);
115676     pLeft->aDoclist = aOut;
115677     pLeft->nDoclist = nOut;
115678   }
115679   return rc;
115680 }
115681
115682
115683 /*
115684 ** Allocate an Fts3SegReaderArray for each token in the expression pExpr. 
115685 ** The allocated objects are stored in the Fts3PhraseToken.pArray member
115686 ** variables of each token structure.
115687 */
115688 static int fts3ExprAllocateSegReaders(
115689   Fts3Cursor *pCsr,               /* FTS3 table */
115690   Fts3Expr *pExpr,                /* Expression to create seg-readers for */
115691   int *pnExpr                     /* OUT: Number of AND'd expressions */
115692 ){
115693   int rc = SQLITE_OK;             /* Return code */
115694
115695   assert( pCsr->eEvalmode==FTS3_EVAL_FILTER );
115696   if( pnExpr && pExpr->eType!=FTSQUERY_AND ){
115697     (*pnExpr)++;
115698     pnExpr = 0;
115699   }
115700
115701   if( pExpr->eType==FTSQUERY_PHRASE ){
115702     Fts3Phrase *pPhrase = pExpr->pPhrase;
115703     int ii;
115704
115705     for(ii=0; rc==SQLITE_OK && ii<pPhrase->nToken; ii++){
115706       Fts3PhraseToken *pTok = &pPhrase->aToken[ii];
115707       if( pTok->pSegcsr==0 ){
115708         rc = fts3TermSegReaderCursor(
115709             pCsr, pTok->z, pTok->n, pTok->isPrefix, &pTok->pSegcsr
115710         );
115711       }
115712     }
115713   }else{ 
115714     rc = fts3ExprAllocateSegReaders(pCsr, pExpr->pLeft, pnExpr);
115715     if( rc==SQLITE_OK ){
115716       rc = fts3ExprAllocateSegReaders(pCsr, pExpr->pRight, pnExpr);
115717     }
115718   }
115719   return rc;
115720 }
115721
115722 /*
115723 ** Free the Fts3SegReaderArray objects associated with each token in the
115724 ** expression pExpr. In other words, this function frees the resources
115725 ** allocated by fts3ExprAllocateSegReaders().
115726 */
115727 static void fts3ExprFreeSegReaders(Fts3Expr *pExpr){
115728   if( pExpr ){
115729     Fts3Phrase *pPhrase = pExpr->pPhrase;
115730     if( pPhrase ){
115731       int kk;
115732       for(kk=0; kk<pPhrase->nToken; kk++){
115733         fts3SegReaderCursorFree(pPhrase->aToken[kk].pSegcsr);
115734         pPhrase->aToken[kk].pSegcsr = 0;
115735       }
115736     }
115737     fts3ExprFreeSegReaders(pExpr->pLeft);
115738     fts3ExprFreeSegReaders(pExpr->pRight);
115739   }
115740 }
115741
115742 /*
115743 ** Return the sum of the costs of all tokens in the expression pExpr. This
115744 ** function must be called after Fts3SegReaderArrays have been allocated
115745 ** for all tokens using fts3ExprAllocateSegReaders().
115746 */
115747 static int fts3ExprCost(Fts3Expr *pExpr){
115748   int nCost;                      /* Return value */
115749   if( pExpr->eType==FTSQUERY_PHRASE ){
115750     Fts3Phrase *pPhrase = pExpr->pPhrase;
115751     int ii;
115752     nCost = 0;
115753     for(ii=0; ii<pPhrase->nToken; ii++){
115754       Fts3SegReaderCursor *pSegcsr = pPhrase->aToken[ii].pSegcsr;
115755       if( pSegcsr ) nCost += pSegcsr->nCost;
115756     }
115757   }else{
115758     nCost = fts3ExprCost(pExpr->pLeft) + fts3ExprCost(pExpr->pRight);
115759   }
115760   return nCost;
115761 }
115762
115763 /*
115764 ** The following is a helper function (and type) for fts3EvalExpr(). It
115765 ** must be called after Fts3SegReaders have been allocated for every token
115766 ** in the expression. See the context it is called from in fts3EvalExpr()
115767 ** for further explanation.
115768 */
115769 typedef struct ExprAndCost ExprAndCost;
115770 struct ExprAndCost {
115771   Fts3Expr *pExpr;
115772   int nCost;
115773 };
115774 static void fts3ExprAssignCosts(
115775   Fts3Expr *pExpr,                /* Expression to create seg-readers for */
115776   ExprAndCost **ppExprCost        /* OUT: Write to *ppExprCost */
115777 ){
115778   if( pExpr->eType==FTSQUERY_AND ){
115779     fts3ExprAssignCosts(pExpr->pLeft, ppExprCost);
115780     fts3ExprAssignCosts(pExpr->pRight, ppExprCost);
115781   }else{
115782     (*ppExprCost)->pExpr = pExpr;
115783     (*ppExprCost)->nCost = fts3ExprCost(pExpr);
115784     (*ppExprCost)++;
115785   }
115786 }
115787
115788 /*
115789 ** Evaluate the full-text expression pExpr against FTS3 table pTab. Store
115790 ** the resulting doclist in *paOut and *pnOut. This routine mallocs for
115791 ** the space needed to store the output. The caller is responsible for
115792 ** freeing the space when it has finished.
115793 **
115794 ** This function is called in two distinct contexts:
115795 **
115796 **   * From within the virtual table xFilter() method. In this case, the
115797 **     output doclist contains entries for all rows in the table, based on
115798 **     data read from the full-text index.
115799 **
115800 **     In this case, if the query expression contains one or more tokens that 
115801 **     are very common, then the returned doclist may contain a superset of 
115802 **     the documents that actually match the expression.
115803 **
115804 **   * From within the virtual table xNext() method. This call is only made
115805 **     if the call from within xFilter() found that there were very common 
115806 **     tokens in the query expression and did return a superset of the 
115807 **     matching documents. In this case the returned doclist contains only
115808 **     entries that correspond to the current row of the table. Instead of
115809 **     reading the data for each token from the full-text index, the data is
115810 **     already available in-memory in the Fts3PhraseToken.pDeferred structures.
115811 **     See fts3EvalDeferred() for how it gets there.
115812 **
115813 ** In the first case above, Fts3Cursor.doDeferred==0. In the second (if it is
115814 ** required) Fts3Cursor.doDeferred==1.
115815 **
115816 ** If the SQLite invokes the snippet(), offsets() or matchinfo() function
115817 ** as part of a SELECT on an FTS3 table, this function is called on each
115818 ** individual phrase expression in the query. If there were very common tokens
115819 ** found in the xFilter() call, then this function is called once for phrase
115820 ** for each row visited, and the returned doclist contains entries for the
115821 ** current row only. Otherwise, if there were no very common tokens, then this
115822 ** function is called once only for each phrase in the query and the returned
115823 ** doclist contains entries for all rows of the table.
115824 **
115825 ** Fts3Cursor.doDeferred==1 when this function is called on phrases as a
115826 ** result of a snippet(), offsets() or matchinfo() invocation.
115827 */
115828 static int fts3EvalExpr(
115829   Fts3Cursor *p,                  /* Virtual table cursor handle */
115830   Fts3Expr *pExpr,                /* Parsed fts3 expression */
115831   char **paOut,                   /* OUT: Pointer to malloc'd result buffer */
115832   int *pnOut,                     /* OUT: Size of buffer at *paOut */
115833   int isReqPos                    /* Require positions in output buffer */
115834 ){
115835   int rc = SQLITE_OK;             /* Return code */
115836
115837   /* Zero the output parameters. */
115838   *paOut = 0;
115839   *pnOut = 0;
115840
115841   if( pExpr ){
115842     assert( pExpr->eType==FTSQUERY_NEAR   || pExpr->eType==FTSQUERY_OR     
115843          || pExpr->eType==FTSQUERY_AND    || pExpr->eType==FTSQUERY_NOT
115844          || pExpr->eType==FTSQUERY_PHRASE
115845     );
115846     assert( pExpr->eType==FTSQUERY_PHRASE || isReqPos==0 );
115847
115848     if( pExpr->eType==FTSQUERY_PHRASE ){
115849       rc = fts3PhraseSelect(p, pExpr->pPhrase,
115850           isReqPos || (pExpr->pParent && pExpr->pParent->eType==FTSQUERY_NEAR),
115851           paOut, pnOut
115852       );
115853       fts3ExprFreeSegReaders(pExpr);
115854     }else if( p->eEvalmode==FTS3_EVAL_FILTER && pExpr->eType==FTSQUERY_AND ){
115855       ExprAndCost *aExpr = 0;     /* Array of AND'd expressions and costs */
115856       int nExpr = 0;              /* Size of aExpr[] */
115857       char *aRet = 0;             /* Doclist to return to caller */
115858       int nRet = 0;               /* Length of aRet[] in bytes */
115859       int nDoc = 0x7FFFFFFF;
115860
115861       assert( !isReqPos );
115862
115863       rc = fts3ExprAllocateSegReaders(p, pExpr, &nExpr);
115864       if( rc==SQLITE_OK ){
115865         assert( nExpr>1 );
115866         aExpr = sqlite3_malloc(sizeof(ExprAndCost) * nExpr);
115867         if( !aExpr ) rc = SQLITE_NOMEM;
115868       }
115869       if( rc==SQLITE_OK ){
115870         int ii;                   /* Used to iterate through expressions */
115871
115872         fts3ExprAssignCosts(pExpr, &aExpr);
115873         aExpr -= nExpr;
115874         for(ii=0; ii<nExpr; ii++){
115875           char *aNew;
115876           int nNew;
115877           int jj;
115878           ExprAndCost *pBest = 0;
115879   
115880           for(jj=0; jj<nExpr; jj++){
115881             ExprAndCost *pCand = &aExpr[jj];
115882             if( pCand->pExpr && (pBest==0 || pCand->nCost<pBest->nCost) ){
115883               pBest = pCand;
115884             }
115885           }
115886   
115887           if( pBest->nCost>nDoc ){
115888             rc = fts3DeferExpression(p, p->pExpr);
115889             break;
115890           }else{
115891             rc = fts3EvalExpr(p, pBest->pExpr, &aNew, &nNew, 0);
115892             if( rc!=SQLITE_OK ) break;
115893             pBest->pExpr = 0;
115894             if( ii==0 ){
115895               aRet = aNew;
115896               nRet = nNew;
115897               nDoc = fts3DoclistCountDocids(0, aRet, nRet);
115898             }else{
115899               fts3DoclistMerge(
115900                   MERGE_AND, 0, 0, aRet, &nRet, aRet, nRet, aNew, nNew, &nDoc
115901               );
115902               sqlite3_free(aNew);
115903             }
115904           }
115905         }
115906       }
115907
115908       if( rc==SQLITE_OK ){
115909         *paOut = aRet;
115910         *pnOut = nRet;
115911       }else{
115912         assert( *paOut==0 );
115913         sqlite3_free(aRet);
115914       }
115915       sqlite3_free(aExpr);
115916       fts3ExprFreeSegReaders(pExpr);
115917
115918     }else{
115919       char *aLeft;
115920       char *aRight;
115921       int nLeft;
115922       int nRight;
115923
115924       assert( pExpr->eType==FTSQUERY_NEAR 
115925            || pExpr->eType==FTSQUERY_OR
115926            || pExpr->eType==FTSQUERY_NOT
115927            || (pExpr->eType==FTSQUERY_AND && p->eEvalmode==FTS3_EVAL_NEXT)
115928       );
115929
115930       if( 0==(rc = fts3EvalExpr(p, pExpr->pRight, &aRight, &nRight, isReqPos))
115931        && 0==(rc = fts3EvalExpr(p, pExpr->pLeft, &aLeft, &nLeft, isReqPos))
115932       ){
115933         switch( pExpr->eType ){
115934           case FTSQUERY_NEAR: {
115935             Fts3Expr *pLeft;
115936             Fts3Expr *pRight;
115937             int mergetype = MERGE_NEAR;
115938             if( pExpr->pParent && pExpr->pParent->eType==FTSQUERY_NEAR ){
115939               mergetype = MERGE_POS_NEAR;
115940             }
115941             pLeft = pExpr->pLeft;
115942             while( pLeft->eType==FTSQUERY_NEAR ){ 
115943               pLeft=pLeft->pRight;
115944             }
115945             pRight = pExpr->pRight;
115946             assert( pRight->eType==FTSQUERY_PHRASE );
115947             assert( pLeft->eType==FTSQUERY_PHRASE );
115948
115949             rc = fts3NearMerge(mergetype, pExpr->nNear, 
115950                 pLeft->pPhrase->nToken, aLeft, nLeft,
115951                 pRight->pPhrase->nToken, aRight, nRight,
115952                 paOut, pnOut
115953             );
115954             sqlite3_free(aLeft);
115955             break;
115956           }
115957
115958           case FTSQUERY_OR: {
115959             /* Allocate a buffer for the output. The maximum size is the
115960             ** sum of the sizes of the two input buffers. The +1 term is
115961             ** so that a buffer of zero bytes is never allocated - this can
115962             ** cause fts3DoclistMerge() to incorrectly return SQLITE_NOMEM.
115963             */
115964             char *aBuffer = sqlite3_malloc(nRight+nLeft+1);
115965             rc = fts3DoclistMerge(MERGE_OR, 0, 0, aBuffer, pnOut,
115966                 aLeft, nLeft, aRight, nRight, 0
115967             );
115968             *paOut = aBuffer;
115969             sqlite3_free(aLeft);
115970             break;
115971           }
115972
115973           default: {
115974             assert( FTSQUERY_NOT==MERGE_NOT && FTSQUERY_AND==MERGE_AND );
115975             fts3DoclistMerge(pExpr->eType, 0, 0, aLeft, pnOut,
115976                 aLeft, nLeft, aRight, nRight, 0
115977             );
115978             *paOut = aLeft;
115979             break;
115980           }
115981         }
115982       }
115983       sqlite3_free(aRight);
115984     }
115985   }
115986
115987   assert( rc==SQLITE_OK || *paOut==0 );
115988   return rc;
115989 }
115990
115991 /*
115992 ** This function is called from within xNext() for each row visited by
115993 ** an FTS3 query. If evaluating the FTS3 query expression within xFilter()
115994 ** was able to determine the exact set of matching rows, this function sets
115995 ** *pbRes to true and returns SQLITE_IO immediately.
115996 **
115997 ** Otherwise, if evaluating the query expression within xFilter() returned a
115998 ** superset of the matching documents instead of an exact set (this happens
115999 ** when the query includes very common tokens and it is deemed too expensive to
116000 ** load their doclists from disk), this function tests if the current row
116001 ** really does match the FTS3 query.
116002 **
116003 ** If an error occurs, an SQLite error code is returned. Otherwise, SQLITE_OK
116004 ** is returned and *pbRes is set to true if the current row matches the
116005 ** FTS3 query (and should be included in the results returned to SQLite), or
116006 ** false otherwise.
116007 */
116008 static int fts3EvalDeferred(
116009   Fts3Cursor *pCsr,               /* FTS3 cursor pointing at row to test */
116010   int *pbRes                      /* OUT: Set to true if row is a match */
116011 ){
116012   int rc = SQLITE_OK;
116013   if( pCsr->pDeferred==0 ){
116014     *pbRes = 1;
116015   }else{
116016     rc = fts3CursorSeek(0, pCsr);
116017     if( rc==SQLITE_OK ){
116018       sqlite3Fts3FreeDeferredDoclists(pCsr);
116019       rc = sqlite3Fts3CacheDeferredDoclists(pCsr);
116020     }
116021     if( rc==SQLITE_OK ){
116022       char *a = 0;
116023       int n = 0;
116024       rc = fts3EvalExpr(pCsr, pCsr->pExpr, &a, &n, 0);
116025       assert( n>=0 );
116026       *pbRes = (n>0);
116027       sqlite3_free(a);
116028     }
116029   }
116030   return rc;
116031 }
116032
116033 /*
116034 ** Advance the cursor to the next row in the %_content table that
116035 ** matches the search criteria.  For a MATCH search, this will be
116036 ** the next row that matches. For a full-table scan, this will be
116037 ** simply the next row in the %_content table.  For a docid lookup,
116038 ** this routine simply sets the EOF flag.
116039 **
116040 ** Return SQLITE_OK if nothing goes wrong.  SQLITE_OK is returned
116041 ** even if we reach end-of-file.  The fts3EofMethod() will be called
116042 ** subsequently to determine whether or not an EOF was hit.
116043 */
116044 static int fts3NextMethod(sqlite3_vtab_cursor *pCursor){
116045   int res;
116046   int rc = SQLITE_OK;             /* Return code */
116047   Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
116048
116049   pCsr->eEvalmode = FTS3_EVAL_NEXT;
116050   do {
116051     if( pCsr->aDoclist==0 ){
116052       if( SQLITE_ROW!=sqlite3_step(pCsr->pStmt) ){
116053         pCsr->isEof = 1;
116054         rc = sqlite3_reset(pCsr->pStmt);
116055         break;
116056       }
116057       pCsr->iPrevId = sqlite3_column_int64(pCsr->pStmt, 0);
116058     }else{
116059       if( pCsr->pNextId>=&pCsr->aDoclist[pCsr->nDoclist] ){
116060         pCsr->isEof = 1;
116061         break;
116062       }
116063       sqlite3_reset(pCsr->pStmt);
116064       fts3GetDeltaVarint(&pCsr->pNextId, &pCsr->iPrevId);
116065       pCsr->isRequireSeek = 1;
116066       pCsr->isMatchinfoNeeded = 1;
116067     }
116068   }while( SQLITE_OK==(rc = fts3EvalDeferred(pCsr, &res)) && res==0 );
116069
116070   return rc;
116071 }
116072
116073 /*
116074 ** This is the xFilter interface for the virtual table.  See
116075 ** the virtual table xFilter method documentation for additional
116076 ** information.
116077 **
116078 ** If idxNum==FTS3_FULLSCAN_SEARCH then do a full table scan against
116079 ** the %_content table.
116080 **
116081 ** If idxNum==FTS3_DOCID_SEARCH then do a docid lookup for a single entry
116082 ** in the %_content table.
116083 **
116084 ** If idxNum>=FTS3_FULLTEXT_SEARCH then use the full text index.  The
116085 ** column on the left-hand side of the MATCH operator is column
116086 ** number idxNum-FTS3_FULLTEXT_SEARCH, 0 indexed.  argv[0] is the right-hand
116087 ** side of the MATCH operator.
116088 */
116089 static int fts3FilterMethod(
116090   sqlite3_vtab_cursor *pCursor,   /* The cursor used for this query */
116091   int idxNum,                     /* Strategy index */
116092   const char *idxStr,             /* Unused */
116093   int nVal,                       /* Number of elements in apVal */
116094   sqlite3_value **apVal           /* Arguments for the indexing scheme */
116095 ){
116096   const char *azSql[] = {
116097     "SELECT %s FROM %Q.'%q_content' AS x WHERE docid = ?", /* non-full-scan */
116098     "SELECT %s FROM %Q.'%q_content' AS x ",                /* full-scan */
116099   };
116100   int rc;                         /* Return code */
116101   char *zSql;                     /* SQL statement used to access %_content */
116102   Fts3Table *p = (Fts3Table *)pCursor->pVtab;
116103   Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
116104
116105   UNUSED_PARAMETER(idxStr);
116106   UNUSED_PARAMETER(nVal);
116107
116108   assert( idxNum>=0 && idxNum<=(FTS3_FULLTEXT_SEARCH+p->nColumn) );
116109   assert( nVal==0 || nVal==1 );
116110   assert( (nVal==0)==(idxNum==FTS3_FULLSCAN_SEARCH) );
116111   assert( p->pSegments==0 );
116112
116113   /* In case the cursor has been used before, clear it now. */
116114   sqlite3_finalize(pCsr->pStmt);
116115   sqlite3_free(pCsr->aDoclist);
116116   sqlite3Fts3ExprFree(pCsr->pExpr);
116117   memset(&pCursor[1], 0, sizeof(Fts3Cursor)-sizeof(sqlite3_vtab_cursor));
116118
116119   if( idxNum!=FTS3_DOCID_SEARCH && idxNum!=FTS3_FULLSCAN_SEARCH ){
116120     int iCol = idxNum-FTS3_FULLTEXT_SEARCH;
116121     const char *zQuery = (const char *)sqlite3_value_text(apVal[0]);
116122
116123     if( zQuery==0 && sqlite3_value_type(apVal[0])!=SQLITE_NULL ){
116124       return SQLITE_NOMEM;
116125     }
116126
116127     rc = sqlite3Fts3ExprParse(p->pTokenizer, p->azColumn, p->nColumn, 
116128         iCol, zQuery, -1, &pCsr->pExpr
116129     );
116130     if( rc!=SQLITE_OK ){
116131       if( rc==SQLITE_ERROR ){
116132         p->base.zErrMsg = sqlite3_mprintf("malformed MATCH expression: [%s]",
116133                                           zQuery);
116134       }
116135       return rc;
116136     }
116137
116138     rc = sqlite3Fts3ReadLock(p);
116139     if( rc!=SQLITE_OK ) return rc;
116140
116141     rc = fts3EvalExpr(pCsr, pCsr->pExpr, &pCsr->aDoclist, &pCsr->nDoclist, 0);
116142     sqlite3Fts3SegmentsClose(p);
116143     if( rc!=SQLITE_OK ) return rc;
116144     pCsr->pNextId = pCsr->aDoclist;
116145     pCsr->iPrevId = 0;
116146   }
116147
116148   /* Compile a SELECT statement for this cursor. For a full-table-scan, the
116149   ** statement loops through all rows of the %_content table. For a
116150   ** full-text query or docid lookup, the statement retrieves a single
116151   ** row by docid.
116152   */
116153   zSql = (char *)azSql[idxNum==FTS3_FULLSCAN_SEARCH];
116154   zSql = sqlite3_mprintf(zSql, p->zReadExprlist, p->zDb, p->zName);
116155   if( !zSql ){
116156     rc = SQLITE_NOMEM;
116157   }else{
116158     rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0);
116159     sqlite3_free(zSql);
116160   }
116161   if( rc==SQLITE_OK && idxNum==FTS3_DOCID_SEARCH ){
116162     rc = sqlite3_bind_value(pCsr->pStmt, 1, apVal[0]);
116163   }
116164   pCsr->eSearch = (i16)idxNum;
116165
116166   if( rc!=SQLITE_OK ) return rc;
116167   return fts3NextMethod(pCursor);
116168 }
116169
116170 /* 
116171 ** This is the xEof method of the virtual table. SQLite calls this 
116172 ** routine to find out if it has reached the end of a result set.
116173 */
116174 static int fts3EofMethod(sqlite3_vtab_cursor *pCursor){
116175   return ((Fts3Cursor *)pCursor)->isEof;
116176 }
116177
116178 /* 
116179 ** This is the xRowid method. The SQLite core calls this routine to
116180 ** retrieve the rowid for the current row of the result set. fts3
116181 ** exposes %_content.docid as the rowid for the virtual table. The
116182 ** rowid should be written to *pRowid.
116183 */
116184 static int fts3RowidMethod(sqlite3_vtab_cursor *pCursor, sqlite_int64 *pRowid){
116185   Fts3Cursor *pCsr = (Fts3Cursor *) pCursor;
116186   if( pCsr->aDoclist ){
116187     *pRowid = pCsr->iPrevId;
116188   }else{
116189     /* This branch runs if the query is implemented using a full-table scan
116190     ** (not using the full-text index). In this case grab the rowid from the
116191     ** SELECT statement.
116192     */
116193     assert( pCsr->isRequireSeek==0 );
116194     *pRowid = sqlite3_column_int64(pCsr->pStmt, 0);
116195   }
116196   return SQLITE_OK;
116197 }
116198
116199 /* 
116200 ** This is the xColumn method, called by SQLite to request a value from
116201 ** the row that the supplied cursor currently points to.
116202 */
116203 static int fts3ColumnMethod(
116204   sqlite3_vtab_cursor *pCursor,   /* Cursor to retrieve value from */
116205   sqlite3_context *pContext,      /* Context for sqlite3_result_xxx() calls */
116206   int iCol                        /* Index of column to read value from */
116207 ){
116208   int rc;                         /* Return Code */
116209   Fts3Cursor *pCsr = (Fts3Cursor *) pCursor;
116210   Fts3Table *p = (Fts3Table *)pCursor->pVtab;
116211
116212   /* The column value supplied by SQLite must be in range. */
116213   assert( iCol>=0 && iCol<=p->nColumn+1 );
116214
116215   if( iCol==p->nColumn+1 ){
116216     /* This call is a request for the "docid" column. Since "docid" is an 
116217     ** alias for "rowid", use the xRowid() method to obtain the value.
116218     */
116219     sqlite3_int64 iRowid;
116220     rc = fts3RowidMethod(pCursor, &iRowid);
116221     sqlite3_result_int64(pContext, iRowid);
116222   }else if( iCol==p->nColumn ){
116223     /* The extra column whose name is the same as the table.
116224     ** Return a blob which is a pointer to the cursor.
116225     */
116226     sqlite3_result_blob(pContext, &pCsr, sizeof(pCsr), SQLITE_TRANSIENT);
116227     rc = SQLITE_OK;
116228   }else{
116229     rc = fts3CursorSeek(0, pCsr);
116230     if( rc==SQLITE_OK ){
116231       sqlite3_result_value(pContext, sqlite3_column_value(pCsr->pStmt, iCol+1));
116232     }
116233   }
116234   return rc;
116235 }
116236
116237 /* 
116238 ** This function is the implementation of the xUpdate callback used by 
116239 ** FTS3 virtual tables. It is invoked by SQLite each time a row is to be
116240 ** inserted, updated or deleted.
116241 */
116242 static int fts3UpdateMethod(
116243   sqlite3_vtab *pVtab,            /* Virtual table handle */
116244   int nArg,                       /* Size of argument array */
116245   sqlite3_value **apVal,          /* Array of arguments */
116246   sqlite_int64 *pRowid            /* OUT: The affected (or effected) rowid */
116247 ){
116248   return sqlite3Fts3UpdateMethod(pVtab, nArg, apVal, pRowid);
116249 }
116250
116251 /*
116252 ** Implementation of xSync() method. Flush the contents of the pending-terms
116253 ** hash-table to the database.
116254 */
116255 static int fts3SyncMethod(sqlite3_vtab *pVtab){
116256   int rc = sqlite3Fts3PendingTermsFlush((Fts3Table *)pVtab);
116257   sqlite3Fts3SegmentsClose((Fts3Table *)pVtab);
116258   return rc;
116259 }
116260
116261 /*
116262 ** Implementation of xBegin() method. This is a no-op.
116263 */
116264 static int fts3BeginMethod(sqlite3_vtab *pVtab){
116265   UNUSED_PARAMETER(pVtab);
116266   assert( ((Fts3Table *)pVtab)->nPendingData==0 );
116267   return SQLITE_OK;
116268 }
116269
116270 /*
116271 ** Implementation of xCommit() method. This is a no-op. The contents of
116272 ** the pending-terms hash-table have already been flushed into the database
116273 ** by fts3SyncMethod().
116274 */
116275 static int fts3CommitMethod(sqlite3_vtab *pVtab){
116276   UNUSED_PARAMETER(pVtab);
116277   assert( ((Fts3Table *)pVtab)->nPendingData==0 );
116278   return SQLITE_OK;
116279 }
116280
116281 /*
116282 ** Implementation of xRollback(). Discard the contents of the pending-terms
116283 ** hash-table. Any changes made to the database are reverted by SQLite.
116284 */
116285 static int fts3RollbackMethod(sqlite3_vtab *pVtab){
116286   sqlite3Fts3PendingTermsClear((Fts3Table *)pVtab);
116287   return SQLITE_OK;
116288 }
116289
116290 /*
116291 ** Load the doclist associated with expression pExpr to pExpr->aDoclist.
116292 ** The loaded doclist contains positions as well as the document ids.
116293 ** This is used by the matchinfo(), snippet() and offsets() auxillary
116294 ** functions.
116295 */
116296 SQLITE_PRIVATE int sqlite3Fts3ExprLoadDoclist(Fts3Cursor *pCsr, Fts3Expr *pExpr){
116297   int rc;
116298   assert( pExpr->eType==FTSQUERY_PHRASE && pExpr->pPhrase );
116299   assert( pCsr->eEvalmode==FTS3_EVAL_NEXT );
116300   rc = fts3EvalExpr(pCsr, pExpr, &pExpr->aDoclist, &pExpr->nDoclist, 1);
116301   return rc;
116302 }
116303
116304 SQLITE_PRIVATE int sqlite3Fts3ExprLoadFtDoclist(
116305   Fts3Cursor *pCsr, 
116306   Fts3Expr *pExpr,
116307   char **paDoclist,
116308   int *pnDoclist
116309 ){
116310   int rc;
116311   assert( pCsr->eEvalmode==FTS3_EVAL_NEXT );
116312   assert( pExpr->eType==FTSQUERY_PHRASE && pExpr->pPhrase );
116313   pCsr->eEvalmode = FTS3_EVAL_MATCHINFO;
116314   rc = fts3EvalExpr(pCsr, pExpr, paDoclist, pnDoclist, 1);
116315   pCsr->eEvalmode = FTS3_EVAL_NEXT;
116316   return rc;
116317 }
116318
116319 /*
116320 ** After ExprLoadDoclist() (see above) has been called, this function is
116321 ** used to iterate/search through the position lists that make up the doclist
116322 ** stored in pExpr->aDoclist.
116323 */
116324 SQLITE_PRIVATE char *sqlite3Fts3FindPositions(
116325   Fts3Expr *pExpr,                /* Access this expressions doclist */
116326   sqlite3_int64 iDocid,           /* Docid associated with requested pos-list */
116327   int iCol                        /* Column of requested pos-list */
116328 ){
116329   assert( pExpr->isLoaded );
116330   if( pExpr->aDoclist ){
116331     char *pEnd = &pExpr->aDoclist[pExpr->nDoclist];
116332     char *pCsr;
116333
116334     if( pExpr->pCurrent==0 ){
116335       pExpr->pCurrent = pExpr->aDoclist;
116336       pExpr->iCurrent = 0;
116337       pExpr->pCurrent += sqlite3Fts3GetVarint(pExpr->pCurrent,&pExpr->iCurrent);
116338     }
116339     pCsr = pExpr->pCurrent;
116340     assert( pCsr );
116341
116342     while( pCsr<pEnd ){
116343       if( pExpr->iCurrent<iDocid ){
116344         fts3PoslistCopy(0, &pCsr);
116345         if( pCsr<pEnd ){
116346           fts3GetDeltaVarint(&pCsr, &pExpr->iCurrent);
116347         }
116348         pExpr->pCurrent = pCsr;
116349       }else{
116350         if( pExpr->iCurrent==iDocid ){
116351           int iThis = 0;
116352           if( iCol<0 ){
116353             /* If iCol is negative, return a pointer to the start of the
116354             ** position-list (instead of a pointer to the start of a list
116355             ** of offsets associated with a specific column).
116356             */
116357             return pCsr;
116358           }
116359           while( iThis<iCol ){
116360             fts3ColumnlistCopy(0, &pCsr);
116361             if( *pCsr==0x00 ) return 0;
116362             pCsr++;
116363             pCsr += sqlite3Fts3GetVarint32(pCsr, &iThis);
116364           }
116365           if( iCol==iThis && (*pCsr&0xFE) ) return pCsr;
116366         }
116367         return 0;
116368       }
116369     }
116370   }
116371
116372   return 0;
116373 }
116374
116375 /*
116376 ** Helper function used by the implementation of the overloaded snippet(),
116377 ** offsets() and optimize() SQL functions.
116378 **
116379 ** If the value passed as the third argument is a blob of size
116380 ** sizeof(Fts3Cursor*), then the blob contents are copied to the 
116381 ** output variable *ppCsr and SQLITE_OK is returned. Otherwise, an error
116382 ** message is written to context pContext and SQLITE_ERROR returned. The
116383 ** string passed via zFunc is used as part of the error message.
116384 */
116385 static int fts3FunctionArg(
116386   sqlite3_context *pContext,      /* SQL function call context */
116387   const char *zFunc,              /* Function name */
116388   sqlite3_value *pVal,            /* argv[0] passed to function */
116389   Fts3Cursor **ppCsr              /* OUT: Store cursor handle here */
116390 ){
116391   Fts3Cursor *pRet;
116392   if( sqlite3_value_type(pVal)!=SQLITE_BLOB 
116393    || sqlite3_value_bytes(pVal)!=sizeof(Fts3Cursor *)
116394   ){
116395     char *zErr = sqlite3_mprintf("illegal first argument to %s", zFunc);
116396     sqlite3_result_error(pContext, zErr, -1);
116397     sqlite3_free(zErr);
116398     return SQLITE_ERROR;
116399   }
116400   memcpy(&pRet, sqlite3_value_blob(pVal), sizeof(Fts3Cursor *));
116401   *ppCsr = pRet;
116402   return SQLITE_OK;
116403 }
116404
116405 /*
116406 ** Implementation of the snippet() function for FTS3
116407 */
116408 static void fts3SnippetFunc(
116409   sqlite3_context *pContext,      /* SQLite function call context */
116410   int nVal,                       /* Size of apVal[] array */
116411   sqlite3_value **apVal           /* Array of arguments */
116412 ){
116413   Fts3Cursor *pCsr;               /* Cursor handle passed through apVal[0] */
116414   const char *zStart = "<b>";
116415   const char *zEnd = "</b>";
116416   const char *zEllipsis = "<b>...</b>";
116417   int iCol = -1;
116418   int nToken = 15;                /* Default number of tokens in snippet */
116419
116420   /* There must be at least one argument passed to this function (otherwise
116421   ** the non-overloaded version would have been called instead of this one).
116422   */
116423   assert( nVal>=1 );
116424
116425   if( nVal>6 ){
116426     sqlite3_result_error(pContext, 
116427         "wrong number of arguments to function snippet()", -1);
116428     return;
116429   }
116430   if( fts3FunctionArg(pContext, "snippet", apVal[0], &pCsr) ) return;
116431
116432   switch( nVal ){
116433     case 6: nToken = sqlite3_value_int(apVal[5]);
116434     case 5: iCol = sqlite3_value_int(apVal[4]);
116435     case 4: zEllipsis = (const char*)sqlite3_value_text(apVal[3]);
116436     case 3: zEnd = (const char*)sqlite3_value_text(apVal[2]);
116437     case 2: zStart = (const char*)sqlite3_value_text(apVal[1]);
116438   }
116439   if( !zEllipsis || !zEnd || !zStart ){
116440     sqlite3_result_error_nomem(pContext);
116441   }else if( SQLITE_OK==fts3CursorSeek(pContext, pCsr) ){
116442     sqlite3Fts3Snippet(pContext, pCsr, zStart, zEnd, zEllipsis, iCol, nToken);
116443   }
116444 }
116445
116446 /*
116447 ** Implementation of the offsets() function for FTS3
116448 */
116449 static void fts3OffsetsFunc(
116450   sqlite3_context *pContext,      /* SQLite function call context */
116451   int nVal,                       /* Size of argument array */
116452   sqlite3_value **apVal           /* Array of arguments */
116453 ){
116454   Fts3Cursor *pCsr;               /* Cursor handle passed through apVal[0] */
116455
116456   UNUSED_PARAMETER(nVal);
116457
116458   assert( nVal==1 );
116459   if( fts3FunctionArg(pContext, "offsets", apVal[0], &pCsr) ) return;
116460   assert( pCsr );
116461   if( SQLITE_OK==fts3CursorSeek(pContext, pCsr) ){
116462     sqlite3Fts3Offsets(pContext, pCsr);
116463   }
116464 }
116465
116466 /* 
116467 ** Implementation of the special optimize() function for FTS3. This 
116468 ** function merges all segments in the database to a single segment.
116469 ** Example usage is:
116470 **
116471 **   SELECT optimize(t) FROM t LIMIT 1;
116472 **
116473 ** where 't' is the name of an FTS3 table.
116474 */
116475 static void fts3OptimizeFunc(
116476   sqlite3_context *pContext,      /* SQLite function call context */
116477   int nVal,                       /* Size of argument array */
116478   sqlite3_value **apVal           /* Array of arguments */
116479 ){
116480   int rc;                         /* Return code */
116481   Fts3Table *p;                   /* Virtual table handle */
116482   Fts3Cursor *pCursor;            /* Cursor handle passed through apVal[0] */
116483
116484   UNUSED_PARAMETER(nVal);
116485
116486   assert( nVal==1 );
116487   if( fts3FunctionArg(pContext, "optimize", apVal[0], &pCursor) ) return;
116488   p = (Fts3Table *)pCursor->base.pVtab;
116489   assert( p );
116490
116491   rc = sqlite3Fts3Optimize(p);
116492
116493   switch( rc ){
116494     case SQLITE_OK:
116495       sqlite3_result_text(pContext, "Index optimized", -1, SQLITE_STATIC);
116496       break;
116497     case SQLITE_DONE:
116498       sqlite3_result_text(pContext, "Index already optimal", -1, SQLITE_STATIC);
116499       break;
116500     default:
116501       sqlite3_result_error_code(pContext, rc);
116502       break;
116503   }
116504 }
116505
116506 /*
116507 ** Implementation of the matchinfo() function for FTS3
116508 */
116509 static void fts3MatchinfoFunc(
116510   sqlite3_context *pContext,      /* SQLite function call context */
116511   int nVal,                       /* Size of argument array */
116512   sqlite3_value **apVal           /* Array of arguments */
116513 ){
116514   Fts3Cursor *pCsr;               /* Cursor handle passed through apVal[0] */
116515   assert( nVal==1 || nVal==2 );
116516   if( SQLITE_OK==fts3FunctionArg(pContext, "matchinfo", apVal[0], &pCsr) ){
116517     const char *zArg = 0;
116518     if( nVal>1 ){
116519       zArg = (const char *)sqlite3_value_text(apVal[1]);
116520     }
116521     sqlite3Fts3Matchinfo(pContext, pCsr, zArg);
116522   }
116523 }
116524
116525 /*
116526 ** This routine implements the xFindFunction method for the FTS3
116527 ** virtual table.
116528 */
116529 static int fts3FindFunctionMethod(
116530   sqlite3_vtab *pVtab,            /* Virtual table handle */
116531   int nArg,                       /* Number of SQL function arguments */
116532   const char *zName,              /* Name of SQL function */
116533   void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), /* OUT: Result */
116534   void **ppArg                    /* Unused */
116535 ){
116536   struct Overloaded {
116537     const char *zName;
116538     void (*xFunc)(sqlite3_context*,int,sqlite3_value**);
116539   } aOverload[] = {
116540     { "snippet", fts3SnippetFunc },
116541     { "offsets", fts3OffsetsFunc },
116542     { "optimize", fts3OptimizeFunc },
116543     { "matchinfo", fts3MatchinfoFunc },
116544   };
116545   int i;                          /* Iterator variable */
116546
116547   UNUSED_PARAMETER(pVtab);
116548   UNUSED_PARAMETER(nArg);
116549   UNUSED_PARAMETER(ppArg);
116550
116551   for(i=0; i<SizeofArray(aOverload); i++){
116552     if( strcmp(zName, aOverload[i].zName)==0 ){
116553       *pxFunc = aOverload[i].xFunc;
116554       return 1;
116555     }
116556   }
116557
116558   /* No function of the specified name was found. Return 0. */
116559   return 0;
116560 }
116561
116562 /*
116563 ** Implementation of FTS3 xRename method. Rename an fts3 table.
116564 */
116565 static int fts3RenameMethod(
116566   sqlite3_vtab *pVtab,            /* Virtual table handle */
116567   const char *zName               /* New name of table */
116568 ){
116569   Fts3Table *p = (Fts3Table *)pVtab;
116570   sqlite3 *db = p->db;            /* Database connection */
116571   int rc;                         /* Return Code */
116572
116573   rc = sqlite3Fts3PendingTermsFlush(p);
116574   if( rc!=SQLITE_OK ){
116575     return rc;
116576   }
116577
116578   fts3DbExec(&rc, db,
116579     "ALTER TABLE %Q.'%q_content'  RENAME TO '%q_content';",
116580     p->zDb, p->zName, zName
116581   );
116582   if( p->bHasDocsize ){
116583     fts3DbExec(&rc, db,
116584       "ALTER TABLE %Q.'%q_docsize'  RENAME TO '%q_docsize';",
116585       p->zDb, p->zName, zName
116586     );
116587   }
116588   if( p->bHasStat ){
116589     fts3DbExec(&rc, db,
116590       "ALTER TABLE %Q.'%q_stat'  RENAME TO '%q_stat';",
116591       p->zDb, p->zName, zName
116592     );
116593   }
116594   fts3DbExec(&rc, db,
116595     "ALTER TABLE %Q.'%q_segments' RENAME TO '%q_segments';",
116596     p->zDb, p->zName, zName
116597   );
116598   fts3DbExec(&rc, db,
116599     "ALTER TABLE %Q.'%q_segdir'   RENAME TO '%q_segdir';",
116600     p->zDb, p->zName, zName
116601   );
116602   return rc;
116603 }
116604
116605 static const sqlite3_module fts3Module = {
116606   /* iVersion      */ 0,
116607   /* xCreate       */ fts3CreateMethod,
116608   /* xConnect      */ fts3ConnectMethod,
116609   /* xBestIndex    */ fts3BestIndexMethod,
116610   /* xDisconnect   */ fts3DisconnectMethod,
116611   /* xDestroy      */ fts3DestroyMethod,
116612   /* xOpen         */ fts3OpenMethod,
116613   /* xClose        */ fts3CloseMethod,
116614   /* xFilter       */ fts3FilterMethod,
116615   /* xNext         */ fts3NextMethod,
116616   /* xEof          */ fts3EofMethod,
116617   /* xColumn       */ fts3ColumnMethod,
116618   /* xRowid        */ fts3RowidMethod,
116619   /* xUpdate       */ fts3UpdateMethod,
116620   /* xBegin        */ fts3BeginMethod,
116621   /* xSync         */ fts3SyncMethod,
116622   /* xCommit       */ fts3CommitMethod,
116623   /* xRollback     */ fts3RollbackMethod,
116624   /* xFindFunction */ fts3FindFunctionMethod,
116625   /* xRename */       fts3RenameMethod,
116626 };
116627
116628 /*
116629 ** This function is registered as the module destructor (called when an
116630 ** FTS3 enabled database connection is closed). It frees the memory
116631 ** allocated for the tokenizer hash table.
116632 */
116633 static void hashDestroy(void *p){
116634   Fts3Hash *pHash = (Fts3Hash *)p;
116635   sqlite3Fts3HashClear(pHash);
116636   sqlite3_free(pHash);
116637 }
116638
116639 /*
116640 ** The fts3 built-in tokenizers - "simple", "porter" and "icu"- are 
116641 ** implemented in files fts3_tokenizer1.c, fts3_porter.c and fts3_icu.c
116642 ** respectively. The following three forward declarations are for functions
116643 ** declared in these files used to retrieve the respective implementations.
116644 **
116645 ** Calling sqlite3Fts3SimpleTokenizerModule() sets the value pointed
116646 ** to by the argument to point to the "simple" tokenizer implementation.
116647 ** And so on.
116648 */
116649 SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule);
116650 SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(sqlite3_tokenizer_module const**ppModule);
116651 #ifdef SQLITE_ENABLE_ICU
116652 SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(sqlite3_tokenizer_module const**ppModule);
116653 #endif
116654
116655 /*
116656 ** Initialise the fts3 extension. If this extension is built as part
116657 ** of the sqlite library, then this function is called directly by
116658 ** SQLite. If fts3 is built as a dynamically loadable extension, this
116659 ** function is called by the sqlite3_extension_init() entry point.
116660 */
116661 SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db){
116662   int rc = SQLITE_OK;
116663   Fts3Hash *pHash = 0;
116664   const sqlite3_tokenizer_module *pSimple = 0;
116665   const sqlite3_tokenizer_module *pPorter = 0;
116666
116667 #ifdef SQLITE_ENABLE_ICU
116668   const sqlite3_tokenizer_module *pIcu = 0;
116669   sqlite3Fts3IcuTokenizerModule(&pIcu);
116670 #endif
116671
116672   rc = sqlite3Fts3InitAux(db);
116673   if( rc!=SQLITE_OK ) return rc;
116674
116675   sqlite3Fts3SimpleTokenizerModule(&pSimple);
116676   sqlite3Fts3PorterTokenizerModule(&pPorter);
116677
116678   /* Allocate and initialise the hash-table used to store tokenizers. */
116679   pHash = sqlite3_malloc(sizeof(Fts3Hash));
116680   if( !pHash ){
116681     rc = SQLITE_NOMEM;
116682   }else{
116683     sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1);
116684   }
116685
116686   /* Load the built-in tokenizers into the hash table */
116687   if( rc==SQLITE_OK ){
116688     if( sqlite3Fts3HashInsert(pHash, "simple", 7, (void *)pSimple)
116689      || sqlite3Fts3HashInsert(pHash, "porter", 7, (void *)pPorter) 
116690 #ifdef SQLITE_ENABLE_ICU
116691      || (pIcu && sqlite3Fts3HashInsert(pHash, "icu", 4, (void *)pIcu))
116692 #endif
116693     ){
116694       rc = SQLITE_NOMEM;
116695     }
116696   }
116697
116698 #ifdef SQLITE_TEST
116699   if( rc==SQLITE_OK ){
116700     rc = sqlite3Fts3ExprInitTestInterface(db);
116701   }
116702 #endif
116703
116704   /* Create the virtual table wrapper around the hash-table and overload 
116705   ** the two scalar functions. If this is successful, register the
116706   ** module with sqlite.
116707   */
116708   if( SQLITE_OK==rc 
116709 #if CHROMIUM_FTS3_CHANGES && !SQLITE_TEST
116710       /* fts3_tokenizer() disabled for security reasons. */
116711 #else
116712    && SQLITE_OK==(rc = sqlite3Fts3InitHashTable(db, pHash, "fts3_tokenizer"))
116713 #endif
116714    && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1))
116715    && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1))
116716    && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1))
116717    && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 2))
116718    && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1))
116719   ){
116720     rc = sqlite3_create_module_v2(
116721         db, "fts3", &fts3Module, (void *)pHash, hashDestroy
116722     );
116723 #if CHROMIUM_FTS3_CHANGES && !SQLITE_TEST
116724     /* Disable fts4 pending review. */
116725 #else
116726     if( rc==SQLITE_OK ){
116727       rc = sqlite3_create_module_v2(
116728           db, "fts4", &fts3Module, (void *)pHash, 0
116729       );
116730     }
116731 #endif
116732     return rc;
116733   }
116734
116735   /* An error has occurred. Delete the hash table and return the error code. */
116736   assert( rc!=SQLITE_OK );
116737   if( pHash ){
116738     sqlite3Fts3HashClear(pHash);
116739     sqlite3_free(pHash);
116740   }
116741   return rc;
116742 }
116743
116744 #if !SQLITE_CORE
116745 SQLITE_API int sqlite3_extension_init(
116746   sqlite3 *db, 
116747   char **pzErrMsg,
116748   const sqlite3_api_routines *pApi
116749 ){
116750   SQLITE_EXTENSION_INIT2(pApi)
116751   return sqlite3Fts3Init(db);
116752 }
116753 #endif
116754
116755 #endif
116756
116757 /************** End of fts3.c ************************************************/
116758 /************** Begin file fts3_aux.c ****************************************/
116759 /*
116760 ** 2011 Jan 27
116761 **
116762 ** The author disclaims copyright to this source code.  In place of
116763 ** a legal notice, here is a blessing:
116764 **
116765 **    May you do good and not evil.
116766 **    May you find forgiveness for yourself and forgive others.
116767 **    May you share freely, never taking more than you give.
116768 **
116769 ******************************************************************************
116770 **
116771 */
116772
116773 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
116774
116775
116776 typedef struct Fts3auxTable Fts3auxTable;
116777 typedef struct Fts3auxCursor Fts3auxCursor;
116778
116779 struct Fts3auxTable {
116780   sqlite3_vtab base;              /* Base class used by SQLite core */
116781   Fts3Table *pFts3Tab;
116782 };
116783
116784 struct Fts3auxCursor {
116785   sqlite3_vtab_cursor base;       /* Base class used by SQLite core */
116786   Fts3SegReaderCursor csr;        /* Must be right after "base" */
116787   Fts3SegFilter filter;
116788   char *zStop;
116789   int nStop;                      /* Byte-length of string zStop */
116790   int isEof;                      /* True if cursor is at EOF */
116791   sqlite3_int64 iRowid;           /* Current rowid */
116792
116793   int iCol;                       /* Current value of 'col' column */
116794   int nStat;                      /* Size of aStat[] array */
116795   struct Fts3auxColstats {
116796     sqlite3_int64 nDoc;           /* 'documents' values for current csr row */
116797     sqlite3_int64 nOcc;           /* 'occurrences' values for current csr row */
116798   } *aStat;
116799 };
116800
116801 /*
116802 ** Schema of the terms table.
116803 */
116804 #define FTS3_TERMS_SCHEMA "CREATE TABLE x(term, col, documents, occurrences)"
116805
116806 /*
116807 ** This function does all the work for both the xConnect and xCreate methods.
116808 ** These tables have no persistent representation of their own, so xConnect
116809 ** and xCreate are identical operations.
116810 */
116811 static int fts3auxConnectMethod(
116812   sqlite3 *db,                    /* Database connection */
116813   void *pUnused,                  /* Unused */
116814   int argc,                       /* Number of elements in argv array */
116815   const char * const *argv,       /* xCreate/xConnect argument array */
116816   sqlite3_vtab **ppVtab,          /* OUT: New sqlite3_vtab object */
116817   char **pzErr                    /* OUT: sqlite3_malloc'd error message */
116818 ){
116819   char const *zDb;                /* Name of database (e.g. "main") */
116820   char const *zFts3;              /* Name of fts3 table */
116821   int nDb;                        /* Result of strlen(zDb) */
116822   int nFts3;                      /* Result of strlen(zFts3) */
116823   int nByte;                      /* Bytes of space to allocate here */
116824   int rc;                         /* value returned by declare_vtab() */
116825   Fts3auxTable *p;                /* Virtual table object to return */
116826
116827   UNUSED_PARAMETER(pUnused);
116828
116829   /* The user should specify a single argument - the name of an fts3 table. */
116830   if( argc!=4 ){
116831     *pzErr = sqlite3_mprintf(
116832         "wrong number of arguments to fts4aux constructor"
116833     );
116834     return SQLITE_ERROR;
116835   }
116836
116837   zDb = argv[1]; 
116838   nDb = strlen(zDb);
116839   zFts3 = argv[3];
116840   nFts3 = strlen(zFts3);
116841
116842   rc = sqlite3_declare_vtab(db, FTS3_TERMS_SCHEMA);
116843   if( rc!=SQLITE_OK ) return rc;
116844
116845   nByte = sizeof(Fts3auxTable) + sizeof(Fts3Table) + nDb + nFts3 + 2;
116846   p = (Fts3auxTable *)sqlite3_malloc(nByte);
116847   if( !p ) return SQLITE_NOMEM;
116848   memset(p, 0, nByte);
116849
116850   p->pFts3Tab = (Fts3Table *)&p[1];
116851   p->pFts3Tab->zDb = (char *)&p->pFts3Tab[1];
116852   p->pFts3Tab->zName = &p->pFts3Tab->zDb[nDb+1];
116853   p->pFts3Tab->db = db;
116854
116855   memcpy((char *)p->pFts3Tab->zDb, zDb, nDb);
116856   memcpy((char *)p->pFts3Tab->zName, zFts3, nFts3);
116857   sqlite3Fts3Dequote((char *)p->pFts3Tab->zName);
116858
116859   *ppVtab = (sqlite3_vtab *)p;
116860   return SQLITE_OK;
116861 }
116862
116863 /*
116864 ** This function does the work for both the xDisconnect and xDestroy methods.
116865 ** These tables have no persistent representation of their own, so xDisconnect
116866 ** and xDestroy are identical operations.
116867 */
116868 static int fts3auxDisconnectMethod(sqlite3_vtab *pVtab){
116869   Fts3auxTable *p = (Fts3auxTable *)pVtab;
116870   Fts3Table *pFts3 = p->pFts3Tab;
116871   int i;
116872
116873   /* Free any prepared statements held */
116874   for(i=0; i<SizeofArray(pFts3->aStmt); i++){
116875     sqlite3_finalize(pFts3->aStmt[i]);
116876   }
116877   sqlite3_free(pFts3->zSegmentsTbl);
116878   sqlite3_free(p);
116879   return SQLITE_OK;
116880 }
116881
116882 #define FTS4AUX_EQ_CONSTRAINT 1
116883 #define FTS4AUX_GE_CONSTRAINT 2
116884 #define FTS4AUX_LE_CONSTRAINT 4
116885
116886 /*
116887 ** xBestIndex - Analyze a WHERE and ORDER BY clause.
116888 */
116889 static int fts3auxBestIndexMethod(
116890   sqlite3_vtab *pVTab, 
116891   sqlite3_index_info *pInfo
116892 ){
116893   int i;
116894   int iEq = -1;
116895   int iGe = -1;
116896   int iLe = -1;
116897
116898   UNUSED_PARAMETER(pVTab);
116899
116900   /* This vtab delivers always results in "ORDER BY term ASC" order. */
116901   if( pInfo->nOrderBy==1 
116902    && pInfo->aOrderBy[0].iColumn==0 
116903    && pInfo->aOrderBy[0].desc==0
116904   ){
116905     pInfo->orderByConsumed = 1;
116906   }
116907
116908   /* Search for equality and range constraints on the "term" column. */
116909   for(i=0; i<pInfo->nConstraint; i++){
116910     if( pInfo->aConstraint[i].usable && pInfo->aConstraint[i].iColumn==0 ){
116911       int op = pInfo->aConstraint[i].op;
116912       if( op==SQLITE_INDEX_CONSTRAINT_EQ ) iEq = i;
116913       if( op==SQLITE_INDEX_CONSTRAINT_LT ) iLe = i;
116914       if( op==SQLITE_INDEX_CONSTRAINT_LE ) iLe = i;
116915       if( op==SQLITE_INDEX_CONSTRAINT_GT ) iGe = i;
116916       if( op==SQLITE_INDEX_CONSTRAINT_GE ) iGe = i;
116917     }
116918   }
116919
116920   if( iEq>=0 ){
116921     pInfo->idxNum = FTS4AUX_EQ_CONSTRAINT;
116922     pInfo->aConstraintUsage[iEq].argvIndex = 1;
116923     pInfo->estimatedCost = 5;
116924   }else{
116925     pInfo->idxNum = 0;
116926     pInfo->estimatedCost = 20000;
116927     if( iGe>=0 ){
116928       pInfo->idxNum += FTS4AUX_GE_CONSTRAINT;
116929       pInfo->aConstraintUsage[iGe].argvIndex = 1;
116930       pInfo->estimatedCost /= 2;
116931     }
116932     if( iLe>=0 ){
116933       pInfo->idxNum += FTS4AUX_LE_CONSTRAINT;
116934       pInfo->aConstraintUsage[iLe].argvIndex = 1 + (iGe>=0);
116935       pInfo->estimatedCost /= 2;
116936     }
116937   }
116938
116939   return SQLITE_OK;
116940 }
116941
116942 /*
116943 ** xOpen - Open a cursor.
116944 */
116945 static int fts3auxOpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
116946   Fts3auxCursor *pCsr;            /* Pointer to cursor object to return */
116947
116948   UNUSED_PARAMETER(pVTab);
116949
116950   pCsr = (Fts3auxCursor *)sqlite3_malloc(sizeof(Fts3auxCursor));
116951   if( !pCsr ) return SQLITE_NOMEM;
116952   memset(pCsr, 0, sizeof(Fts3auxCursor));
116953
116954   *ppCsr = (sqlite3_vtab_cursor *)pCsr;
116955   return SQLITE_OK;
116956 }
116957
116958 /*
116959 ** xClose - Close a cursor.
116960 */
116961 static int fts3auxCloseMethod(sqlite3_vtab_cursor *pCursor){
116962   Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
116963   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
116964
116965   sqlite3Fts3SegmentsClose(pFts3);
116966   sqlite3Fts3SegReaderFinish(&pCsr->csr);
116967   sqlite3_free((void *)pCsr->filter.zTerm);
116968   sqlite3_free(pCsr->zStop);
116969   sqlite3_free(pCsr->aStat);
116970   sqlite3_free(pCsr);
116971   return SQLITE_OK;
116972 }
116973
116974 static int fts3auxGrowStatArray(Fts3auxCursor *pCsr, int nSize){
116975   if( nSize>pCsr->nStat ){
116976     struct Fts3auxColstats *aNew;
116977     aNew = (struct Fts3auxColstats *)sqlite3_realloc(pCsr->aStat, 
116978         sizeof(struct Fts3auxColstats) * nSize
116979     );
116980     if( aNew==0 ) return SQLITE_NOMEM;
116981     memset(&aNew[pCsr->nStat], 0, 
116982         sizeof(struct Fts3auxColstats) * (nSize - pCsr->nStat)
116983     );
116984     pCsr->aStat = aNew;
116985     pCsr->nStat = nSize;
116986   }
116987   return SQLITE_OK;
116988 }
116989
116990 /*
116991 ** xNext - Advance the cursor to the next row, if any.
116992 */
116993 static int fts3auxNextMethod(sqlite3_vtab_cursor *pCursor){
116994   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
116995   Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
116996   int rc;
116997
116998   /* Increment our pretend rowid value. */
116999   pCsr->iRowid++;
117000
117001   for(pCsr->iCol++; pCsr->iCol<pCsr->nStat; pCsr->iCol++){
117002     if( pCsr->aStat[pCsr->iCol].nDoc>0 ) return SQLITE_OK;
117003   }
117004
117005   rc = sqlite3Fts3SegReaderStep(pFts3, &pCsr->csr);
117006   if( rc==SQLITE_ROW ){
117007     int i = 0;
117008     int nDoclist = pCsr->csr.nDoclist;
117009     char *aDoclist = pCsr->csr.aDoclist;
117010     int iCol;
117011
117012     int eState = 0;
117013
117014     if( pCsr->zStop ){
117015       int n = (pCsr->nStop<pCsr->csr.nTerm) ? pCsr->nStop : pCsr->csr.nTerm;
117016       int mc = memcmp(pCsr->zStop, pCsr->csr.zTerm, n);
117017       if( mc<0 || (mc==0 && pCsr->csr.nTerm>pCsr->nStop) ){
117018         pCsr->isEof = 1;
117019         return SQLITE_OK;
117020       }
117021     }
117022
117023     if( fts3auxGrowStatArray(pCsr, 2) ) return SQLITE_NOMEM;
117024     memset(pCsr->aStat, 0, sizeof(struct Fts3auxColstats) * pCsr->nStat);
117025     iCol = 0;
117026
117027     while( i<nDoclist ){
117028       sqlite3_int64 v = 0;
117029
117030       i += sqlite3Fts3GetVarint(&aDoclist[i], &v);
117031       switch( eState ){
117032         /* State 0. In this state the integer just read was a docid. */
117033         case 0:
117034           pCsr->aStat[0].nDoc++;
117035           eState = 1;
117036           iCol = 0;
117037           break;
117038
117039         /* State 1. In this state we are expecting either a 1, indicating
117040         ** that the following integer will be a column number, or the
117041         ** start of a position list for column 0.  
117042         ** 
117043         ** The only difference between state 1 and state 2 is that if the
117044         ** integer encountered in state 1 is not 0 or 1, then we need to
117045         ** increment the column 0 "nDoc" count for this term.
117046         */
117047         case 1:
117048           assert( iCol==0 );
117049           if( v>1 ){
117050             pCsr->aStat[1].nDoc++;
117051           }
117052           eState = 2;
117053           /* fall through */
117054
117055         case 2:
117056           if( v==0 ){       /* 0x00. Next integer will be a docid. */
117057             eState = 0;
117058           }else if( v==1 ){ /* 0x01. Next integer will be a column number. */
117059             eState = 3;
117060           }else{            /* 2 or greater. A position. */
117061             pCsr->aStat[iCol+1].nOcc++;
117062             pCsr->aStat[0].nOcc++;
117063           }
117064           break;
117065
117066         /* State 3. The integer just read is a column number. */
117067         default: assert( eState==3 );
117068           iCol = (int)v;
117069           if( fts3auxGrowStatArray(pCsr, iCol+2) ) return SQLITE_NOMEM;
117070           pCsr->aStat[iCol+1].nDoc++;
117071           eState = 2;
117072           break;
117073       }
117074     }
117075
117076     pCsr->iCol = 0;
117077     rc = SQLITE_OK;
117078   }else{
117079     pCsr->isEof = 1;
117080   }
117081   return rc;
117082 }
117083
117084 /*
117085 ** xFilter - Initialize a cursor to point at the start of its data.
117086 */
117087 static int fts3auxFilterMethod(
117088   sqlite3_vtab_cursor *pCursor,   /* The cursor used for this query */
117089   int idxNum,                     /* Strategy index */
117090   const char *idxStr,             /* Unused */
117091   int nVal,                       /* Number of elements in apVal */
117092   sqlite3_value **apVal           /* Arguments for the indexing scheme */
117093 ){
117094   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
117095   Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
117096   int rc;
117097   int isScan;
117098
117099   UNUSED_PARAMETER(nVal);
117100
117101   assert( idxStr==0 );
117102   assert( idxNum==FTS4AUX_EQ_CONSTRAINT || idxNum==0
117103        || idxNum==FTS4AUX_LE_CONSTRAINT || idxNum==FTS4AUX_GE_CONSTRAINT
117104        || idxNum==(FTS4AUX_LE_CONSTRAINT|FTS4AUX_GE_CONSTRAINT)
117105   );
117106   isScan = (idxNum!=FTS4AUX_EQ_CONSTRAINT);
117107
117108   /* In case this cursor is being reused, close and zero it. */
117109   testcase(pCsr->filter.zTerm);
117110   sqlite3Fts3SegReaderFinish(&pCsr->csr);
117111   sqlite3_free((void *)pCsr->filter.zTerm);
117112   sqlite3_free(pCsr->aStat);
117113   memset(&pCsr->csr, 0, ((u8*)&pCsr[1]) - (u8*)&pCsr->csr);
117114
117115   pCsr->filter.flags = FTS3_SEGMENT_REQUIRE_POS|FTS3_SEGMENT_IGNORE_EMPTY;
117116   if( isScan ) pCsr->filter.flags |= FTS3_SEGMENT_SCAN;
117117
117118   if( idxNum&(FTS4AUX_EQ_CONSTRAINT|FTS4AUX_GE_CONSTRAINT) ){
117119     const unsigned char *zStr = sqlite3_value_text(apVal[0]);
117120     if( zStr ){
117121       pCsr->filter.zTerm = sqlite3_mprintf("%s", zStr);
117122       pCsr->filter.nTerm = sqlite3_value_bytes(apVal[0]);
117123       if( pCsr->filter.zTerm==0 ) return SQLITE_NOMEM;
117124     }
117125   }
117126   if( idxNum&FTS4AUX_LE_CONSTRAINT ){
117127     int iIdx = (idxNum&FTS4AUX_GE_CONSTRAINT) ? 1 : 0;
117128     pCsr->zStop = sqlite3_mprintf("%s", sqlite3_value_text(apVal[iIdx]));
117129     pCsr->nStop = sqlite3_value_bytes(apVal[iIdx]);
117130     if( pCsr->zStop==0 ) return SQLITE_NOMEM;
117131   }
117132
117133   rc = sqlite3Fts3SegReaderCursor(pFts3, FTS3_SEGCURSOR_ALL,
117134       pCsr->filter.zTerm, pCsr->filter.nTerm, 0, isScan, &pCsr->csr
117135   );
117136   if( rc==SQLITE_OK ){
117137     rc = sqlite3Fts3SegReaderStart(pFts3, &pCsr->csr, &pCsr->filter);
117138   }
117139
117140   if( rc==SQLITE_OK ) rc = fts3auxNextMethod(pCursor);
117141   return rc;
117142 }
117143
117144 /*
117145 ** xEof - Return true if the cursor is at EOF, or false otherwise.
117146 */
117147 static int fts3auxEofMethod(sqlite3_vtab_cursor *pCursor){
117148   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
117149   return pCsr->isEof;
117150 }
117151
117152 /*
117153 ** xColumn - Return a column value.
117154 */
117155 static int fts3auxColumnMethod(
117156   sqlite3_vtab_cursor *pCursor,   /* Cursor to retrieve value from */
117157   sqlite3_context *pContext,      /* Context for sqlite3_result_xxx() calls */
117158   int iCol                        /* Index of column to read value from */
117159 ){
117160   Fts3auxCursor *p = (Fts3auxCursor *)pCursor;
117161
117162   assert( p->isEof==0 );
117163   if( iCol==0 ){        /* Column "term" */
117164     sqlite3_result_text(pContext, p->csr.zTerm, p->csr.nTerm, SQLITE_TRANSIENT);
117165   }else if( iCol==1 ){  /* Column "col" */
117166     if( p->iCol ){
117167       sqlite3_result_int(pContext, p->iCol-1);
117168     }else{
117169       sqlite3_result_text(pContext, "*", -1, SQLITE_STATIC);
117170     }
117171   }else if( iCol==2 ){  /* Column "documents" */
117172     sqlite3_result_int64(pContext, p->aStat[p->iCol].nDoc);
117173   }else{                /* Column "occurrences" */
117174     sqlite3_result_int64(pContext, p->aStat[p->iCol].nOcc);
117175   }
117176
117177   return SQLITE_OK;
117178 }
117179
117180 /*
117181 ** xRowid - Return the current rowid for the cursor.
117182 */
117183 static int fts3auxRowidMethod(
117184   sqlite3_vtab_cursor *pCursor,   /* Cursor to retrieve value from */
117185   sqlite_int64 *pRowid            /* OUT: Rowid value */
117186 ){
117187   Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
117188   *pRowid = pCsr->iRowid;
117189   return SQLITE_OK;
117190 }
117191
117192 /*
117193 ** Register the fts3aux module with database connection db. Return SQLITE_OK
117194 ** if successful or an error code if sqlite3_create_module() fails.
117195 */
117196 SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db){
117197   static const sqlite3_module fts3aux_module = {
117198      0,                           /* iVersion      */
117199      fts3auxConnectMethod,        /* xCreate       */
117200      fts3auxConnectMethod,        /* xConnect      */
117201      fts3auxBestIndexMethod,      /* xBestIndex    */
117202      fts3auxDisconnectMethod,     /* xDisconnect   */
117203      fts3auxDisconnectMethod,     /* xDestroy      */
117204      fts3auxOpenMethod,           /* xOpen         */
117205      fts3auxCloseMethod,          /* xClose        */
117206      fts3auxFilterMethod,         /* xFilter       */
117207      fts3auxNextMethod,           /* xNext         */
117208      fts3auxEofMethod,            /* xEof          */
117209      fts3auxColumnMethod,         /* xColumn       */
117210      fts3auxRowidMethod,          /* xRowid        */
117211      0,                           /* xUpdate       */
117212      0,                           /* xBegin        */
117213      0,                           /* xSync         */
117214      0,                           /* xCommit       */
117215      0,                           /* xRollback     */
117216      0,                           /* xFindFunction */
117217      0                            /* xRename       */
117218   };
117219   int rc;                         /* Return code */
117220
117221   rc = sqlite3_create_module(db, "fts4aux", &fts3aux_module, 0);
117222   return rc;
117223 }
117224
117225 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
117226
117227 /************** End of fts3_aux.c ********************************************/
117228 /************** Begin file fts3_expr.c ***************************************/
117229 /*
117230 ** 2008 Nov 28
117231 **
117232 ** The author disclaims copyright to this source code.  In place of
117233 ** a legal notice, here is a blessing:
117234 **
117235 **    May you do good and not evil.
117236 **    May you find forgiveness for yourself and forgive others.
117237 **    May you share freely, never taking more than you give.
117238 **
117239 ******************************************************************************
117240 **
117241 ** This module contains code that implements a parser for fts3 query strings
117242 ** (the right-hand argument to the MATCH operator). Because the supported 
117243 ** syntax is relatively simple, the whole tokenizer/parser system is
117244 ** hand-coded. 
117245 */
117246 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
117247
117248 /*
117249 ** By default, this module parses the legacy syntax that has been 
117250 ** traditionally used by fts3. Or, if SQLITE_ENABLE_FTS3_PARENTHESIS
117251 ** is defined, then it uses the new syntax. The differences between
117252 ** the new and the old syntaxes are:
117253 **
117254 **  a) The new syntax supports parenthesis. The old does not.
117255 **
117256 **  b) The new syntax supports the AND and NOT operators. The old does not.
117257 **
117258 **  c) The old syntax supports the "-" token qualifier. This is not 
117259 **     supported by the new syntax (it is replaced by the NOT operator).
117260 **
117261 **  d) When using the old syntax, the OR operator has a greater precedence
117262 **     than an implicit AND. When using the new, both implicity and explicit
117263 **     AND operators have a higher precedence than OR.
117264 **
117265 ** If compiled with SQLITE_TEST defined, then this module exports the
117266 ** symbol "int sqlite3_fts3_enable_parentheses". Setting this variable
117267 ** to zero causes the module to use the old syntax. If it is set to 
117268 ** non-zero the new syntax is activated. This is so both syntaxes can
117269 ** be tested using a single build of testfixture.
117270 **
117271 ** The following describes the syntax supported by the fts3 MATCH
117272 ** operator in a similar format to that used by the lemon parser
117273 ** generator. This module does not use actually lemon, it uses a
117274 ** custom parser.
117275 **
117276 **   query ::= andexpr (OR andexpr)*.
117277 **
117278 **   andexpr ::= notexpr (AND? notexpr)*.
117279 **
117280 **   notexpr ::= nearexpr (NOT nearexpr|-TOKEN)*.
117281 **   notexpr ::= LP query RP.
117282 **
117283 **   nearexpr ::= phrase (NEAR distance_opt nearexpr)*.
117284 **
117285 **   distance_opt ::= .
117286 **   distance_opt ::= / INTEGER.
117287 **
117288 **   phrase ::= TOKEN.
117289 **   phrase ::= COLUMN:TOKEN.
117290 **   phrase ::= "TOKEN TOKEN TOKEN...".
117291 */
117292
117293 #ifdef SQLITE_TEST
117294 SQLITE_API int sqlite3_fts3_enable_parentheses = 0;
117295 #else
117296 # ifdef SQLITE_ENABLE_FTS3_PARENTHESIS 
117297 #  define sqlite3_fts3_enable_parentheses 1
117298 # else
117299 #  define sqlite3_fts3_enable_parentheses 0
117300 # endif
117301 #endif
117302
117303 /*
117304 ** Default span for NEAR operators.
117305 */
117306 #define SQLITE_FTS3_DEFAULT_NEAR_PARAM 10
117307
117308
117309 typedef struct ParseContext ParseContext;
117310 struct ParseContext {
117311   sqlite3_tokenizer *pTokenizer;      /* Tokenizer module */
117312   const char **azCol;                 /* Array of column names for fts3 table */
117313   int nCol;                           /* Number of entries in azCol[] */
117314   int iDefaultCol;                    /* Default column to query */
117315   sqlite3_context *pCtx;              /* Write error message here */
117316   int nNest;                          /* Number of nested brackets */
117317 };
117318
117319 /*
117320 ** This function is equivalent to the standard isspace() function. 
117321 **
117322 ** The standard isspace() can be awkward to use safely, because although it
117323 ** is defined to accept an argument of type int, its behaviour when passed
117324 ** an integer that falls outside of the range of the unsigned char type
117325 ** is undefined (and sometimes, "undefined" means segfault). This wrapper
117326 ** is defined to accept an argument of type char, and always returns 0 for
117327 ** any values that fall outside of the range of the unsigned char type (i.e.
117328 ** negative values).
117329 */
117330 static int fts3isspace(char c){
117331   return c==' ' || c=='\t' || c=='\n' || c=='\r' || c=='\v' || c=='\f';
117332 }
117333
117334 /*
117335 ** Allocate nByte bytes of memory using sqlite3_malloc(). If successful,
117336 ** zero the memory before returning a pointer to it. If unsuccessful, 
117337 ** return NULL.
117338 */
117339 static void *fts3MallocZero(int nByte){
117340   void *pRet = sqlite3_malloc(nByte);
117341   if( pRet ) memset(pRet, 0, nByte);
117342   return pRet;
117343 }
117344
117345
117346 /*
117347 ** Extract the next token from buffer z (length n) using the tokenizer
117348 ** and other information (column names etc.) in pParse. Create an Fts3Expr
117349 ** structure of type FTSQUERY_PHRASE containing a phrase consisting of this
117350 ** single token and set *ppExpr to point to it. If the end of the buffer is
117351 ** reached before a token is found, set *ppExpr to zero. It is the
117352 ** responsibility of the caller to eventually deallocate the allocated 
117353 ** Fts3Expr structure (if any) by passing it to sqlite3_free().
117354 **
117355 ** Return SQLITE_OK if successful, or SQLITE_NOMEM if a memory allocation
117356 ** fails.
117357 */
117358 static int getNextToken(
117359   ParseContext *pParse,                   /* fts3 query parse context */
117360   int iCol,                               /* Value for Fts3Phrase.iColumn */
117361   const char *z, int n,                   /* Input string */
117362   Fts3Expr **ppExpr,                      /* OUT: expression */
117363   int *pnConsumed                         /* OUT: Number of bytes consumed */
117364 ){
117365   sqlite3_tokenizer *pTokenizer = pParse->pTokenizer;
117366   sqlite3_tokenizer_module const *pModule = pTokenizer->pModule;
117367   int rc;
117368   sqlite3_tokenizer_cursor *pCursor;
117369   Fts3Expr *pRet = 0;
117370   int nConsumed = 0;
117371
117372   rc = pModule->xOpen(pTokenizer, z, n, &pCursor);
117373   if( rc==SQLITE_OK ){
117374     const char *zToken;
117375     int nToken, iStart, iEnd, iPosition;
117376     int nByte;                               /* total space to allocate */
117377
117378     pCursor->pTokenizer = pTokenizer;
117379     rc = pModule->xNext(pCursor, &zToken, &nToken, &iStart, &iEnd, &iPosition);
117380
117381     if( rc==SQLITE_OK ){
117382       nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase) + nToken;
117383       pRet = (Fts3Expr *)fts3MallocZero(nByte);
117384       if( !pRet ){
117385         rc = SQLITE_NOMEM;
117386       }else{
117387         pRet->eType = FTSQUERY_PHRASE;
117388         pRet->pPhrase = (Fts3Phrase *)&pRet[1];
117389         pRet->pPhrase->nToken = 1;
117390         pRet->pPhrase->iColumn = iCol;
117391         pRet->pPhrase->aToken[0].n = nToken;
117392         pRet->pPhrase->aToken[0].z = (char *)&pRet->pPhrase[1];
117393         memcpy(pRet->pPhrase->aToken[0].z, zToken, nToken);
117394
117395         if( iEnd<n && z[iEnd]=='*' ){
117396           pRet->pPhrase->aToken[0].isPrefix = 1;
117397           iEnd++;
117398         }
117399         if( !sqlite3_fts3_enable_parentheses && iStart>0 && z[iStart-1]=='-' ){
117400           pRet->pPhrase->isNot = 1;
117401         }
117402       }
117403       nConsumed = iEnd;
117404     }
117405
117406     pModule->xClose(pCursor);
117407   }
117408   
117409   *pnConsumed = nConsumed;
117410   *ppExpr = pRet;
117411   return rc;
117412 }
117413
117414
117415 /*
117416 ** Enlarge a memory allocation.  If an out-of-memory allocation occurs,
117417 ** then free the old allocation.
117418 */
117419 static void *fts3ReallocOrFree(void *pOrig, int nNew){
117420   void *pRet = sqlite3_realloc(pOrig, nNew);
117421   if( !pRet ){
117422     sqlite3_free(pOrig);
117423   }
117424   return pRet;
117425 }
117426
117427 /*
117428 ** Buffer zInput, length nInput, contains the contents of a quoted string
117429 ** that appeared as part of an fts3 query expression. Neither quote character
117430 ** is included in the buffer. This function attempts to tokenize the entire
117431 ** input buffer and create an Fts3Expr structure of type FTSQUERY_PHRASE 
117432 ** containing the results.
117433 **
117434 ** If successful, SQLITE_OK is returned and *ppExpr set to point at the
117435 ** allocated Fts3Expr structure. Otherwise, either SQLITE_NOMEM (out of memory
117436 ** error) or SQLITE_ERROR (tokenization error) is returned and *ppExpr set
117437 ** to 0.
117438 */
117439 static int getNextString(
117440   ParseContext *pParse,                   /* fts3 query parse context */
117441   const char *zInput, int nInput,         /* Input string */
117442   Fts3Expr **ppExpr                       /* OUT: expression */
117443 ){
117444   sqlite3_tokenizer *pTokenizer = pParse->pTokenizer;
117445   sqlite3_tokenizer_module const *pModule = pTokenizer->pModule;
117446   int rc;
117447   Fts3Expr *p = 0;
117448   sqlite3_tokenizer_cursor *pCursor = 0;
117449   char *zTemp = 0;
117450   int nTemp = 0;
117451
117452   rc = pModule->xOpen(pTokenizer, zInput, nInput, &pCursor);
117453   if( rc==SQLITE_OK ){
117454     int ii;
117455     pCursor->pTokenizer = pTokenizer;
117456     for(ii=0; rc==SQLITE_OK; ii++){
117457       const char *zToken;
117458       int nToken, iBegin, iEnd, iPos;
117459       rc = pModule->xNext(pCursor, &zToken, &nToken, &iBegin, &iEnd, &iPos);
117460       if( rc==SQLITE_OK ){
117461         int nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase);
117462         p = fts3ReallocOrFree(p, nByte+ii*sizeof(Fts3PhraseToken));
117463         zTemp = fts3ReallocOrFree(zTemp, nTemp + nToken);
117464         if( !p || !zTemp ){
117465           goto no_mem;
117466         }
117467         if( ii==0 ){
117468           memset(p, 0, nByte);
117469           p->pPhrase = (Fts3Phrase *)&p[1];
117470         }
117471         p->pPhrase = (Fts3Phrase *)&p[1];
117472         memset(&p->pPhrase->aToken[ii], 0, sizeof(Fts3PhraseToken));
117473         p->pPhrase->nToken = ii+1;
117474         p->pPhrase->aToken[ii].n = nToken;
117475         memcpy(&zTemp[nTemp], zToken, nToken);
117476         nTemp += nToken;
117477         if( iEnd<nInput && zInput[iEnd]=='*' ){
117478           p->pPhrase->aToken[ii].isPrefix = 1;
117479         }else{
117480           p->pPhrase->aToken[ii].isPrefix = 0;
117481         }
117482       }
117483     }
117484
117485     pModule->xClose(pCursor);
117486     pCursor = 0;
117487   }
117488
117489   if( rc==SQLITE_DONE ){
117490     int jj;
117491     char *zNew = NULL;
117492     int nNew = 0;
117493     int nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase);
117494     nByte += (p?(p->pPhrase->nToken-1):0) * sizeof(Fts3PhraseToken);
117495     p = fts3ReallocOrFree(p, nByte + nTemp);
117496     if( !p ){
117497       goto no_mem;
117498     }
117499     if( zTemp ){
117500       zNew = &(((char *)p)[nByte]);
117501       memcpy(zNew, zTemp, nTemp);
117502     }else{
117503       memset(p, 0, nByte+nTemp);
117504     }
117505     p->pPhrase = (Fts3Phrase *)&p[1];
117506     for(jj=0; jj<p->pPhrase->nToken; jj++){
117507       p->pPhrase->aToken[jj].z = &zNew[nNew];
117508       nNew += p->pPhrase->aToken[jj].n;
117509     }
117510     sqlite3_free(zTemp);
117511     p->eType = FTSQUERY_PHRASE;
117512     p->pPhrase->iColumn = pParse->iDefaultCol;
117513     rc = SQLITE_OK;
117514   }
117515
117516   *ppExpr = p;
117517   return rc;
117518 no_mem:
117519
117520   if( pCursor ){
117521     pModule->xClose(pCursor);
117522   }
117523   sqlite3_free(zTemp);
117524   sqlite3_free(p);
117525   *ppExpr = 0;
117526   return SQLITE_NOMEM;
117527 }
117528
117529 /*
117530 ** Function getNextNode(), which is called by fts3ExprParse(), may itself
117531 ** call fts3ExprParse(). So this forward declaration is required.
117532 */
117533 static int fts3ExprParse(ParseContext *, const char *, int, Fts3Expr **, int *);
117534
117535 /*
117536 ** The output variable *ppExpr is populated with an allocated Fts3Expr 
117537 ** structure, or set to 0 if the end of the input buffer is reached.
117538 **
117539 ** Returns an SQLite error code. SQLITE_OK if everything works, SQLITE_NOMEM
117540 ** if a malloc failure occurs, or SQLITE_ERROR if a parse error is encountered.
117541 ** If SQLITE_ERROR is returned, pContext is populated with an error message.
117542 */
117543 static int getNextNode(
117544   ParseContext *pParse,                   /* fts3 query parse context */
117545   const char *z, int n,                   /* Input string */
117546   Fts3Expr **ppExpr,                      /* OUT: expression */
117547   int *pnConsumed                         /* OUT: Number of bytes consumed */
117548 ){
117549   static const struct Fts3Keyword {
117550     char *z;                              /* Keyword text */
117551     unsigned char n;                      /* Length of the keyword */
117552     unsigned char parenOnly;              /* Only valid in paren mode */
117553     unsigned char eType;                  /* Keyword code */
117554   } aKeyword[] = {
117555     { "OR" ,  2, 0, FTSQUERY_OR   },
117556     { "AND",  3, 1, FTSQUERY_AND  },
117557     { "NOT",  3, 1, FTSQUERY_NOT  },
117558     { "NEAR", 4, 0, FTSQUERY_NEAR }
117559   };
117560   int ii;
117561   int iCol;
117562   int iColLen;
117563   int rc;
117564   Fts3Expr *pRet = 0;
117565
117566   const char *zInput = z;
117567   int nInput = n;
117568
117569   /* Skip over any whitespace before checking for a keyword, an open or
117570   ** close bracket, or a quoted string. 
117571   */
117572   while( nInput>0 && fts3isspace(*zInput) ){
117573     nInput--;
117574     zInput++;
117575   }
117576   if( nInput==0 ){
117577     return SQLITE_DONE;
117578   }
117579
117580   /* See if we are dealing with a keyword. */
117581   for(ii=0; ii<(int)(sizeof(aKeyword)/sizeof(struct Fts3Keyword)); ii++){
117582     const struct Fts3Keyword *pKey = &aKeyword[ii];
117583
117584     if( (pKey->parenOnly & ~sqlite3_fts3_enable_parentheses)!=0 ){
117585       continue;
117586     }
117587
117588     if( nInput>=pKey->n && 0==memcmp(zInput, pKey->z, pKey->n) ){
117589       int nNear = SQLITE_FTS3_DEFAULT_NEAR_PARAM;
117590       int nKey = pKey->n;
117591       char cNext;
117592
117593       /* If this is a "NEAR" keyword, check for an explicit nearness. */
117594       if( pKey->eType==FTSQUERY_NEAR ){
117595         assert( nKey==4 );
117596         if( zInput[4]=='/' && zInput[5]>='0' && zInput[5]<='9' ){
117597           nNear = 0;
117598           for(nKey=5; zInput[nKey]>='0' && zInput[nKey]<='9'; nKey++){
117599             nNear = nNear * 10 + (zInput[nKey] - '0');
117600           }
117601         }
117602       }
117603
117604       /* At this point this is probably a keyword. But for that to be true,
117605       ** the next byte must contain either whitespace, an open or close
117606       ** parenthesis, a quote character, or EOF. 
117607       */
117608       cNext = zInput[nKey];
117609       if( fts3isspace(cNext) 
117610        || cNext=='"' || cNext=='(' || cNext==')' || cNext==0
117611       ){
117612         pRet = (Fts3Expr *)fts3MallocZero(sizeof(Fts3Expr));
117613         if( !pRet ){
117614           return SQLITE_NOMEM;
117615         }
117616         pRet->eType = pKey->eType;
117617         pRet->nNear = nNear;
117618         *ppExpr = pRet;
117619         *pnConsumed = (int)((zInput - z) + nKey);
117620         return SQLITE_OK;
117621       }
117622
117623       /* Turns out that wasn't a keyword after all. This happens if the
117624       ** user has supplied a token such as "ORacle". Continue.
117625       */
117626     }
117627   }
117628
117629   /* Check for an open bracket. */
117630   if( sqlite3_fts3_enable_parentheses ){
117631     if( *zInput=='(' ){
117632       int nConsumed;
117633       pParse->nNest++;
117634       rc = fts3ExprParse(pParse, &zInput[1], nInput-1, ppExpr, &nConsumed);
117635       if( rc==SQLITE_OK && !*ppExpr ){
117636         rc = SQLITE_DONE;
117637       }
117638       *pnConsumed = (int)((zInput - z) + 1 + nConsumed);
117639       return rc;
117640     }
117641   
117642     /* Check for a close bracket. */
117643     if( *zInput==')' ){
117644       pParse->nNest--;
117645       *pnConsumed = (int)((zInput - z) + 1);
117646       return SQLITE_DONE;
117647     }
117648   }
117649
117650   /* See if we are dealing with a quoted phrase. If this is the case, then
117651   ** search for the closing quote and pass the whole string to getNextString()
117652   ** for processing. This is easy to do, as fts3 has no syntax for escaping
117653   ** a quote character embedded in a string.
117654   */
117655   if( *zInput=='"' ){
117656     for(ii=1; ii<nInput && zInput[ii]!='"'; ii++);
117657     *pnConsumed = (int)((zInput - z) + ii + 1);
117658     if( ii==nInput ){
117659       return SQLITE_ERROR;
117660     }
117661     return getNextString(pParse, &zInput[1], ii-1, ppExpr);
117662   }
117663
117664
117665   /* If control flows to this point, this must be a regular token, or 
117666   ** the end of the input. Read a regular token using the sqlite3_tokenizer
117667   ** interface. Before doing so, figure out if there is an explicit
117668   ** column specifier for the token. 
117669   **
117670   ** TODO: Strangely, it is not possible to associate a column specifier
117671   ** with a quoted phrase, only with a single token. Not sure if this was
117672   ** an implementation artifact or an intentional decision when fts3 was
117673   ** first implemented. Whichever it was, this module duplicates the 
117674   ** limitation.
117675   */
117676   iCol = pParse->iDefaultCol;
117677   iColLen = 0;
117678   for(ii=0; ii<pParse->nCol; ii++){
117679     const char *zStr = pParse->azCol[ii];
117680     int nStr = (int)strlen(zStr);
117681     if( nInput>nStr && zInput[nStr]==':' 
117682      && sqlite3_strnicmp(zStr, zInput, nStr)==0 
117683     ){
117684       iCol = ii;
117685       iColLen = (int)((zInput - z) + nStr + 1);
117686       break;
117687     }
117688   }
117689   rc = getNextToken(pParse, iCol, &z[iColLen], n-iColLen, ppExpr, pnConsumed);
117690   *pnConsumed += iColLen;
117691   return rc;
117692 }
117693
117694 /*
117695 ** The argument is an Fts3Expr structure for a binary operator (any type
117696 ** except an FTSQUERY_PHRASE). Return an integer value representing the
117697 ** precedence of the operator. Lower values have a higher precedence (i.e.
117698 ** group more tightly). For example, in the C language, the == operator
117699 ** groups more tightly than ||, and would therefore have a higher precedence.
117700 **
117701 ** When using the new fts3 query syntax (when SQLITE_ENABLE_FTS3_PARENTHESIS
117702 ** is defined), the order of the operators in precedence from highest to
117703 ** lowest is:
117704 **
117705 **   NEAR
117706 **   NOT
117707 **   AND (including implicit ANDs)
117708 **   OR
117709 **
117710 ** Note that when using the old query syntax, the OR operator has a higher
117711 ** precedence than the AND operator.
117712 */
117713 static int opPrecedence(Fts3Expr *p){
117714   assert( p->eType!=FTSQUERY_PHRASE );
117715   if( sqlite3_fts3_enable_parentheses ){
117716     return p->eType;
117717   }else if( p->eType==FTSQUERY_NEAR ){
117718     return 1;
117719   }else if( p->eType==FTSQUERY_OR ){
117720     return 2;
117721   }
117722   assert( p->eType==FTSQUERY_AND );
117723   return 3;
117724 }
117725
117726 /*
117727 ** Argument ppHead contains a pointer to the current head of a query 
117728 ** expression tree being parsed. pPrev is the expression node most recently
117729 ** inserted into the tree. This function adds pNew, which is always a binary
117730 ** operator node, into the expression tree based on the relative precedence
117731 ** of pNew and the existing nodes of the tree. This may result in the head
117732 ** of the tree changing, in which case *ppHead is set to the new root node.
117733 */
117734 static void insertBinaryOperator(
117735   Fts3Expr **ppHead,       /* Pointer to the root node of a tree */
117736   Fts3Expr *pPrev,         /* Node most recently inserted into the tree */
117737   Fts3Expr *pNew           /* New binary node to insert into expression tree */
117738 ){
117739   Fts3Expr *pSplit = pPrev;
117740   while( pSplit->pParent && opPrecedence(pSplit->pParent)<=opPrecedence(pNew) ){
117741     pSplit = pSplit->pParent;
117742   }
117743
117744   if( pSplit->pParent ){
117745     assert( pSplit->pParent->pRight==pSplit );
117746     pSplit->pParent->pRight = pNew;
117747     pNew->pParent = pSplit->pParent;
117748   }else{
117749     *ppHead = pNew;
117750   }
117751   pNew->pLeft = pSplit;
117752   pSplit->pParent = pNew;
117753 }
117754
117755 /*
117756 ** Parse the fts3 query expression found in buffer z, length n. This function
117757 ** returns either when the end of the buffer is reached or an unmatched 
117758 ** closing bracket - ')' - is encountered.
117759 **
117760 ** If successful, SQLITE_OK is returned, *ppExpr is set to point to the
117761 ** parsed form of the expression and *pnConsumed is set to the number of
117762 ** bytes read from buffer z. Otherwise, *ppExpr is set to 0 and SQLITE_NOMEM
117763 ** (out of memory error) or SQLITE_ERROR (parse error) is returned.
117764 */
117765 static int fts3ExprParse(
117766   ParseContext *pParse,                   /* fts3 query parse context */
117767   const char *z, int n,                   /* Text of MATCH query */
117768   Fts3Expr **ppExpr,                      /* OUT: Parsed query structure */
117769   int *pnConsumed                         /* OUT: Number of bytes consumed */
117770 ){
117771   Fts3Expr *pRet = 0;
117772   Fts3Expr *pPrev = 0;
117773   Fts3Expr *pNotBranch = 0;               /* Only used in legacy parse mode */
117774   int nIn = n;
117775   const char *zIn = z;
117776   int rc = SQLITE_OK;
117777   int isRequirePhrase = 1;
117778
117779   while( rc==SQLITE_OK ){
117780     Fts3Expr *p = 0;
117781     int nByte = 0;
117782     rc = getNextNode(pParse, zIn, nIn, &p, &nByte);
117783     if( rc==SQLITE_OK ){
117784       int isPhrase;
117785
117786       if( !sqlite3_fts3_enable_parentheses 
117787        && p->eType==FTSQUERY_PHRASE && p->pPhrase->isNot 
117788       ){
117789         /* Create an implicit NOT operator. */
117790         Fts3Expr *pNot = fts3MallocZero(sizeof(Fts3Expr));
117791         if( !pNot ){
117792           sqlite3Fts3ExprFree(p);
117793           rc = SQLITE_NOMEM;
117794           goto exprparse_out;
117795         }
117796         pNot->eType = FTSQUERY_NOT;
117797         pNot->pRight = p;
117798         if( pNotBranch ){
117799           pNot->pLeft = pNotBranch;
117800         }
117801         pNotBranch = pNot;
117802         p = pPrev;
117803       }else{
117804         int eType = p->eType;
117805         assert( eType!=FTSQUERY_PHRASE || !p->pPhrase->isNot );
117806         isPhrase = (eType==FTSQUERY_PHRASE || p->pLeft);
117807
117808         /* The isRequirePhrase variable is set to true if a phrase or
117809         ** an expression contained in parenthesis is required. If a
117810         ** binary operator (AND, OR, NOT or NEAR) is encounted when
117811         ** isRequirePhrase is set, this is a syntax error.
117812         */
117813         if( !isPhrase && isRequirePhrase ){
117814           sqlite3Fts3ExprFree(p);
117815           rc = SQLITE_ERROR;
117816           goto exprparse_out;
117817         }
117818   
117819         if( isPhrase && !isRequirePhrase ){
117820           /* Insert an implicit AND operator. */
117821           Fts3Expr *pAnd;
117822           assert( pRet && pPrev );
117823           pAnd = fts3MallocZero(sizeof(Fts3Expr));
117824           if( !pAnd ){
117825             sqlite3Fts3ExprFree(p);
117826             rc = SQLITE_NOMEM;
117827             goto exprparse_out;
117828           }
117829           pAnd->eType = FTSQUERY_AND;
117830           insertBinaryOperator(&pRet, pPrev, pAnd);
117831           pPrev = pAnd;
117832         }
117833
117834         /* This test catches attempts to make either operand of a NEAR
117835         ** operator something other than a phrase. For example, either of
117836         ** the following:
117837         **
117838         **    (bracketed expression) NEAR phrase
117839         **    phrase NEAR (bracketed expression)
117840         **
117841         ** Return an error in either case.
117842         */
117843         if( pPrev && (
117844             (eType==FTSQUERY_NEAR && !isPhrase && pPrev->eType!=FTSQUERY_PHRASE)
117845          || (eType!=FTSQUERY_PHRASE && isPhrase && pPrev->eType==FTSQUERY_NEAR)
117846         )){
117847           sqlite3Fts3ExprFree(p);
117848           rc = SQLITE_ERROR;
117849           goto exprparse_out;
117850         }
117851   
117852         if( isPhrase ){
117853           if( pRet ){
117854             assert( pPrev && pPrev->pLeft && pPrev->pRight==0 );
117855             pPrev->pRight = p;
117856             p->pParent = pPrev;
117857           }else{
117858             pRet = p;
117859           }
117860         }else{
117861           insertBinaryOperator(&pRet, pPrev, p);
117862         }
117863         isRequirePhrase = !isPhrase;
117864       }
117865       assert( nByte>0 );
117866     }
117867     assert( rc!=SQLITE_OK || (nByte>0 && nByte<=nIn) );
117868     nIn -= nByte;
117869     zIn += nByte;
117870     pPrev = p;
117871   }
117872
117873   if( rc==SQLITE_DONE && pRet && isRequirePhrase ){
117874     rc = SQLITE_ERROR;
117875   }
117876
117877   if( rc==SQLITE_DONE ){
117878     rc = SQLITE_OK;
117879     if( !sqlite3_fts3_enable_parentheses && pNotBranch ){
117880       if( !pRet ){
117881         rc = SQLITE_ERROR;
117882       }else{
117883         Fts3Expr *pIter = pNotBranch;
117884         while( pIter->pLeft ){
117885           pIter = pIter->pLeft;
117886         }
117887         pIter->pLeft = pRet;
117888         pRet = pNotBranch;
117889       }
117890     }
117891   }
117892   *pnConsumed = n - nIn;
117893
117894 exprparse_out:
117895   if( rc!=SQLITE_OK ){
117896     sqlite3Fts3ExprFree(pRet);
117897     sqlite3Fts3ExprFree(pNotBranch);
117898     pRet = 0;
117899   }
117900   *ppExpr = pRet;
117901   return rc;
117902 }
117903
117904 /*
117905 ** Parameters z and n contain a pointer to and length of a buffer containing
117906 ** an fts3 query expression, respectively. This function attempts to parse the
117907 ** query expression and create a tree of Fts3Expr structures representing the
117908 ** parsed expression. If successful, *ppExpr is set to point to the head
117909 ** of the parsed expression tree and SQLITE_OK is returned. If an error
117910 ** occurs, either SQLITE_NOMEM (out-of-memory error) or SQLITE_ERROR (parse
117911 ** error) is returned and *ppExpr is set to 0.
117912 **
117913 ** If parameter n is a negative number, then z is assumed to point to a
117914 ** nul-terminated string and the length is determined using strlen().
117915 **
117916 ** The first parameter, pTokenizer, is passed the fts3 tokenizer module to
117917 ** use to normalize query tokens while parsing the expression. The azCol[]
117918 ** array, which is assumed to contain nCol entries, should contain the names
117919 ** of each column in the target fts3 table, in order from left to right. 
117920 ** Column names must be nul-terminated strings.
117921 **
117922 ** The iDefaultCol parameter should be passed the index of the table column
117923 ** that appears on the left-hand-side of the MATCH operator (the default
117924 ** column to match against for tokens for which a column name is not explicitly
117925 ** specified as part of the query string), or -1 if tokens may by default
117926 ** match any table column.
117927 */
117928 SQLITE_PRIVATE int sqlite3Fts3ExprParse(
117929   sqlite3_tokenizer *pTokenizer,      /* Tokenizer module */
117930   char **azCol,                       /* Array of column names for fts3 table */
117931   int nCol,                           /* Number of entries in azCol[] */
117932   int iDefaultCol,                    /* Default column to query */
117933   const char *z, int n,               /* Text of MATCH query */
117934   Fts3Expr **ppExpr                   /* OUT: Parsed query structure */
117935 ){
117936   int nParsed;
117937   int rc;
117938   ParseContext sParse;
117939   sParse.pTokenizer = pTokenizer;
117940   sParse.azCol = (const char **)azCol;
117941   sParse.nCol = nCol;
117942   sParse.iDefaultCol = iDefaultCol;
117943   sParse.nNest = 0;
117944   if( z==0 ){
117945     *ppExpr = 0;
117946     return SQLITE_OK;
117947   }
117948   if( n<0 ){
117949     n = (int)strlen(z);
117950   }
117951   rc = fts3ExprParse(&sParse, z, n, ppExpr, &nParsed);
117952
117953   /* Check for mismatched parenthesis */
117954   if( rc==SQLITE_OK && sParse.nNest ){
117955     rc = SQLITE_ERROR;
117956     sqlite3Fts3ExprFree(*ppExpr);
117957     *ppExpr = 0;
117958   }
117959
117960   return rc;
117961 }
117962
117963 /*
117964 ** Free a parsed fts3 query expression allocated by sqlite3Fts3ExprParse().
117965 */
117966 SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *p){
117967   if( p ){
117968     sqlite3Fts3ExprFree(p->pLeft);
117969     sqlite3Fts3ExprFree(p->pRight);
117970     sqlite3_free(p->aDoclist);
117971     sqlite3_free(p);
117972   }
117973 }
117974
117975 /****************************************************************************
117976 *****************************************************************************
117977 ** Everything after this point is just test code.
117978 */
117979
117980 #ifdef SQLITE_TEST
117981
117982
117983 /*
117984 ** Function to query the hash-table of tokenizers (see README.tokenizers).
117985 */
117986 static int queryTestTokenizer(
117987   sqlite3 *db, 
117988   const char *zName,  
117989   const sqlite3_tokenizer_module **pp
117990 ){
117991   int rc;
117992   sqlite3_stmt *pStmt;
117993   const char zSql[] = "SELECT fts3_tokenizer(?)";
117994
117995   *pp = 0;
117996   rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
117997   if( rc!=SQLITE_OK ){
117998     return rc;
117999   }
118000
118001   sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
118002   if( SQLITE_ROW==sqlite3_step(pStmt) ){
118003     if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){
118004       memcpy((void *)pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp));
118005     }
118006   }
118007
118008   return sqlite3_finalize(pStmt);
118009 }
118010
118011 /*
118012 ** Return a pointer to a buffer containing a text representation of the
118013 ** expression passed as the first argument. The buffer is obtained from
118014 ** sqlite3_malloc(). It is the responsibility of the caller to use 
118015 ** sqlite3_free() to release the memory. If an OOM condition is encountered,
118016 ** NULL is returned.
118017 **
118018 ** If the second argument is not NULL, then its contents are prepended to 
118019 ** the returned expression text and then freed using sqlite3_free().
118020 */
118021 static char *exprToString(Fts3Expr *pExpr, char *zBuf){
118022   switch( pExpr->eType ){
118023     case FTSQUERY_PHRASE: {
118024       Fts3Phrase *pPhrase = pExpr->pPhrase;
118025       int i;
118026       zBuf = sqlite3_mprintf(
118027           "%zPHRASE %d %d", zBuf, pPhrase->iColumn, pPhrase->isNot);
118028       for(i=0; zBuf && i<pPhrase->nToken; i++){
118029         zBuf = sqlite3_mprintf("%z %.*s%s", zBuf, 
118030             pPhrase->aToken[i].n, pPhrase->aToken[i].z,
118031             (pPhrase->aToken[i].isPrefix?"+":"")
118032         );
118033       }
118034       return zBuf;
118035     }
118036
118037     case FTSQUERY_NEAR:
118038       zBuf = sqlite3_mprintf("%zNEAR/%d ", zBuf, pExpr->nNear);
118039       break;
118040     case FTSQUERY_NOT:
118041       zBuf = sqlite3_mprintf("%zNOT ", zBuf);
118042       break;
118043     case FTSQUERY_AND:
118044       zBuf = sqlite3_mprintf("%zAND ", zBuf);
118045       break;
118046     case FTSQUERY_OR:
118047       zBuf = sqlite3_mprintf("%zOR ", zBuf);
118048       break;
118049   }
118050
118051   if( zBuf ) zBuf = sqlite3_mprintf("%z{", zBuf);
118052   if( zBuf ) zBuf = exprToString(pExpr->pLeft, zBuf);
118053   if( zBuf ) zBuf = sqlite3_mprintf("%z} {", zBuf);
118054
118055   if( zBuf ) zBuf = exprToString(pExpr->pRight, zBuf);
118056   if( zBuf ) zBuf = sqlite3_mprintf("%z}", zBuf);
118057
118058   return zBuf;
118059 }
118060
118061 /*
118062 ** This is the implementation of a scalar SQL function used to test the 
118063 ** expression parser. It should be called as follows:
118064 **
118065 **   fts3_exprtest(<tokenizer>, <expr>, <column 1>, ...);
118066 **
118067 ** The first argument, <tokenizer>, is the name of the fts3 tokenizer used
118068 ** to parse the query expression (see README.tokenizers). The second argument
118069 ** is the query expression to parse. Each subsequent argument is the name
118070 ** of a column of the fts3 table that the query expression may refer to.
118071 ** For example:
118072 **
118073 **   SELECT fts3_exprtest('simple', 'Bill col2:Bloggs', 'col1', 'col2');
118074 */
118075 static void fts3ExprTest(
118076   sqlite3_context *context,
118077   int argc,
118078   sqlite3_value **argv
118079 ){
118080   sqlite3_tokenizer_module const *pModule = 0;
118081   sqlite3_tokenizer *pTokenizer = 0;
118082   int rc;
118083   char **azCol = 0;
118084   const char *zExpr;
118085   int nExpr;
118086   int nCol;
118087   int ii;
118088   Fts3Expr *pExpr;
118089   char *zBuf = 0;
118090   sqlite3 *db = sqlite3_context_db_handle(context);
118091
118092   if( argc<3 ){
118093     sqlite3_result_error(context, 
118094         "Usage: fts3_exprtest(tokenizer, expr, col1, ...", -1
118095     );
118096     return;
118097   }
118098
118099   rc = queryTestTokenizer(db,
118100                           (const char *)sqlite3_value_text(argv[0]), &pModule);
118101   if( rc==SQLITE_NOMEM ){
118102     sqlite3_result_error_nomem(context);
118103     goto exprtest_out;
118104   }else if( !pModule ){
118105     sqlite3_result_error(context, "No such tokenizer module", -1);
118106     goto exprtest_out;
118107   }
118108
118109   rc = pModule->xCreate(0, 0, &pTokenizer);
118110   assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
118111   if( rc==SQLITE_NOMEM ){
118112     sqlite3_result_error_nomem(context);
118113     goto exprtest_out;
118114   }
118115   pTokenizer->pModule = pModule;
118116
118117   zExpr = (const char *)sqlite3_value_text(argv[1]);
118118   nExpr = sqlite3_value_bytes(argv[1]);
118119   nCol = argc-2;
118120   azCol = (char **)sqlite3_malloc(nCol*sizeof(char *));
118121   if( !azCol ){
118122     sqlite3_result_error_nomem(context);
118123     goto exprtest_out;
118124   }
118125   for(ii=0; ii<nCol; ii++){
118126     azCol[ii] = (char *)sqlite3_value_text(argv[ii+2]);
118127   }
118128
118129   rc = sqlite3Fts3ExprParse(
118130       pTokenizer, azCol, nCol, nCol, zExpr, nExpr, &pExpr
118131   );
118132   if( rc!=SQLITE_OK && rc!=SQLITE_NOMEM ){
118133     sqlite3_result_error(context, "Error parsing expression", -1);
118134   }else if( rc==SQLITE_NOMEM || !(zBuf = exprToString(pExpr, 0)) ){
118135     sqlite3_result_error_nomem(context);
118136   }else{
118137     sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
118138     sqlite3_free(zBuf);
118139   }
118140
118141   sqlite3Fts3ExprFree(pExpr);
118142
118143 exprtest_out:
118144   if( pModule && pTokenizer ){
118145     rc = pModule->xDestroy(pTokenizer);
118146   }
118147   sqlite3_free(azCol);
118148 }
118149
118150 /*
118151 ** Register the query expression parser test function fts3_exprtest() 
118152 ** with database connection db. 
118153 */
118154 SQLITE_PRIVATE int sqlite3Fts3ExprInitTestInterface(sqlite3* db){
118155   return sqlite3_create_function(
118156       db, "fts3_exprtest", -1, SQLITE_UTF8, 0, fts3ExprTest, 0, 0
118157   );
118158 }
118159
118160 #endif
118161 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
118162
118163 /************** End of fts3_expr.c *******************************************/
118164 /************** Begin file fts3_hash.c ***************************************/
118165 /*
118166 ** 2001 September 22
118167 **
118168 ** The author disclaims copyright to this source code.  In place of
118169 ** a legal notice, here is a blessing:
118170 **
118171 **    May you do good and not evil.
118172 **    May you find forgiveness for yourself and forgive others.
118173 **    May you share freely, never taking more than you give.
118174 **
118175 *************************************************************************
118176 ** This is the implementation of generic hash-tables used in SQLite.
118177 ** We've modified it slightly to serve as a standalone hash table
118178 ** implementation for the full-text indexing module.
118179 */
118180
118181 /*
118182 ** The code in this file is only compiled if:
118183 **
118184 **     * The FTS3 module is being built as an extension
118185 **       (in which case SQLITE_CORE is not defined), or
118186 **
118187 **     * The FTS3 module is being built into the core of
118188 **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
118189 */
118190 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
118191
118192
118193
118194 /*
118195 ** Malloc and Free functions
118196 */
118197 static void *fts3HashMalloc(int n){
118198   void *p = sqlite3_malloc(n);
118199   if( p ){
118200     memset(p, 0, n);
118201   }
118202   return p;
118203 }
118204 static void fts3HashFree(void *p){
118205   sqlite3_free(p);
118206 }
118207
118208 /* Turn bulk memory into a hash table object by initializing the
118209 ** fields of the Hash structure.
118210 **
118211 ** "pNew" is a pointer to the hash table that is to be initialized.
118212 ** keyClass is one of the constants 
118213 ** FTS3_HASH_BINARY or FTS3_HASH_STRING.  The value of keyClass 
118214 ** determines what kind of key the hash table will use.  "copyKey" is
118215 ** true if the hash table should make its own private copy of keys and
118216 ** false if it should just use the supplied pointer.
118217 */
118218 SQLITE_PRIVATE void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey){
118219   assert( pNew!=0 );
118220   assert( keyClass>=FTS3_HASH_STRING && keyClass<=FTS3_HASH_BINARY );
118221   pNew->keyClass = keyClass;
118222   pNew->copyKey = copyKey;
118223   pNew->first = 0;
118224   pNew->count = 0;
118225   pNew->htsize = 0;
118226   pNew->ht = 0;
118227 }
118228
118229 /* Remove all entries from a hash table.  Reclaim all memory.
118230 ** Call this routine to delete a hash table or to reset a hash table
118231 ** to the empty state.
118232 */
118233 SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash *pH){
118234   Fts3HashElem *elem;         /* For looping over all elements of the table */
118235
118236   assert( pH!=0 );
118237   elem = pH->first;
118238   pH->first = 0;
118239   fts3HashFree(pH->ht);
118240   pH->ht = 0;
118241   pH->htsize = 0;
118242   while( elem ){
118243     Fts3HashElem *next_elem = elem->next;
118244     if( pH->copyKey && elem->pKey ){
118245       fts3HashFree(elem->pKey);
118246     }
118247     fts3HashFree(elem);
118248     elem = next_elem;
118249   }
118250   pH->count = 0;
118251 }
118252
118253 /*
118254 ** Hash and comparison functions when the mode is FTS3_HASH_STRING
118255 */
118256 static int fts3StrHash(const void *pKey, int nKey){
118257   const char *z = (const char *)pKey;
118258   int h = 0;
118259   if( nKey<=0 ) nKey = (int) strlen(z);
118260   while( nKey > 0  ){
118261     h = (h<<3) ^ h ^ *z++;
118262     nKey--;
118263   }
118264   return h & 0x7fffffff;
118265 }
118266 static int fts3StrCompare(const void *pKey1, int n1, const void *pKey2, int n2){
118267   if( n1!=n2 ) return 1;
118268   return strncmp((const char*)pKey1,(const char*)pKey2,n1);
118269 }
118270
118271 /*
118272 ** Hash and comparison functions when the mode is FTS3_HASH_BINARY
118273 */
118274 static int fts3BinHash(const void *pKey, int nKey){
118275   int h = 0;
118276   const char *z = (const char *)pKey;
118277   while( nKey-- > 0 ){
118278     h = (h<<3) ^ h ^ *(z++);
118279   }
118280   return h & 0x7fffffff;
118281 }
118282 static int fts3BinCompare(const void *pKey1, int n1, const void *pKey2, int n2){
118283   if( n1!=n2 ) return 1;
118284   return memcmp(pKey1,pKey2,n1);
118285 }
118286
118287 /*
118288 ** Return a pointer to the appropriate hash function given the key class.
118289 **
118290 ** The C syntax in this function definition may be unfamilar to some 
118291 ** programmers, so we provide the following additional explanation:
118292 **
118293 ** The name of the function is "ftsHashFunction".  The function takes a
118294 ** single parameter "keyClass".  The return value of ftsHashFunction()
118295 ** is a pointer to another function.  Specifically, the return value
118296 ** of ftsHashFunction() is a pointer to a function that takes two parameters
118297 ** with types "const void*" and "int" and returns an "int".
118298 */
118299 static int (*ftsHashFunction(int keyClass))(const void*,int){
118300   if( keyClass==FTS3_HASH_STRING ){
118301     return &fts3StrHash;
118302   }else{
118303     assert( keyClass==FTS3_HASH_BINARY );
118304     return &fts3BinHash;
118305   }
118306 }
118307
118308 /*
118309 ** Return a pointer to the appropriate hash function given the key class.
118310 **
118311 ** For help in interpreted the obscure C code in the function definition,
118312 ** see the header comment on the previous function.
118313 */
118314 static int (*ftsCompareFunction(int keyClass))(const void*,int,const void*,int){
118315   if( keyClass==FTS3_HASH_STRING ){
118316     return &fts3StrCompare;
118317   }else{
118318     assert( keyClass==FTS3_HASH_BINARY );
118319     return &fts3BinCompare;
118320   }
118321 }
118322
118323 /* Link an element into the hash table
118324 */
118325 static void fts3HashInsertElement(
118326   Fts3Hash *pH,            /* The complete hash table */
118327   struct _fts3ht *pEntry,  /* The entry into which pNew is inserted */
118328   Fts3HashElem *pNew       /* The element to be inserted */
118329 ){
118330   Fts3HashElem *pHead;     /* First element already in pEntry */
118331   pHead = pEntry->chain;
118332   if( pHead ){
118333     pNew->next = pHead;
118334     pNew->prev = pHead->prev;
118335     if( pHead->prev ){ pHead->prev->next = pNew; }
118336     else             { pH->first = pNew; }
118337     pHead->prev = pNew;
118338   }else{
118339     pNew->next = pH->first;
118340     if( pH->first ){ pH->first->prev = pNew; }
118341     pNew->prev = 0;
118342     pH->first = pNew;
118343   }
118344   pEntry->count++;
118345   pEntry->chain = pNew;
118346 }
118347
118348
118349 /* Resize the hash table so that it cantains "new_size" buckets.
118350 ** "new_size" must be a power of 2.  The hash table might fail 
118351 ** to resize if sqliteMalloc() fails.
118352 **
118353 ** Return non-zero if a memory allocation error occurs.
118354 */
118355 static int fts3Rehash(Fts3Hash *pH, int new_size){
118356   struct _fts3ht *new_ht;          /* The new hash table */
118357   Fts3HashElem *elem, *next_elem;  /* For looping over existing elements */
118358   int (*xHash)(const void*,int);   /* The hash function */
118359
118360   assert( (new_size & (new_size-1))==0 );
118361   new_ht = (struct _fts3ht *)fts3HashMalloc( new_size*sizeof(struct _fts3ht) );
118362   if( new_ht==0 ) return 1;
118363   fts3HashFree(pH->ht);
118364   pH->ht = new_ht;
118365   pH->htsize = new_size;
118366   xHash = ftsHashFunction(pH->keyClass);
118367   for(elem=pH->first, pH->first=0; elem; elem = next_elem){
118368     int h = (*xHash)(elem->pKey, elem->nKey) & (new_size-1);
118369     next_elem = elem->next;
118370     fts3HashInsertElement(pH, &new_ht[h], elem);
118371   }
118372   return 0;
118373 }
118374
118375 /* This function (for internal use only) locates an element in an
118376 ** hash table that matches the given key.  The hash for this key has
118377 ** already been computed and is passed as the 4th parameter.
118378 */
118379 static Fts3HashElem *fts3FindElementByHash(
118380   const Fts3Hash *pH, /* The pH to be searched */
118381   const void *pKey,   /* The key we are searching for */
118382   int nKey,
118383   int h               /* The hash for this key. */
118384 ){
118385   Fts3HashElem *elem;            /* Used to loop thru the element list */
118386   int count;                     /* Number of elements left to test */
118387   int (*xCompare)(const void*,int,const void*,int);  /* comparison function */
118388
118389   if( pH->ht ){
118390     struct _fts3ht *pEntry = &pH->ht[h];
118391     elem = pEntry->chain;
118392     count = pEntry->count;
118393     xCompare = ftsCompareFunction(pH->keyClass);
118394     while( count-- && elem ){
118395       if( (*xCompare)(elem->pKey,elem->nKey,pKey,nKey)==0 ){ 
118396         return elem;
118397       }
118398       elem = elem->next;
118399     }
118400   }
118401   return 0;
118402 }
118403
118404 /* Remove a single entry from the hash table given a pointer to that
118405 ** element and a hash on the element's key.
118406 */
118407 static void fts3RemoveElementByHash(
118408   Fts3Hash *pH,         /* The pH containing "elem" */
118409   Fts3HashElem* elem,   /* The element to be removed from the pH */
118410   int h                 /* Hash value for the element */
118411 ){
118412   struct _fts3ht *pEntry;
118413   if( elem->prev ){
118414     elem->prev->next = elem->next; 
118415   }else{
118416     pH->first = elem->next;
118417   }
118418   if( elem->next ){
118419     elem->next->prev = elem->prev;
118420   }
118421   pEntry = &pH->ht[h];
118422   if( pEntry->chain==elem ){
118423     pEntry->chain = elem->next;
118424   }
118425   pEntry->count--;
118426   if( pEntry->count<=0 ){
118427     pEntry->chain = 0;
118428   }
118429   if( pH->copyKey && elem->pKey ){
118430     fts3HashFree(elem->pKey);
118431   }
118432   fts3HashFree( elem );
118433   pH->count--;
118434   if( pH->count<=0 ){
118435     assert( pH->first==0 );
118436     assert( pH->count==0 );
118437     fts3HashClear(pH);
118438   }
118439 }
118440
118441 SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem(
118442   const Fts3Hash *pH, 
118443   const void *pKey, 
118444   int nKey
118445 ){
118446   int h;                          /* A hash on key */
118447   int (*xHash)(const void*,int);  /* The hash function */
118448
118449   if( pH==0 || pH->ht==0 ) return 0;
118450   xHash = ftsHashFunction(pH->keyClass);
118451   assert( xHash!=0 );
118452   h = (*xHash)(pKey,nKey);
118453   assert( (pH->htsize & (pH->htsize-1))==0 );
118454   return fts3FindElementByHash(pH,pKey,nKey, h & (pH->htsize-1));
118455 }
118456
118457 /* 
118458 ** Attempt to locate an element of the hash table pH with a key
118459 ** that matches pKey,nKey.  Return the data for this element if it is
118460 ** found, or NULL if there is no match.
118461 */
118462 SQLITE_PRIVATE void *sqlite3Fts3HashFind(const Fts3Hash *pH, const void *pKey, int nKey){
118463   Fts3HashElem *pElem;            /* The element that matches key (if any) */
118464
118465   pElem = sqlite3Fts3HashFindElem(pH, pKey, nKey);
118466   return pElem ? pElem->data : 0;
118467 }
118468
118469 /* Insert an element into the hash table pH.  The key is pKey,nKey
118470 ** and the data is "data".
118471 **
118472 ** If no element exists with a matching key, then a new
118473 ** element is created.  A copy of the key is made if the copyKey
118474 ** flag is set.  NULL is returned.
118475 **
118476 ** If another element already exists with the same key, then the
118477 ** new data replaces the old data and the old data is returned.
118478 ** The key is not copied in this instance.  If a malloc fails, then
118479 ** the new data is returned and the hash table is unchanged.
118480 **
118481 ** If the "data" parameter to this function is NULL, then the
118482 ** element corresponding to "key" is removed from the hash table.
118483 */
118484 SQLITE_PRIVATE void *sqlite3Fts3HashInsert(
118485   Fts3Hash *pH,        /* The hash table to insert into */
118486   const void *pKey,    /* The key */
118487   int nKey,            /* Number of bytes in the key */
118488   void *data           /* The data */
118489 ){
118490   int hraw;                 /* Raw hash value of the key */
118491   int h;                    /* the hash of the key modulo hash table size */
118492   Fts3HashElem *elem;       /* Used to loop thru the element list */
118493   Fts3HashElem *new_elem;   /* New element added to the pH */
118494   int (*xHash)(const void*,int);  /* The hash function */
118495
118496   assert( pH!=0 );
118497   xHash = ftsHashFunction(pH->keyClass);
118498   assert( xHash!=0 );
118499   hraw = (*xHash)(pKey, nKey);
118500   assert( (pH->htsize & (pH->htsize-1))==0 );
118501   h = hraw & (pH->htsize-1);
118502   elem = fts3FindElementByHash(pH,pKey,nKey,h);
118503   if( elem ){
118504     void *old_data = elem->data;
118505     if( data==0 ){
118506       fts3RemoveElementByHash(pH,elem,h);
118507     }else{
118508       elem->data = data;
118509     }
118510     return old_data;
118511   }
118512   if( data==0 ) return 0;
118513   if( (pH->htsize==0 && fts3Rehash(pH,8))
118514    || (pH->count>=pH->htsize && fts3Rehash(pH, pH->htsize*2))
118515   ){
118516     pH->count = 0;
118517     return data;
118518   }
118519   assert( pH->htsize>0 );
118520   new_elem = (Fts3HashElem*)fts3HashMalloc( sizeof(Fts3HashElem) );
118521   if( new_elem==0 ) return data;
118522   if( pH->copyKey && pKey!=0 ){
118523     new_elem->pKey = fts3HashMalloc( nKey );
118524     if( new_elem->pKey==0 ){
118525       fts3HashFree(new_elem);
118526       return data;
118527     }
118528     memcpy((void*)new_elem->pKey, pKey, nKey);
118529   }else{
118530     new_elem->pKey = (void*)pKey;
118531   }
118532   new_elem->nKey = nKey;
118533   pH->count++;
118534   assert( pH->htsize>0 );
118535   assert( (pH->htsize & (pH->htsize-1))==0 );
118536   h = hraw & (pH->htsize-1);
118537   fts3HashInsertElement(pH, &pH->ht[h], new_elem);
118538   new_elem->data = data;
118539   return 0;
118540 }
118541
118542 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
118543
118544 /************** End of fts3_hash.c *******************************************/
118545 /************** Begin file fts3_porter.c *************************************/
118546 /*
118547 ** 2006 September 30
118548 **
118549 ** The author disclaims copyright to this source code.  In place of
118550 ** a legal notice, here is a blessing:
118551 **
118552 **    May you do good and not evil.
118553 **    May you find forgiveness for yourself and forgive others.
118554 **    May you share freely, never taking more than you give.
118555 **
118556 *************************************************************************
118557 ** Implementation of the full-text-search tokenizer that implements
118558 ** a Porter stemmer.
118559 */
118560
118561 /*
118562 ** The code in this file is only compiled if:
118563 **
118564 **     * The FTS3 module is being built as an extension
118565 **       (in which case SQLITE_CORE is not defined), or
118566 **
118567 **     * The FTS3 module is being built into the core of
118568 **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
118569 */
118570 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
118571
118572
118573
118574
118575 /*
118576 ** Class derived from sqlite3_tokenizer
118577 */
118578 typedef struct porter_tokenizer {
118579   sqlite3_tokenizer base;      /* Base class */
118580 } porter_tokenizer;
118581
118582 /*
118583 ** Class derived from sqlit3_tokenizer_cursor
118584 */
118585 typedef struct porter_tokenizer_cursor {
118586   sqlite3_tokenizer_cursor base;
118587   const char *zInput;          /* input we are tokenizing */
118588   int nInput;                  /* size of the input */
118589   int iOffset;                 /* current position in zInput */
118590   int iToken;                  /* index of next token to be returned */
118591   char *zToken;                /* storage for current token */
118592   int nAllocated;              /* space allocated to zToken buffer */
118593 } porter_tokenizer_cursor;
118594
118595
118596 /*
118597 ** Create a new tokenizer instance.
118598 */
118599 static int porterCreate(
118600   int argc, const char * const *argv,
118601   sqlite3_tokenizer **ppTokenizer
118602 ){
118603   porter_tokenizer *t;
118604
118605   UNUSED_PARAMETER(argc);
118606   UNUSED_PARAMETER(argv);
118607
118608   t = (porter_tokenizer *) sqlite3_malloc(sizeof(*t));
118609   if( t==NULL ) return SQLITE_NOMEM;
118610   memset(t, 0, sizeof(*t));
118611   *ppTokenizer = &t->base;
118612   return SQLITE_OK;
118613 }
118614
118615 /*
118616 ** Destroy a tokenizer
118617 */
118618 static int porterDestroy(sqlite3_tokenizer *pTokenizer){
118619   sqlite3_free(pTokenizer);
118620   return SQLITE_OK;
118621 }
118622
118623 /*
118624 ** Prepare to begin tokenizing a particular string.  The input
118625 ** string to be tokenized is zInput[0..nInput-1].  A cursor
118626 ** used to incrementally tokenize this string is returned in 
118627 ** *ppCursor.
118628 */
118629 static int porterOpen(
118630   sqlite3_tokenizer *pTokenizer,         /* The tokenizer */
118631   const char *zInput, int nInput,        /* String to be tokenized */
118632   sqlite3_tokenizer_cursor **ppCursor    /* OUT: Tokenization cursor */
118633 ){
118634   porter_tokenizer_cursor *c;
118635
118636   UNUSED_PARAMETER(pTokenizer);
118637
118638   c = (porter_tokenizer_cursor *) sqlite3_malloc(sizeof(*c));
118639   if( c==NULL ) return SQLITE_NOMEM;
118640
118641   c->zInput = zInput;
118642   if( zInput==0 ){
118643     c->nInput = 0;
118644   }else if( nInput<0 ){
118645     c->nInput = (int)strlen(zInput);
118646   }else{
118647     c->nInput = nInput;
118648   }
118649   c->iOffset = 0;                 /* start tokenizing at the beginning */
118650   c->iToken = 0;
118651   c->zToken = NULL;               /* no space allocated, yet. */
118652   c->nAllocated = 0;
118653
118654   *ppCursor = &c->base;
118655   return SQLITE_OK;
118656 }
118657
118658 /*
118659 ** Close a tokenization cursor previously opened by a call to
118660 ** porterOpen() above.
118661 */
118662 static int porterClose(sqlite3_tokenizer_cursor *pCursor){
118663   porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor;
118664   sqlite3_free(c->zToken);
118665   sqlite3_free(c);
118666   return SQLITE_OK;
118667 }
118668 /*
118669 ** Vowel or consonant
118670 */
118671 static const char vOrCType[] = {
118672    0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0,
118673    1, 1, 1, 2, 1
118674 };
118675
118676 /*
118677 ** isConsonant() and isVowel() determine if their first character in
118678 ** the string they point to is a consonant or a vowel, according
118679 ** to Porter ruls.  
118680 **
118681 ** A consonate is any letter other than 'a', 'e', 'i', 'o', or 'u'.
118682 ** 'Y' is a consonant unless it follows another consonant,
118683 ** in which case it is a vowel.
118684 **
118685 ** In these routine, the letters are in reverse order.  So the 'y' rule
118686 ** is that 'y' is a consonant unless it is followed by another
118687 ** consonent.
118688 */
118689 static int isVowel(const char*);
118690 static int isConsonant(const char *z){
118691   int j;
118692   char x = *z;
118693   if( x==0 ) return 0;
118694   assert( x>='a' && x<='z' );
118695   j = vOrCType[x-'a'];
118696   if( j<2 ) return j;
118697   return z[1]==0 || isVowel(z + 1);
118698 }
118699 static int isVowel(const char *z){
118700   int j;
118701   char x = *z;
118702   if( x==0 ) return 0;
118703   assert( x>='a' && x<='z' );
118704   j = vOrCType[x-'a'];
118705   if( j<2 ) return 1-j;
118706   return isConsonant(z + 1);
118707 }
118708
118709 /*
118710 ** Let any sequence of one or more vowels be represented by V and let
118711 ** C be sequence of one or more consonants.  Then every word can be
118712 ** represented as:
118713 **
118714 **           [C] (VC){m} [V]
118715 **
118716 ** In prose:  A word is an optional consonant followed by zero or
118717 ** vowel-consonant pairs followed by an optional vowel.  "m" is the
118718 ** number of vowel consonant pairs.  This routine computes the value
118719 ** of m for the first i bytes of a word.
118720 **
118721 ** Return true if the m-value for z is 1 or more.  In other words,
118722 ** return true if z contains at least one vowel that is followed
118723 ** by a consonant.
118724 **
118725 ** In this routine z[] is in reverse order.  So we are really looking
118726 ** for an instance of of a consonant followed by a vowel.
118727 */
118728 static int m_gt_0(const char *z){
118729   while( isVowel(z) ){ z++; }
118730   if( *z==0 ) return 0;
118731   while( isConsonant(z) ){ z++; }
118732   return *z!=0;
118733 }
118734
118735 /* Like mgt0 above except we are looking for a value of m which is
118736 ** exactly 1
118737 */
118738 static int m_eq_1(const char *z){
118739   while( isVowel(z) ){ z++; }
118740   if( *z==0 ) return 0;
118741   while( isConsonant(z) ){ z++; }
118742   if( *z==0 ) return 0;
118743   while( isVowel(z) ){ z++; }
118744   if( *z==0 ) return 1;
118745   while( isConsonant(z) ){ z++; }
118746   return *z==0;
118747 }
118748
118749 /* Like mgt0 above except we are looking for a value of m>1 instead
118750 ** or m>0
118751 */
118752 static int m_gt_1(const char *z){
118753   while( isVowel(z) ){ z++; }
118754   if( *z==0 ) return 0;
118755   while( isConsonant(z) ){ z++; }
118756   if( *z==0 ) return 0;
118757   while( isVowel(z) ){ z++; }
118758   if( *z==0 ) return 0;
118759   while( isConsonant(z) ){ z++; }
118760   return *z!=0;
118761 }
118762
118763 /*
118764 ** Return TRUE if there is a vowel anywhere within z[0..n-1]
118765 */
118766 static int hasVowel(const char *z){
118767   while( isConsonant(z) ){ z++; }
118768   return *z!=0;
118769 }
118770
118771 /*
118772 ** Return TRUE if the word ends in a double consonant.
118773 **
118774 ** The text is reversed here. So we are really looking at
118775 ** the first two characters of z[].
118776 */
118777 static int doubleConsonant(const char *z){
118778   return isConsonant(z) && z[0]==z[1];
118779 }
118780
118781 /*
118782 ** Return TRUE if the word ends with three letters which
118783 ** are consonant-vowel-consonent and where the final consonant
118784 ** is not 'w', 'x', or 'y'.
118785 **
118786 ** The word is reversed here.  So we are really checking the
118787 ** first three letters and the first one cannot be in [wxy].
118788 */
118789 static int star_oh(const char *z){
118790   return
118791     isConsonant(z) &&
118792     z[0]!='w' && z[0]!='x' && z[0]!='y' &&
118793     isVowel(z+1) &&
118794     isConsonant(z+2);
118795 }
118796
118797 /*
118798 ** If the word ends with zFrom and xCond() is true for the stem
118799 ** of the word that preceeds the zFrom ending, then change the 
118800 ** ending to zTo.
118801 **
118802 ** The input word *pz and zFrom are both in reverse order.  zTo
118803 ** is in normal order. 
118804 **
118805 ** Return TRUE if zFrom matches.  Return FALSE if zFrom does not
118806 ** match.  Not that TRUE is returned even if xCond() fails and
118807 ** no substitution occurs.
118808 */
118809 static int stem(
118810   char **pz,             /* The word being stemmed (Reversed) */
118811   const char *zFrom,     /* If the ending matches this... (Reversed) */
118812   const char *zTo,       /* ... change the ending to this (not reversed) */
118813   int (*xCond)(const char*)   /* Condition that must be true */
118814 ){
118815   char *z = *pz;
118816   while( *zFrom && *zFrom==*z ){ z++; zFrom++; }
118817   if( *zFrom!=0 ) return 0;
118818   if( xCond && !xCond(z) ) return 1;
118819   while( *zTo ){
118820     *(--z) = *(zTo++);
118821   }
118822   *pz = z;
118823   return 1;
118824 }
118825
118826 /*
118827 ** This is the fallback stemmer used when the porter stemmer is
118828 ** inappropriate.  The input word is copied into the output with
118829 ** US-ASCII case folding.  If the input word is too long (more
118830 ** than 20 bytes if it contains no digits or more than 6 bytes if
118831 ** it contains digits) then word is truncated to 20 or 6 bytes
118832 ** by taking 10 or 3 bytes from the beginning and end.
118833 */
118834 static void copy_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
118835   int i, mx, j;
118836   int hasDigit = 0;
118837   for(i=0; i<nIn; i++){
118838     char c = zIn[i];
118839     if( c>='A' && c<='Z' ){
118840       zOut[i] = c - 'A' + 'a';
118841     }else{
118842       if( c>='0' && c<='9' ) hasDigit = 1;
118843       zOut[i] = c;
118844     }
118845   }
118846   mx = hasDigit ? 3 : 10;
118847   if( nIn>mx*2 ){
118848     for(j=mx, i=nIn-mx; i<nIn; i++, j++){
118849       zOut[j] = zOut[i];
118850     }
118851     i = j;
118852   }
118853   zOut[i] = 0;
118854   *pnOut = i;
118855 }
118856
118857
118858 /*
118859 ** Stem the input word zIn[0..nIn-1].  Store the output in zOut.
118860 ** zOut is at least big enough to hold nIn bytes.  Write the actual
118861 ** size of the output word (exclusive of the '\0' terminator) into *pnOut.
118862 **
118863 ** Any upper-case characters in the US-ASCII character set ([A-Z])
118864 ** are converted to lower case.  Upper-case UTF characters are
118865 ** unchanged.
118866 **
118867 ** Words that are longer than about 20 bytes are stemmed by retaining
118868 ** a few bytes from the beginning and the end of the word.  If the
118869 ** word contains digits, 3 bytes are taken from the beginning and
118870 ** 3 bytes from the end.  For long words without digits, 10 bytes
118871 ** are taken from each end.  US-ASCII case folding still applies.
118872 ** 
118873 ** If the input word contains not digits but does characters not 
118874 ** in [a-zA-Z] then no stemming is attempted and this routine just 
118875 ** copies the input into the input into the output with US-ASCII
118876 ** case folding.
118877 **
118878 ** Stemming never increases the length of the word.  So there is
118879 ** no chance of overflowing the zOut buffer.
118880 */
118881 static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
118882   int i, j;
118883   char zReverse[28];
118884   char *z, *z2;
118885   if( nIn<3 || nIn>=(int)sizeof(zReverse)-7 ){
118886     /* The word is too big or too small for the porter stemmer.
118887     ** Fallback to the copy stemmer */
118888     copy_stemmer(zIn, nIn, zOut, pnOut);
118889     return;
118890   }
118891   for(i=0, j=sizeof(zReverse)-6; i<nIn; i++, j--){
118892     char c = zIn[i];
118893     if( c>='A' && c<='Z' ){
118894       zReverse[j] = c + 'a' - 'A';
118895     }else if( c>='a' && c<='z' ){
118896       zReverse[j] = c;
118897     }else{
118898       /* The use of a character not in [a-zA-Z] means that we fallback
118899       ** to the copy stemmer */
118900       copy_stemmer(zIn, nIn, zOut, pnOut);
118901       return;
118902     }
118903   }
118904   memset(&zReverse[sizeof(zReverse)-5], 0, 5);
118905   z = &zReverse[j+1];
118906
118907
118908   /* Step 1a */
118909   if( z[0]=='s' ){
118910     if(
118911      !stem(&z, "sess", "ss", 0) &&
118912      !stem(&z, "sei", "i", 0)  &&
118913      !stem(&z, "ss", "ss", 0)
118914     ){
118915       z++;
118916     }
118917   }
118918
118919   /* Step 1b */  
118920   z2 = z;
118921   if( stem(&z, "dee", "ee", m_gt_0) ){
118922     /* Do nothing.  The work was all in the test */
118923   }else if( 
118924      (stem(&z, "gni", "", hasVowel) || stem(&z, "de", "", hasVowel))
118925       && z!=z2
118926   ){
118927      if( stem(&z, "ta", "ate", 0) ||
118928          stem(&z, "lb", "ble", 0) ||
118929          stem(&z, "zi", "ize", 0) ){
118930        /* Do nothing.  The work was all in the test */
118931      }else if( doubleConsonant(z) && (*z!='l' && *z!='s' && *z!='z') ){
118932        z++;
118933      }else if( m_eq_1(z) && star_oh(z) ){
118934        *(--z) = 'e';
118935      }
118936   }
118937
118938   /* Step 1c */
118939   if( z[0]=='y' && hasVowel(z+1) ){
118940     z[0] = 'i';
118941   }
118942
118943   /* Step 2 */
118944   switch( z[1] ){
118945    case 'a':
118946      stem(&z, "lanoita", "ate", m_gt_0) ||
118947      stem(&z, "lanoit", "tion", m_gt_0);
118948      break;
118949    case 'c':
118950      stem(&z, "icne", "ence", m_gt_0) ||
118951      stem(&z, "icna", "ance", m_gt_0);
118952      break;
118953    case 'e':
118954      stem(&z, "rezi", "ize", m_gt_0);
118955      break;
118956    case 'g':
118957      stem(&z, "igol", "log", m_gt_0);
118958      break;
118959    case 'l':
118960      stem(&z, "ilb", "ble", m_gt_0) ||
118961      stem(&z, "illa", "al", m_gt_0) ||
118962      stem(&z, "iltne", "ent", m_gt_0) ||
118963      stem(&z, "ile", "e", m_gt_0) ||
118964      stem(&z, "ilsuo", "ous", m_gt_0);
118965      break;
118966    case 'o':
118967      stem(&z, "noitazi", "ize", m_gt_0) ||
118968      stem(&z, "noita", "ate", m_gt_0) ||
118969      stem(&z, "rota", "ate", m_gt_0);
118970      break;
118971    case 's':
118972      stem(&z, "msila", "al", m_gt_0) ||
118973      stem(&z, "ssenevi", "ive", m_gt_0) ||
118974      stem(&z, "ssenluf", "ful", m_gt_0) ||
118975      stem(&z, "ssensuo", "ous", m_gt_0);
118976      break;
118977    case 't':
118978      stem(&z, "itila", "al", m_gt_0) ||
118979      stem(&z, "itivi", "ive", m_gt_0) ||
118980      stem(&z, "itilib", "ble", m_gt_0);
118981      break;
118982   }
118983
118984   /* Step 3 */
118985   switch( z[0] ){
118986    case 'e':
118987      stem(&z, "etaci", "ic", m_gt_0) ||
118988      stem(&z, "evita", "", m_gt_0)   ||
118989      stem(&z, "ezila", "al", m_gt_0);
118990      break;
118991    case 'i':
118992      stem(&z, "itici", "ic", m_gt_0);
118993      break;
118994    case 'l':
118995      stem(&z, "laci", "ic", m_gt_0) ||
118996      stem(&z, "luf", "", m_gt_0);
118997      break;
118998    case 's':
118999      stem(&z, "ssen", "", m_gt_0);
119000      break;
119001   }
119002
119003   /* Step 4 */
119004   switch( z[1] ){
119005    case 'a':
119006      if( z[0]=='l' && m_gt_1(z+2) ){
119007        z += 2;
119008      }
119009      break;
119010    case 'c':
119011      if( z[0]=='e' && z[2]=='n' && (z[3]=='a' || z[3]=='e')  && m_gt_1(z+4)  ){
119012        z += 4;
119013      }
119014      break;
119015    case 'e':
119016      if( z[0]=='r' && m_gt_1(z+2) ){
119017        z += 2;
119018      }
119019      break;
119020    case 'i':
119021      if( z[0]=='c' && m_gt_1(z+2) ){
119022        z += 2;
119023      }
119024      break;
119025    case 'l':
119026      if( z[0]=='e' && z[2]=='b' && (z[3]=='a' || z[3]=='i') && m_gt_1(z+4) ){
119027        z += 4;
119028      }
119029      break;
119030    case 'n':
119031      if( z[0]=='t' ){
119032        if( z[2]=='a' ){
119033          if( m_gt_1(z+3) ){
119034            z += 3;
119035          }
119036        }else if( z[2]=='e' ){
119037          stem(&z, "tneme", "", m_gt_1) ||
119038          stem(&z, "tnem", "", m_gt_1) ||
119039          stem(&z, "tne", "", m_gt_1);
119040        }
119041      }
119042      break;
119043    case 'o':
119044      if( z[0]=='u' ){
119045        if( m_gt_1(z+2) ){
119046          z += 2;
119047        }
119048      }else if( z[3]=='s' || z[3]=='t' ){
119049        stem(&z, "noi", "", m_gt_1);
119050      }
119051      break;
119052    case 's':
119053      if( z[0]=='m' && z[2]=='i' && m_gt_1(z+3) ){
119054        z += 3;
119055      }
119056      break;
119057    case 't':
119058      stem(&z, "eta", "", m_gt_1) ||
119059      stem(&z, "iti", "", m_gt_1);
119060      break;
119061    case 'u':
119062      if( z[0]=='s' && z[2]=='o' && m_gt_1(z+3) ){
119063        z += 3;
119064      }
119065      break;
119066    case 'v':
119067    case 'z':
119068      if( z[0]=='e' && z[2]=='i' && m_gt_1(z+3) ){
119069        z += 3;
119070      }
119071      break;
119072   }
119073
119074   /* Step 5a */
119075   if( z[0]=='e' ){
119076     if( m_gt_1(z+1) ){
119077       z++;
119078     }else if( m_eq_1(z+1) && !star_oh(z+1) ){
119079       z++;
119080     }
119081   }
119082
119083   /* Step 5b */
119084   if( m_gt_1(z) && z[0]=='l' && z[1]=='l' ){
119085     z++;
119086   }
119087
119088   /* z[] is now the stemmed word in reverse order.  Flip it back
119089   ** around into forward order and return.
119090   */
119091   *pnOut = i = (int)strlen(z);
119092   zOut[i] = 0;
119093   while( *z ){
119094     zOut[--i] = *(z++);
119095   }
119096 }
119097
119098 /*
119099 ** Characters that can be part of a token.  We assume any character
119100 ** whose value is greater than 0x80 (any UTF character) can be
119101 ** part of a token.  In other words, delimiters all must have
119102 ** values of 0x7f or lower.
119103 */
119104 static const char porterIdChar[] = {
119105 /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
119106     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  /* 3x */
119107     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 4x */
119108     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,  /* 5x */
119109     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 6x */
119110     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,  /* 7x */
119111 };
119112 #define isDelim(C) (((ch=C)&0x80)==0 && (ch<0x30 || !porterIdChar[ch-0x30]))
119113
119114 /*
119115 ** Extract the next token from a tokenization cursor.  The cursor must
119116 ** have been opened by a prior call to porterOpen().
119117 */
119118 static int porterNext(
119119   sqlite3_tokenizer_cursor *pCursor,  /* Cursor returned by porterOpen */
119120   const char **pzToken,               /* OUT: *pzToken is the token text */
119121   int *pnBytes,                       /* OUT: Number of bytes in token */
119122   int *piStartOffset,                 /* OUT: Starting offset of token */
119123   int *piEndOffset,                   /* OUT: Ending offset of token */
119124   int *piPosition                     /* OUT: Position integer of token */
119125 ){
119126   porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor;
119127   const char *z = c->zInput;
119128
119129   while( c->iOffset<c->nInput ){
119130     int iStartOffset, ch;
119131
119132     /* Scan past delimiter characters */
119133     while( c->iOffset<c->nInput && isDelim(z[c->iOffset]) ){
119134       c->iOffset++;
119135     }
119136
119137     /* Count non-delimiter characters. */
119138     iStartOffset = c->iOffset;
119139     while( c->iOffset<c->nInput && !isDelim(z[c->iOffset]) ){
119140       c->iOffset++;
119141     }
119142
119143     if( c->iOffset>iStartOffset ){
119144       int n = c->iOffset-iStartOffset;
119145       if( n>c->nAllocated ){
119146         char *pNew;
119147         c->nAllocated = n+20;
119148         pNew = sqlite3_realloc(c->zToken, c->nAllocated);
119149         if( !pNew ) return SQLITE_NOMEM;
119150         c->zToken = pNew;
119151       }
119152       porter_stemmer(&z[iStartOffset], n, c->zToken, pnBytes);
119153       *pzToken = c->zToken;
119154       *piStartOffset = iStartOffset;
119155       *piEndOffset = c->iOffset;
119156       *piPosition = c->iToken++;
119157       return SQLITE_OK;
119158     }
119159   }
119160   return SQLITE_DONE;
119161 }
119162
119163 /*
119164 ** The set of routines that implement the porter-stemmer tokenizer
119165 */
119166 static const sqlite3_tokenizer_module porterTokenizerModule = {
119167   0,
119168   porterCreate,
119169   porterDestroy,
119170   porterOpen,
119171   porterClose,
119172   porterNext,
119173 };
119174
119175 /*
119176 ** Allocate a new porter tokenizer.  Return a pointer to the new
119177 ** tokenizer in *ppModule
119178 */
119179 SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(
119180   sqlite3_tokenizer_module const**ppModule
119181 ){
119182   *ppModule = &porterTokenizerModule;
119183 }
119184
119185 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
119186
119187 /************** End of fts3_porter.c *****************************************/
119188 /************** Begin file fts3_tokenizer.c **********************************/
119189 /*
119190 ** 2007 June 22
119191 **
119192 ** The author disclaims copyright to this source code.  In place of
119193 ** a legal notice, here is a blessing:
119194 **
119195 **    May you do good and not evil.
119196 **    May you find forgiveness for yourself and forgive others.
119197 **    May you share freely, never taking more than you give.
119198 **
119199 ******************************************************************************
119200 **
119201 ** This is part of an SQLite module implementing full-text search.
119202 ** This particular file implements the generic tokenizer interface.
119203 */
119204
119205 /*
119206 ** The code in this file is only compiled if:
119207 **
119208 **     * The FTS3 module is being built as an extension
119209 **       (in which case SQLITE_CORE is not defined), or
119210 **
119211 **     * The FTS3 module is being built into the core of
119212 **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
119213 */
119214 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
119215
119216 #ifndef SQLITE_CORE
119217   SQLITE_EXTENSION_INIT1
119218 #endif
119219
119220
119221 /*
119222 ** Implementation of the SQL scalar function for accessing the underlying 
119223 ** hash table. This function may be called as follows:
119224 **
119225 **   SELECT <function-name>(<key-name>);
119226 **   SELECT <function-name>(<key-name>, <pointer>);
119227 **
119228 ** where <function-name> is the name passed as the second argument
119229 ** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer').
119230 **
119231 ** If the <pointer> argument is specified, it must be a blob value
119232 ** containing a pointer to be stored as the hash data corresponding
119233 ** to the string <key-name>. If <pointer> is not specified, then
119234 ** the string <key-name> must already exist in the has table. Otherwise,
119235 ** an error is returned.
119236 **
119237 ** Whether or not the <pointer> argument is specified, the value returned
119238 ** is a blob containing the pointer stored as the hash data corresponding
119239 ** to string <key-name> (after the hash-table is updated, if applicable).
119240 */
119241 static void scalarFunc(
119242   sqlite3_context *context,
119243   int argc,
119244   sqlite3_value **argv
119245 ){
119246   Fts3Hash *pHash;
119247   void *pPtr = 0;
119248   const unsigned char *zName;
119249   int nName;
119250
119251   assert( argc==1 || argc==2 );
119252
119253   pHash = (Fts3Hash *)sqlite3_user_data(context);
119254
119255   zName = sqlite3_value_text(argv[0]);
119256   nName = sqlite3_value_bytes(argv[0])+1;
119257
119258   if( argc==2 ){
119259     void *pOld;
119260     int n = sqlite3_value_bytes(argv[1]);
119261     if( n!=sizeof(pPtr) ){
119262       sqlite3_result_error(context, "argument type mismatch", -1);
119263       return;
119264     }
119265     pPtr = *(void **)sqlite3_value_blob(argv[1]);
119266     pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr);
119267     if( pOld==pPtr ){
119268       sqlite3_result_error(context, "out of memory", -1);
119269       return;
119270     }
119271   }else{
119272     pPtr = sqlite3Fts3HashFind(pHash, zName, nName);
119273     if( !pPtr ){
119274       char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName);
119275       sqlite3_result_error(context, zErr, -1);
119276       sqlite3_free(zErr);
119277       return;
119278     }
119279   }
119280
119281   sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT);
119282 }
119283
119284 SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char c){
119285   static const char isFtsIdChar[] = {
119286       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 0x */
119287       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 1x */
119288       0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* 2x */
119289       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  /* 3x */
119290       0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 4x */
119291       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,  /* 5x */
119292       0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* 6x */
119293       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,  /* 7x */
119294   };
119295   return (c&0x80 || isFtsIdChar[(int)(c)]);
119296 }
119297
119298 SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *zStr, int *pn){
119299   const char *z1;
119300   const char *z2 = 0;
119301
119302   /* Find the start of the next token. */
119303   z1 = zStr;
119304   while( z2==0 ){
119305     char c = *z1;
119306     switch( c ){
119307       case '\0': return 0;        /* No more tokens here */
119308       case '\'':
119309       case '"':
119310       case '`': {
119311         z2 = z1;
119312         while( *++z2 && (*z2!=c || *++z2==c) );
119313         break;
119314       }
119315       case '[':
119316         z2 = &z1[1];
119317         while( *z2 && z2[0]!=']' ) z2++;
119318         if( *z2 ) z2++;
119319         break;
119320
119321       default:
119322         if( sqlite3Fts3IsIdChar(*z1) ){
119323           z2 = &z1[1];
119324           while( sqlite3Fts3IsIdChar(*z2) ) z2++;
119325         }else{
119326           z1++;
119327         }
119328     }
119329   }
119330
119331   *pn = (int)(z2-z1);
119332   return z1;
119333 }
119334
119335 SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(
119336   Fts3Hash *pHash,                /* Tokenizer hash table */
119337   const char *zArg,               /* Tokenizer name */
119338   sqlite3_tokenizer **ppTok,      /* OUT: Tokenizer (if applicable) */
119339   char **pzErr                    /* OUT: Set to malloced error message */
119340 ){
119341   int rc;
119342   char *z = (char *)zArg;
119343   int n;
119344   char *zCopy;
119345   char *zEnd;                     /* Pointer to nul-term of zCopy */
119346   sqlite3_tokenizer_module *m;
119347
119348   zCopy = sqlite3_mprintf("%s", zArg);
119349   if( !zCopy ) return SQLITE_NOMEM;
119350   zEnd = &zCopy[strlen(zCopy)];
119351
119352   z = (char *)sqlite3Fts3NextToken(zCopy, &n);
119353   z[n] = '\0';
119354   sqlite3Fts3Dequote(z);
119355
119356   m = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash,z,(int)strlen(z)+1);
119357   if( !m ){
119358     *pzErr = sqlite3_mprintf("unknown tokenizer: %s", z);
119359     rc = SQLITE_ERROR;
119360   }else{
119361     char const **aArg = 0;
119362     int iArg = 0;
119363     z = &z[n+1];
119364     while( z<zEnd && (NULL!=(z = (char *)sqlite3Fts3NextToken(z, &n))) ){
119365       int nNew = sizeof(char *)*(iArg+1);
119366       char const **aNew = (const char **)sqlite3_realloc((void *)aArg, nNew);
119367       if( !aNew ){
119368         sqlite3_free(zCopy);
119369         sqlite3_free((void *)aArg);
119370         return SQLITE_NOMEM;
119371       }
119372       aArg = aNew;
119373       aArg[iArg++] = z;
119374       z[n] = '\0';
119375       sqlite3Fts3Dequote(z);
119376       z = &z[n+1];
119377     }
119378     rc = m->xCreate(iArg, aArg, ppTok);
119379     assert( rc!=SQLITE_OK || *ppTok );
119380     if( rc!=SQLITE_OK ){
119381       *pzErr = sqlite3_mprintf("unknown tokenizer");
119382     }else{
119383       (*ppTok)->pModule = m; 
119384     }
119385     sqlite3_free((void *)aArg);
119386   }
119387
119388   sqlite3_free(zCopy);
119389   return rc;
119390 }
119391
119392
119393 #ifdef SQLITE_TEST
119394
119395
119396 /*
119397 ** Implementation of a special SQL scalar function for testing tokenizers 
119398 ** designed to be used in concert with the Tcl testing framework. This
119399 ** function must be called with two arguments:
119400 **
119401 **   SELECT <function-name>(<key-name>, <input-string>);
119402 **   SELECT <function-name>(<key-name>, <pointer>);
119403 **
119404 ** where <function-name> is the name passed as the second argument
119405 ** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer')
119406 ** concatenated with the string '_test' (e.g. 'fts3_tokenizer_test').
119407 **
119408 ** The return value is a string that may be interpreted as a Tcl
119409 ** list. For each token in the <input-string>, three elements are
119410 ** added to the returned list. The first is the token position, the 
119411 ** second is the token text (folded, stemmed, etc.) and the third is the
119412 ** substring of <input-string> associated with the token. For example, 
119413 ** using the built-in "simple" tokenizer:
119414 **
119415 **   SELECT fts_tokenizer_test('simple', 'I don't see how');
119416 **
119417 ** will return the string:
119418 **
119419 **   "{0 i I 1 dont don't 2 see see 3 how how}"
119420 **   
119421 */
119422 static void testFunc(
119423   sqlite3_context *context,
119424   int argc,
119425   sqlite3_value **argv
119426 ){
119427   Fts3Hash *pHash;
119428   sqlite3_tokenizer_module *p;
119429   sqlite3_tokenizer *pTokenizer = 0;
119430   sqlite3_tokenizer_cursor *pCsr = 0;
119431
119432   const char *zErr = 0;
119433
119434   const char *zName;
119435   int nName;
119436   const char *zInput;
119437   int nInput;
119438
119439   const char *zArg = 0;
119440
119441   const char *zToken;
119442   int nToken;
119443   int iStart;
119444   int iEnd;
119445   int iPos;
119446
119447   Tcl_Obj *pRet;
119448
119449   assert( argc==2 || argc==3 );
119450
119451   nName = sqlite3_value_bytes(argv[0]);
119452   zName = (const char *)sqlite3_value_text(argv[0]);
119453   nInput = sqlite3_value_bytes(argv[argc-1]);
119454   zInput = (const char *)sqlite3_value_text(argv[argc-1]);
119455
119456   if( argc==3 ){
119457     zArg = (const char *)sqlite3_value_text(argv[1]);
119458   }
119459
119460   pHash = (Fts3Hash *)sqlite3_user_data(context);
119461   p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1);
119462
119463   if( !p ){
119464     char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName);
119465     sqlite3_result_error(context, zErr, -1);
119466     sqlite3_free(zErr);
119467     return;
119468   }
119469
119470   pRet = Tcl_NewObj();
119471   Tcl_IncrRefCount(pRet);
119472
119473   if( SQLITE_OK!=p->xCreate(zArg ? 1 : 0, &zArg, &pTokenizer) ){
119474     zErr = "error in xCreate()";
119475     goto finish;
119476   }
119477   pTokenizer->pModule = p;
119478   if( SQLITE_OK!=p->xOpen(pTokenizer, zInput, nInput, &pCsr) ){
119479     zErr = "error in xOpen()";
119480     goto finish;
119481   }
119482   pCsr->pTokenizer = pTokenizer;
119483
119484   while( SQLITE_OK==p->xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos) ){
119485     Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(iPos));
119486     Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken));
119487     zToken = &zInput[iStart];
119488     nToken = iEnd-iStart;
119489     Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken));
119490   }
119491
119492   if( SQLITE_OK!=p->xClose(pCsr) ){
119493     zErr = "error in xClose()";
119494     goto finish;
119495   }
119496   if( SQLITE_OK!=p->xDestroy(pTokenizer) ){
119497     zErr = "error in xDestroy()";
119498     goto finish;
119499   }
119500
119501 finish:
119502   if( zErr ){
119503     sqlite3_result_error(context, zErr, -1);
119504   }else{
119505     sqlite3_result_text(context, Tcl_GetString(pRet), -1, SQLITE_TRANSIENT);
119506   }
119507   Tcl_DecrRefCount(pRet);
119508 }
119509
119510 static
119511 int registerTokenizer(
119512   sqlite3 *db, 
119513   char *zName, 
119514   const sqlite3_tokenizer_module *p
119515 ){
119516   int rc;
119517   sqlite3_stmt *pStmt;
119518   const char zSql[] = "SELECT fts3_tokenizer(?, ?)";
119519
119520   rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
119521   if( rc!=SQLITE_OK ){
119522     return rc;
119523   }
119524
119525   sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
119526   sqlite3_bind_blob(pStmt, 2, &p, sizeof(p), SQLITE_STATIC);
119527   sqlite3_step(pStmt);
119528
119529   return sqlite3_finalize(pStmt);
119530 }
119531
119532 static
119533 int queryTokenizer(
119534   sqlite3 *db, 
119535   char *zName,  
119536   const sqlite3_tokenizer_module **pp
119537 ){
119538   int rc;
119539   sqlite3_stmt *pStmt;
119540   const char zSql[] = "SELECT fts3_tokenizer(?)";
119541
119542   *pp = 0;
119543   rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
119544   if( rc!=SQLITE_OK ){
119545     return rc;
119546   }
119547
119548   sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
119549   if( SQLITE_ROW==sqlite3_step(pStmt) ){
119550     if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){
119551       memcpy((void *)pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp));
119552     }
119553   }
119554
119555   return sqlite3_finalize(pStmt);
119556 }
119557
119558 SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule);
119559
119560 /*
119561 ** Implementation of the scalar function fts3_tokenizer_internal_test().
119562 ** This function is used for testing only, it is not included in the
119563 ** build unless SQLITE_TEST is defined.
119564 **
119565 ** The purpose of this is to test that the fts3_tokenizer() function
119566 ** can be used as designed by the C-code in the queryTokenizer and
119567 ** registerTokenizer() functions above. These two functions are repeated
119568 ** in the README.tokenizer file as an example, so it is important to
119569 ** test them.
119570 **
119571 ** To run the tests, evaluate the fts3_tokenizer_internal_test() scalar
119572 ** function with no arguments. An assert() will fail if a problem is
119573 ** detected. i.e.:
119574 **
119575 **     SELECT fts3_tokenizer_internal_test();
119576 **
119577 */
119578 static void intTestFunc(
119579   sqlite3_context *context,
119580   int argc,
119581   sqlite3_value **argv
119582 ){
119583   int rc;
119584   const sqlite3_tokenizer_module *p1;
119585   const sqlite3_tokenizer_module *p2;
119586   sqlite3 *db = (sqlite3 *)sqlite3_user_data(context);
119587
119588   UNUSED_PARAMETER(argc);
119589   UNUSED_PARAMETER(argv);
119590
119591   /* Test the query function */
119592   sqlite3Fts3SimpleTokenizerModule(&p1);
119593   rc = queryTokenizer(db, "simple", &p2);
119594   assert( rc==SQLITE_OK );
119595   assert( p1==p2 );
119596   rc = queryTokenizer(db, "nosuchtokenizer", &p2);
119597   assert( rc==SQLITE_ERROR );
119598   assert( p2==0 );
119599   assert( 0==strcmp(sqlite3_errmsg(db), "unknown tokenizer: nosuchtokenizer") );
119600
119601   /* Test the storage function */
119602   rc = registerTokenizer(db, "nosuchtokenizer", p1);
119603   assert( rc==SQLITE_OK );
119604   rc = queryTokenizer(db, "nosuchtokenizer", &p2);
119605   assert( rc==SQLITE_OK );
119606   assert( p2==p1 );
119607
119608   sqlite3_result_text(context, "ok", -1, SQLITE_STATIC);
119609 }
119610
119611 #endif
119612
119613 /*
119614 ** Set up SQL objects in database db used to access the contents of
119615 ** the hash table pointed to by argument pHash. The hash table must
119616 ** been initialised to use string keys, and to take a private copy 
119617 ** of the key when a value is inserted. i.e. by a call similar to:
119618 **
119619 **    sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1);
119620 **
119621 ** This function adds a scalar function (see header comment above
119622 ** scalarFunc() in this file for details) and, if ENABLE_TABLE is
119623 ** defined at compilation time, a temporary virtual table (see header 
119624 ** comment above struct HashTableVtab) to the database schema. Both 
119625 ** provide read/write access to the contents of *pHash.
119626 **
119627 ** The third argument to this function, zName, is used as the name
119628 ** of both the scalar and, if created, the virtual table.
119629 */
119630 SQLITE_PRIVATE int sqlite3Fts3InitHashTable(
119631   sqlite3 *db, 
119632   Fts3Hash *pHash, 
119633   const char *zName
119634 ){
119635   int rc = SQLITE_OK;
119636   void *p = (void *)pHash;
119637   const int any = SQLITE_ANY;
119638
119639 #ifdef SQLITE_TEST
119640   char *zTest = 0;
119641   char *zTest2 = 0;
119642   void *pdb = (void *)db;
119643   zTest = sqlite3_mprintf("%s_test", zName);
119644   zTest2 = sqlite3_mprintf("%s_internal_test", zName);
119645   if( !zTest || !zTest2 ){
119646     rc = SQLITE_NOMEM;
119647   }
119648 #endif
119649
119650   if( SQLITE_OK==rc ){
119651     rc = sqlite3_create_function(db, zName, 1, any, p, scalarFunc, 0, 0);
119652   }
119653   if( SQLITE_OK==rc ){
119654     rc = sqlite3_create_function(db, zName, 2, any, p, scalarFunc, 0, 0);
119655   }
119656 #ifdef SQLITE_TEST
119657   if( SQLITE_OK==rc ){
119658     rc = sqlite3_create_function(db, zTest, 2, any, p, testFunc, 0, 0);
119659   }
119660   if( SQLITE_OK==rc ){
119661     rc = sqlite3_create_function(db, zTest, 3, any, p, testFunc, 0, 0);
119662   }
119663   if( SQLITE_OK==rc ){
119664     rc = sqlite3_create_function(db, zTest2, 0, any, pdb, intTestFunc, 0, 0);
119665   }
119666 #endif
119667
119668 #ifdef SQLITE_TEST
119669   sqlite3_free(zTest);
119670   sqlite3_free(zTest2);
119671 #endif
119672
119673   return rc;
119674 }
119675
119676 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
119677
119678 /************** End of fts3_tokenizer.c **************************************/
119679 /************** Begin file fts3_tokenizer1.c *********************************/
119680 /*
119681 ** 2006 Oct 10
119682 **
119683 ** The author disclaims copyright to this source code.  In place of
119684 ** a legal notice, here is a blessing:
119685 **
119686 **    May you do good and not evil.
119687 **    May you find forgiveness for yourself and forgive others.
119688 **    May you share freely, never taking more than you give.
119689 **
119690 ******************************************************************************
119691 **
119692 ** Implementation of the "simple" full-text-search tokenizer.
119693 */
119694
119695 /*
119696 ** The code in this file is only compiled if:
119697 **
119698 **     * The FTS3 module is being built as an extension
119699 **       (in which case SQLITE_CORE is not defined), or
119700 **
119701 **     * The FTS3 module is being built into the core of
119702 **       SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
119703 */
119704 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
119705
119706
119707
119708
119709 typedef struct simple_tokenizer {
119710   sqlite3_tokenizer base;
119711   char delim[128];             /* flag ASCII delimiters */
119712 } simple_tokenizer;
119713
119714 typedef struct simple_tokenizer_cursor {
119715   sqlite3_tokenizer_cursor base;
119716   const char *pInput;          /* input we are tokenizing */
119717   int nBytes;                  /* size of the input */
119718   int iOffset;                 /* current position in pInput */
119719   int iToken;                  /* index of next token to be returned */
119720   char *pToken;                /* storage for current token */
119721   int nTokenAllocated;         /* space allocated to zToken buffer */
119722 } simple_tokenizer_cursor;
119723
119724
119725 static int simpleDelim(simple_tokenizer *t, unsigned char c){
119726   return c<0x80 && t->delim[c];
119727 }
119728 static int fts3_isalnum(int x){
119729   return (x>='0' && x<='9') || (x>='A' && x<='Z') || (x>='a' && x<='z');
119730 }
119731
119732 /*
119733 ** Create a new tokenizer instance.
119734 */
119735 static int simpleCreate(
119736   int argc, const char * const *argv,
119737   sqlite3_tokenizer **ppTokenizer
119738 ){
119739   simple_tokenizer *t;
119740
119741   t = (simple_tokenizer *) sqlite3_malloc(sizeof(*t));
119742   if( t==NULL ) return SQLITE_NOMEM;
119743   memset(t, 0, sizeof(*t));
119744
119745   /* TODO(shess) Delimiters need to remain the same from run to run,
119746   ** else we need to reindex.  One solution would be a meta-table to
119747   ** track such information in the database, then we'd only want this
119748   ** information on the initial create.
119749   */
119750   if( argc>1 ){
119751     int i, n = (int)strlen(argv[1]);
119752     for(i=0; i<n; i++){
119753       unsigned char ch = argv[1][i];
119754       /* We explicitly don't support UTF-8 delimiters for now. */
119755       if( ch>=0x80 ){
119756         sqlite3_free(t);
119757         return SQLITE_ERROR;
119758       }
119759       t->delim[ch] = 1;
119760     }
119761   } else {
119762     /* Mark non-alphanumeric ASCII characters as delimiters */
119763     int i;
119764     for(i=1; i<0x80; i++){
119765       t->delim[i] = !fts3_isalnum(i) ? -1 : 0;
119766     }
119767   }
119768
119769   *ppTokenizer = &t->base;
119770   return SQLITE_OK;
119771 }
119772
119773 /*
119774 ** Destroy a tokenizer
119775 */
119776 static int simpleDestroy(sqlite3_tokenizer *pTokenizer){
119777   sqlite3_free(pTokenizer);
119778   return SQLITE_OK;
119779 }
119780
119781 /*
119782 ** Prepare to begin tokenizing a particular string.  The input
119783 ** string to be tokenized is pInput[0..nBytes-1].  A cursor
119784 ** used to incrementally tokenize this string is returned in 
119785 ** *ppCursor.
119786 */
119787 static int simpleOpen(
119788   sqlite3_tokenizer *pTokenizer,         /* The tokenizer */
119789   const char *pInput, int nBytes,        /* String to be tokenized */
119790   sqlite3_tokenizer_cursor **ppCursor    /* OUT: Tokenization cursor */
119791 ){
119792   simple_tokenizer_cursor *c;
119793
119794   UNUSED_PARAMETER(pTokenizer);
119795
119796   c = (simple_tokenizer_cursor *) sqlite3_malloc(sizeof(*c));
119797   if( c==NULL ) return SQLITE_NOMEM;
119798
119799   c->pInput = pInput;
119800   if( pInput==0 ){
119801     c->nBytes = 0;
119802   }else if( nBytes<0 ){
119803     c->nBytes = (int)strlen(pInput);
119804   }else{
119805     c->nBytes = nBytes;
119806   }
119807   c->iOffset = 0;                 /* start tokenizing at the beginning */
119808   c->iToken = 0;
119809   c->pToken = NULL;               /* no space allocated, yet. */
119810   c->nTokenAllocated = 0;
119811
119812   *ppCursor = &c->base;
119813   return SQLITE_OK;
119814 }
119815
119816 /*
119817 ** Close a tokenization cursor previously opened by a call to
119818 ** simpleOpen() above.
119819 */
119820 static int simpleClose(sqlite3_tokenizer_cursor *pCursor){
119821   simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor;
119822   sqlite3_free(c->pToken);
119823   sqlite3_free(c);
119824   return SQLITE_OK;
119825 }
119826
119827 /*
119828 ** Extract the next token from a tokenization cursor.  The cursor must
119829 ** have been opened by a prior call to simpleOpen().
119830 */
119831 static int simpleNext(
119832   sqlite3_tokenizer_cursor *pCursor,  /* Cursor returned by simpleOpen */
119833   const char **ppToken,               /* OUT: *ppToken is the token text */
119834   int *pnBytes,                       /* OUT: Number of bytes in token */
119835   int *piStartOffset,                 /* OUT: Starting offset of token */
119836   int *piEndOffset,                   /* OUT: Ending offset of token */
119837   int *piPosition                     /* OUT: Position integer of token */
119838 ){
119839   simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor;
119840   simple_tokenizer *t = (simple_tokenizer *) pCursor->pTokenizer;
119841   unsigned char *p = (unsigned char *)c->pInput;
119842
119843   while( c->iOffset<c->nBytes ){
119844     int iStartOffset;
119845
119846     /* Scan past delimiter characters */
119847     while( c->iOffset<c->nBytes && simpleDelim(t, p[c->iOffset]) ){
119848       c->iOffset++;
119849     }
119850
119851     /* Count non-delimiter characters. */
119852     iStartOffset = c->iOffset;
119853     while( c->iOffset<c->nBytes && !simpleDelim(t, p[c->iOffset]) ){
119854       c->iOffset++;
119855     }
119856
119857     if( c->iOffset>iStartOffset ){
119858       int i, n = c->iOffset-iStartOffset;
119859       if( n>c->nTokenAllocated ){
119860         char *pNew;
119861         c->nTokenAllocated = n+20;
119862         pNew = sqlite3_realloc(c->pToken, c->nTokenAllocated);
119863         if( !pNew ) return SQLITE_NOMEM;
119864         c->pToken = pNew;
119865       }
119866       for(i=0; i<n; i++){
119867         /* TODO(shess) This needs expansion to handle UTF-8
119868         ** case-insensitivity.
119869         */
119870         unsigned char ch = p[iStartOffset+i];
119871         c->pToken[i] = (char)((ch>='A' && ch<='Z') ? ch-'A'+'a' : ch);
119872       }
119873       *ppToken = c->pToken;
119874       *pnBytes = n;
119875       *piStartOffset = iStartOffset;
119876       *piEndOffset = c->iOffset;
119877       *piPosition = c->iToken++;
119878
119879       return SQLITE_OK;
119880     }
119881   }
119882   return SQLITE_DONE;
119883 }
119884
119885 /*
119886 ** The set of routines that implement the simple tokenizer
119887 */
119888 static const sqlite3_tokenizer_module simpleTokenizerModule = {
119889   0,
119890   simpleCreate,
119891   simpleDestroy,
119892   simpleOpen,
119893   simpleClose,
119894   simpleNext,
119895 };
119896
119897 /*
119898 ** Allocate a new simple tokenizer.  Return a pointer to the new
119899 ** tokenizer in *ppModule
119900 */
119901 SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(
119902   sqlite3_tokenizer_module const**ppModule
119903 ){
119904   *ppModule = &simpleTokenizerModule;
119905 }
119906
119907 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
119908
119909 /************** End of fts3_tokenizer1.c *************************************/
119910 /************** Begin file fts3_write.c **************************************/
119911 /*
119912 ** 2009 Oct 23
119913 **
119914 ** The author disclaims copyright to this source code.  In place of
119915 ** a legal notice, here is a blessing:
119916 **
119917 **    May you do good and not evil.
119918 **    May you find forgiveness for yourself and forgive others.
119919 **    May you share freely, never taking more than you give.
119920 **
119921 ******************************************************************************
119922 **
119923 ** This file is part of the SQLite FTS3 extension module. Specifically,
119924 ** this file contains code to insert, update and delete rows from FTS3
119925 ** tables. It also contains code to merge FTS3 b-tree segments. Some
119926 ** of the sub-routines used to merge segments are also used by the query 
119927 ** code in fts3.c.
119928 */
119929
119930 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
119931
119932
119933 /*
119934 ** When full-text index nodes are loaded from disk, the buffer that they
119935 ** are loaded into has the following number of bytes of padding at the end 
119936 ** of it. i.e. if a full-text index node is 900 bytes in size, then a buffer
119937 ** of 920 bytes is allocated for it.
119938 **
119939 ** This means that if we have a pointer into a buffer containing node data,
119940 ** it is always safe to read up to two varints from it without risking an
119941 ** overread, even if the node data is corrupted.
119942 */
119943 #define FTS3_NODE_PADDING (FTS3_VARINT_MAX*2)
119944
119945 typedef struct PendingList PendingList;
119946 typedef struct SegmentNode SegmentNode;
119947 typedef struct SegmentWriter SegmentWriter;
119948
119949 /*
119950 ** Data structure used while accumulating terms in the pending-terms hash
119951 ** table. The hash table entry maps from term (a string) to a malloc'd
119952 ** instance of this structure.
119953 */
119954 struct PendingList {
119955   int nData;
119956   char *aData;
119957   int nSpace;
119958   sqlite3_int64 iLastDocid;
119959   sqlite3_int64 iLastCol;
119960   sqlite3_int64 iLastPos;
119961 };
119962
119963
119964 /*
119965 ** Each cursor has a (possibly empty) linked list of the following objects.
119966 */
119967 struct Fts3DeferredToken {
119968   Fts3PhraseToken *pToken;        /* Pointer to corresponding expr token */
119969   int iCol;                       /* Column token must occur in */
119970   Fts3DeferredToken *pNext;       /* Next in list of deferred tokens */
119971   PendingList *pList;             /* Doclist is assembled here */
119972 };
119973
119974 /*
119975 ** An instance of this structure is used to iterate through the terms on
119976 ** a contiguous set of segment b-tree leaf nodes. Although the details of
119977 ** this structure are only manipulated by code in this file, opaque handles
119978 ** of type Fts3SegReader* are also used by code in fts3.c to iterate through
119979 ** terms when querying the full-text index. See functions:
119980 **
119981 **   sqlite3Fts3SegReaderNew()
119982 **   sqlite3Fts3SegReaderFree()
119983 **   sqlite3Fts3SegReaderCost()
119984 **   sqlite3Fts3SegReaderIterate()
119985 **
119986 ** Methods used to manipulate Fts3SegReader structures:
119987 **
119988 **   fts3SegReaderNext()
119989 **   fts3SegReaderFirstDocid()
119990 **   fts3SegReaderNextDocid()
119991 */
119992 struct Fts3SegReader {
119993   int iIdx;                       /* Index within level, or 0x7FFFFFFF for PT */
119994
119995   sqlite3_int64 iStartBlock;      /* Rowid of first leaf block to traverse */
119996   sqlite3_int64 iLeafEndBlock;    /* Rowid of final leaf block to traverse */
119997   sqlite3_int64 iEndBlock;        /* Rowid of final block in segment (or 0) */
119998   sqlite3_int64 iCurrentBlock;    /* Current leaf block (or 0) */
119999
120000   char *aNode;                    /* Pointer to node data (or NULL) */
120001   int nNode;                      /* Size of buffer at aNode (or 0) */
120002   Fts3HashElem **ppNextElem;
120003
120004   /* Variables set by fts3SegReaderNext(). These may be read directly
120005   ** by the caller. They are valid from the time SegmentReaderNew() returns
120006   ** until SegmentReaderNext() returns something other than SQLITE_OK
120007   ** (i.e. SQLITE_DONE).
120008   */
120009   int nTerm;                      /* Number of bytes in current term */
120010   char *zTerm;                    /* Pointer to current term */
120011   int nTermAlloc;                 /* Allocated size of zTerm buffer */
120012   char *aDoclist;                 /* Pointer to doclist of current entry */
120013   int nDoclist;                   /* Size of doclist in current entry */
120014
120015   /* The following variables are used to iterate through the current doclist */
120016   char *pOffsetList;
120017   sqlite3_int64 iDocid;
120018 };
120019
120020 #define fts3SegReaderIsPending(p) ((p)->ppNextElem!=0)
120021 #define fts3SegReaderIsRootOnly(p) ((p)->aNode==(char *)&(p)[1])
120022
120023 /*
120024 ** An instance of this structure is used to create a segment b-tree in the
120025 ** database. The internal details of this type are only accessed by the
120026 ** following functions:
120027 **
120028 **   fts3SegWriterAdd()
120029 **   fts3SegWriterFlush()
120030 **   fts3SegWriterFree()
120031 */
120032 struct SegmentWriter {
120033   SegmentNode *pTree;             /* Pointer to interior tree structure */
120034   sqlite3_int64 iFirst;           /* First slot in %_segments written */
120035   sqlite3_int64 iFree;            /* Next free slot in %_segments */
120036   char *zTerm;                    /* Pointer to previous term buffer */
120037   int nTerm;                      /* Number of bytes in zTerm */
120038   int nMalloc;                    /* Size of malloc'd buffer at zMalloc */
120039   char *zMalloc;                  /* Malloc'd space (possibly) used for zTerm */
120040   int nSize;                      /* Size of allocation at aData */
120041   int nData;                      /* Bytes of data in aData */
120042   char *aData;                    /* Pointer to block from malloc() */
120043 };
120044
120045 /*
120046 ** Type SegmentNode is used by the following three functions to create
120047 ** the interior part of the segment b+-tree structures (everything except
120048 ** the leaf nodes). These functions and type are only ever used by code
120049 ** within the fts3SegWriterXXX() family of functions described above.
120050 **
120051 **   fts3NodeAddTerm()
120052 **   fts3NodeWrite()
120053 **   fts3NodeFree()
120054 */
120055 struct SegmentNode {
120056   SegmentNode *pParent;           /* Parent node (or NULL for root node) */
120057   SegmentNode *pRight;            /* Pointer to right-sibling */
120058   SegmentNode *pLeftmost;         /* Pointer to left-most node of this depth */
120059   int nEntry;                     /* Number of terms written to node so far */
120060   char *zTerm;                    /* Pointer to previous term buffer */
120061   int nTerm;                      /* Number of bytes in zTerm */
120062   int nMalloc;                    /* Size of malloc'd buffer at zMalloc */
120063   char *zMalloc;                  /* Malloc'd space (possibly) used for zTerm */
120064   int nData;                      /* Bytes of valid data so far */
120065   char *aData;                    /* Node data */
120066 };
120067
120068 /*
120069 ** Valid values for the second argument to fts3SqlStmt().
120070 */
120071 #define SQL_DELETE_CONTENT             0
120072 #define SQL_IS_EMPTY                   1
120073 #define SQL_DELETE_ALL_CONTENT         2 
120074 #define SQL_DELETE_ALL_SEGMENTS        3
120075 #define SQL_DELETE_ALL_SEGDIR          4
120076 #define SQL_DELETE_ALL_DOCSIZE         5
120077 #define SQL_DELETE_ALL_STAT            6
120078 #define SQL_SELECT_CONTENT_BY_ROWID    7
120079 #define SQL_NEXT_SEGMENT_INDEX         8
120080 #define SQL_INSERT_SEGMENTS            9
120081 #define SQL_NEXT_SEGMENTS_ID          10
120082 #define SQL_INSERT_SEGDIR             11
120083 #define SQL_SELECT_LEVEL              12
120084 #define SQL_SELECT_ALL_LEVEL          13
120085 #define SQL_SELECT_LEVEL_COUNT        14
120086 #define SQL_SELECT_SEGDIR_COUNT_MAX   15
120087 #define SQL_DELETE_SEGDIR_BY_LEVEL    16
120088 #define SQL_DELETE_SEGMENTS_RANGE     17
120089 #define SQL_CONTENT_INSERT            18
120090 #define SQL_DELETE_DOCSIZE            19
120091 #define SQL_REPLACE_DOCSIZE           20
120092 #define SQL_SELECT_DOCSIZE            21
120093 #define SQL_SELECT_DOCTOTAL           22
120094 #define SQL_REPLACE_DOCTOTAL          23
120095
120096 /*
120097 ** This function is used to obtain an SQLite prepared statement handle
120098 ** for the statement identified by the second argument. If successful,
120099 ** *pp is set to the requested statement handle and SQLITE_OK returned.
120100 ** Otherwise, an SQLite error code is returned and *pp is set to 0.
120101 **
120102 ** If argument apVal is not NULL, then it must point to an array with
120103 ** at least as many entries as the requested statement has bound 
120104 ** parameters. The values are bound to the statements parameters before
120105 ** returning.
120106 */
120107 static int fts3SqlStmt(
120108   Fts3Table *p,                   /* Virtual table handle */
120109   int eStmt,                      /* One of the SQL_XXX constants above */
120110   sqlite3_stmt **pp,              /* OUT: Statement handle */
120111   sqlite3_value **apVal           /* Values to bind to statement */
120112 ){
120113   const char *azSql[] = {
120114 /* 0  */  "DELETE FROM %Q.'%q_content' WHERE rowid = ?",
120115 /* 1  */  "SELECT NOT EXISTS(SELECT docid FROM %Q.'%q_content' WHERE rowid!=?)",
120116 /* 2  */  "DELETE FROM %Q.'%q_content'",
120117 /* 3  */  "DELETE FROM %Q.'%q_segments'",
120118 /* 4  */  "DELETE FROM %Q.'%q_segdir'",
120119 /* 5  */  "DELETE FROM %Q.'%q_docsize'",
120120 /* 6  */  "DELETE FROM %Q.'%q_stat'",
120121 /* 7  */  "SELECT %s FROM %Q.'%q_content' AS x WHERE rowid=?",
120122 /* 8  */  "SELECT (SELECT max(idx) FROM %Q.'%q_segdir' WHERE level = ?) + 1",
120123 /* 9  */  "INSERT INTO %Q.'%q_segments'(blockid, block) VALUES(?, ?)",
120124 /* 10 */  "SELECT coalesce((SELECT max(blockid) FROM %Q.'%q_segments') + 1, 1)",
120125 /* 11 */  "INSERT INTO %Q.'%q_segdir' VALUES(?,?,?,?,?,?)",
120126
120127           /* Return segments in order from oldest to newest.*/ 
120128 /* 12 */  "SELECT idx, start_block, leaves_end_block, end_block, root "
120129             "FROM %Q.'%q_segdir' WHERE level = ? ORDER BY idx ASC",
120130 /* 13 */  "SELECT idx, start_block, leaves_end_block, end_block, root "
120131             "FROM %Q.'%q_segdir' ORDER BY level DESC, idx ASC",
120132
120133 /* 14 */  "SELECT count(*) FROM %Q.'%q_segdir' WHERE level = ?",
120134 /* 15 */  "SELECT count(*), max(level) FROM %Q.'%q_segdir'",
120135
120136 /* 16 */  "DELETE FROM %Q.'%q_segdir' WHERE level = ?",
120137 /* 17 */  "DELETE FROM %Q.'%q_segments' WHERE blockid BETWEEN ? AND ?",
120138 /* 18 */  "INSERT INTO %Q.'%q_content' VALUES(%s)",
120139 /* 19 */  "DELETE FROM %Q.'%q_docsize' WHERE docid = ?",
120140 /* 20 */  "REPLACE INTO %Q.'%q_docsize' VALUES(?,?)",
120141 /* 21 */  "SELECT size FROM %Q.'%q_docsize' WHERE docid=?",
120142 /* 22 */  "SELECT value FROM %Q.'%q_stat' WHERE id=0",
120143 /* 23 */  "REPLACE INTO %Q.'%q_stat' VALUES(0,?)",
120144   };
120145   int rc = SQLITE_OK;
120146   sqlite3_stmt *pStmt;
120147
120148   assert( SizeofArray(azSql)==SizeofArray(p->aStmt) );
120149   assert( eStmt<SizeofArray(azSql) && eStmt>=0 );
120150   
120151   pStmt = p->aStmt[eStmt];
120152   if( !pStmt ){
120153     char *zSql;
120154     if( eStmt==SQL_CONTENT_INSERT ){
120155       zSql = sqlite3_mprintf(azSql[eStmt], p->zDb, p->zName, p->zWriteExprlist);
120156     }else if( eStmt==SQL_SELECT_CONTENT_BY_ROWID ){
120157       zSql = sqlite3_mprintf(azSql[eStmt], p->zReadExprlist, p->zDb, p->zName);
120158     }else{
120159       zSql = sqlite3_mprintf(azSql[eStmt], p->zDb, p->zName);
120160     }
120161     if( !zSql ){
120162       rc = SQLITE_NOMEM;
120163     }else{
120164       rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, NULL);
120165       sqlite3_free(zSql);
120166       assert( rc==SQLITE_OK || pStmt==0 );
120167       p->aStmt[eStmt] = pStmt;
120168     }
120169   }
120170   if( apVal ){
120171     int i;
120172     int nParam = sqlite3_bind_parameter_count(pStmt);
120173     for(i=0; rc==SQLITE_OK && i<nParam; i++){
120174       rc = sqlite3_bind_value(pStmt, i+1, apVal[i]);
120175     }
120176   }
120177   *pp = pStmt;
120178   return rc;
120179 }
120180
120181 static int fts3SelectDocsize(
120182   Fts3Table *pTab,                /* FTS3 table handle */
120183   int eStmt,                      /* Either SQL_SELECT_DOCSIZE or DOCTOTAL */
120184   sqlite3_int64 iDocid,           /* Docid to bind for SQL_SELECT_DOCSIZE */
120185   sqlite3_stmt **ppStmt           /* OUT: Statement handle */
120186 ){
120187   sqlite3_stmt *pStmt = 0;        /* Statement requested from fts3SqlStmt() */
120188   int rc;                         /* Return code */
120189
120190   assert( eStmt==SQL_SELECT_DOCSIZE || eStmt==SQL_SELECT_DOCTOTAL );
120191
120192   rc = fts3SqlStmt(pTab, eStmt, &pStmt, 0);
120193   if( rc==SQLITE_OK ){
120194     if( eStmt==SQL_SELECT_DOCSIZE ){
120195       sqlite3_bind_int64(pStmt, 1, iDocid);
120196     }
120197     rc = sqlite3_step(pStmt);
120198     if( rc!=SQLITE_ROW || sqlite3_column_type(pStmt, 0)!=SQLITE_BLOB ){
120199       rc = sqlite3_reset(pStmt);
120200       if( rc==SQLITE_OK ) rc = SQLITE_CORRUPT;
120201       pStmt = 0;
120202     }else{
120203       rc = SQLITE_OK;
120204     }
120205   }
120206
120207   *ppStmt = pStmt;
120208   return rc;
120209 }
120210
120211 SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal(
120212   Fts3Table *pTab,                /* Fts3 table handle */
120213   sqlite3_stmt **ppStmt           /* OUT: Statement handle */
120214 ){
120215   return fts3SelectDocsize(pTab, SQL_SELECT_DOCTOTAL, 0, ppStmt);
120216 }
120217
120218 SQLITE_PRIVATE int sqlite3Fts3SelectDocsize(
120219   Fts3Table *pTab,                /* Fts3 table handle */
120220   sqlite3_int64 iDocid,           /* Docid to read size data for */
120221   sqlite3_stmt **ppStmt           /* OUT: Statement handle */
120222 ){
120223   return fts3SelectDocsize(pTab, SQL_SELECT_DOCSIZE, iDocid, ppStmt);
120224 }
120225
120226 /*
120227 ** Similar to fts3SqlStmt(). Except, after binding the parameters in
120228 ** array apVal[] to the SQL statement identified by eStmt, the statement
120229 ** is executed.
120230 **
120231 ** Returns SQLITE_OK if the statement is successfully executed, or an
120232 ** SQLite error code otherwise.
120233 */
120234 static void fts3SqlExec(
120235   int *pRC,                /* Result code */
120236   Fts3Table *p,            /* The FTS3 table */
120237   int eStmt,               /* Index of statement to evaluate */
120238   sqlite3_value **apVal    /* Parameters to bind */
120239 ){
120240   sqlite3_stmt *pStmt;
120241   int rc;
120242   if( *pRC ) return;
120243   rc = fts3SqlStmt(p, eStmt, &pStmt, apVal); 
120244   if( rc==SQLITE_OK ){
120245     sqlite3_step(pStmt);
120246     rc = sqlite3_reset(pStmt);
120247   }
120248   *pRC = rc;
120249 }
120250
120251
120252 /*
120253 ** This function ensures that the caller has obtained a shared-cache
120254 ** table-lock on the %_content table. This is required before reading
120255 ** data from the fts3 table. If this lock is not acquired first, then
120256 ** the caller may end up holding read-locks on the %_segments and %_segdir
120257 ** tables, but no read-lock on the %_content table. If this happens 
120258 ** a second connection will be able to write to the fts3 table, but
120259 ** attempting to commit those writes might return SQLITE_LOCKED or
120260 ** SQLITE_LOCKED_SHAREDCACHE (because the commit attempts to obtain 
120261 ** write-locks on the %_segments and %_segdir ** tables). 
120262 **
120263 ** We try to avoid this because if FTS3 returns any error when committing
120264 ** a transaction, the whole transaction will be rolled back. And this is
120265 ** not what users expect when they get SQLITE_LOCKED_SHAREDCACHE. It can
120266 ** still happen if the user reads data directly from the %_segments or
120267 ** %_segdir tables instead of going through FTS3 though.
120268 */
120269 SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *p){
120270   int rc;                         /* Return code */
120271   sqlite3_stmt *pStmt;            /* Statement used to obtain lock */
120272
120273   rc = fts3SqlStmt(p, SQL_SELECT_CONTENT_BY_ROWID, &pStmt, 0);
120274   if( rc==SQLITE_OK ){
120275     sqlite3_bind_null(pStmt, 1);
120276     sqlite3_step(pStmt);
120277     rc = sqlite3_reset(pStmt);
120278   }
120279   return rc;
120280 }
120281
120282 /*
120283 ** Set *ppStmt to a statement handle that may be used to iterate through
120284 ** all rows in the %_segdir table, from oldest to newest. If successful,
120285 ** return SQLITE_OK. If an error occurs while preparing the statement, 
120286 ** return an SQLite error code.
120287 **
120288 ** There is only ever one instance of this SQL statement compiled for
120289 ** each FTS3 table.
120290 **
120291 ** The statement returns the following columns from the %_segdir table:
120292 **
120293 **   0: idx
120294 **   1: start_block
120295 **   2: leaves_end_block
120296 **   3: end_block
120297 **   4: root
120298 */
120299 SQLITE_PRIVATE int sqlite3Fts3AllSegdirs(Fts3Table *p, int iLevel, sqlite3_stmt **ppStmt){
120300   int rc;
120301   sqlite3_stmt *pStmt = 0;
120302   if( iLevel<0 ){
120303     rc = fts3SqlStmt(p, SQL_SELECT_ALL_LEVEL, &pStmt, 0);
120304   }else{
120305     rc = fts3SqlStmt(p, SQL_SELECT_LEVEL, &pStmt, 0);
120306     if( rc==SQLITE_OK ) sqlite3_bind_int(pStmt, 1, iLevel);
120307   }
120308   *ppStmt = pStmt;
120309   return rc;
120310 }
120311
120312
120313 /*
120314 ** Append a single varint to a PendingList buffer. SQLITE_OK is returned
120315 ** if successful, or an SQLite error code otherwise.
120316 **
120317 ** This function also serves to allocate the PendingList structure itself.
120318 ** For example, to create a new PendingList structure containing two
120319 ** varints:
120320 **
120321 **   PendingList *p = 0;
120322 **   fts3PendingListAppendVarint(&p, 1);
120323 **   fts3PendingListAppendVarint(&p, 2);
120324 */
120325 static int fts3PendingListAppendVarint(
120326   PendingList **pp,               /* IN/OUT: Pointer to PendingList struct */
120327   sqlite3_int64 i                 /* Value to append to data */
120328 ){
120329   PendingList *p = *pp;
120330
120331   /* Allocate or grow the PendingList as required. */
120332   if( !p ){
120333     p = sqlite3_malloc(sizeof(*p) + 100);
120334     if( !p ){
120335       return SQLITE_NOMEM;
120336     }
120337     p->nSpace = 100;
120338     p->aData = (char *)&p[1];
120339     p->nData = 0;
120340   }
120341   else if( p->nData+FTS3_VARINT_MAX+1>p->nSpace ){
120342     int nNew = p->nSpace * 2;
120343     p = sqlite3_realloc(p, sizeof(*p) + nNew);
120344     if( !p ){
120345       sqlite3_free(*pp);
120346       *pp = 0;
120347       return SQLITE_NOMEM;
120348     }
120349     p->nSpace = nNew;
120350     p->aData = (char *)&p[1];
120351   }
120352
120353   /* Append the new serialized varint to the end of the list. */
120354   p->nData += sqlite3Fts3PutVarint(&p->aData[p->nData], i);
120355   p->aData[p->nData] = '\0';
120356   *pp = p;
120357   return SQLITE_OK;
120358 }
120359
120360 /*
120361 ** Add a docid/column/position entry to a PendingList structure. Non-zero
120362 ** is returned if the structure is sqlite3_realloced as part of adding
120363 ** the entry. Otherwise, zero.
120364 **
120365 ** If an OOM error occurs, *pRc is set to SQLITE_NOMEM before returning.
120366 ** Zero is always returned in this case. Otherwise, if no OOM error occurs,
120367 ** it is set to SQLITE_OK.
120368 */
120369 static int fts3PendingListAppend(
120370   PendingList **pp,               /* IN/OUT: PendingList structure */
120371   sqlite3_int64 iDocid,           /* Docid for entry to add */
120372   sqlite3_int64 iCol,             /* Column for entry to add */
120373   sqlite3_int64 iPos,             /* Position of term for entry to add */
120374   int *pRc                        /* OUT: Return code */
120375 ){
120376   PendingList *p = *pp;
120377   int rc = SQLITE_OK;
120378
120379   assert( !p || p->iLastDocid<=iDocid );
120380
120381   if( !p || p->iLastDocid!=iDocid ){
120382     sqlite3_int64 iDelta = iDocid - (p ? p->iLastDocid : 0);
120383     if( p ){
120384       assert( p->nData<p->nSpace );
120385       assert( p->aData[p->nData]==0 );
120386       p->nData++;
120387     }
120388     if( SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, iDelta)) ){
120389       goto pendinglistappend_out;
120390     }
120391     p->iLastCol = -1;
120392     p->iLastPos = 0;
120393     p->iLastDocid = iDocid;
120394   }
120395   if( iCol>0 && p->iLastCol!=iCol ){
120396     if( SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, 1))
120397      || SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, iCol))
120398     ){
120399       goto pendinglistappend_out;
120400     }
120401     p->iLastCol = iCol;
120402     p->iLastPos = 0;
120403   }
120404   if( iCol>=0 ){
120405     assert( iPos>p->iLastPos || (iPos==0 && p->iLastPos==0) );
120406     rc = fts3PendingListAppendVarint(&p, 2+iPos-p->iLastPos);
120407     if( rc==SQLITE_OK ){
120408       p->iLastPos = iPos;
120409     }
120410   }
120411
120412  pendinglistappend_out:
120413   *pRc = rc;
120414   if( p!=*pp ){
120415     *pp = p;
120416     return 1;
120417   }
120418   return 0;
120419 }
120420
120421 /*
120422 ** Tokenize the nul-terminated string zText and add all tokens to the
120423 ** pending-terms hash-table. The docid used is that currently stored in
120424 ** p->iPrevDocid, and the column is specified by argument iCol.
120425 **
120426 ** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code.
120427 */
120428 static int fts3PendingTermsAdd(
120429   Fts3Table *p,                   /* Table into which text will be inserted */
120430   const char *zText,              /* Text of document to be inserted */
120431   int iCol,                       /* Column into which text is being inserted */
120432   u32 *pnWord                     /* OUT: Number of tokens inserted */
120433 ){
120434   int rc;
120435   int iStart;
120436   int iEnd;
120437   int iPos;
120438   int nWord = 0;
120439
120440   char const *zToken;
120441   int nToken;
120442
120443   sqlite3_tokenizer *pTokenizer = p->pTokenizer;
120444   sqlite3_tokenizer_module const *pModule = pTokenizer->pModule;
120445   sqlite3_tokenizer_cursor *pCsr;
120446   int (*xNext)(sqlite3_tokenizer_cursor *pCursor,
120447       const char**,int*,int*,int*,int*);
120448
120449   assert( pTokenizer && pModule );
120450
120451   rc = pModule->xOpen(pTokenizer, zText, -1, &pCsr);
120452   if( rc!=SQLITE_OK ){
120453     return rc;
120454   }
120455   pCsr->pTokenizer = pTokenizer;
120456
120457   xNext = pModule->xNext;
120458   while( SQLITE_OK==rc
120459       && SQLITE_OK==(rc = xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos))
120460   ){
120461     PendingList *pList;
120462  
120463     if( iPos>=nWord ) nWord = iPos+1;
120464
120465     /* Positions cannot be negative; we use -1 as a terminator internally.
120466     ** Tokens must have a non-zero length.
120467     */
120468     if( iPos<0 || !zToken || nToken<=0 ){
120469       rc = SQLITE_ERROR;
120470       break;
120471     }
120472
120473     pList = (PendingList *)fts3HashFind(&p->pendingTerms, zToken, nToken);
120474     if( pList ){
120475       p->nPendingData -= (pList->nData + nToken + sizeof(Fts3HashElem));
120476     }
120477     if( fts3PendingListAppend(&pList, p->iPrevDocid, iCol, iPos, &rc) ){
120478       if( pList==fts3HashInsert(&p->pendingTerms, zToken, nToken, pList) ){
120479         /* Malloc failed while inserting the new entry. This can only 
120480         ** happen if there was no previous entry for this token.
120481         */
120482         assert( 0==fts3HashFind(&p->pendingTerms, zToken, nToken) );
120483         sqlite3_free(pList);
120484         rc = SQLITE_NOMEM;
120485       }
120486     }
120487     if( rc==SQLITE_OK ){
120488       p->nPendingData += (pList->nData + nToken + sizeof(Fts3HashElem));
120489     }
120490   }
120491
120492   pModule->xClose(pCsr);
120493   *pnWord = nWord;
120494   return (rc==SQLITE_DONE ? SQLITE_OK : rc);
120495 }
120496
120497 /* 
120498 ** Calling this function indicates that subsequent calls to 
120499 ** fts3PendingTermsAdd() are to add term/position-list pairs for the
120500 ** contents of the document with docid iDocid.
120501 */
120502 static int fts3PendingTermsDocid(Fts3Table *p, sqlite_int64 iDocid){
120503   /* TODO(shess) Explore whether partially flushing the buffer on
120504   ** forced-flush would provide better performance.  I suspect that if
120505   ** we ordered the doclists by size and flushed the largest until the
120506   ** buffer was half empty, that would let the less frequent terms
120507   ** generate longer doclists.
120508   */
120509   if( iDocid<=p->iPrevDocid || p->nPendingData>p->nMaxPendingData ){
120510     int rc = sqlite3Fts3PendingTermsFlush(p);
120511     if( rc!=SQLITE_OK ) return rc;
120512   }
120513   p->iPrevDocid = iDocid;
120514   return SQLITE_OK;
120515 }
120516
120517 /*
120518 ** Discard the contents of the pending-terms hash table. 
120519 */
120520 SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *p){
120521   Fts3HashElem *pElem;
120522   for(pElem=fts3HashFirst(&p->pendingTerms); pElem; pElem=fts3HashNext(pElem)){
120523     sqlite3_free(fts3HashData(pElem));
120524   }
120525   fts3HashClear(&p->pendingTerms);
120526   p->nPendingData = 0;
120527 }
120528
120529 /*
120530 ** This function is called by the xUpdate() method as part of an INSERT
120531 ** operation. It adds entries for each term in the new record to the
120532 ** pendingTerms hash table.
120533 **
120534 ** Argument apVal is the same as the similarly named argument passed to
120535 ** fts3InsertData(). Parameter iDocid is the docid of the new row.
120536 */
120537 static int fts3InsertTerms(Fts3Table *p, sqlite3_value **apVal, u32 *aSz){
120538   int i;                          /* Iterator variable */
120539   for(i=2; i<p->nColumn+2; i++){
120540     const char *zText = (const char *)sqlite3_value_text(apVal[i]);
120541     if( zText ){
120542       int rc = fts3PendingTermsAdd(p, zText, i-2, &aSz[i-2]);
120543       if( rc!=SQLITE_OK ){
120544         return rc;
120545       }
120546     }
120547     aSz[p->nColumn] += sqlite3_value_bytes(apVal[i]);
120548   }
120549   return SQLITE_OK;
120550 }
120551
120552 /*
120553 ** This function is called by the xUpdate() method for an INSERT operation.
120554 ** The apVal parameter is passed a copy of the apVal argument passed by
120555 ** SQLite to the xUpdate() method. i.e:
120556 **
120557 **   apVal[0]                Not used for INSERT.
120558 **   apVal[1]                rowid
120559 **   apVal[2]                Left-most user-defined column
120560 **   ...
120561 **   apVal[p->nColumn+1]     Right-most user-defined column
120562 **   apVal[p->nColumn+2]     Hidden column with same name as table
120563 **   apVal[p->nColumn+3]     Hidden "docid" column (alias for rowid)
120564 */
120565 static int fts3InsertData(
120566   Fts3Table *p,                   /* Full-text table */
120567   sqlite3_value **apVal,          /* Array of values to insert */
120568   sqlite3_int64 *piDocid          /* OUT: Docid for row just inserted */
120569 ){
120570   int rc;                         /* Return code */
120571   sqlite3_stmt *pContentInsert;   /* INSERT INTO %_content VALUES(...) */
120572
120573   /* Locate the statement handle used to insert data into the %_content
120574   ** table. The SQL for this statement is:
120575   **
120576   **   INSERT INTO %_content VALUES(?, ?, ?, ...)
120577   **
120578   ** The statement features N '?' variables, where N is the number of user
120579   ** defined columns in the FTS3 table, plus one for the docid field.
120580   */
120581   rc = fts3SqlStmt(p, SQL_CONTENT_INSERT, &pContentInsert, &apVal[1]);
120582   if( rc!=SQLITE_OK ){
120583     return rc;
120584   }
120585
120586   /* There is a quirk here. The users INSERT statement may have specified
120587   ** a value for the "rowid" field, for the "docid" field, or for both.
120588   ** Which is a problem, since "rowid" and "docid" are aliases for the
120589   ** same value. For example:
120590   **
120591   **   INSERT INTO fts3tbl(rowid, docid) VALUES(1, 2);
120592   **
120593   ** In FTS3, this is an error. It is an error to specify non-NULL values
120594   ** for both docid and some other rowid alias.
120595   */
120596   if( SQLITE_NULL!=sqlite3_value_type(apVal[3+p->nColumn]) ){
120597     if( SQLITE_NULL==sqlite3_value_type(apVal[0])
120598      && SQLITE_NULL!=sqlite3_value_type(apVal[1])
120599     ){
120600       /* A rowid/docid conflict. */
120601       return SQLITE_ERROR;
120602     }
120603     rc = sqlite3_bind_value(pContentInsert, 1, apVal[3+p->nColumn]);
120604     if( rc!=SQLITE_OK ) return rc;
120605   }
120606
120607   /* Execute the statement to insert the record. Set *piDocid to the 
120608   ** new docid value. 
120609   */
120610   sqlite3_step(pContentInsert);
120611   rc = sqlite3_reset(pContentInsert);
120612
120613   *piDocid = sqlite3_last_insert_rowid(p->db);
120614   return rc;
120615 }
120616
120617
120618
120619 /*
120620 ** Remove all data from the FTS3 table. Clear the hash table containing
120621 ** pending terms.
120622 */
120623 static int fts3DeleteAll(Fts3Table *p){
120624   int rc = SQLITE_OK;             /* Return code */
120625
120626   /* Discard the contents of the pending-terms hash table. */
120627   sqlite3Fts3PendingTermsClear(p);
120628
120629   /* Delete everything from the %_content, %_segments and %_segdir tables. */
120630   fts3SqlExec(&rc, p, SQL_DELETE_ALL_CONTENT, 0);
120631   fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGMENTS, 0);
120632   fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGDIR, 0);
120633   if( p->bHasDocsize ){
120634     fts3SqlExec(&rc, p, SQL_DELETE_ALL_DOCSIZE, 0);
120635   }
120636   if( p->bHasStat ){
120637     fts3SqlExec(&rc, p, SQL_DELETE_ALL_STAT, 0);
120638   }
120639   return rc;
120640 }
120641
120642 /*
120643 ** The first element in the apVal[] array is assumed to contain the docid
120644 ** (an integer) of a row about to be deleted. Remove all terms from the
120645 ** full-text index.
120646 */
120647 static void fts3DeleteTerms( 
120648   int *pRC,               /* Result code */
120649   Fts3Table *p,           /* The FTS table to delete from */
120650   sqlite3_value **apVal,  /* apVal[] contains the docid to be deleted */
120651   u32 *aSz                /* Sizes of deleted document written here */
120652 ){
120653   int rc;
120654   sqlite3_stmt *pSelect;
120655
120656   if( *pRC ) return;
120657   rc = fts3SqlStmt(p, SQL_SELECT_CONTENT_BY_ROWID, &pSelect, apVal);
120658   if( rc==SQLITE_OK ){
120659     if( SQLITE_ROW==sqlite3_step(pSelect) ){
120660       int i;
120661       for(i=1; i<=p->nColumn; i++){
120662         const char *zText = (const char *)sqlite3_column_text(pSelect, i);
120663         rc = fts3PendingTermsAdd(p, zText, -1, &aSz[i-1]);
120664         if( rc!=SQLITE_OK ){
120665           sqlite3_reset(pSelect);
120666           *pRC = rc;
120667           return;
120668         }
120669         aSz[p->nColumn] += sqlite3_column_bytes(pSelect, i);
120670       }
120671     }
120672     rc = sqlite3_reset(pSelect);
120673   }else{
120674     sqlite3_reset(pSelect);
120675   }
120676   *pRC = rc;
120677 }
120678
120679 /*
120680 ** Forward declaration to account for the circular dependency between
120681 ** functions fts3SegmentMerge() and fts3AllocateSegdirIdx().
120682 */
120683 static int fts3SegmentMerge(Fts3Table *, int);
120684
120685 /* 
120686 ** This function allocates a new level iLevel index in the segdir table.
120687 ** Usually, indexes are allocated within a level sequentially starting
120688 ** with 0, so the allocated index is one greater than the value returned
120689 ** by:
120690 **
120691 **   SELECT max(idx) FROM %_segdir WHERE level = :iLevel
120692 **
120693 ** However, if there are already FTS3_MERGE_COUNT indexes at the requested
120694 ** level, they are merged into a single level (iLevel+1) segment and the 
120695 ** allocated index is 0.
120696 **
120697 ** If successful, *piIdx is set to the allocated index slot and SQLITE_OK
120698 ** returned. Otherwise, an SQLite error code is returned.
120699 */
120700 static int fts3AllocateSegdirIdx(Fts3Table *p, int iLevel, int *piIdx){
120701   int rc;                         /* Return Code */
120702   sqlite3_stmt *pNextIdx;         /* Query for next idx at level iLevel */
120703   int iNext = 0;                  /* Result of query pNextIdx */
120704
120705   /* Set variable iNext to the next available segdir index at level iLevel. */
120706   rc = fts3SqlStmt(p, SQL_NEXT_SEGMENT_INDEX, &pNextIdx, 0);
120707   if( rc==SQLITE_OK ){
120708     sqlite3_bind_int(pNextIdx, 1, iLevel);
120709     if( SQLITE_ROW==sqlite3_step(pNextIdx) ){
120710       iNext = sqlite3_column_int(pNextIdx, 0);
120711     }
120712     rc = sqlite3_reset(pNextIdx);
120713   }
120714
120715   if( rc==SQLITE_OK ){
120716     /* If iNext is FTS3_MERGE_COUNT, indicating that level iLevel is already
120717     ** full, merge all segments in level iLevel into a single iLevel+1
120718     ** segment and allocate (newly freed) index 0 at level iLevel. Otherwise,
120719     ** if iNext is less than FTS3_MERGE_COUNT, allocate index iNext.
120720     */
120721     if( iNext>=FTS3_MERGE_COUNT ){
120722       rc = fts3SegmentMerge(p, iLevel);
120723       *piIdx = 0;
120724     }else{
120725       *piIdx = iNext;
120726     }
120727   }
120728
120729   return rc;
120730 }
120731
120732 /*
120733 ** The %_segments table is declared as follows:
120734 **
120735 **   CREATE TABLE %_segments(blockid INTEGER PRIMARY KEY, block BLOB)
120736 **
120737 ** This function reads data from a single row of the %_segments table. The
120738 ** specific row is identified by the iBlockid parameter. If paBlob is not
120739 ** NULL, then a buffer is allocated using sqlite3_malloc() and populated
120740 ** with the contents of the blob stored in the "block" column of the 
120741 ** identified table row is. Whether or not paBlob is NULL, *pnBlob is set
120742 ** to the size of the blob in bytes before returning.
120743 **
120744 ** If an error occurs, or the table does not contain the specified row,
120745 ** an SQLite error code is returned. Otherwise, SQLITE_OK is returned. If
120746 ** paBlob is non-NULL, then it is the responsibility of the caller to
120747 ** eventually free the returned buffer.
120748 **
120749 ** This function may leave an open sqlite3_blob* handle in the
120750 ** Fts3Table.pSegments variable. This handle is reused by subsequent calls
120751 ** to this function. The handle may be closed by calling the
120752 ** sqlite3Fts3SegmentsClose() function. Reusing a blob handle is a handy
120753 ** performance improvement, but the blob handle should always be closed
120754 ** before control is returned to the user (to prevent a lock being held
120755 ** on the database file for longer than necessary). Thus, any virtual table
120756 ** method (xFilter etc.) that may directly or indirectly call this function
120757 ** must call sqlite3Fts3SegmentsClose() before returning.
120758 */
120759 SQLITE_PRIVATE int sqlite3Fts3ReadBlock(
120760   Fts3Table *p,                   /* FTS3 table handle */
120761   sqlite3_int64 iBlockid,         /* Access the row with blockid=$iBlockid */
120762   char **paBlob,                  /* OUT: Blob data in malloc'd buffer */
120763   int *pnBlob                     /* OUT: Size of blob data */
120764 ){
120765   int rc;                         /* Return code */
120766
120767   /* pnBlob must be non-NULL. paBlob may be NULL or non-NULL. */
120768   assert( pnBlob);
120769
120770   if( p->pSegments ){
120771     rc = sqlite3_blob_reopen(p->pSegments, iBlockid);
120772   }else{
120773     if( 0==p->zSegmentsTbl ){
120774       p->zSegmentsTbl = sqlite3_mprintf("%s_segments", p->zName);
120775       if( 0==p->zSegmentsTbl ) return SQLITE_NOMEM;
120776     }
120777     rc = sqlite3_blob_open(
120778        p->db, p->zDb, p->zSegmentsTbl, "block", iBlockid, 0, &p->pSegments
120779     );
120780   }
120781
120782   if( rc==SQLITE_OK ){
120783     int nByte = sqlite3_blob_bytes(p->pSegments);
120784     if( paBlob ){
120785       char *aByte = sqlite3_malloc(nByte + FTS3_NODE_PADDING);
120786       if( !aByte ){
120787         rc = SQLITE_NOMEM;
120788       }else{
120789         rc = sqlite3_blob_read(p->pSegments, aByte, nByte, 0);
120790         memset(&aByte[nByte], 0, FTS3_NODE_PADDING);
120791         if( rc!=SQLITE_OK ){
120792           sqlite3_free(aByte);
120793           aByte = 0;
120794         }
120795       }
120796       *paBlob = aByte;
120797     }
120798     *pnBlob = nByte;
120799   }
120800
120801   return rc;
120802 }
120803
120804 /*
120805 ** Close the blob handle at p->pSegments, if it is open. See comments above
120806 ** the sqlite3Fts3ReadBlock() function for details.
120807 */
120808 SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *p){
120809   sqlite3_blob_close(p->pSegments);
120810   p->pSegments = 0;
120811 }
120812
120813 /*
120814 ** Move the iterator passed as the first argument to the next term in the
120815 ** segment. If successful, SQLITE_OK is returned. If there is no next term,
120816 ** SQLITE_DONE. Otherwise, an SQLite error code.
120817 */
120818 static int fts3SegReaderNext(Fts3Table *p, Fts3SegReader *pReader){
120819   char *pNext;                    /* Cursor variable */
120820   int nPrefix;                    /* Number of bytes in term prefix */
120821   int nSuffix;                    /* Number of bytes in term suffix */
120822
120823   if( !pReader->aDoclist ){
120824     pNext = pReader->aNode;
120825   }else{
120826     pNext = &pReader->aDoclist[pReader->nDoclist];
120827   }
120828
120829   if( !pNext || pNext>=&pReader->aNode[pReader->nNode] ){
120830     int rc;                       /* Return code from Fts3ReadBlock() */
120831
120832     if( fts3SegReaderIsPending(pReader) ){
120833       Fts3HashElem *pElem = *(pReader->ppNextElem);
120834       if( pElem==0 ){
120835         pReader->aNode = 0;
120836       }else{
120837         PendingList *pList = (PendingList *)fts3HashData(pElem);
120838         pReader->zTerm = (char *)fts3HashKey(pElem);
120839         pReader->nTerm = fts3HashKeysize(pElem);
120840         pReader->nNode = pReader->nDoclist = pList->nData + 1;
120841         pReader->aNode = pReader->aDoclist = pList->aData;
120842         pReader->ppNextElem++;
120843         assert( pReader->aNode );
120844       }
120845       return SQLITE_OK;
120846     }
120847
120848     if( !fts3SegReaderIsRootOnly(pReader) ){
120849       sqlite3_free(pReader->aNode);
120850     }
120851     pReader->aNode = 0;
120852
120853     /* If iCurrentBlock>=iLeafEndBlock, this is an EOF condition. All leaf 
120854     ** blocks have already been traversed.  */
120855     assert( pReader->iCurrentBlock<=pReader->iLeafEndBlock );
120856     if( pReader->iCurrentBlock>=pReader->iLeafEndBlock ){
120857       return SQLITE_OK;
120858     }
120859
120860     rc = sqlite3Fts3ReadBlock(
120861         p, ++pReader->iCurrentBlock, &pReader->aNode, &pReader->nNode
120862     );
120863     if( rc!=SQLITE_OK ) return rc;
120864     pNext = pReader->aNode;
120865   }
120866   
120867   /* Because of the FTS3_NODE_PADDING bytes of padding, the following is 
120868   ** safe (no risk of overread) even if the node data is corrupted.  
120869   */
120870   pNext += sqlite3Fts3GetVarint32(pNext, &nPrefix);
120871   pNext += sqlite3Fts3GetVarint32(pNext, &nSuffix);
120872   if( nPrefix<0 || nSuffix<=0 
120873    || &pNext[nSuffix]>&pReader->aNode[pReader->nNode] 
120874   ){
120875     return SQLITE_CORRUPT;
120876   }
120877
120878   if( nPrefix+nSuffix>pReader->nTermAlloc ){
120879     int nNew = (nPrefix+nSuffix)*2;
120880     char *zNew = sqlite3_realloc(pReader->zTerm, nNew);
120881     if( !zNew ){
120882       return SQLITE_NOMEM;
120883     }
120884     pReader->zTerm = zNew;
120885     pReader->nTermAlloc = nNew;
120886   }
120887   memcpy(&pReader->zTerm[nPrefix], pNext, nSuffix);
120888   pReader->nTerm = nPrefix+nSuffix;
120889   pNext += nSuffix;
120890   pNext += sqlite3Fts3GetVarint32(pNext, &pReader->nDoclist);
120891   pReader->aDoclist = pNext;
120892   pReader->pOffsetList = 0;
120893
120894   /* Check that the doclist does not appear to extend past the end of the
120895   ** b-tree node. And that the final byte of the doclist is 0x00. If either 
120896   ** of these statements is untrue, then the data structure is corrupt.
120897   */
120898   if( &pReader->aDoclist[pReader->nDoclist]>&pReader->aNode[pReader->nNode] 
120899    || pReader->aDoclist[pReader->nDoclist-1]
120900   ){
120901     return SQLITE_CORRUPT;
120902   }
120903   return SQLITE_OK;
120904 }
120905
120906 /*
120907 ** Set the SegReader to point to the first docid in the doclist associated
120908 ** with the current term.
120909 */
120910 static void fts3SegReaderFirstDocid(Fts3SegReader *pReader){
120911   int n;
120912   assert( pReader->aDoclist );
120913   assert( !pReader->pOffsetList );
120914   n = sqlite3Fts3GetVarint(pReader->aDoclist, &pReader->iDocid);
120915   pReader->pOffsetList = &pReader->aDoclist[n];
120916 }
120917
120918 /*
120919 ** Advance the SegReader to point to the next docid in the doclist
120920 ** associated with the current term.
120921 ** 
120922 ** If arguments ppOffsetList and pnOffsetList are not NULL, then 
120923 ** *ppOffsetList is set to point to the first column-offset list
120924 ** in the doclist entry (i.e. immediately past the docid varint).
120925 ** *pnOffsetList is set to the length of the set of column-offset
120926 ** lists, not including the nul-terminator byte. For example:
120927 */
120928 static void fts3SegReaderNextDocid(
120929   Fts3SegReader *pReader,
120930   char **ppOffsetList,
120931   int *pnOffsetList
120932 ){
120933   char *p = pReader->pOffsetList;
120934   char c = 0;
120935
120936   /* Pointer p currently points at the first byte of an offset list. The
120937   ** following two lines advance it to point one byte past the end of
120938   ** the same offset list.
120939   */
120940   while( *p | c ) c = *p++ & 0x80;
120941   p++;
120942
120943   /* If required, populate the output variables with a pointer to and the
120944   ** size of the previous offset-list.
120945   */
120946   if( ppOffsetList ){
120947     *ppOffsetList = pReader->pOffsetList;
120948     *pnOffsetList = (int)(p - pReader->pOffsetList - 1);
120949   }
120950
120951   /* If there are no more entries in the doclist, set pOffsetList to
120952   ** NULL. Otherwise, set Fts3SegReader.iDocid to the next docid and
120953   ** Fts3SegReader.pOffsetList to point to the next offset list before
120954   ** returning.
120955   */
120956   if( p>=&pReader->aDoclist[pReader->nDoclist] ){
120957     pReader->pOffsetList = 0;
120958   }else{
120959     sqlite3_int64 iDelta;
120960     pReader->pOffsetList = p + sqlite3Fts3GetVarint(p, &iDelta);
120961     pReader->iDocid += iDelta;
120962   }
120963 }
120964
120965 /*
120966 ** This function is called to estimate the amount of data that will be 
120967 ** loaded from the disk If SegReaderIterate() is called on this seg-reader,
120968 ** in units of average document size.
120969 ** 
120970 ** This can be used as follows: If the caller has a small doclist that 
120971 ** contains references to N documents, and is considering merging it with
120972 ** a large doclist (size X "average documents"), it may opt not to load
120973 ** the large doclist if X>N.
120974 */
120975 SQLITE_PRIVATE int sqlite3Fts3SegReaderCost(
120976   Fts3Cursor *pCsr,               /* FTS3 cursor handle */
120977   Fts3SegReader *pReader,         /* Segment-reader handle */
120978   int *pnCost                     /* IN/OUT: Number of bytes read */
120979 ){
120980   Fts3Table *p = (Fts3Table*)pCsr->base.pVtab;
120981   int rc = SQLITE_OK;             /* Return code */
120982   int nCost = 0;                  /* Cost in bytes to return */
120983   int pgsz = p->nPgsz;            /* Database page size */
120984
120985   /* If this seg-reader is reading the pending-terms table, or if all data
120986   ** for the segment is stored on the root page of the b-tree, then the cost
120987   ** is zero. In this case all required data is already in main memory.
120988   */
120989   if( p->bHasStat 
120990    && !fts3SegReaderIsPending(pReader) 
120991    && !fts3SegReaderIsRootOnly(pReader) 
120992   ){
120993     int nBlob = 0;
120994     sqlite3_int64 iBlock;
120995
120996     if( pCsr->nRowAvg==0 ){
120997       /* The average document size, which is required to calculate the cost
120998       ** of each doclist, has not yet been determined. Read the required 
120999       ** data from the %_stat table to calculate it.
121000       **
121001       ** Entry 0 of the %_stat table is a blob containing (nCol+1) FTS3 
121002       ** varints, where nCol is the number of columns in the FTS3 table.
121003       ** The first varint is the number of documents currently stored in
121004       ** the table. The following nCol varints contain the total amount of
121005       ** data stored in all rows of each column of the table, from left
121006       ** to right.
121007       */
121008       sqlite3_stmt *pStmt;
121009       sqlite3_int64 nDoc = 0;
121010       sqlite3_int64 nByte = 0;
121011       const char *pEnd;
121012       const char *a;
121013
121014       rc = sqlite3Fts3SelectDoctotal(p, &pStmt);
121015       if( rc!=SQLITE_OK ) return rc;
121016       a = sqlite3_column_blob(pStmt, 0);
121017       assert( a );
121018
121019       pEnd = &a[sqlite3_column_bytes(pStmt, 0)];
121020       a += sqlite3Fts3GetVarint(a, &nDoc);
121021       while( a<pEnd ){
121022         a += sqlite3Fts3GetVarint(a, &nByte);
121023       }
121024       if( nDoc==0 || nByte==0 ){
121025         sqlite3_reset(pStmt);
121026         return SQLITE_CORRUPT;
121027       }
121028
121029       pCsr->nRowAvg = (int)(((nByte / nDoc) + pgsz) / pgsz);
121030       assert( pCsr->nRowAvg>0 ); 
121031       rc = sqlite3_reset(pStmt);
121032       if( rc!=SQLITE_OK ) return rc;
121033     }
121034
121035     /* Assume that a blob flows over onto overflow pages if it is larger
121036     ** than (pgsz-35) bytes in size (the file-format documentation
121037     ** confirms this).
121038     */
121039     for(iBlock=pReader->iStartBlock; iBlock<=pReader->iLeafEndBlock; iBlock++){
121040       rc = sqlite3Fts3ReadBlock(p, iBlock, 0, &nBlob);
121041       if( rc!=SQLITE_OK ) break;
121042       if( (nBlob+35)>pgsz ){
121043         int nOvfl = (nBlob + 34)/pgsz;
121044         nCost += ((nOvfl + pCsr->nRowAvg - 1)/pCsr->nRowAvg);
121045       }
121046     }
121047   }
121048
121049   *pnCost += nCost;
121050   return rc;
121051 }
121052
121053 /*
121054 ** Free all allocations associated with the iterator passed as the 
121055 ** second argument.
121056 */
121057 SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *pReader){
121058   if( pReader && !fts3SegReaderIsPending(pReader) ){
121059     sqlite3_free(pReader->zTerm);
121060     if( !fts3SegReaderIsRootOnly(pReader) ){
121061       sqlite3_free(pReader->aNode);
121062     }
121063   }
121064   sqlite3_free(pReader);
121065 }
121066
121067 /*
121068 ** Allocate a new SegReader object.
121069 */
121070 SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(
121071   int iAge,                       /* Segment "age". */
121072   sqlite3_int64 iStartLeaf,       /* First leaf to traverse */
121073   sqlite3_int64 iEndLeaf,         /* Final leaf to traverse */
121074   sqlite3_int64 iEndBlock,        /* Final block of segment */
121075   const char *zRoot,              /* Buffer containing root node */
121076   int nRoot,                      /* Size of buffer containing root node */
121077   Fts3SegReader **ppReader        /* OUT: Allocated Fts3SegReader */
121078 ){
121079   int rc = SQLITE_OK;             /* Return code */
121080   Fts3SegReader *pReader;         /* Newly allocated SegReader object */
121081   int nExtra = 0;                 /* Bytes to allocate segment root node */
121082
121083   assert( iStartLeaf<=iEndLeaf );
121084   if( iStartLeaf==0 ){
121085     nExtra = nRoot + FTS3_NODE_PADDING;
121086   }
121087
121088   pReader = (Fts3SegReader *)sqlite3_malloc(sizeof(Fts3SegReader) + nExtra);
121089   if( !pReader ){
121090     return SQLITE_NOMEM;
121091   }
121092   memset(pReader, 0, sizeof(Fts3SegReader));
121093   pReader->iIdx = iAge;
121094   pReader->iStartBlock = iStartLeaf;
121095   pReader->iLeafEndBlock = iEndLeaf;
121096   pReader->iEndBlock = iEndBlock;
121097
121098   if( nExtra ){
121099     /* The entire segment is stored in the root node. */
121100     pReader->aNode = (char *)&pReader[1];
121101     pReader->nNode = nRoot;
121102     memcpy(pReader->aNode, zRoot, nRoot);
121103     memset(&pReader->aNode[nRoot], 0, FTS3_NODE_PADDING);
121104   }else{
121105     pReader->iCurrentBlock = iStartLeaf-1;
121106   }
121107
121108   if( rc==SQLITE_OK ){
121109     *ppReader = pReader;
121110   }else{
121111     sqlite3Fts3SegReaderFree(pReader);
121112   }
121113   return rc;
121114 }
121115
121116 /*
121117 ** This is a comparison function used as a qsort() callback when sorting
121118 ** an array of pending terms by term. This occurs as part of flushing
121119 ** the contents of the pending-terms hash table to the database.
121120 */
121121 static int fts3CompareElemByTerm(const void *lhs, const void *rhs){
121122   char *z1 = fts3HashKey(*(Fts3HashElem **)lhs);
121123   char *z2 = fts3HashKey(*(Fts3HashElem **)rhs);
121124   int n1 = fts3HashKeysize(*(Fts3HashElem **)lhs);
121125   int n2 = fts3HashKeysize(*(Fts3HashElem **)rhs);
121126
121127   int n = (n1<n2 ? n1 : n2);
121128   int c = memcmp(z1, z2, n);
121129   if( c==0 ){
121130     c = n1 - n2;
121131   }
121132   return c;
121133 }
121134
121135 /*
121136 ** This function is used to allocate an Fts3SegReader that iterates through
121137 ** a subset of the terms stored in the Fts3Table.pendingTerms array.
121138 */
121139 SQLITE_PRIVATE int sqlite3Fts3SegReaderPending(
121140   Fts3Table *p,                   /* Virtual table handle */
121141   const char *zTerm,              /* Term to search for */
121142   int nTerm,                      /* Size of buffer zTerm */
121143   int isPrefix,                   /* True for a term-prefix query */
121144   Fts3SegReader **ppReader        /* OUT: SegReader for pending-terms */
121145 ){
121146   Fts3SegReader *pReader = 0;     /* Fts3SegReader object to return */
121147   Fts3HashElem *pE;               /* Iterator variable */
121148   Fts3HashElem **aElem = 0;       /* Array of term hash entries to scan */
121149   int nElem = 0;                  /* Size of array at aElem */
121150   int rc = SQLITE_OK;             /* Return Code */
121151
121152   if( isPrefix ){
121153     int nAlloc = 0;               /* Size of allocated array at aElem */
121154
121155     for(pE=fts3HashFirst(&p->pendingTerms); pE; pE=fts3HashNext(pE)){
121156       char *zKey = (char *)fts3HashKey(pE);
121157       int nKey = fts3HashKeysize(pE);
121158       if( nTerm==0 || (nKey>=nTerm && 0==memcmp(zKey, zTerm, nTerm)) ){
121159         if( nElem==nAlloc ){
121160           Fts3HashElem **aElem2;
121161           nAlloc += 16;
121162           aElem2 = (Fts3HashElem **)sqlite3_realloc(
121163               aElem, nAlloc*sizeof(Fts3HashElem *)
121164           );
121165           if( !aElem2 ){
121166             rc = SQLITE_NOMEM;
121167             nElem = 0;
121168             break;
121169           }
121170           aElem = aElem2;
121171         }
121172         aElem[nElem++] = pE;
121173       }
121174     }
121175
121176     /* If more than one term matches the prefix, sort the Fts3HashElem
121177     ** objects in term order using qsort(). This uses the same comparison
121178     ** callback as is used when flushing terms to disk.
121179     */
121180     if( nElem>1 ){
121181       qsort(aElem, nElem, sizeof(Fts3HashElem *), fts3CompareElemByTerm);
121182     }
121183
121184   }else{
121185     pE = fts3HashFindElem(&p->pendingTerms, zTerm, nTerm);
121186     if( pE ){
121187       aElem = &pE;
121188       nElem = 1;
121189     }
121190   }
121191
121192   if( nElem>0 ){
121193     int nByte = sizeof(Fts3SegReader) + (nElem+1)*sizeof(Fts3HashElem *);
121194     pReader = (Fts3SegReader *)sqlite3_malloc(nByte);
121195     if( !pReader ){
121196       rc = SQLITE_NOMEM;
121197     }else{
121198       memset(pReader, 0, nByte);
121199       pReader->iIdx = 0x7FFFFFFF;
121200       pReader->ppNextElem = (Fts3HashElem **)&pReader[1];
121201       memcpy(pReader->ppNextElem, aElem, nElem*sizeof(Fts3HashElem *));
121202     }
121203   }
121204
121205   if( isPrefix ){
121206     sqlite3_free(aElem);
121207   }
121208   *ppReader = pReader;
121209   return rc;
121210 }
121211
121212 /*
121213 ** Compare the entries pointed to by two Fts3SegReader structures. 
121214 ** Comparison is as follows:
121215 **
121216 **   1) EOF is greater than not EOF.
121217 **
121218 **   2) The current terms (if any) are compared using memcmp(). If one
121219 **      term is a prefix of another, the longer term is considered the
121220 **      larger.
121221 **
121222 **   3) By segment age. An older segment is considered larger.
121223 */
121224 static int fts3SegReaderCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){
121225   int rc;
121226   if( pLhs->aNode && pRhs->aNode ){
121227     int rc2 = pLhs->nTerm - pRhs->nTerm;
121228     if( rc2<0 ){
121229       rc = memcmp(pLhs->zTerm, pRhs->zTerm, pLhs->nTerm);
121230     }else{
121231       rc = memcmp(pLhs->zTerm, pRhs->zTerm, pRhs->nTerm);
121232     }
121233     if( rc==0 ){
121234       rc = rc2;
121235     }
121236   }else{
121237     rc = (pLhs->aNode==0) - (pRhs->aNode==0);
121238   }
121239   if( rc==0 ){
121240     rc = pRhs->iIdx - pLhs->iIdx;
121241   }
121242   assert( rc!=0 );
121243   return rc;
121244 }
121245
121246 /*
121247 ** A different comparison function for SegReader structures. In this
121248 ** version, it is assumed that each SegReader points to an entry in
121249 ** a doclist for identical terms. Comparison is made as follows:
121250 **
121251 **   1) EOF (end of doclist in this case) is greater than not EOF.
121252 **
121253 **   2) By current docid.
121254 **
121255 **   3) By segment age. An older segment is considered larger.
121256 */
121257 static int fts3SegReaderDoclistCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){
121258   int rc = (pLhs->pOffsetList==0)-(pRhs->pOffsetList==0);
121259   if( rc==0 ){
121260     if( pLhs->iDocid==pRhs->iDocid ){
121261       rc = pRhs->iIdx - pLhs->iIdx;
121262     }else{
121263       rc = (pLhs->iDocid > pRhs->iDocid) ? 1 : -1;
121264     }
121265   }
121266   assert( pLhs->aNode && pRhs->aNode );
121267   return rc;
121268 }
121269
121270 /*
121271 ** Compare the term that the Fts3SegReader object passed as the first argument
121272 ** points to with the term specified by arguments zTerm and nTerm. 
121273 **
121274 ** If the pSeg iterator is already at EOF, return 0. Otherwise, return
121275 ** -ve if the pSeg term is less than zTerm/nTerm, 0 if the two terms are
121276 ** equal, or +ve if the pSeg term is greater than zTerm/nTerm.
121277 */
121278 static int fts3SegReaderTermCmp(
121279   Fts3SegReader *pSeg,            /* Segment reader object */
121280   const char *zTerm,              /* Term to compare to */
121281   int nTerm                       /* Size of term zTerm in bytes */
121282 ){
121283   int res = 0;
121284   if( pSeg->aNode ){
121285     if( pSeg->nTerm>nTerm ){
121286       res = memcmp(pSeg->zTerm, zTerm, nTerm);
121287     }else{
121288       res = memcmp(pSeg->zTerm, zTerm, pSeg->nTerm);
121289     }
121290     if( res==0 ){
121291       res = pSeg->nTerm-nTerm;
121292     }
121293   }
121294   return res;
121295 }
121296
121297 /*
121298 ** Argument apSegment is an array of nSegment elements. It is known that
121299 ** the final (nSegment-nSuspect) members are already in sorted order
121300 ** (according to the comparison function provided). This function shuffles
121301 ** the array around until all entries are in sorted order.
121302 */
121303 static void fts3SegReaderSort(
121304   Fts3SegReader **apSegment,                     /* Array to sort entries of */
121305   int nSegment,                                  /* Size of apSegment array */
121306   int nSuspect,                                  /* Unsorted entry count */
121307   int (*xCmp)(Fts3SegReader *, Fts3SegReader *)  /* Comparison function */
121308 ){
121309   int i;                          /* Iterator variable */
121310
121311   assert( nSuspect<=nSegment );
121312
121313   if( nSuspect==nSegment ) nSuspect--;
121314   for(i=nSuspect-1; i>=0; i--){
121315     int j;
121316     for(j=i; j<(nSegment-1); j++){
121317       Fts3SegReader *pTmp;
121318       if( xCmp(apSegment[j], apSegment[j+1])<0 ) break;
121319       pTmp = apSegment[j+1];
121320       apSegment[j+1] = apSegment[j];
121321       apSegment[j] = pTmp;
121322     }
121323   }
121324
121325 #ifndef NDEBUG
121326   /* Check that the list really is sorted now. */
121327   for(i=0; i<(nSuspect-1); i++){
121328     assert( xCmp(apSegment[i], apSegment[i+1])<0 );
121329   }
121330 #endif
121331 }
121332
121333 /* 
121334 ** Insert a record into the %_segments table.
121335 */
121336 static int fts3WriteSegment(
121337   Fts3Table *p,                   /* Virtual table handle */
121338   sqlite3_int64 iBlock,           /* Block id for new block */
121339   char *z,                        /* Pointer to buffer containing block data */
121340   int n                           /* Size of buffer z in bytes */
121341 ){
121342   sqlite3_stmt *pStmt;
121343   int rc = fts3SqlStmt(p, SQL_INSERT_SEGMENTS, &pStmt, 0);
121344   if( rc==SQLITE_OK ){
121345     sqlite3_bind_int64(pStmt, 1, iBlock);
121346     sqlite3_bind_blob(pStmt, 2, z, n, SQLITE_STATIC);
121347     sqlite3_step(pStmt);
121348     rc = sqlite3_reset(pStmt);
121349   }
121350   return rc;
121351 }
121352
121353 /* 
121354 ** Insert a record into the %_segdir table.
121355 */
121356 static int fts3WriteSegdir(
121357   Fts3Table *p,                   /* Virtual table handle */
121358   int iLevel,                     /* Value for "level" field */
121359   int iIdx,                       /* Value for "idx" field */
121360   sqlite3_int64 iStartBlock,      /* Value for "start_block" field */
121361   sqlite3_int64 iLeafEndBlock,    /* Value for "leaves_end_block" field */
121362   sqlite3_int64 iEndBlock,        /* Value for "end_block" field */
121363   char *zRoot,                    /* Blob value for "root" field */
121364   int nRoot                       /* Number of bytes in buffer zRoot */
121365 ){
121366   sqlite3_stmt *pStmt;
121367   int rc = fts3SqlStmt(p, SQL_INSERT_SEGDIR, &pStmt, 0);
121368   if( rc==SQLITE_OK ){
121369     sqlite3_bind_int(pStmt, 1, iLevel);
121370     sqlite3_bind_int(pStmt, 2, iIdx);
121371     sqlite3_bind_int64(pStmt, 3, iStartBlock);
121372     sqlite3_bind_int64(pStmt, 4, iLeafEndBlock);
121373     sqlite3_bind_int64(pStmt, 5, iEndBlock);
121374     sqlite3_bind_blob(pStmt, 6, zRoot, nRoot, SQLITE_STATIC);
121375     sqlite3_step(pStmt);
121376     rc = sqlite3_reset(pStmt);
121377   }
121378   return rc;
121379 }
121380
121381 /*
121382 ** Return the size of the common prefix (if any) shared by zPrev and
121383 ** zNext, in bytes. For example, 
121384 **
121385 **   fts3PrefixCompress("abc", 3, "abcdef", 6)   // returns 3
121386 **   fts3PrefixCompress("abX", 3, "abcdef", 6)   // returns 2
121387 **   fts3PrefixCompress("abX", 3, "Xbcdef", 6)   // returns 0
121388 */
121389 static int fts3PrefixCompress(
121390   const char *zPrev,              /* Buffer containing previous term */
121391   int nPrev,                      /* Size of buffer zPrev in bytes */
121392   const char *zNext,              /* Buffer containing next term */
121393   int nNext                       /* Size of buffer zNext in bytes */
121394 ){
121395   int n;
121396   UNUSED_PARAMETER(nNext);
121397   for(n=0; n<nPrev && zPrev[n]==zNext[n]; n++);
121398   return n;
121399 }
121400
121401 /*
121402 ** Add term zTerm to the SegmentNode. It is guaranteed that zTerm is larger
121403 ** (according to memcmp) than the previous term.
121404 */
121405 static int fts3NodeAddTerm(
121406   Fts3Table *p,                   /* Virtual table handle */
121407   SegmentNode **ppTree,           /* IN/OUT: SegmentNode handle */ 
121408   int isCopyTerm,                 /* True if zTerm/nTerm is transient */
121409   const char *zTerm,              /* Pointer to buffer containing term */
121410   int nTerm                       /* Size of term in bytes */
121411 ){
121412   SegmentNode *pTree = *ppTree;
121413   int rc;
121414   SegmentNode *pNew;
121415
121416   /* First try to append the term to the current node. Return early if 
121417   ** this is possible.
121418   */
121419   if( pTree ){
121420     int nData = pTree->nData;     /* Current size of node in bytes */
121421     int nReq = nData;             /* Required space after adding zTerm */
121422     int nPrefix;                  /* Number of bytes of prefix compression */
121423     int nSuffix;                  /* Suffix length */
121424
121425     nPrefix = fts3PrefixCompress(pTree->zTerm, pTree->nTerm, zTerm, nTerm);
121426     nSuffix = nTerm-nPrefix;
121427
121428     nReq += sqlite3Fts3VarintLen(nPrefix)+sqlite3Fts3VarintLen(nSuffix)+nSuffix;
121429     if( nReq<=p->nNodeSize || !pTree->zTerm ){
121430
121431       if( nReq>p->nNodeSize ){
121432         /* An unusual case: this is the first term to be added to the node
121433         ** and the static node buffer (p->nNodeSize bytes) is not large
121434         ** enough. Use a separately malloced buffer instead This wastes
121435         ** p->nNodeSize bytes, but since this scenario only comes about when
121436         ** the database contain two terms that share a prefix of almost 2KB, 
121437         ** this is not expected to be a serious problem. 
121438         */
121439         assert( pTree->aData==(char *)&pTree[1] );
121440         pTree->aData = (char *)sqlite3_malloc(nReq);
121441         if( !pTree->aData ){
121442           return SQLITE_NOMEM;
121443         }
121444       }
121445
121446       if( pTree->zTerm ){
121447         /* There is no prefix-length field for first term in a node */
121448         nData += sqlite3Fts3PutVarint(&pTree->aData[nData], nPrefix);
121449       }
121450
121451       nData += sqlite3Fts3PutVarint(&pTree->aData[nData], nSuffix);
121452       memcpy(&pTree->aData[nData], &zTerm[nPrefix], nSuffix);
121453       pTree->nData = nData + nSuffix;
121454       pTree->nEntry++;
121455
121456       if( isCopyTerm ){
121457         if( pTree->nMalloc<nTerm ){
121458           char *zNew = sqlite3_realloc(pTree->zMalloc, nTerm*2);
121459           if( !zNew ){
121460             return SQLITE_NOMEM;
121461           }
121462           pTree->nMalloc = nTerm*2;
121463           pTree->zMalloc = zNew;
121464         }
121465         pTree->zTerm = pTree->zMalloc;
121466         memcpy(pTree->zTerm, zTerm, nTerm);
121467         pTree->nTerm = nTerm;
121468       }else{
121469         pTree->zTerm = (char *)zTerm;
121470         pTree->nTerm = nTerm;
121471       }
121472       return SQLITE_OK;
121473     }
121474   }
121475
121476   /* If control flows to here, it was not possible to append zTerm to the
121477   ** current node. Create a new node (a right-sibling of the current node).
121478   ** If this is the first node in the tree, the term is added to it.
121479   **
121480   ** Otherwise, the term is not added to the new node, it is left empty for
121481   ** now. Instead, the term is inserted into the parent of pTree. If pTree 
121482   ** has no parent, one is created here.
121483   */
121484   pNew = (SegmentNode *)sqlite3_malloc(sizeof(SegmentNode) + p->nNodeSize);
121485   if( !pNew ){
121486     return SQLITE_NOMEM;
121487   }
121488   memset(pNew, 0, sizeof(SegmentNode));
121489   pNew->nData = 1 + FTS3_VARINT_MAX;
121490   pNew->aData = (char *)&pNew[1];
121491
121492   if( pTree ){
121493     SegmentNode *pParent = pTree->pParent;
121494     rc = fts3NodeAddTerm(p, &pParent, isCopyTerm, zTerm, nTerm);
121495     if( pTree->pParent==0 ){
121496       pTree->pParent = pParent;
121497     }
121498     pTree->pRight = pNew;
121499     pNew->pLeftmost = pTree->pLeftmost;
121500     pNew->pParent = pParent;
121501     pNew->zMalloc = pTree->zMalloc;
121502     pNew->nMalloc = pTree->nMalloc;
121503     pTree->zMalloc = 0;
121504   }else{
121505     pNew->pLeftmost = pNew;
121506     rc = fts3NodeAddTerm(p, &pNew, isCopyTerm, zTerm, nTerm); 
121507   }
121508
121509   *ppTree = pNew;
121510   return rc;
121511 }
121512
121513 /*
121514 ** Helper function for fts3NodeWrite().
121515 */
121516 static int fts3TreeFinishNode(
121517   SegmentNode *pTree, 
121518   int iHeight, 
121519   sqlite3_int64 iLeftChild
121520 ){
121521   int nStart;
121522   assert( iHeight>=1 && iHeight<128 );
121523   nStart = FTS3_VARINT_MAX - sqlite3Fts3VarintLen(iLeftChild);
121524   pTree->aData[nStart] = (char)iHeight;
121525   sqlite3Fts3PutVarint(&pTree->aData[nStart+1], iLeftChild);
121526   return nStart;
121527 }
121528
121529 /*
121530 ** Write the buffer for the segment node pTree and all of its peers to the
121531 ** database. Then call this function recursively to write the parent of 
121532 ** pTree and its peers to the database. 
121533 **
121534 ** Except, if pTree is a root node, do not write it to the database. Instead,
121535 ** set output variables *paRoot and *pnRoot to contain the root node.
121536 **
121537 ** If successful, SQLITE_OK is returned and output variable *piLast is
121538 ** set to the largest blockid written to the database (or zero if no
121539 ** blocks were written to the db). Otherwise, an SQLite error code is 
121540 ** returned.
121541 */
121542 static int fts3NodeWrite(
121543   Fts3Table *p,                   /* Virtual table handle */
121544   SegmentNode *pTree,             /* SegmentNode handle */
121545   int iHeight,                    /* Height of this node in tree */
121546   sqlite3_int64 iLeaf,            /* Block id of first leaf node */
121547   sqlite3_int64 iFree,            /* Block id of next free slot in %_segments */
121548   sqlite3_int64 *piLast,          /* OUT: Block id of last entry written */
121549   char **paRoot,                  /* OUT: Data for root node */
121550   int *pnRoot                     /* OUT: Size of root node in bytes */
121551 ){
121552   int rc = SQLITE_OK;
121553
121554   if( !pTree->pParent ){
121555     /* Root node of the tree. */
121556     int nStart = fts3TreeFinishNode(pTree, iHeight, iLeaf);
121557     *piLast = iFree-1;
121558     *pnRoot = pTree->nData - nStart;
121559     *paRoot = &pTree->aData[nStart];
121560   }else{
121561     SegmentNode *pIter;
121562     sqlite3_int64 iNextFree = iFree;
121563     sqlite3_int64 iNextLeaf = iLeaf;
121564     for(pIter=pTree->pLeftmost; pIter && rc==SQLITE_OK; pIter=pIter->pRight){
121565       int nStart = fts3TreeFinishNode(pIter, iHeight, iNextLeaf);
121566       int nWrite = pIter->nData - nStart;
121567   
121568       rc = fts3WriteSegment(p, iNextFree, &pIter->aData[nStart], nWrite);
121569       iNextFree++;
121570       iNextLeaf += (pIter->nEntry+1);
121571     }
121572     if( rc==SQLITE_OK ){
121573       assert( iNextLeaf==iFree );
121574       rc = fts3NodeWrite(
121575           p, pTree->pParent, iHeight+1, iFree, iNextFree, piLast, paRoot, pnRoot
121576       );
121577     }
121578   }
121579
121580   return rc;
121581 }
121582
121583 /*
121584 ** Free all memory allocations associated with the tree pTree.
121585 */
121586 static void fts3NodeFree(SegmentNode *pTree){
121587   if( pTree ){
121588     SegmentNode *p = pTree->pLeftmost;
121589     fts3NodeFree(p->pParent);
121590     while( p ){
121591       SegmentNode *pRight = p->pRight;
121592       if( p->aData!=(char *)&p[1] ){
121593         sqlite3_free(p->aData);
121594       }
121595       assert( pRight==0 || p->zMalloc==0 );
121596       sqlite3_free(p->zMalloc);
121597       sqlite3_free(p);
121598       p = pRight;
121599     }
121600   }
121601 }
121602
121603 /*
121604 ** Add a term to the segment being constructed by the SegmentWriter object
121605 ** *ppWriter. When adding the first term to a segment, *ppWriter should
121606 ** be passed NULL. This function will allocate a new SegmentWriter object
121607 ** and return it via the input/output variable *ppWriter in this case.
121608 **
121609 ** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code.
121610 */
121611 static int fts3SegWriterAdd(
121612   Fts3Table *p,                   /* Virtual table handle */
121613   SegmentWriter **ppWriter,       /* IN/OUT: SegmentWriter handle */ 
121614   int isCopyTerm,                 /* True if buffer zTerm must be copied */
121615   const char *zTerm,              /* Pointer to buffer containing term */
121616   int nTerm,                      /* Size of term in bytes */
121617   const char *aDoclist,           /* Pointer to buffer containing doclist */
121618   int nDoclist                    /* Size of doclist in bytes */
121619 ){
121620   int nPrefix;                    /* Size of term prefix in bytes */
121621   int nSuffix;                    /* Size of term suffix in bytes */
121622   int nReq;                       /* Number of bytes required on leaf page */
121623   int nData;
121624   SegmentWriter *pWriter = *ppWriter;
121625
121626   if( !pWriter ){
121627     int rc;
121628     sqlite3_stmt *pStmt;
121629
121630     /* Allocate the SegmentWriter structure */
121631     pWriter = (SegmentWriter *)sqlite3_malloc(sizeof(SegmentWriter));
121632     if( !pWriter ) return SQLITE_NOMEM;
121633     memset(pWriter, 0, sizeof(SegmentWriter));
121634     *ppWriter = pWriter;
121635
121636     /* Allocate a buffer in which to accumulate data */
121637     pWriter->aData = (char *)sqlite3_malloc(p->nNodeSize);
121638     if( !pWriter->aData ) return SQLITE_NOMEM;
121639     pWriter->nSize = p->nNodeSize;
121640
121641     /* Find the next free blockid in the %_segments table */
121642     rc = fts3SqlStmt(p, SQL_NEXT_SEGMENTS_ID, &pStmt, 0);
121643     if( rc!=SQLITE_OK ) return rc;
121644     if( SQLITE_ROW==sqlite3_step(pStmt) ){
121645       pWriter->iFree = sqlite3_column_int64(pStmt, 0);
121646       pWriter->iFirst = pWriter->iFree;
121647     }
121648     rc = sqlite3_reset(pStmt);
121649     if( rc!=SQLITE_OK ) return rc;
121650   }
121651   nData = pWriter->nData;
121652
121653   nPrefix = fts3PrefixCompress(pWriter->zTerm, pWriter->nTerm, zTerm, nTerm);
121654   nSuffix = nTerm-nPrefix;
121655
121656   /* Figure out how many bytes are required by this new entry */
121657   nReq = sqlite3Fts3VarintLen(nPrefix) +    /* varint containing prefix size */
121658     sqlite3Fts3VarintLen(nSuffix) +         /* varint containing suffix size */
121659     nSuffix +                               /* Term suffix */
121660     sqlite3Fts3VarintLen(nDoclist) +        /* Size of doclist */
121661     nDoclist;                               /* Doclist data */
121662
121663   if( nData>0 && nData+nReq>p->nNodeSize ){
121664     int rc;
121665
121666     /* The current leaf node is full. Write it out to the database. */
121667     rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, nData);
121668     if( rc!=SQLITE_OK ) return rc;
121669
121670     /* Add the current term to the interior node tree. The term added to
121671     ** the interior tree must:
121672     **
121673     **   a) be greater than the largest term on the leaf node just written
121674     **      to the database (still available in pWriter->zTerm), and
121675     **
121676     **   b) be less than or equal to the term about to be added to the new
121677     **      leaf node (zTerm/nTerm).
121678     **
121679     ** In other words, it must be the prefix of zTerm 1 byte longer than
121680     ** the common prefix (if any) of zTerm and pWriter->zTerm.
121681     */
121682     assert( nPrefix<nTerm );
121683     rc = fts3NodeAddTerm(p, &pWriter->pTree, isCopyTerm, zTerm, nPrefix+1);
121684     if( rc!=SQLITE_OK ) return rc;
121685
121686     nData = 0;
121687     pWriter->nTerm = 0;
121688
121689     nPrefix = 0;
121690     nSuffix = nTerm;
121691     nReq = 1 +                              /* varint containing prefix size */
121692       sqlite3Fts3VarintLen(nTerm) +         /* varint containing suffix size */
121693       nTerm +                               /* Term suffix */
121694       sqlite3Fts3VarintLen(nDoclist) +      /* Size of doclist */
121695       nDoclist;                             /* Doclist data */
121696   }
121697
121698   /* If the buffer currently allocated is too small for this entry, realloc
121699   ** the buffer to make it large enough.
121700   */
121701   if( nReq>pWriter->nSize ){
121702     char *aNew = sqlite3_realloc(pWriter->aData, nReq);
121703     if( !aNew ) return SQLITE_NOMEM;
121704     pWriter->aData = aNew;
121705     pWriter->nSize = nReq;
121706   }
121707   assert( nData+nReq<=pWriter->nSize );
121708
121709   /* Append the prefix-compressed term and doclist to the buffer. */
121710   nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nPrefix);
121711   nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nSuffix);
121712   memcpy(&pWriter->aData[nData], &zTerm[nPrefix], nSuffix);
121713   nData += nSuffix;
121714   nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nDoclist);
121715   memcpy(&pWriter->aData[nData], aDoclist, nDoclist);
121716   pWriter->nData = nData + nDoclist;
121717
121718   /* Save the current term so that it can be used to prefix-compress the next.
121719   ** If the isCopyTerm parameter is true, then the buffer pointed to by
121720   ** zTerm is transient, so take a copy of the term data. Otherwise, just
121721   ** store a copy of the pointer.
121722   */
121723   if( isCopyTerm ){
121724     if( nTerm>pWriter->nMalloc ){
121725       char *zNew = sqlite3_realloc(pWriter->zMalloc, nTerm*2);
121726       if( !zNew ){
121727         return SQLITE_NOMEM;
121728       }
121729       pWriter->nMalloc = nTerm*2;
121730       pWriter->zMalloc = zNew;
121731       pWriter->zTerm = zNew;
121732     }
121733     assert( pWriter->zTerm==pWriter->zMalloc );
121734     memcpy(pWriter->zTerm, zTerm, nTerm);
121735   }else{
121736     pWriter->zTerm = (char *)zTerm;
121737   }
121738   pWriter->nTerm = nTerm;
121739
121740   return SQLITE_OK;
121741 }
121742
121743 /*
121744 ** Flush all data associated with the SegmentWriter object pWriter to the
121745 ** database. This function must be called after all terms have been added
121746 ** to the segment using fts3SegWriterAdd(). If successful, SQLITE_OK is
121747 ** returned. Otherwise, an SQLite error code.
121748 */
121749 static int fts3SegWriterFlush(
121750   Fts3Table *p,                   /* Virtual table handle */
121751   SegmentWriter *pWriter,         /* SegmentWriter to flush to the db */
121752   int iLevel,                     /* Value for 'level' column of %_segdir */
121753   int iIdx                        /* Value for 'idx' column of %_segdir */
121754 ){
121755   int rc;                         /* Return code */
121756   if( pWriter->pTree ){
121757     sqlite3_int64 iLast = 0;      /* Largest block id written to database */
121758     sqlite3_int64 iLastLeaf;      /* Largest leaf block id written to db */
121759     char *zRoot = NULL;           /* Pointer to buffer containing root node */
121760     int nRoot = 0;                /* Size of buffer zRoot */
121761
121762     iLastLeaf = pWriter->iFree;
121763     rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, pWriter->nData);
121764     if( rc==SQLITE_OK ){
121765       rc = fts3NodeWrite(p, pWriter->pTree, 1,
121766           pWriter->iFirst, pWriter->iFree, &iLast, &zRoot, &nRoot);
121767     }
121768     if( rc==SQLITE_OK ){
121769       rc = fts3WriteSegdir(
121770           p, iLevel, iIdx, pWriter->iFirst, iLastLeaf, iLast, zRoot, nRoot);
121771     }
121772   }else{
121773     /* The entire tree fits on the root node. Write it to the segdir table. */
121774     rc = fts3WriteSegdir(
121775         p, iLevel, iIdx, 0, 0, 0, pWriter->aData, pWriter->nData);
121776   }
121777   return rc;
121778 }
121779
121780 /*
121781 ** Release all memory held by the SegmentWriter object passed as the 
121782 ** first argument.
121783 */
121784 static void fts3SegWriterFree(SegmentWriter *pWriter){
121785   if( pWriter ){
121786     sqlite3_free(pWriter->aData);
121787     sqlite3_free(pWriter->zMalloc);
121788     fts3NodeFree(pWriter->pTree);
121789     sqlite3_free(pWriter);
121790   }
121791 }
121792
121793 /*
121794 ** The first value in the apVal[] array is assumed to contain an integer.
121795 ** This function tests if there exist any documents with docid values that
121796 ** are different from that integer. i.e. if deleting the document with docid
121797 ** apVal[0] would mean the FTS3 table were empty.
121798 **
121799 ** If successful, *pisEmpty is set to true if the table is empty except for
121800 ** document apVal[0], or false otherwise, and SQLITE_OK is returned. If an
121801 ** error occurs, an SQLite error code is returned.
121802 */
121803 static int fts3IsEmpty(Fts3Table *p, sqlite3_value **apVal, int *pisEmpty){
121804   sqlite3_stmt *pStmt;
121805   int rc;
121806   rc = fts3SqlStmt(p, SQL_IS_EMPTY, &pStmt, apVal);
121807   if( rc==SQLITE_OK ){
121808     if( SQLITE_ROW==sqlite3_step(pStmt) ){
121809       *pisEmpty = sqlite3_column_int(pStmt, 0);
121810     }
121811     rc = sqlite3_reset(pStmt);
121812   }
121813   return rc;
121814 }
121815
121816 /*
121817 ** Set *pnSegment to the total number of segments in the database. Set
121818 ** *pnMax to the largest segment level in the database (segment levels
121819 ** are stored in the 'level' column of the %_segdir table).
121820 **
121821 ** Return SQLITE_OK if successful, or an SQLite error code if not.
121822 */
121823 static int fts3SegmentCountMax(Fts3Table *p, int *pnSegment, int *pnMax){
121824   sqlite3_stmt *pStmt;
121825   int rc;
121826
121827   rc = fts3SqlStmt(p, SQL_SELECT_SEGDIR_COUNT_MAX, &pStmt, 0);
121828   if( rc!=SQLITE_OK ) return rc;
121829   if( SQLITE_ROW==sqlite3_step(pStmt) ){
121830     *pnSegment = sqlite3_column_int(pStmt, 0);
121831     *pnMax = sqlite3_column_int(pStmt, 1);
121832   }
121833   return sqlite3_reset(pStmt);
121834 }
121835
121836 /*
121837 ** This function is used after merging multiple segments into a single large
121838 ** segment to delete the old, now redundant, segment b-trees. Specifically,
121839 ** it:
121840 ** 
121841 **   1) Deletes all %_segments entries for the segments associated with 
121842 **      each of the SegReader objects in the array passed as the third 
121843 **      argument, and
121844 **
121845 **   2) deletes all %_segdir entries with level iLevel, or all %_segdir
121846 **      entries regardless of level if (iLevel<0).
121847 **
121848 ** SQLITE_OK is returned if successful, otherwise an SQLite error code.
121849 */
121850 static int fts3DeleteSegdir(
121851   Fts3Table *p,                   /* Virtual table handle */
121852   int iLevel,                     /* Level of %_segdir entries to delete */
121853   Fts3SegReader **apSegment,      /* Array of SegReader objects */
121854   int nReader                     /* Size of array apSegment */
121855 ){
121856   int rc;                         /* Return Code */
121857   int i;                          /* Iterator variable */
121858   sqlite3_stmt *pDelete;          /* SQL statement to delete rows */
121859
121860   rc = fts3SqlStmt(p, SQL_DELETE_SEGMENTS_RANGE, &pDelete, 0);
121861   for(i=0; rc==SQLITE_OK && i<nReader; i++){
121862     Fts3SegReader *pSegment = apSegment[i];
121863     if( pSegment->iStartBlock ){
121864       sqlite3_bind_int64(pDelete, 1, pSegment->iStartBlock);
121865       sqlite3_bind_int64(pDelete, 2, pSegment->iEndBlock);
121866       sqlite3_step(pDelete);
121867       rc = sqlite3_reset(pDelete);
121868     }
121869   }
121870   if( rc!=SQLITE_OK ){
121871     return rc;
121872   }
121873
121874   if( iLevel==FTS3_SEGCURSOR_ALL ){
121875     fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGDIR, 0);
121876   }else if( iLevel==FTS3_SEGCURSOR_PENDING ){
121877     sqlite3Fts3PendingTermsClear(p);
121878   }else{
121879     assert( iLevel>=0 );
121880     rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_BY_LEVEL, &pDelete, 0);
121881     if( rc==SQLITE_OK ){
121882       sqlite3_bind_int(pDelete, 1, iLevel);
121883       sqlite3_step(pDelete);
121884       rc = sqlite3_reset(pDelete);
121885     }
121886   }
121887
121888   return rc;
121889 }
121890
121891 /*
121892 ** When this function is called, buffer *ppList (size *pnList bytes) contains 
121893 ** a position list that may (or may not) feature multiple columns. This
121894 ** function adjusts the pointer *ppList and the length *pnList so that they
121895 ** identify the subset of the position list that corresponds to column iCol.
121896 **
121897 ** If there are no entries in the input position list for column iCol, then
121898 ** *pnList is set to zero before returning.
121899 */
121900 static void fts3ColumnFilter(
121901   int iCol,                       /* Column to filter on */
121902   char **ppList,                  /* IN/OUT: Pointer to position list */
121903   int *pnList                     /* IN/OUT: Size of buffer *ppList in bytes */
121904 ){
121905   char *pList = *ppList;
121906   int nList = *pnList;
121907   char *pEnd = &pList[nList];
121908   int iCurrent = 0;
121909   char *p = pList;
121910
121911   assert( iCol>=0 );
121912   while( 1 ){
121913     char c = 0;
121914     while( p<pEnd && (c | *p)&0xFE ) c = *p++ & 0x80;
121915   
121916     if( iCol==iCurrent ){
121917       nList = (int)(p - pList);
121918       break;
121919     }
121920
121921     nList -= (int)(p - pList);
121922     pList = p;
121923     if( nList==0 ){
121924       break;
121925     }
121926     p = &pList[1];
121927     p += sqlite3Fts3GetVarint32(p, &iCurrent);
121928   }
121929
121930   *ppList = pList;
121931   *pnList = nList;
121932 }
121933
121934 SQLITE_PRIVATE int sqlite3Fts3SegReaderStart(
121935   Fts3Table *p,                   /* Virtual table handle */
121936   Fts3SegReaderCursor *pCsr,      /* Cursor object */
121937   Fts3SegFilter *pFilter          /* Restrictions on range of iteration */
121938 ){
121939   int i;
121940
121941   /* Initialize the cursor object */
121942   pCsr->pFilter = pFilter;
121943
121944   /* If the Fts3SegFilter defines a specific term (or term prefix) to search 
121945   ** for, then advance each segment iterator until it points to a term of
121946   ** equal or greater value than the specified term. This prevents many
121947   ** unnecessary merge/sort operations for the case where single segment
121948   ** b-tree leaf nodes contain more than one term.
121949   */
121950   for(i=0; i<pCsr->nSegment; i++){
121951     int nTerm = pFilter->nTerm;
121952     const char *zTerm = pFilter->zTerm;
121953     Fts3SegReader *pSeg = pCsr->apSegment[i];
121954     do {
121955       int rc = fts3SegReaderNext(p, pSeg);
121956       if( rc!=SQLITE_OK ) return rc;
121957     }while( zTerm && fts3SegReaderTermCmp(pSeg, zTerm, nTerm)<0 );
121958   }
121959   fts3SegReaderSort(
121960       pCsr->apSegment, pCsr->nSegment, pCsr->nSegment, fts3SegReaderCmp);
121961
121962   return SQLITE_OK;
121963 }
121964
121965 SQLITE_PRIVATE int sqlite3Fts3SegReaderStep(
121966   Fts3Table *p,                   /* Virtual table handle */
121967   Fts3SegReaderCursor *pCsr       /* Cursor object */
121968 ){
121969   int rc = SQLITE_OK;
121970
121971   int isIgnoreEmpty =  (pCsr->pFilter->flags & FTS3_SEGMENT_IGNORE_EMPTY);
121972   int isRequirePos =   (pCsr->pFilter->flags & FTS3_SEGMENT_REQUIRE_POS);
121973   int isColFilter =    (pCsr->pFilter->flags & FTS3_SEGMENT_COLUMN_FILTER);
121974   int isPrefix =       (pCsr->pFilter->flags & FTS3_SEGMENT_PREFIX);
121975   int isScan =         (pCsr->pFilter->flags & FTS3_SEGMENT_SCAN);
121976
121977   Fts3SegReader **apSegment = pCsr->apSegment;
121978   int nSegment = pCsr->nSegment;
121979   Fts3SegFilter *pFilter = pCsr->pFilter;
121980
121981   if( pCsr->nSegment==0 ) return SQLITE_OK;
121982
121983   do {
121984     int nMerge;
121985     int i;
121986   
121987     /* Advance the first pCsr->nAdvance entries in the apSegment[] array
121988     ** forward. Then sort the list in order of current term again.  
121989     */
121990     for(i=0; i<pCsr->nAdvance; i++){
121991       rc = fts3SegReaderNext(p, apSegment[i]);
121992       if( rc!=SQLITE_OK ) return rc;
121993     }
121994     fts3SegReaderSort(apSegment, nSegment, pCsr->nAdvance, fts3SegReaderCmp);
121995     pCsr->nAdvance = 0;
121996
121997     /* If all the seg-readers are at EOF, we're finished. return SQLITE_OK. */
121998     assert( rc==SQLITE_OK );
121999     if( apSegment[0]->aNode==0 ) break;
122000
122001     pCsr->nTerm = apSegment[0]->nTerm;
122002     pCsr->zTerm = apSegment[0]->zTerm;
122003
122004     /* If this is a prefix-search, and if the term that apSegment[0] points
122005     ** to does not share a suffix with pFilter->zTerm/nTerm, then all 
122006     ** required callbacks have been made. In this case exit early.
122007     **
122008     ** Similarly, if this is a search for an exact match, and the first term
122009     ** of segment apSegment[0] is not a match, exit early.
122010     */
122011     if( pFilter->zTerm && !isScan ){
122012       if( pCsr->nTerm<pFilter->nTerm 
122013        || (!isPrefix && pCsr->nTerm>pFilter->nTerm)
122014        || memcmp(pCsr->zTerm, pFilter->zTerm, pFilter->nTerm) 
122015       ){
122016         break;
122017       }
122018     }
122019
122020     nMerge = 1;
122021     while( nMerge<nSegment 
122022         && apSegment[nMerge]->aNode
122023         && apSegment[nMerge]->nTerm==pCsr->nTerm 
122024         && 0==memcmp(pCsr->zTerm, apSegment[nMerge]->zTerm, pCsr->nTerm)
122025     ){
122026       nMerge++;
122027     }
122028
122029     assert( isIgnoreEmpty || (isRequirePos && !isColFilter) );
122030     if( nMerge==1 && !isIgnoreEmpty ){
122031       pCsr->aDoclist = apSegment[0]->aDoclist;
122032       pCsr->nDoclist = apSegment[0]->nDoclist;
122033       rc = SQLITE_ROW;
122034     }else{
122035       int nDoclist = 0;           /* Size of doclist */
122036       sqlite3_int64 iPrev = 0;    /* Previous docid stored in doclist */
122037
122038       /* The current term of the first nMerge entries in the array
122039       ** of Fts3SegReader objects is the same. The doclists must be merged
122040       ** and a single term returned with the merged doclist.
122041       */
122042       for(i=0; i<nMerge; i++){
122043         fts3SegReaderFirstDocid(apSegment[i]);
122044       }
122045       fts3SegReaderSort(apSegment, nMerge, nMerge, fts3SegReaderDoclistCmp);
122046       while( apSegment[0]->pOffsetList ){
122047         int j;                    /* Number of segments that share a docid */
122048         char *pList;
122049         int nList;
122050         int nByte;
122051         sqlite3_int64 iDocid = apSegment[0]->iDocid;
122052         fts3SegReaderNextDocid(apSegment[0], &pList, &nList);
122053         j = 1;
122054         while( j<nMerge
122055             && apSegment[j]->pOffsetList
122056             && apSegment[j]->iDocid==iDocid
122057         ){
122058           fts3SegReaderNextDocid(apSegment[j], 0, 0);
122059           j++;
122060         }
122061
122062         if( isColFilter ){
122063           fts3ColumnFilter(pFilter->iCol, &pList, &nList);
122064         }
122065
122066         if( !isIgnoreEmpty || nList>0 ){
122067           nByte = sqlite3Fts3VarintLen(iDocid-iPrev) + (isRequirePos?nList+1:0);
122068           if( nDoclist+nByte>pCsr->nBuffer ){
122069             char *aNew;
122070             pCsr->nBuffer = (nDoclist+nByte)*2;
122071             aNew = sqlite3_realloc(pCsr->aBuffer, pCsr->nBuffer);
122072             if( !aNew ){
122073               return SQLITE_NOMEM;
122074             }
122075             pCsr->aBuffer = aNew;
122076           }
122077           nDoclist += sqlite3Fts3PutVarint(
122078               &pCsr->aBuffer[nDoclist], iDocid-iPrev
122079           );
122080           iPrev = iDocid;
122081           if( isRequirePos ){
122082             memcpy(&pCsr->aBuffer[nDoclist], pList, nList);
122083             nDoclist += nList;
122084             pCsr->aBuffer[nDoclist++] = '\0';
122085           }
122086         }
122087
122088         fts3SegReaderSort(apSegment, nMerge, j, fts3SegReaderDoclistCmp);
122089       }
122090       if( nDoclist>0 ){
122091         pCsr->aDoclist = pCsr->aBuffer;
122092         pCsr->nDoclist = nDoclist;
122093         rc = SQLITE_ROW;
122094       }
122095     }
122096     pCsr->nAdvance = nMerge;
122097   }while( rc==SQLITE_OK );
122098
122099   return rc;
122100 }
122101
122102 SQLITE_PRIVATE void sqlite3Fts3SegReaderFinish(
122103   Fts3SegReaderCursor *pCsr       /* Cursor object */
122104 ){
122105   if( pCsr ){
122106     int i;
122107     for(i=0; i<pCsr->nSegment; i++){
122108       sqlite3Fts3SegReaderFree(pCsr->apSegment[i]);
122109     }
122110     sqlite3_free(pCsr->apSegment);
122111     sqlite3_free(pCsr->aBuffer);
122112
122113     pCsr->nSegment = 0;
122114     pCsr->apSegment = 0;
122115     pCsr->aBuffer = 0;
122116   }
122117 }
122118
122119 /*
122120 ** Merge all level iLevel segments in the database into a single 
122121 ** iLevel+1 segment. Or, if iLevel<0, merge all segments into a
122122 ** single segment with a level equal to the numerically largest level 
122123 ** currently present in the database.
122124 **
122125 ** If this function is called with iLevel<0, but there is only one
122126 ** segment in the database, SQLITE_DONE is returned immediately. 
122127 ** Otherwise, if successful, SQLITE_OK is returned. If an error occurs, 
122128 ** an SQLite error code is returned.
122129 */
122130 static int fts3SegmentMerge(Fts3Table *p, int iLevel){
122131   int rc;                         /* Return code */
122132   int iIdx = 0;                   /* Index of new segment */
122133   int iNewLevel = 0;              /* Level to create new segment at */
122134   SegmentWriter *pWriter = 0;     /* Used to write the new, merged, segment */
122135   Fts3SegFilter filter;           /* Segment term filter condition */
122136   Fts3SegReaderCursor csr;        /* Cursor to iterate through level(s) */
122137
122138   rc = sqlite3Fts3SegReaderCursor(p, iLevel, 0, 0, 1, 0, &csr);
122139   if( rc!=SQLITE_OK || csr.nSegment==0 ) goto finished;
122140
122141   if( iLevel==FTS3_SEGCURSOR_ALL ){
122142     /* This call is to merge all segments in the database to a single
122143     ** segment. The level of the new segment is equal to the the numerically 
122144     ** greatest segment level currently present in the database. The index
122145     ** of the new segment is always 0.  */
122146     int nDummy; /* TODO: Remove this */
122147     if( csr.nSegment==1 ){
122148       rc = SQLITE_DONE;
122149       goto finished;
122150     }
122151     rc = fts3SegmentCountMax(p, &nDummy, &iNewLevel);
122152   }else{
122153     /* This call is to merge all segments at level iLevel. Find the next
122154     ** available segment index at level iLevel+1. The call to
122155     ** fts3AllocateSegdirIdx() will merge the segments at level iLevel+1 to 
122156     ** a single iLevel+2 segment if necessary.  */
122157     iNewLevel = iLevel+1;
122158     rc = fts3AllocateSegdirIdx(p, iNewLevel, &iIdx);
122159   }
122160   if( rc!=SQLITE_OK ) goto finished;
122161   assert( csr.nSegment>0 );
122162   assert( iNewLevel>=0 );
122163
122164   memset(&filter, 0, sizeof(Fts3SegFilter));
122165   filter.flags = FTS3_SEGMENT_REQUIRE_POS;
122166   filter.flags |= (iLevel==FTS3_SEGCURSOR_ALL ? FTS3_SEGMENT_IGNORE_EMPTY : 0);
122167
122168   rc = sqlite3Fts3SegReaderStart(p, &csr, &filter);
122169   while( SQLITE_OK==rc ){
122170     rc = sqlite3Fts3SegReaderStep(p, &csr);
122171     if( rc!=SQLITE_ROW ) break;
122172     rc = fts3SegWriterAdd(p, &pWriter, 1, 
122173         csr.zTerm, csr.nTerm, csr.aDoclist, csr.nDoclist);
122174   }
122175   if( rc!=SQLITE_OK ) goto finished;
122176   assert( pWriter );
122177
122178   rc = fts3DeleteSegdir(p, iLevel, csr.apSegment, csr.nSegment);
122179   if( rc!=SQLITE_OK ) goto finished;
122180   rc = fts3SegWriterFlush(p, pWriter, iNewLevel, iIdx);
122181
122182  finished:
122183   fts3SegWriterFree(pWriter);
122184   sqlite3Fts3SegReaderFinish(&csr);
122185   return rc;
122186 }
122187
122188
122189 /* 
122190 ** Flush the contents of pendingTerms to a level 0 segment.
122191 */
122192 SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *p){
122193   return fts3SegmentMerge(p, FTS3_SEGCURSOR_PENDING);
122194 }
122195
122196 /*
122197 ** Encode N integers as varints into a blob.
122198 */
122199 static void fts3EncodeIntArray(
122200   int N,             /* The number of integers to encode */
122201   u32 *a,            /* The integer values */
122202   char *zBuf,        /* Write the BLOB here */
122203   int *pNBuf         /* Write number of bytes if zBuf[] used here */
122204 ){
122205   int i, j;
122206   for(i=j=0; i<N; i++){
122207     j += sqlite3Fts3PutVarint(&zBuf[j], (sqlite3_int64)a[i]);
122208   }
122209   *pNBuf = j;
122210 }
122211
122212 /*
122213 ** Decode a blob of varints into N integers
122214 */
122215 static void fts3DecodeIntArray(
122216   int N,             /* The number of integers to decode */
122217   u32 *a,            /* Write the integer values */
122218   const char *zBuf,  /* The BLOB containing the varints */
122219   int nBuf           /* size of the BLOB */
122220 ){
122221   int i, j;
122222   UNUSED_PARAMETER(nBuf);
122223   for(i=j=0; i<N; i++){
122224     sqlite3_int64 x;
122225     j += sqlite3Fts3GetVarint(&zBuf[j], &x);
122226     assert(j<=nBuf);
122227     a[i] = (u32)(x & 0xffffffff);
122228   }
122229 }
122230
122231 /*
122232 ** Insert the sizes (in tokens) for each column of the document
122233 ** with docid equal to p->iPrevDocid.  The sizes are encoded as
122234 ** a blob of varints.
122235 */
122236 static void fts3InsertDocsize(
122237   int *pRC,         /* Result code */
122238   Fts3Table *p,     /* Table into which to insert */
122239   u32 *aSz          /* Sizes of each column */
122240 ){
122241   char *pBlob;             /* The BLOB encoding of the document size */
122242   int nBlob;               /* Number of bytes in the BLOB */
122243   sqlite3_stmt *pStmt;     /* Statement used to insert the encoding */
122244   int rc;                  /* Result code from subfunctions */
122245
122246   if( *pRC ) return;
122247   pBlob = sqlite3_malloc( 10*p->nColumn );
122248   if( pBlob==0 ){
122249     *pRC = SQLITE_NOMEM;
122250     return;
122251   }
122252   fts3EncodeIntArray(p->nColumn, aSz, pBlob, &nBlob);
122253   rc = fts3SqlStmt(p, SQL_REPLACE_DOCSIZE, &pStmt, 0);
122254   if( rc ){
122255     sqlite3_free(pBlob);
122256     *pRC = rc;
122257     return;
122258   }
122259   sqlite3_bind_int64(pStmt, 1, p->iPrevDocid);
122260   sqlite3_bind_blob(pStmt, 2, pBlob, nBlob, sqlite3_free);
122261   sqlite3_step(pStmt);
122262   *pRC = sqlite3_reset(pStmt);
122263 }
122264
122265 /*
122266 ** Record 0 of the %_stat table contains a blob consisting of N varints,
122267 ** where N is the number of user defined columns in the fts3 table plus
122268 ** two. If nCol is the number of user defined columns, then values of the 
122269 ** varints are set as follows:
122270 **
122271 **   Varint 0:       Total number of rows in the table.
122272 **
122273 **   Varint 1..nCol: For each column, the total number of tokens stored in
122274 **                   the column for all rows of the table.
122275 **
122276 **   Varint 1+nCol:  The total size, in bytes, of all text values in all
122277 **                   columns of all rows of the table.
122278 **
122279 */
122280 static void fts3UpdateDocTotals(
122281   int *pRC,                       /* The result code */
122282   Fts3Table *p,                   /* Table being updated */
122283   u32 *aSzIns,                    /* Size increases */
122284   u32 *aSzDel,                    /* Size decreases */
122285   int nChng                       /* Change in the number of documents */
122286 ){
122287   char *pBlob;             /* Storage for BLOB written into %_stat */
122288   int nBlob;               /* Size of BLOB written into %_stat */
122289   u32 *a;                  /* Array of integers that becomes the BLOB */
122290   sqlite3_stmt *pStmt;     /* Statement for reading and writing */
122291   int i;                   /* Loop counter */
122292   int rc;                  /* Result code from subfunctions */
122293
122294   const int nStat = p->nColumn+2;
122295
122296   if( *pRC ) return;
122297   a = sqlite3_malloc( (sizeof(u32)+10)*nStat );
122298   if( a==0 ){
122299     *pRC = SQLITE_NOMEM;
122300     return;
122301   }
122302   pBlob = (char*)&a[nStat];
122303   rc = fts3SqlStmt(p, SQL_SELECT_DOCTOTAL, &pStmt, 0);
122304   if( rc ){
122305     sqlite3_free(a);
122306     *pRC = rc;
122307     return;
122308   }
122309   if( sqlite3_step(pStmt)==SQLITE_ROW ){
122310     fts3DecodeIntArray(nStat, a,
122311          sqlite3_column_blob(pStmt, 0),
122312          sqlite3_column_bytes(pStmt, 0));
122313   }else{
122314     memset(a, 0, sizeof(u32)*(nStat) );
122315   }
122316   sqlite3_reset(pStmt);
122317   if( nChng<0 && a[0]<(u32)(-nChng) ){
122318     a[0] = 0;
122319   }else{
122320     a[0] += nChng;
122321   }
122322   for(i=0; i<p->nColumn+1; i++){
122323     u32 x = a[i+1];
122324     if( x+aSzIns[i] < aSzDel[i] ){
122325       x = 0;
122326     }else{
122327       x = x + aSzIns[i] - aSzDel[i];
122328     }
122329     a[i+1] = x;
122330   }
122331   fts3EncodeIntArray(nStat, a, pBlob, &nBlob);
122332   rc = fts3SqlStmt(p, SQL_REPLACE_DOCTOTAL, &pStmt, 0);
122333   if( rc ){
122334     sqlite3_free(a);
122335     *pRC = rc;
122336     return;
122337   }
122338   sqlite3_bind_blob(pStmt, 1, pBlob, nBlob, SQLITE_STATIC);
122339   sqlite3_step(pStmt);
122340   *pRC = sqlite3_reset(pStmt);
122341   sqlite3_free(a);
122342 }
122343
122344 /*
122345 ** Handle a 'special' INSERT of the form:
122346 **
122347 **   "INSERT INTO tbl(tbl) VALUES(<expr>)"
122348 **
122349 ** Argument pVal contains the result of <expr>. Currently the only 
122350 ** meaningful value to insert is the text 'optimize'.
122351 */
122352 static int fts3SpecialInsert(Fts3Table *p, sqlite3_value *pVal){
122353   int rc;                         /* Return Code */
122354   const char *zVal = (const char *)sqlite3_value_text(pVal);
122355   int nVal = sqlite3_value_bytes(pVal);
122356
122357   if( !zVal ){
122358     return SQLITE_NOMEM;
122359   }else if( nVal==8 && 0==sqlite3_strnicmp(zVal, "optimize", 8) ){
122360     rc = fts3SegmentMerge(p, FTS3_SEGCURSOR_ALL);
122361     if( rc==SQLITE_DONE ){
122362       rc = SQLITE_OK;
122363     }else{
122364       sqlite3Fts3PendingTermsClear(p);
122365     }
122366 #ifdef SQLITE_TEST
122367   }else if( nVal>9 && 0==sqlite3_strnicmp(zVal, "nodesize=", 9) ){
122368     p->nNodeSize = atoi(&zVal[9]);
122369     rc = SQLITE_OK;
122370   }else if( nVal>11 && 0==sqlite3_strnicmp(zVal, "maxpending=", 9) ){
122371     p->nMaxPendingData = atoi(&zVal[11]);
122372     rc = SQLITE_OK;
122373 #endif
122374   }else{
122375     rc = SQLITE_ERROR;
122376   }
122377
122378   sqlite3Fts3SegmentsClose(p);
122379   return rc;
122380 }
122381
122382 /*
122383 ** Return the deferred doclist associated with deferred token pDeferred.
122384 ** This function assumes that sqlite3Fts3CacheDeferredDoclists() has already
122385 ** been called to allocate and populate the doclist.
122386 */
122387 SQLITE_PRIVATE char *sqlite3Fts3DeferredDoclist(Fts3DeferredToken *pDeferred, int *pnByte){
122388   if( pDeferred->pList ){
122389     *pnByte = pDeferred->pList->nData;
122390     return pDeferred->pList->aData;
122391   }
122392   *pnByte = 0;
122393   return 0;
122394 }
122395
122396 /*
122397 ** Helper fucntion for FreeDeferredDoclists(). This function removes all
122398 ** references to deferred doclists from within the tree of Fts3Expr 
122399 ** structures headed by 
122400 */
122401 static void fts3DeferredDoclistClear(Fts3Expr *pExpr){
122402   if( pExpr ){
122403     fts3DeferredDoclistClear(pExpr->pLeft);
122404     fts3DeferredDoclistClear(pExpr->pRight);
122405     if( pExpr->isLoaded ){
122406       sqlite3_free(pExpr->aDoclist);
122407       pExpr->isLoaded = 0;
122408       pExpr->aDoclist = 0;
122409       pExpr->nDoclist = 0;
122410       pExpr->pCurrent = 0;
122411       pExpr->iCurrent = 0;
122412     }
122413   }
122414 }
122415
122416 /*
122417 ** Delete all cached deferred doclists. Deferred doclists are cached
122418 ** (allocated) by the sqlite3Fts3CacheDeferredDoclists() function.
122419 */
122420 SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *pCsr){
122421   Fts3DeferredToken *pDef;
122422   for(pDef=pCsr->pDeferred; pDef; pDef=pDef->pNext){
122423     sqlite3_free(pDef->pList);
122424     pDef->pList = 0;
122425   }
122426   if( pCsr->pDeferred ){
122427     fts3DeferredDoclistClear(pCsr->pExpr);
122428   }
122429 }
122430
122431 /*
122432 ** Free all entries in the pCsr->pDeffered list. Entries are added to 
122433 ** this list using sqlite3Fts3DeferToken().
122434 */
122435 SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *pCsr){
122436   Fts3DeferredToken *pDef;
122437   Fts3DeferredToken *pNext;
122438   for(pDef=pCsr->pDeferred; pDef; pDef=pNext){
122439     pNext = pDef->pNext;
122440     sqlite3_free(pDef->pList);
122441     sqlite3_free(pDef);
122442   }
122443   pCsr->pDeferred = 0;
122444 }
122445
122446 /*
122447 ** Generate deferred-doclists for all tokens in the pCsr->pDeferred list
122448 ** based on the row that pCsr currently points to.
122449 **
122450 ** A deferred-doclist is like any other doclist with position information
122451 ** included, except that it only contains entries for a single row of the
122452 ** table, not for all rows.
122453 */
122454 SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *pCsr){
122455   int rc = SQLITE_OK;             /* Return code */
122456   if( pCsr->pDeferred ){
122457     int i;                        /* Used to iterate through table columns */
122458     sqlite3_int64 iDocid;         /* Docid of the row pCsr points to */
122459     Fts3DeferredToken *pDef;      /* Used to iterate through deferred tokens */
122460   
122461     Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
122462     sqlite3_tokenizer *pT = p->pTokenizer;
122463     sqlite3_tokenizer_module const *pModule = pT->pModule;
122464    
122465     assert( pCsr->isRequireSeek==0 );
122466     iDocid = sqlite3_column_int64(pCsr->pStmt, 0);
122467   
122468     for(i=0; i<p->nColumn && rc==SQLITE_OK; i++){
122469       const char *zText = (const char *)sqlite3_column_text(pCsr->pStmt, i+1);
122470       sqlite3_tokenizer_cursor *pTC = 0;
122471   
122472       rc = pModule->xOpen(pT, zText, -1, &pTC);
122473       while( rc==SQLITE_OK ){
122474         char const *zToken;       /* Buffer containing token */
122475         int nToken;               /* Number of bytes in token */
122476         int iDum1, iDum2;         /* Dummy variables */
122477         int iPos;                 /* Position of token in zText */
122478   
122479         pTC->pTokenizer = pT;
122480         rc = pModule->xNext(pTC, &zToken, &nToken, &iDum1, &iDum2, &iPos);
122481         for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){
122482           Fts3PhraseToken *pPT = pDef->pToken;
122483           if( (pDef->iCol>=p->nColumn || pDef->iCol==i)
122484            && (pPT->n==nToken || (pPT->isPrefix && pPT->n<nToken))
122485            && (0==memcmp(zToken, pPT->z, pPT->n))
122486           ){
122487             fts3PendingListAppend(&pDef->pList, iDocid, i, iPos, &rc);
122488           }
122489         }
122490       }
122491       if( pTC ) pModule->xClose(pTC);
122492       if( rc==SQLITE_DONE ) rc = SQLITE_OK;
122493     }
122494   
122495     for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){
122496       if( pDef->pList ){
122497         rc = fts3PendingListAppendVarint(&pDef->pList, 0);
122498       }
122499     }
122500   }
122501
122502   return rc;
122503 }
122504
122505 /*
122506 ** Add an entry for token pToken to the pCsr->pDeferred list.
122507 */
122508 SQLITE_PRIVATE int sqlite3Fts3DeferToken(
122509   Fts3Cursor *pCsr,               /* Fts3 table cursor */
122510   Fts3PhraseToken *pToken,        /* Token to defer */
122511   int iCol                        /* Column that token must appear in (or -1) */
122512 ){
122513   Fts3DeferredToken *pDeferred;
122514   pDeferred = sqlite3_malloc(sizeof(*pDeferred));
122515   if( !pDeferred ){
122516     return SQLITE_NOMEM;
122517   }
122518   memset(pDeferred, 0, sizeof(*pDeferred));
122519   pDeferred->pToken = pToken;
122520   pDeferred->pNext = pCsr->pDeferred; 
122521   pDeferred->iCol = iCol;
122522   pCsr->pDeferred = pDeferred;
122523
122524   assert( pToken->pDeferred==0 );
122525   pToken->pDeferred = pDeferred;
122526
122527   return SQLITE_OK;
122528 }
122529
122530
122531 /*
122532 ** This function does the work for the xUpdate method of FTS3 virtual
122533 ** tables.
122534 */
122535 SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(
122536   sqlite3_vtab *pVtab,            /* FTS3 vtab object */
122537   int nArg,                       /* Size of argument array */
122538   sqlite3_value **apVal,          /* Array of arguments */
122539   sqlite_int64 *pRowid            /* OUT: The affected (or effected) rowid */
122540 ){
122541   Fts3Table *p = (Fts3Table *)pVtab;
122542   int rc = SQLITE_OK;             /* Return Code */
122543   int isRemove = 0;               /* True for an UPDATE or DELETE */
122544   sqlite3_int64 iRemove = 0;      /* Rowid removed by UPDATE or DELETE */
122545   u32 *aSzIns;                    /* Sizes of inserted documents */
122546   u32 *aSzDel;                    /* Sizes of deleted documents */
122547   int nChng = 0;                  /* Net change in number of documents */
122548
122549   assert( p->pSegments==0 );
122550
122551   /* Allocate space to hold the change in document sizes */
122552   aSzIns = sqlite3_malloc( sizeof(aSzIns[0])*(p->nColumn+1)*2 );
122553   if( aSzIns==0 ) return SQLITE_NOMEM;
122554   aSzDel = &aSzIns[p->nColumn+1];
122555   memset(aSzIns, 0, sizeof(aSzIns[0])*(p->nColumn+1)*2);
122556
122557   /* If this is a DELETE or UPDATE operation, remove the old record. */
122558   if( sqlite3_value_type(apVal[0])!=SQLITE_NULL ){
122559     int isEmpty = 0;
122560     rc = fts3IsEmpty(p, apVal, &isEmpty);
122561     if( rc==SQLITE_OK ){
122562       if( isEmpty ){
122563         /* Deleting this row means the whole table is empty. In this case
122564         ** delete the contents of all three tables and throw away any
122565         ** data in the pendingTerms hash table.
122566         */
122567         rc = fts3DeleteAll(p);
122568       }else{
122569         isRemove = 1;
122570         iRemove = sqlite3_value_int64(apVal[0]);
122571         rc = fts3PendingTermsDocid(p, iRemove);
122572         fts3DeleteTerms(&rc, p, apVal, aSzDel);
122573         fts3SqlExec(&rc, p, SQL_DELETE_CONTENT, apVal);
122574         if( p->bHasDocsize ){
122575           fts3SqlExec(&rc, p, SQL_DELETE_DOCSIZE, apVal);
122576         }
122577         nChng--;
122578       }
122579     }
122580   }else if( sqlite3_value_type(apVal[p->nColumn+2])!=SQLITE_NULL ){
122581     sqlite3_free(aSzIns);
122582     return fts3SpecialInsert(p, apVal[p->nColumn+2]);
122583   }
122584   
122585   /* If this is an INSERT or UPDATE operation, insert the new record. */
122586   if( nArg>1 && rc==SQLITE_OK ){
122587     rc = fts3InsertData(p, apVal, pRowid);
122588     if( rc==SQLITE_OK && (!isRemove || *pRowid!=iRemove) ){
122589       rc = fts3PendingTermsDocid(p, *pRowid);
122590     }
122591     if( rc==SQLITE_OK ){
122592       rc = fts3InsertTerms(p, apVal, aSzIns);
122593     }
122594     if( p->bHasDocsize ){
122595       fts3InsertDocsize(&rc, p, aSzIns);
122596     }
122597     nChng++;
122598   }
122599
122600   if( p->bHasStat ){
122601     fts3UpdateDocTotals(&rc, p, aSzIns, aSzDel, nChng);
122602   }
122603
122604   sqlite3_free(aSzIns);
122605   sqlite3Fts3SegmentsClose(p);
122606   return rc;
122607 }
122608
122609 /* 
122610 ** Flush any data in the pending-terms hash table to disk. If successful,
122611 ** merge all segments in the database (including the new segment, if 
122612 ** there was any data to flush) into a single segment. 
122613 */
122614 SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *p){
122615   int rc;
122616   rc = sqlite3_exec(p->db, "SAVEPOINT fts3", 0, 0, 0);
122617   if( rc==SQLITE_OK ){
122618     rc = fts3SegmentMerge(p, FTS3_SEGCURSOR_ALL);
122619     if( rc==SQLITE_OK ){
122620       rc = sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0);
122621       if( rc==SQLITE_OK ){
122622         sqlite3Fts3PendingTermsClear(p);
122623       }
122624     }else{
122625       sqlite3_exec(p->db, "ROLLBACK TO fts3", 0, 0, 0);
122626       sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0);
122627     }
122628   }
122629   sqlite3Fts3SegmentsClose(p);
122630   return rc;
122631 }
122632
122633 #endif
122634
122635 /************** End of fts3_write.c ******************************************/
122636 /************** Begin file fts3_snippet.c ************************************/
122637 /*
122638 ** 2009 Oct 23
122639 **
122640 ** The author disclaims copyright to this source code.  In place of
122641 ** a legal notice, here is a blessing:
122642 **
122643 **    May you do good and not evil.
122644 **    May you find forgiveness for yourself and forgive others.
122645 **    May you share freely, never taking more than you give.
122646 **
122647 ******************************************************************************
122648 */
122649
122650 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
122651
122652
122653 /*
122654 ** Characters that may appear in the second argument to matchinfo().
122655 */
122656 #define FTS3_MATCHINFO_NPHRASE   'p'        /* 1 value */
122657 #define FTS3_MATCHINFO_NCOL      'c'        /* 1 value */
122658 #define FTS3_MATCHINFO_NDOC      'n'        /* 1 value */
122659 #define FTS3_MATCHINFO_AVGLENGTH 'a'        /* nCol values */
122660 #define FTS3_MATCHINFO_LENGTH    'l'        /* nCol values */
122661 #define FTS3_MATCHINFO_LCS       's'        /* nCol values */
122662 #define FTS3_MATCHINFO_HITS      'x'        /* 3*nCol*nPhrase values */
122663
122664 /*
122665 ** The default value for the second argument to matchinfo(). 
122666 */
122667 #define FTS3_MATCHINFO_DEFAULT   "pcx"
122668
122669
122670 /*
122671 ** Used as an fts3ExprIterate() context when loading phrase doclists to
122672 ** Fts3Expr.aDoclist[]/nDoclist.
122673 */
122674 typedef struct LoadDoclistCtx LoadDoclistCtx;
122675 struct LoadDoclistCtx {
122676   Fts3Cursor *pCsr;               /* FTS3 Cursor */
122677   int nPhrase;                    /* Number of phrases seen so far */
122678   int nToken;                     /* Number of tokens seen so far */
122679 };
122680
122681 /*
122682 ** The following types are used as part of the implementation of the 
122683 ** fts3BestSnippet() routine.
122684 */
122685 typedef struct SnippetIter SnippetIter;
122686 typedef struct SnippetPhrase SnippetPhrase;
122687 typedef struct SnippetFragment SnippetFragment;
122688
122689 struct SnippetIter {
122690   Fts3Cursor *pCsr;               /* Cursor snippet is being generated from */
122691   int iCol;                       /* Extract snippet from this column */
122692   int nSnippet;                   /* Requested snippet length (in tokens) */
122693   int nPhrase;                    /* Number of phrases in query */
122694   SnippetPhrase *aPhrase;         /* Array of size nPhrase */
122695   int iCurrent;                   /* First token of current snippet */
122696 };
122697
122698 struct SnippetPhrase {
122699   int nToken;                     /* Number of tokens in phrase */
122700   char *pList;                    /* Pointer to start of phrase position list */
122701   int iHead;                      /* Next value in position list */
122702   char *pHead;                    /* Position list data following iHead */
122703   int iTail;                      /* Next value in trailing position list */
122704   char *pTail;                    /* Position list data following iTail */
122705 };
122706
122707 struct SnippetFragment {
122708   int iCol;                       /* Column snippet is extracted from */
122709   int iPos;                       /* Index of first token in snippet */
122710   u64 covered;                    /* Mask of query phrases covered */
122711   u64 hlmask;                     /* Mask of snippet terms to highlight */
122712 };
122713
122714 /*
122715 ** This type is used as an fts3ExprIterate() context object while 
122716 ** accumulating the data returned by the matchinfo() function.
122717 */
122718 typedef struct MatchInfo MatchInfo;
122719 struct MatchInfo {
122720   Fts3Cursor *pCursor;            /* FTS3 Cursor */
122721   int nCol;                       /* Number of columns in table */
122722   int nPhrase;                    /* Number of matchable phrases in query */
122723   sqlite3_int64 nDoc;             /* Number of docs in database */
122724   u32 *aMatchinfo;                /* Pre-allocated buffer */
122725 };
122726
122727
122728
122729 /*
122730 ** The snippet() and offsets() functions both return text values. An instance
122731 ** of the following structure is used to accumulate those values while the
122732 ** functions are running. See fts3StringAppend() for details.
122733 */
122734 typedef struct StrBuffer StrBuffer;
122735 struct StrBuffer {
122736   char *z;                        /* Pointer to buffer containing string */
122737   int n;                          /* Length of z in bytes (excl. nul-term) */
122738   int nAlloc;                     /* Allocated size of buffer z in bytes */
122739 };
122740
122741
122742 /*
122743 ** This function is used to help iterate through a position-list. A position
122744 ** list is a list of unique integers, sorted from smallest to largest. Each
122745 ** element of the list is represented by an FTS3 varint that takes the value
122746 ** of the difference between the current element and the previous one plus
122747 ** two. For example, to store the position-list:
122748 **
122749 **     4 9 113
122750 **
122751 ** the three varints:
122752 **
122753 **     6 7 106
122754 **
122755 ** are encoded.
122756 **
122757 ** When this function is called, *pp points to the start of an element of
122758 ** the list. *piPos contains the value of the previous entry in the list.
122759 ** After it returns, *piPos contains the value of the next element of the
122760 ** list and *pp is advanced to the following varint.
122761 */
122762 static void fts3GetDeltaPosition(char **pp, int *piPos){
122763   int iVal;
122764   *pp += sqlite3Fts3GetVarint32(*pp, &iVal);
122765   *piPos += (iVal-2);
122766 }
122767
122768 /*
122769 ** Helper function for fts3ExprIterate() (see below).
122770 */
122771 static int fts3ExprIterate2(
122772   Fts3Expr *pExpr,                /* Expression to iterate phrases of */
122773   int *piPhrase,                  /* Pointer to phrase counter */
122774   int (*x)(Fts3Expr*,int,void*),  /* Callback function to invoke for phrases */
122775   void *pCtx                      /* Second argument to pass to callback */
122776 ){
122777   int rc;                         /* Return code */
122778   int eType = pExpr->eType;       /* Type of expression node pExpr */
122779
122780   if( eType!=FTSQUERY_PHRASE ){
122781     assert( pExpr->pLeft && pExpr->pRight );
122782     rc = fts3ExprIterate2(pExpr->pLeft, piPhrase, x, pCtx);
122783     if( rc==SQLITE_OK && eType!=FTSQUERY_NOT ){
122784       rc = fts3ExprIterate2(pExpr->pRight, piPhrase, x, pCtx);
122785     }
122786   }else{
122787     rc = x(pExpr, *piPhrase, pCtx);
122788     (*piPhrase)++;
122789   }
122790   return rc;
122791 }
122792
122793 /*
122794 ** Iterate through all phrase nodes in an FTS3 query, except those that
122795 ** are part of a sub-tree that is the right-hand-side of a NOT operator.
122796 ** For each phrase node found, the supplied callback function is invoked.
122797 **
122798 ** If the callback function returns anything other than SQLITE_OK, 
122799 ** the iteration is abandoned and the error code returned immediately.
122800 ** Otherwise, SQLITE_OK is returned after a callback has been made for
122801 ** all eligible phrase nodes.
122802 */
122803 static int fts3ExprIterate(
122804   Fts3Expr *pExpr,                /* Expression to iterate phrases of */
122805   int (*x)(Fts3Expr*,int,void*),  /* Callback function to invoke for phrases */
122806   void *pCtx                      /* Second argument to pass to callback */
122807 ){
122808   int iPhrase = 0;                /* Variable used as the phrase counter */
122809   return fts3ExprIterate2(pExpr, &iPhrase, x, pCtx);
122810 }
122811
122812 /*
122813 ** The argument to this function is always a phrase node. Its doclist 
122814 ** (Fts3Expr.aDoclist[]) and the doclists associated with all phrase nodes
122815 ** to the left of this one in the query tree have already been loaded.
122816 **
122817 ** If this phrase node is part of a series of phrase nodes joined by 
122818 ** NEAR operators (and is not the left-most of said series), then elements are
122819 ** removed from the phrases doclist consistent with the NEAR restriction. If
122820 ** required, elements may be removed from the doclists of phrases to the
122821 ** left of this one that are part of the same series of NEAR operator 
122822 ** connected phrases.
122823 **
122824 ** If an OOM error occurs, SQLITE_NOMEM is returned. Otherwise, SQLITE_OK.
122825 */
122826 static int fts3ExprNearTrim(Fts3Expr *pExpr){
122827   int rc = SQLITE_OK;
122828   Fts3Expr *pParent = pExpr->pParent;
122829
122830   assert( pExpr->eType==FTSQUERY_PHRASE );
122831   while( rc==SQLITE_OK
122832    && pParent 
122833    && pParent->eType==FTSQUERY_NEAR 
122834    && pParent->pRight==pExpr 
122835   ){
122836     /* This expression (pExpr) is the right-hand-side of a NEAR operator. 
122837     ** Find the expression to the left of the same operator.
122838     */
122839     int nNear = pParent->nNear;
122840     Fts3Expr *pLeft = pParent->pLeft;
122841
122842     if( pLeft->eType!=FTSQUERY_PHRASE ){
122843       assert( pLeft->eType==FTSQUERY_NEAR );
122844       assert( pLeft->pRight->eType==FTSQUERY_PHRASE );
122845       pLeft = pLeft->pRight;
122846     }
122847
122848     rc = sqlite3Fts3ExprNearTrim(pLeft, pExpr, nNear);
122849
122850     pExpr = pLeft;
122851     pParent = pExpr->pParent;
122852   }
122853
122854   return rc;
122855 }
122856
122857 /*
122858 ** This is an fts3ExprIterate() callback used while loading the doclists
122859 ** for each phrase into Fts3Expr.aDoclist[]/nDoclist. See also
122860 ** fts3ExprLoadDoclists().
122861 */
122862 static int fts3ExprLoadDoclistsCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
122863   int rc = SQLITE_OK;
122864   LoadDoclistCtx *p = (LoadDoclistCtx *)ctx;
122865
122866   UNUSED_PARAMETER(iPhrase);
122867
122868   p->nPhrase++;
122869   p->nToken += pExpr->pPhrase->nToken;
122870
122871   if( pExpr->isLoaded==0 ){
122872     rc = sqlite3Fts3ExprLoadDoclist(p->pCsr, pExpr);
122873     pExpr->isLoaded = 1;
122874     if( rc==SQLITE_OK ){
122875       rc = fts3ExprNearTrim(pExpr);
122876     }
122877   }
122878
122879   return rc;
122880 }
122881
122882 /*
122883 ** Load the doclists for each phrase in the query associated with FTS3 cursor
122884 ** pCsr. 
122885 **
122886 ** If pnPhrase is not NULL, then *pnPhrase is set to the number of matchable 
122887 ** phrases in the expression (all phrases except those directly or 
122888 ** indirectly descended from the right-hand-side of a NOT operator). If 
122889 ** pnToken is not NULL, then it is set to the number of tokens in all
122890 ** matchable phrases of the expression.
122891 */
122892 static int fts3ExprLoadDoclists(
122893   Fts3Cursor *pCsr,               /* Fts3 cursor for current query */
122894   int *pnPhrase,                  /* OUT: Number of phrases in query */
122895   int *pnToken                    /* OUT: Number of tokens in query */
122896 ){
122897   int rc;                         /* Return Code */
122898   LoadDoclistCtx sCtx = {0,0,0};  /* Context for fts3ExprIterate() */
122899   sCtx.pCsr = pCsr;
122900   rc = fts3ExprIterate(pCsr->pExpr, fts3ExprLoadDoclistsCb, (void *)&sCtx);
122901   if( pnPhrase ) *pnPhrase = sCtx.nPhrase;
122902   if( pnToken ) *pnToken = sCtx.nToken;
122903   return rc;
122904 }
122905
122906 static int fts3ExprPhraseCountCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
122907   (*(int *)ctx)++;
122908   UNUSED_PARAMETER(pExpr);
122909   UNUSED_PARAMETER(iPhrase);
122910   return SQLITE_OK;
122911 }
122912 static int fts3ExprPhraseCount(Fts3Expr *pExpr){
122913   int nPhrase = 0;
122914   (void)fts3ExprIterate(pExpr, fts3ExprPhraseCountCb, (void *)&nPhrase);
122915   return nPhrase;
122916 }
122917
122918 /*
122919 ** Advance the position list iterator specified by the first two 
122920 ** arguments so that it points to the first element with a value greater
122921 ** than or equal to parameter iNext.
122922 */
122923 static void fts3SnippetAdvance(char **ppIter, int *piIter, int iNext){
122924   char *pIter = *ppIter;
122925   if( pIter ){
122926     int iIter = *piIter;
122927
122928     while( iIter<iNext ){
122929       if( 0==(*pIter & 0xFE) ){
122930         iIter = -1;
122931         pIter = 0;
122932         break;
122933       }
122934       fts3GetDeltaPosition(&pIter, &iIter);
122935     }
122936
122937     *piIter = iIter;
122938     *ppIter = pIter;
122939   }
122940 }
122941
122942 /*
122943 ** Advance the snippet iterator to the next candidate snippet.
122944 */
122945 static int fts3SnippetNextCandidate(SnippetIter *pIter){
122946   int i;                          /* Loop counter */
122947
122948   if( pIter->iCurrent<0 ){
122949     /* The SnippetIter object has just been initialized. The first snippet
122950     ** candidate always starts at offset 0 (even if this candidate has a
122951     ** score of 0.0).
122952     */
122953     pIter->iCurrent = 0;
122954
122955     /* Advance the 'head' iterator of each phrase to the first offset that
122956     ** is greater than or equal to (iNext+nSnippet).
122957     */
122958     for(i=0; i<pIter->nPhrase; i++){
122959       SnippetPhrase *pPhrase = &pIter->aPhrase[i];
122960       fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, pIter->nSnippet);
122961     }
122962   }else{
122963     int iStart;
122964     int iEnd = 0x7FFFFFFF;
122965
122966     for(i=0; i<pIter->nPhrase; i++){
122967       SnippetPhrase *pPhrase = &pIter->aPhrase[i];
122968       if( pPhrase->pHead && pPhrase->iHead<iEnd ){
122969         iEnd = pPhrase->iHead;
122970       }
122971     }
122972     if( iEnd==0x7FFFFFFF ){
122973       return 1;
122974     }
122975
122976     pIter->iCurrent = iStart = iEnd - pIter->nSnippet + 1;
122977     for(i=0; i<pIter->nPhrase; i++){
122978       SnippetPhrase *pPhrase = &pIter->aPhrase[i];
122979       fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, iEnd+1);
122980       fts3SnippetAdvance(&pPhrase->pTail, &pPhrase->iTail, iStart);
122981     }
122982   }
122983
122984   return 0;
122985 }
122986
122987 /*
122988 ** Retrieve information about the current candidate snippet of snippet 
122989 ** iterator pIter.
122990 */
122991 static void fts3SnippetDetails(
122992   SnippetIter *pIter,             /* Snippet iterator */
122993   u64 mCovered,                   /* Bitmask of phrases already covered */
122994   int *piToken,                   /* OUT: First token of proposed snippet */
122995   int *piScore,                   /* OUT: "Score" for this snippet */
122996   u64 *pmCover,                   /* OUT: Bitmask of phrases covered */
122997   u64 *pmHighlight                /* OUT: Bitmask of terms to highlight */
122998 ){
122999   int iStart = pIter->iCurrent;   /* First token of snippet */
123000   int iScore = 0;                 /* Score of this snippet */
123001   int i;                          /* Loop counter */
123002   u64 mCover = 0;                 /* Mask of phrases covered by this snippet */
123003   u64 mHighlight = 0;             /* Mask of tokens to highlight in snippet */
123004
123005   for(i=0; i<pIter->nPhrase; i++){
123006     SnippetPhrase *pPhrase = &pIter->aPhrase[i];
123007     if( pPhrase->pTail ){
123008       char *pCsr = pPhrase->pTail;
123009       int iCsr = pPhrase->iTail;
123010
123011       while( iCsr<(iStart+pIter->nSnippet) ){
123012         int j;
123013         u64 mPhrase = (u64)1 << i;
123014         u64 mPos = (u64)1 << (iCsr - iStart);
123015         assert( iCsr>=iStart );
123016         if( (mCover|mCovered)&mPhrase ){
123017           iScore++;
123018         }else{
123019           iScore += 1000;
123020         }
123021         mCover |= mPhrase;
123022
123023         for(j=0; j<pPhrase->nToken; j++){
123024           mHighlight |= (mPos>>j);
123025         }
123026
123027         if( 0==(*pCsr & 0x0FE) ) break;
123028         fts3GetDeltaPosition(&pCsr, &iCsr);
123029       }
123030     }
123031   }
123032
123033   /* Set the output variables before returning. */
123034   *piToken = iStart;
123035   *piScore = iScore;
123036   *pmCover = mCover;
123037   *pmHighlight = mHighlight;
123038 }
123039
123040 /*
123041 ** This function is an fts3ExprIterate() callback used by fts3BestSnippet().
123042 ** Each invocation populates an element of the SnippetIter.aPhrase[] array.
123043 */
123044 static int fts3SnippetFindPositions(Fts3Expr *pExpr, int iPhrase, void *ctx){
123045   SnippetIter *p = (SnippetIter *)ctx;
123046   SnippetPhrase *pPhrase = &p->aPhrase[iPhrase];
123047   char *pCsr;
123048
123049   pPhrase->nToken = pExpr->pPhrase->nToken;
123050
123051   pCsr = sqlite3Fts3FindPositions(pExpr, p->pCsr->iPrevId, p->iCol);
123052   if( pCsr ){
123053     int iFirst = 0;
123054     pPhrase->pList = pCsr;
123055     fts3GetDeltaPosition(&pCsr, &iFirst);
123056     pPhrase->pHead = pCsr;
123057     pPhrase->pTail = pCsr;
123058     pPhrase->iHead = iFirst;
123059     pPhrase->iTail = iFirst;
123060   }else{
123061     assert( pPhrase->pList==0 && pPhrase->pHead==0 && pPhrase->pTail==0 );
123062   }
123063
123064   return SQLITE_OK;
123065 }
123066
123067 /*
123068 ** Select the fragment of text consisting of nFragment contiguous tokens 
123069 ** from column iCol that represent the "best" snippet. The best snippet
123070 ** is the snippet with the highest score, where scores are calculated
123071 ** by adding:
123072 **
123073 **   (a) +1 point for each occurence of a matchable phrase in the snippet.
123074 **
123075 **   (b) +1000 points for the first occurence of each matchable phrase in 
123076 **       the snippet for which the corresponding mCovered bit is not set.
123077 **
123078 ** The selected snippet parameters are stored in structure *pFragment before
123079 ** returning. The score of the selected snippet is stored in *piScore
123080 ** before returning.
123081 */
123082 static int fts3BestSnippet(
123083   int nSnippet,                   /* Desired snippet length */
123084   Fts3Cursor *pCsr,               /* Cursor to create snippet for */
123085   int iCol,                       /* Index of column to create snippet from */
123086   u64 mCovered,                   /* Mask of phrases already covered */
123087   u64 *pmSeen,                    /* IN/OUT: Mask of phrases seen */
123088   SnippetFragment *pFragment,     /* OUT: Best snippet found */
123089   int *piScore                    /* OUT: Score of snippet pFragment */
123090 ){
123091   int rc;                         /* Return Code */
123092   int nList;                      /* Number of phrases in expression */
123093   SnippetIter sIter;              /* Iterates through snippet candidates */
123094   int nByte;                      /* Number of bytes of space to allocate */
123095   int iBestScore = -1;            /* Best snippet score found so far */
123096   int i;                          /* Loop counter */
123097
123098   memset(&sIter, 0, sizeof(sIter));
123099
123100   /* Iterate through the phrases in the expression to count them. The same
123101   ** callback makes sure the doclists are loaded for each phrase.
123102   */
123103   rc = fts3ExprLoadDoclists(pCsr, &nList, 0);
123104   if( rc!=SQLITE_OK ){
123105     return rc;
123106   }
123107
123108   /* Now that it is known how many phrases there are, allocate and zero
123109   ** the required space using malloc().
123110   */
123111   nByte = sizeof(SnippetPhrase) * nList;
123112   sIter.aPhrase = (SnippetPhrase *)sqlite3_malloc(nByte);
123113   if( !sIter.aPhrase ){
123114     return SQLITE_NOMEM;
123115   }
123116   memset(sIter.aPhrase, 0, nByte);
123117
123118   /* Initialize the contents of the SnippetIter object. Then iterate through
123119   ** the set of phrases in the expression to populate the aPhrase[] array.
123120   */
123121   sIter.pCsr = pCsr;
123122   sIter.iCol = iCol;
123123   sIter.nSnippet = nSnippet;
123124   sIter.nPhrase = nList;
123125   sIter.iCurrent = -1;
123126   (void)fts3ExprIterate(pCsr->pExpr, fts3SnippetFindPositions, (void *)&sIter);
123127
123128   /* Set the *pmSeen output variable. */
123129   for(i=0; i<nList; i++){
123130     if( sIter.aPhrase[i].pHead ){
123131       *pmSeen |= (u64)1 << i;
123132     }
123133   }
123134
123135   /* Loop through all candidate snippets. Store the best snippet in 
123136   ** *pFragment. Store its associated 'score' in iBestScore.
123137   */
123138   pFragment->iCol = iCol;
123139   while( !fts3SnippetNextCandidate(&sIter) ){
123140     int iPos;
123141     int iScore;
123142     u64 mCover;
123143     u64 mHighlight;
123144     fts3SnippetDetails(&sIter, mCovered, &iPos, &iScore, &mCover, &mHighlight);
123145     assert( iScore>=0 );
123146     if( iScore>iBestScore ){
123147       pFragment->iPos = iPos;
123148       pFragment->hlmask = mHighlight;
123149       pFragment->covered = mCover;
123150       iBestScore = iScore;
123151     }
123152   }
123153
123154   sqlite3_free(sIter.aPhrase);
123155   *piScore = iBestScore;
123156   return SQLITE_OK;
123157 }
123158
123159
123160 /*
123161 ** Append a string to the string-buffer passed as the first argument.
123162 **
123163 ** If nAppend is negative, then the length of the string zAppend is
123164 ** determined using strlen().
123165 */
123166 static int fts3StringAppend(
123167   StrBuffer *pStr,                /* Buffer to append to */
123168   const char *zAppend,            /* Pointer to data to append to buffer */
123169   int nAppend                     /* Size of zAppend in bytes (or -1) */
123170 ){
123171   if( nAppend<0 ){
123172     nAppend = (int)strlen(zAppend);
123173   }
123174
123175   /* If there is insufficient space allocated at StrBuffer.z, use realloc()
123176   ** to grow the buffer until so that it is big enough to accomadate the
123177   ** appended data.
123178   */
123179   if( pStr->n+nAppend+1>=pStr->nAlloc ){
123180     int nAlloc = pStr->nAlloc+nAppend+100;
123181     char *zNew = sqlite3_realloc(pStr->z, nAlloc);
123182     if( !zNew ){
123183       return SQLITE_NOMEM;
123184     }
123185     pStr->z = zNew;
123186     pStr->nAlloc = nAlloc;
123187   }
123188
123189   /* Append the data to the string buffer. */
123190   memcpy(&pStr->z[pStr->n], zAppend, nAppend);
123191   pStr->n += nAppend;
123192   pStr->z[pStr->n] = '\0';
123193
123194   return SQLITE_OK;
123195 }
123196
123197 /*
123198 ** The fts3BestSnippet() function often selects snippets that end with a
123199 ** query term. That is, the final term of the snippet is always a term
123200 ** that requires highlighting. For example, if 'X' is a highlighted term
123201 ** and '.' is a non-highlighted term, BestSnippet() may select:
123202 **
123203 **     ........X.....X
123204 **
123205 ** This function "shifts" the beginning of the snippet forward in the 
123206 ** document so that there are approximately the same number of 
123207 ** non-highlighted terms to the right of the final highlighted term as there
123208 ** are to the left of the first highlighted term. For example, to this:
123209 **
123210 **     ....X.....X....
123211 **
123212 ** This is done as part of extracting the snippet text, not when selecting
123213 ** the snippet. Snippet selection is done based on doclists only, so there
123214 ** is no way for fts3BestSnippet() to know whether or not the document 
123215 ** actually contains terms that follow the final highlighted term. 
123216 */
123217 static int fts3SnippetShift(
123218   Fts3Table *pTab,                /* FTS3 table snippet comes from */
123219   int nSnippet,                   /* Number of tokens desired for snippet */
123220   const char *zDoc,               /* Document text to extract snippet from */
123221   int nDoc,                       /* Size of buffer zDoc in bytes */
123222   int *piPos,                     /* IN/OUT: First token of snippet */
123223   u64 *pHlmask                    /* IN/OUT: Mask of tokens to highlight */
123224 ){
123225   u64 hlmask = *pHlmask;          /* Local copy of initial highlight-mask */
123226
123227   if( hlmask ){
123228     int nLeft;                    /* Tokens to the left of first highlight */
123229     int nRight;                   /* Tokens to the right of last highlight */
123230     int nDesired;                 /* Ideal number of tokens to shift forward */
123231
123232     for(nLeft=0; !(hlmask & ((u64)1 << nLeft)); nLeft++);
123233     for(nRight=0; !(hlmask & ((u64)1 << (nSnippet-1-nRight))); nRight++);
123234     nDesired = (nLeft-nRight)/2;
123235
123236     /* Ideally, the start of the snippet should be pushed forward in the
123237     ** document nDesired tokens. This block checks if there are actually
123238     ** nDesired tokens to the right of the snippet. If so, *piPos and
123239     ** *pHlMask are updated to shift the snippet nDesired tokens to the
123240     ** right. Otherwise, the snippet is shifted by the number of tokens
123241     ** available.
123242     */
123243     if( nDesired>0 ){
123244       int nShift;                 /* Number of tokens to shift snippet by */
123245       int iCurrent = 0;           /* Token counter */
123246       int rc;                     /* Return Code */
123247       sqlite3_tokenizer_module *pMod;
123248       sqlite3_tokenizer_cursor *pC;
123249       pMod = (sqlite3_tokenizer_module *)pTab->pTokenizer->pModule;
123250
123251       /* Open a cursor on zDoc/nDoc. Check if there are (nSnippet+nDesired)
123252       ** or more tokens in zDoc/nDoc.
123253       */
123254       rc = pMod->xOpen(pTab->pTokenizer, zDoc, nDoc, &pC);
123255       if( rc!=SQLITE_OK ){
123256         return rc;
123257       }
123258       pC->pTokenizer = pTab->pTokenizer;
123259       while( rc==SQLITE_OK && iCurrent<(nSnippet+nDesired) ){
123260         const char *ZDUMMY; int DUMMY1, DUMMY2, DUMMY3;
123261         rc = pMod->xNext(pC, &ZDUMMY, &DUMMY1, &DUMMY2, &DUMMY3, &iCurrent);
123262       }
123263       pMod->xClose(pC);
123264       if( rc!=SQLITE_OK && rc!=SQLITE_DONE ){ return rc; }
123265
123266       nShift = (rc==SQLITE_DONE)+iCurrent-nSnippet;
123267       assert( nShift<=nDesired );
123268       if( nShift>0 ){
123269         *piPos += nShift;
123270         *pHlmask = hlmask >> nShift;
123271       }
123272     }
123273   }
123274   return SQLITE_OK;
123275 }
123276
123277 /*
123278 ** Extract the snippet text for fragment pFragment from cursor pCsr and
123279 ** append it to string buffer pOut.
123280 */
123281 static int fts3SnippetText(
123282   Fts3Cursor *pCsr,               /* FTS3 Cursor */
123283   SnippetFragment *pFragment,     /* Snippet to extract */
123284   int iFragment,                  /* Fragment number */
123285   int isLast,                     /* True for final fragment in snippet */
123286   int nSnippet,                   /* Number of tokens in extracted snippet */
123287   const char *zOpen,              /* String inserted before highlighted term */
123288   const char *zClose,             /* String inserted after highlighted term */
123289   const char *zEllipsis,          /* String inserted between snippets */
123290   StrBuffer *pOut                 /* Write output here */
123291 ){
123292   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
123293   int rc;                         /* Return code */
123294   const char *zDoc;               /* Document text to extract snippet from */
123295   int nDoc;                       /* Size of zDoc in bytes */
123296   int iCurrent = 0;               /* Current token number of document */
123297   int iEnd = 0;                   /* Byte offset of end of current token */
123298   int isShiftDone = 0;            /* True after snippet is shifted */
123299   int iPos = pFragment->iPos;     /* First token of snippet */
123300   u64 hlmask = pFragment->hlmask; /* Highlight-mask for snippet */
123301   int iCol = pFragment->iCol+1;   /* Query column to extract text from */
123302   sqlite3_tokenizer_module *pMod; /* Tokenizer module methods object */
123303   sqlite3_tokenizer_cursor *pC;   /* Tokenizer cursor open on zDoc/nDoc */
123304   const char *ZDUMMY;             /* Dummy argument used with tokenizer */
123305   int DUMMY1;                     /* Dummy argument used with tokenizer */
123306   
123307   zDoc = (const char *)sqlite3_column_text(pCsr->pStmt, iCol);
123308   if( zDoc==0 ){
123309     if( sqlite3_column_type(pCsr->pStmt, iCol)!=SQLITE_NULL ){
123310       return SQLITE_NOMEM;
123311     }
123312     return SQLITE_OK;
123313   }
123314   nDoc = sqlite3_column_bytes(pCsr->pStmt, iCol);
123315
123316   /* Open a token cursor on the document. */
123317   pMod = (sqlite3_tokenizer_module *)pTab->pTokenizer->pModule;
123318   rc = pMod->xOpen(pTab->pTokenizer, zDoc, nDoc, &pC);
123319   if( rc!=SQLITE_OK ){
123320     return rc;
123321   }
123322   pC->pTokenizer = pTab->pTokenizer;
123323
123324   while( rc==SQLITE_OK ){
123325     int iBegin;                   /* Offset in zDoc of start of token */
123326     int iFin;                     /* Offset in zDoc of end of token */
123327     int isHighlight;              /* True for highlighted terms */
123328
123329     rc = pMod->xNext(pC, &ZDUMMY, &DUMMY1, &iBegin, &iFin, &iCurrent);
123330     if( rc!=SQLITE_OK ){
123331       if( rc==SQLITE_DONE ){
123332         /* Special case - the last token of the snippet is also the last token
123333         ** of the column. Append any punctuation that occurred between the end
123334         ** of the previous token and the end of the document to the output. 
123335         ** Then break out of the loop. */
123336         rc = fts3StringAppend(pOut, &zDoc[iEnd], -1);
123337       }
123338       break;
123339     }
123340     if( iCurrent<iPos ){ continue; }
123341
123342     if( !isShiftDone ){
123343       int n = nDoc - iBegin;
123344       rc = fts3SnippetShift(pTab, nSnippet, &zDoc[iBegin], n, &iPos, &hlmask);
123345       isShiftDone = 1;
123346
123347       /* Now that the shift has been done, check if the initial "..." are
123348       ** required. They are required if (a) this is not the first fragment,
123349       ** or (b) this fragment does not begin at position 0 of its column. 
123350       */
123351       if( rc==SQLITE_OK && (iPos>0 || iFragment>0) ){
123352         rc = fts3StringAppend(pOut, zEllipsis, -1);
123353       }
123354       if( rc!=SQLITE_OK || iCurrent<iPos ) continue;
123355     }
123356
123357     if( iCurrent>=(iPos+nSnippet) ){
123358       if( isLast ){
123359         rc = fts3StringAppend(pOut, zEllipsis, -1);
123360       }
123361       break;
123362     }
123363
123364     /* Set isHighlight to true if this term should be highlighted. */
123365     isHighlight = (hlmask & ((u64)1 << (iCurrent-iPos)))!=0;
123366
123367     if( iCurrent>iPos ) rc = fts3StringAppend(pOut, &zDoc[iEnd], iBegin-iEnd);
123368     if( rc==SQLITE_OK && isHighlight ) rc = fts3StringAppend(pOut, zOpen, -1);
123369     if( rc==SQLITE_OK ) rc = fts3StringAppend(pOut, &zDoc[iBegin], iFin-iBegin);
123370     if( rc==SQLITE_OK && isHighlight ) rc = fts3StringAppend(pOut, zClose, -1);
123371
123372     iEnd = iFin;
123373   }
123374
123375   pMod->xClose(pC);
123376   return rc;
123377 }
123378
123379
123380 /*
123381 ** This function is used to count the entries in a column-list (a 
123382 ** delta-encoded list of term offsets within a single column of a single 
123383 ** row). When this function is called, *ppCollist should point to the
123384 ** beginning of the first varint in the column-list (the varint that
123385 ** contains the position of the first matching term in the column data).
123386 ** Before returning, *ppCollist is set to point to the first byte after
123387 ** the last varint in the column-list (either the 0x00 signifying the end
123388 ** of the position-list, or the 0x01 that precedes the column number of
123389 ** the next column in the position-list).
123390 **
123391 ** The number of elements in the column-list is returned.
123392 */
123393 static int fts3ColumnlistCount(char **ppCollist){
123394   char *pEnd = *ppCollist;
123395   char c = 0;
123396   int nEntry = 0;
123397
123398   /* A column-list is terminated by either a 0x01 or 0x00. */
123399   while( 0xFE & (*pEnd | c) ){
123400     c = *pEnd++ & 0x80;
123401     if( !c ) nEntry++;
123402   }
123403
123404   *ppCollist = pEnd;
123405   return nEntry;
123406 }
123407
123408 static void fts3LoadColumnlistCounts(char **pp, u32 *aOut, int isGlobal){
123409   char *pCsr = *pp;
123410   while( *pCsr ){
123411     int nHit;
123412     sqlite3_int64 iCol = 0;
123413     if( *pCsr==0x01 ){
123414       pCsr++;
123415       pCsr += sqlite3Fts3GetVarint(pCsr, &iCol);
123416     }
123417     nHit = fts3ColumnlistCount(&pCsr);
123418     assert( nHit>0 );
123419     if( isGlobal ){
123420       aOut[iCol*3+1]++;
123421     }
123422     aOut[iCol*3] += nHit;
123423   }
123424   pCsr++;
123425   *pp = pCsr;
123426 }
123427
123428 /*
123429 ** fts3ExprIterate() callback used to collect the "global" matchinfo stats
123430 ** for a single query. 
123431 **
123432 ** fts3ExprIterate() callback to load the 'global' elements of a
123433 ** FTS3_MATCHINFO_HITS matchinfo array. The global stats are those elements 
123434 ** of the matchinfo array that are constant for all rows returned by the 
123435 ** current query.
123436 **
123437 ** Argument pCtx is actually a pointer to a struct of type MatchInfo. This
123438 ** function populates Matchinfo.aMatchinfo[] as follows:
123439 **
123440 **   for(iCol=0; iCol<nCol; iCol++){
123441 **     aMatchinfo[3*iPhrase*nCol + 3*iCol + 1] = X;
123442 **     aMatchinfo[3*iPhrase*nCol + 3*iCol + 2] = Y;
123443 **   }
123444 **
123445 ** where X is the number of matches for phrase iPhrase is column iCol of all
123446 ** rows of the table. Y is the number of rows for which column iCol contains
123447 ** at least one instance of phrase iPhrase.
123448 **
123449 ** If the phrase pExpr consists entirely of deferred tokens, then all X and
123450 ** Y values are set to nDoc, where nDoc is the number of documents in the 
123451 ** file system. This is done because the full-text index doclist is required
123452 ** to calculate these values properly, and the full-text index doclist is
123453 ** not available for deferred tokens.
123454 */
123455 static int fts3ExprGlobalHitsCb(
123456   Fts3Expr *pExpr,                /* Phrase expression node */
123457   int iPhrase,                    /* Phrase number (numbered from zero) */
123458   void *pCtx                      /* Pointer to MatchInfo structure */
123459 ){
123460   MatchInfo *p = (MatchInfo *)pCtx;
123461   Fts3Cursor *pCsr = p->pCursor;
123462   char *pIter;
123463   char *pEnd;
123464   char *pFree = 0;
123465   u32 *aOut = &p->aMatchinfo[3*iPhrase*p->nCol];
123466
123467   assert( pExpr->isLoaded );
123468   assert( pExpr->eType==FTSQUERY_PHRASE );
123469
123470   if( pCsr->pDeferred ){
123471     Fts3Phrase *pPhrase = pExpr->pPhrase;
123472     int ii;
123473     for(ii=0; ii<pPhrase->nToken; ii++){
123474       if( pPhrase->aToken[ii].bFulltext ) break;
123475     }
123476     if( ii<pPhrase->nToken ){
123477       int nFree = 0;
123478       int rc = sqlite3Fts3ExprLoadFtDoclist(pCsr, pExpr, &pFree, &nFree);
123479       if( rc!=SQLITE_OK ) return rc;
123480       pIter = pFree;
123481       pEnd = &pFree[nFree];
123482     }else{
123483       int iCol;                   /* Column index */
123484       for(iCol=0; iCol<p->nCol; iCol++){
123485         aOut[iCol*3 + 1] = (u32)p->nDoc;
123486         aOut[iCol*3 + 2] = (u32)p->nDoc;
123487       }
123488       return SQLITE_OK;
123489     }
123490   }else{
123491     pIter = pExpr->aDoclist;
123492     pEnd = &pExpr->aDoclist[pExpr->nDoclist];
123493   }
123494
123495   /* Fill in the global hit count matrix row for this phrase. */
123496   while( pIter<pEnd ){
123497     while( *pIter++ & 0x80 );      /* Skip past docid. */
123498     fts3LoadColumnlistCounts(&pIter, &aOut[1], 1);
123499   }
123500
123501   sqlite3_free(pFree);
123502   return SQLITE_OK;
123503 }
123504
123505 /*
123506 ** fts3ExprIterate() callback used to collect the "local" part of the
123507 ** FTS3_MATCHINFO_HITS array. The local stats are those elements of the 
123508 ** array that are different for each row returned by the query.
123509 */
123510 static int fts3ExprLocalHitsCb(
123511   Fts3Expr *pExpr,                /* Phrase expression node */
123512   int iPhrase,                    /* Phrase number */
123513   void *pCtx                      /* Pointer to MatchInfo structure */
123514 ){
123515   MatchInfo *p = (MatchInfo *)pCtx;
123516   int iStart = iPhrase * p->nCol * 3;
123517   int i;
123518
123519   for(i=0; i<p->nCol; i++) p->aMatchinfo[iStart+i*3] = 0;
123520
123521   if( pExpr->aDoclist ){
123522     char *pCsr;
123523
123524     pCsr = sqlite3Fts3FindPositions(pExpr, p->pCursor->iPrevId, -1);
123525     if( pCsr ){
123526       fts3LoadColumnlistCounts(&pCsr, &p->aMatchinfo[iStart], 0);
123527     }
123528   }
123529
123530   return SQLITE_OK;
123531 }
123532
123533 static int fts3MatchinfoCheck(
123534   Fts3Table *pTab, 
123535   char cArg,
123536   char **pzErr
123537 ){
123538   if( (cArg==FTS3_MATCHINFO_NPHRASE)
123539    || (cArg==FTS3_MATCHINFO_NCOL)
123540    || (cArg==FTS3_MATCHINFO_NDOC && pTab->bHasStat)
123541    || (cArg==FTS3_MATCHINFO_AVGLENGTH && pTab->bHasStat)
123542    || (cArg==FTS3_MATCHINFO_LENGTH && pTab->bHasDocsize)
123543    || (cArg==FTS3_MATCHINFO_LCS)
123544    || (cArg==FTS3_MATCHINFO_HITS)
123545   ){
123546     return SQLITE_OK;
123547   }
123548   *pzErr = sqlite3_mprintf("unrecognized matchinfo request: %c", cArg);
123549   return SQLITE_ERROR;
123550 }
123551
123552 static int fts3MatchinfoSize(MatchInfo *pInfo, char cArg){
123553   int nVal;                       /* Number of integers output by cArg */
123554
123555   switch( cArg ){
123556     case FTS3_MATCHINFO_NDOC:
123557     case FTS3_MATCHINFO_NPHRASE: 
123558     case FTS3_MATCHINFO_NCOL: 
123559       nVal = 1;
123560       break;
123561
123562     case FTS3_MATCHINFO_AVGLENGTH:
123563     case FTS3_MATCHINFO_LENGTH:
123564     case FTS3_MATCHINFO_LCS:
123565       nVal = pInfo->nCol;
123566       break;
123567
123568     default:
123569       assert( cArg==FTS3_MATCHINFO_HITS );
123570       nVal = pInfo->nCol * pInfo->nPhrase * 3;
123571       break;
123572   }
123573
123574   return nVal;
123575 }
123576
123577 static int fts3MatchinfoSelectDoctotal(
123578   Fts3Table *pTab,
123579   sqlite3_stmt **ppStmt,
123580   sqlite3_int64 *pnDoc,
123581   const char **paLen
123582 ){
123583   sqlite3_stmt *pStmt;
123584   const char *a;
123585   sqlite3_int64 nDoc;
123586
123587   if( !*ppStmt ){
123588     int rc = sqlite3Fts3SelectDoctotal(pTab, ppStmt);
123589     if( rc!=SQLITE_OK ) return rc;
123590   }
123591   pStmt = *ppStmt;
123592   assert( sqlite3_data_count(pStmt)==1 );
123593
123594   a = sqlite3_column_blob(pStmt, 0);
123595   a += sqlite3Fts3GetVarint(a, &nDoc);
123596   if( nDoc==0 ) return SQLITE_CORRUPT;
123597   *pnDoc = (u32)nDoc;
123598
123599   if( paLen ) *paLen = a;
123600   return SQLITE_OK;
123601 }
123602
123603 /*
123604 ** An instance of the following structure is used to store state while 
123605 ** iterating through a multi-column position-list corresponding to the
123606 ** hits for a single phrase on a single row in order to calculate the
123607 ** values for a matchinfo() FTS3_MATCHINFO_LCS request.
123608 */
123609 typedef struct LcsIterator LcsIterator;
123610 struct LcsIterator {
123611   Fts3Expr *pExpr;                /* Pointer to phrase expression */
123612   char *pRead;                    /* Cursor used to iterate through aDoclist */
123613   int iPosOffset;                 /* Tokens count up to end of this phrase */
123614   int iCol;                       /* Current column number */
123615   int iPos;                       /* Current position */
123616 };
123617
123618 /* 
123619 ** If LcsIterator.iCol is set to the following value, the iterator has
123620 ** finished iterating through all offsets for all columns.
123621 */
123622 #define LCS_ITERATOR_FINISHED 0x7FFFFFFF;
123623
123624 static int fts3MatchinfoLcsCb(
123625   Fts3Expr *pExpr,                /* Phrase expression node */
123626   int iPhrase,                    /* Phrase number (numbered from zero) */
123627   void *pCtx                      /* Pointer to MatchInfo structure */
123628 ){
123629   LcsIterator *aIter = (LcsIterator *)pCtx;
123630   aIter[iPhrase].pExpr = pExpr;
123631   return SQLITE_OK;
123632 }
123633
123634 /*
123635 ** Advance the iterator passed as an argument to the next position. Return
123636 ** 1 if the iterator is at EOF or if it now points to the start of the
123637 ** position list for the next column.
123638 */
123639 static int fts3LcsIteratorAdvance(LcsIterator *pIter){
123640   char *pRead = pIter->pRead;
123641   sqlite3_int64 iRead;
123642   int rc = 0;
123643
123644   pRead += sqlite3Fts3GetVarint(pRead, &iRead);
123645   if( iRead==0 ){
123646     pIter->iCol = LCS_ITERATOR_FINISHED;
123647     rc = 1;
123648   }else{
123649     if( iRead==1 ){
123650       pRead += sqlite3Fts3GetVarint(pRead, &iRead);
123651       pIter->iCol = (int)iRead;
123652       pIter->iPos = pIter->iPosOffset;
123653       pRead += sqlite3Fts3GetVarint(pRead, &iRead);
123654       rc = 1;
123655     }
123656     pIter->iPos += (int)(iRead-2);
123657   }
123658
123659   pIter->pRead = pRead;
123660   return rc;
123661 }
123662   
123663 /*
123664 ** This function implements the FTS3_MATCHINFO_LCS matchinfo() flag. 
123665 **
123666 ** If the call is successful, the longest-common-substring lengths for each
123667 ** column are written into the first nCol elements of the pInfo->aMatchinfo[] 
123668 ** array before returning. SQLITE_OK is returned in this case.
123669 **
123670 ** Otherwise, if an error occurs, an SQLite error code is returned and the
123671 ** data written to the first nCol elements of pInfo->aMatchinfo[] is 
123672 ** undefined.
123673 */
123674 static int fts3MatchinfoLcs(Fts3Cursor *pCsr, MatchInfo *pInfo){
123675   LcsIterator *aIter;
123676   int i;
123677   int iCol;
123678   int nToken = 0;
123679
123680   /* Allocate and populate the array of LcsIterator objects. The array
123681   ** contains one element for each matchable phrase in the query.
123682   **/
123683   aIter = sqlite3_malloc(sizeof(LcsIterator) * pCsr->nPhrase);
123684   if( !aIter ) return SQLITE_NOMEM;
123685   memset(aIter, 0, sizeof(LcsIterator) * pCsr->nPhrase);
123686   (void)fts3ExprIterate(pCsr->pExpr, fts3MatchinfoLcsCb, (void*)aIter);
123687   for(i=0; i<pInfo->nPhrase; i++){
123688     LcsIterator *pIter = &aIter[i];
123689     nToken -= pIter->pExpr->pPhrase->nToken;
123690     pIter->iPosOffset = nToken;
123691     pIter->pRead = sqlite3Fts3FindPositions(pIter->pExpr, pCsr->iPrevId, -1);
123692     if( pIter->pRead ){
123693       pIter->iPos = pIter->iPosOffset;
123694       fts3LcsIteratorAdvance(&aIter[i]);
123695     }else{
123696       pIter->iCol = LCS_ITERATOR_FINISHED;
123697     }
123698   }
123699
123700   for(iCol=0; iCol<pInfo->nCol; iCol++){
123701     int nLcs = 0;                 /* LCS value for this column */
123702     int nLive = 0;                /* Number of iterators in aIter not at EOF */
123703
123704     /* Loop through the iterators in aIter[]. Set nLive to the number of
123705     ** iterators that point to a position-list corresponding to column iCol.
123706     */
123707     for(i=0; i<pInfo->nPhrase; i++){
123708       assert( aIter[i].iCol>=iCol );
123709       if( aIter[i].iCol==iCol ) nLive++;
123710     }
123711
123712     /* The following loop runs until all iterators in aIter[] have finished
123713     ** iterating through positions in column iCol. Exactly one of the 
123714     ** iterators is advanced each time the body of the loop is run.
123715     */
123716     while( nLive>0 ){
123717       LcsIterator *pAdv = 0;      /* The iterator to advance by one position */
123718       int nThisLcs = 0;           /* LCS for the current iterator positions */
123719
123720       for(i=0; i<pInfo->nPhrase; i++){
123721         LcsIterator *pIter = &aIter[i];
123722         if( iCol!=pIter->iCol ){  
123723           /* This iterator is already at EOF for this column. */
123724           nThisLcs = 0;
123725         }else{
123726           if( pAdv==0 || pIter->iPos<pAdv->iPos ){
123727             pAdv = pIter;
123728           }
123729           if( nThisLcs==0 || pIter->iPos==pIter[-1].iPos ){
123730             nThisLcs++;
123731           }else{
123732             nThisLcs = 1;
123733           }
123734           if( nThisLcs>nLcs ) nLcs = nThisLcs;
123735         }
123736       }
123737       if( fts3LcsIteratorAdvance(pAdv) ) nLive--;
123738     }
123739
123740     pInfo->aMatchinfo[iCol] = nLcs;
123741   }
123742
123743   sqlite3_free(aIter);
123744   return SQLITE_OK;
123745 }
123746
123747 /*
123748 ** Populate the buffer pInfo->aMatchinfo[] with an array of integers to
123749 ** be returned by the matchinfo() function. Argument zArg contains the 
123750 ** format string passed as the second argument to matchinfo (or the
123751 ** default value "pcx" if no second argument was specified). The format
123752 ** string has already been validated and the pInfo->aMatchinfo[] array
123753 ** is guaranteed to be large enough for the output.
123754 **
123755 ** If bGlobal is true, then populate all fields of the matchinfo() output.
123756 ** If it is false, then assume that those fields that do not change between
123757 ** rows (i.e. FTS3_MATCHINFO_NPHRASE, NCOL, NDOC, AVGLENGTH and part of HITS)
123758 ** have already been populated.
123759 **
123760 ** Return SQLITE_OK if successful, or an SQLite error code if an error 
123761 ** occurs. If a value other than SQLITE_OK is returned, the state the
123762 ** pInfo->aMatchinfo[] buffer is left in is undefined.
123763 */
123764 static int fts3MatchinfoValues(
123765   Fts3Cursor *pCsr,               /* FTS3 cursor object */
123766   int bGlobal,                    /* True to grab the global stats */
123767   MatchInfo *pInfo,               /* Matchinfo context object */
123768   const char *zArg                /* Matchinfo format string */
123769 ){
123770   int rc = SQLITE_OK;
123771   int i;
123772   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
123773   sqlite3_stmt *pSelect = 0;
123774
123775   for(i=0; rc==SQLITE_OK && zArg[i]; i++){
123776
123777     switch( zArg[i] ){
123778       case FTS3_MATCHINFO_NPHRASE:
123779         if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nPhrase;
123780         break;
123781
123782       case FTS3_MATCHINFO_NCOL:
123783         if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nCol;
123784         break;
123785         
123786       case FTS3_MATCHINFO_NDOC:
123787         if( bGlobal ){
123788           sqlite3_int64 nDoc;
123789           rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, 0);
123790           pInfo->aMatchinfo[0] = (u32)nDoc;
123791         }
123792         break;
123793
123794       case FTS3_MATCHINFO_AVGLENGTH: 
123795         if( bGlobal ){
123796           sqlite3_int64 nDoc;     /* Number of rows in table */
123797           const char *a;          /* Aggregate column length array */
123798
123799           rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, &a);
123800           if( rc==SQLITE_OK ){
123801             int iCol;
123802             for(iCol=0; iCol<pInfo->nCol; iCol++){
123803               u32 iVal;
123804               sqlite3_int64 nToken;
123805               a += sqlite3Fts3GetVarint(a, &nToken);
123806               iVal = (u32)(((u32)(nToken&0xffffffff)+nDoc/2)/nDoc);
123807               pInfo->aMatchinfo[iCol] = iVal;
123808             }
123809           }
123810         }
123811         break;
123812
123813       case FTS3_MATCHINFO_LENGTH: {
123814         sqlite3_stmt *pSelectDocsize = 0;
123815         rc = sqlite3Fts3SelectDocsize(pTab, pCsr->iPrevId, &pSelectDocsize);
123816         if( rc==SQLITE_OK ){
123817           int iCol;
123818           const char *a = sqlite3_column_blob(pSelectDocsize, 0);
123819           for(iCol=0; iCol<pInfo->nCol; iCol++){
123820             sqlite3_int64 nToken;
123821             a += sqlite3Fts3GetVarint(a, &nToken);
123822             pInfo->aMatchinfo[iCol] = (u32)nToken;
123823           }
123824         }
123825         sqlite3_reset(pSelectDocsize);
123826         break;
123827       }
123828
123829       case FTS3_MATCHINFO_LCS:
123830         rc = fts3ExprLoadDoclists(pCsr, 0, 0);
123831         if( rc==SQLITE_OK ){
123832           rc = fts3MatchinfoLcs(pCsr, pInfo);
123833         }
123834         break;
123835
123836       default: {
123837         Fts3Expr *pExpr;
123838         assert( zArg[i]==FTS3_MATCHINFO_HITS );
123839         pExpr = pCsr->pExpr;
123840         rc = fts3ExprLoadDoclists(pCsr, 0, 0);
123841         if( rc!=SQLITE_OK ) break;
123842         if( bGlobal ){
123843           if( pCsr->pDeferred ){
123844             rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &pInfo->nDoc, 0);
123845             if( rc!=SQLITE_OK ) break;
123846           }
123847           rc = fts3ExprIterate(pExpr, fts3ExprGlobalHitsCb,(void*)pInfo);
123848           if( rc!=SQLITE_OK ) break;
123849         }
123850         (void)fts3ExprIterate(pExpr, fts3ExprLocalHitsCb,(void*)pInfo);
123851         break;
123852       }
123853     }
123854
123855     pInfo->aMatchinfo += fts3MatchinfoSize(pInfo, zArg[i]);
123856   }
123857
123858   sqlite3_reset(pSelect);
123859   return rc;
123860 }
123861
123862
123863 /*
123864 ** Populate pCsr->aMatchinfo[] with data for the current row. The 
123865 ** 'matchinfo' data is an array of 32-bit unsigned integers (C type u32).
123866 */
123867 static int fts3GetMatchinfo(
123868   Fts3Cursor *pCsr,               /* FTS3 Cursor object */
123869   const char *zArg                /* Second argument to matchinfo() function */
123870 ){
123871   MatchInfo sInfo;
123872   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
123873   int rc = SQLITE_OK;
123874   int bGlobal = 0;                /* Collect 'global' stats as well as local */
123875
123876   memset(&sInfo, 0, sizeof(MatchInfo));
123877   sInfo.pCursor = pCsr;
123878   sInfo.nCol = pTab->nColumn;
123879
123880   /* If there is cached matchinfo() data, but the format string for the 
123881   ** cache does not match the format string for this request, discard 
123882   ** the cached data. */
123883   if( pCsr->zMatchinfo && strcmp(pCsr->zMatchinfo, zArg) ){
123884     assert( pCsr->aMatchinfo );
123885     sqlite3_free(pCsr->aMatchinfo);
123886     pCsr->zMatchinfo = 0;
123887     pCsr->aMatchinfo = 0;
123888   }
123889
123890   /* If Fts3Cursor.aMatchinfo[] is NULL, then this is the first time the
123891   ** matchinfo function has been called for this query. In this case 
123892   ** allocate the array used to accumulate the matchinfo data and
123893   ** initialize those elements that are constant for every row.
123894   */
123895   if( pCsr->aMatchinfo==0 ){
123896     int nMatchinfo = 0;           /* Number of u32 elements in match-info */
123897     int nArg;                     /* Bytes in zArg */
123898     int i;                        /* Used to iterate through zArg */
123899
123900     /* Determine the number of phrases in the query */
123901     pCsr->nPhrase = fts3ExprPhraseCount(pCsr->pExpr);
123902     sInfo.nPhrase = pCsr->nPhrase;
123903
123904     /* Determine the number of integers in the buffer returned by this call. */
123905     for(i=0; zArg[i]; i++){
123906       nMatchinfo += fts3MatchinfoSize(&sInfo, zArg[i]);
123907     }
123908
123909     /* Allocate space for Fts3Cursor.aMatchinfo[] and Fts3Cursor.zMatchinfo. */
123910     nArg = (int)strlen(zArg);
123911     pCsr->aMatchinfo = (u32 *)sqlite3_malloc(sizeof(u32)*nMatchinfo + nArg + 1);
123912     if( !pCsr->aMatchinfo ) return SQLITE_NOMEM;
123913
123914     pCsr->zMatchinfo = (char *)&pCsr->aMatchinfo[nMatchinfo];
123915     pCsr->nMatchinfo = nMatchinfo;
123916     memcpy(pCsr->zMatchinfo, zArg, nArg+1);
123917     memset(pCsr->aMatchinfo, 0, sizeof(u32)*nMatchinfo);
123918     pCsr->isMatchinfoNeeded = 1;
123919     bGlobal = 1;
123920   }
123921
123922   sInfo.aMatchinfo = pCsr->aMatchinfo;
123923   sInfo.nPhrase = pCsr->nPhrase;
123924   if( pCsr->isMatchinfoNeeded ){
123925     rc = fts3MatchinfoValues(pCsr, bGlobal, &sInfo, zArg);
123926     pCsr->isMatchinfoNeeded = 0;
123927   }
123928
123929   return rc;
123930 }
123931
123932 /*
123933 ** Implementation of snippet() function.
123934 */
123935 SQLITE_PRIVATE void sqlite3Fts3Snippet(
123936   sqlite3_context *pCtx,          /* SQLite function call context */
123937   Fts3Cursor *pCsr,               /* Cursor object */
123938   const char *zStart,             /* Snippet start text - "<b>" */
123939   const char *zEnd,               /* Snippet end text - "</b>" */
123940   const char *zEllipsis,          /* Snippet ellipsis text - "<b>...</b>" */
123941   int iCol,                       /* Extract snippet from this column */
123942   int nToken                      /* Approximate number of tokens in snippet */
123943 ){
123944   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
123945   int rc = SQLITE_OK;
123946   int i;
123947   StrBuffer res = {0, 0, 0};
123948
123949   /* The returned text includes up to four fragments of text extracted from
123950   ** the data in the current row. The first iteration of the for(...) loop
123951   ** below attempts to locate a single fragment of text nToken tokens in 
123952   ** size that contains at least one instance of all phrases in the query
123953   ** expression that appear in the current row. If such a fragment of text
123954   ** cannot be found, the second iteration of the loop attempts to locate
123955   ** a pair of fragments, and so on.
123956   */
123957   int nSnippet = 0;               /* Number of fragments in this snippet */
123958   SnippetFragment aSnippet[4];    /* Maximum of 4 fragments per snippet */
123959   int nFToken = -1;               /* Number of tokens in each fragment */
123960
123961   if( !pCsr->pExpr ){
123962     sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC);
123963     return;
123964   }
123965
123966   for(nSnippet=1; 1; nSnippet++){
123967
123968     int iSnip;                    /* Loop counter 0..nSnippet-1 */
123969     u64 mCovered = 0;             /* Bitmask of phrases covered by snippet */
123970     u64 mSeen = 0;                /* Bitmask of phrases seen by BestSnippet() */
123971
123972     if( nToken>=0 ){
123973       nFToken = (nToken+nSnippet-1) / nSnippet;
123974     }else{
123975       nFToken = -1 * nToken;
123976     }
123977
123978     for(iSnip=0; iSnip<nSnippet; iSnip++){
123979       int iBestScore = -1;        /* Best score of columns checked so far */
123980       int iRead;                  /* Used to iterate through columns */
123981       SnippetFragment *pFragment = &aSnippet[iSnip];
123982
123983       memset(pFragment, 0, sizeof(*pFragment));
123984
123985       /* Loop through all columns of the table being considered for snippets.
123986       ** If the iCol argument to this function was negative, this means all
123987       ** columns of the FTS3 table. Otherwise, only column iCol is considered.
123988       */
123989       for(iRead=0; iRead<pTab->nColumn; iRead++){
123990         SnippetFragment sF = {0, 0, 0, 0};
123991         int iS;
123992         if( iCol>=0 && iRead!=iCol ) continue;
123993
123994         /* Find the best snippet of nFToken tokens in column iRead. */
123995         rc = fts3BestSnippet(nFToken, pCsr, iRead, mCovered, &mSeen, &sF, &iS);
123996         if( rc!=SQLITE_OK ){
123997           goto snippet_out;
123998         }
123999         if( iS>iBestScore ){
124000           *pFragment = sF;
124001           iBestScore = iS;
124002         }
124003       }
124004
124005       mCovered |= pFragment->covered;
124006     }
124007
124008     /* If all query phrases seen by fts3BestSnippet() are present in at least
124009     ** one of the nSnippet snippet fragments, break out of the loop.
124010     */
124011     assert( (mCovered&mSeen)==mCovered );
124012     if( mSeen==mCovered || nSnippet==SizeofArray(aSnippet) ) break;
124013   }
124014
124015   assert( nFToken>0 );
124016
124017   for(i=0; i<nSnippet && rc==SQLITE_OK; i++){
124018     rc = fts3SnippetText(pCsr, &aSnippet[i], 
124019         i, (i==nSnippet-1), nFToken, zStart, zEnd, zEllipsis, &res
124020     );
124021   }
124022
124023  snippet_out:
124024   sqlite3Fts3SegmentsClose(pTab);
124025   if( rc!=SQLITE_OK ){
124026     sqlite3_result_error_code(pCtx, rc);
124027     sqlite3_free(res.z);
124028   }else{
124029     sqlite3_result_text(pCtx, res.z, -1, sqlite3_free);
124030   }
124031 }
124032
124033
124034 typedef struct TermOffset TermOffset;
124035 typedef struct TermOffsetCtx TermOffsetCtx;
124036
124037 struct TermOffset {
124038   char *pList;                    /* Position-list */
124039   int iPos;                       /* Position just read from pList */
124040   int iOff;                       /* Offset of this term from read positions */
124041 };
124042
124043 struct TermOffsetCtx {
124044   int iCol;                       /* Column of table to populate aTerm for */
124045   int iTerm;
124046   sqlite3_int64 iDocid;
124047   TermOffset *aTerm;
124048 };
124049
124050 /*
124051 ** This function is an fts3ExprIterate() callback used by sqlite3Fts3Offsets().
124052 */
124053 static int fts3ExprTermOffsetInit(Fts3Expr *pExpr, int iPhrase, void *ctx){
124054   TermOffsetCtx *p = (TermOffsetCtx *)ctx;
124055   int nTerm;                      /* Number of tokens in phrase */
124056   int iTerm;                      /* For looping through nTerm phrase terms */
124057   char *pList;                    /* Pointer to position list for phrase */
124058   int iPos = 0;                   /* First position in position-list */
124059
124060   UNUSED_PARAMETER(iPhrase);
124061   pList = sqlite3Fts3FindPositions(pExpr, p->iDocid, p->iCol);
124062   nTerm = pExpr->pPhrase->nToken;
124063   if( pList ){
124064     fts3GetDeltaPosition(&pList, &iPos);
124065     assert( iPos>=0 );
124066   }
124067
124068   for(iTerm=0; iTerm<nTerm; iTerm++){
124069     TermOffset *pT = &p->aTerm[p->iTerm++];
124070     pT->iOff = nTerm-iTerm-1;
124071     pT->pList = pList;
124072     pT->iPos = iPos;
124073   }
124074
124075   return SQLITE_OK;
124076 }
124077
124078 /*
124079 ** Implementation of offsets() function.
124080 */
124081 SQLITE_PRIVATE void sqlite3Fts3Offsets(
124082   sqlite3_context *pCtx,          /* SQLite function call context */
124083   Fts3Cursor *pCsr                /* Cursor object */
124084 ){
124085   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
124086   sqlite3_tokenizer_module const *pMod = pTab->pTokenizer->pModule;
124087   const char *ZDUMMY;             /* Dummy argument used with xNext() */
124088   int NDUMMY;                     /* Dummy argument used with xNext() */
124089   int rc;                         /* Return Code */
124090   int nToken;                     /* Number of tokens in query */
124091   int iCol;                       /* Column currently being processed */
124092   StrBuffer res = {0, 0, 0};      /* Result string */
124093   TermOffsetCtx sCtx;             /* Context for fts3ExprTermOffsetInit() */
124094
124095   if( !pCsr->pExpr ){
124096     sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC);
124097     return;
124098   }
124099
124100   memset(&sCtx, 0, sizeof(sCtx));
124101   assert( pCsr->isRequireSeek==0 );
124102
124103   /* Count the number of terms in the query */
124104   rc = fts3ExprLoadDoclists(pCsr, 0, &nToken);
124105   if( rc!=SQLITE_OK ) goto offsets_out;
124106
124107   /* Allocate the array of TermOffset iterators. */
124108   sCtx.aTerm = (TermOffset *)sqlite3_malloc(sizeof(TermOffset)*nToken);
124109   if( 0==sCtx.aTerm ){
124110     rc = SQLITE_NOMEM;
124111     goto offsets_out;
124112   }
124113   sCtx.iDocid = pCsr->iPrevId;
124114
124115   /* Loop through the table columns, appending offset information to 
124116   ** string-buffer res for each column.
124117   */
124118   for(iCol=0; iCol<pTab->nColumn; iCol++){
124119     sqlite3_tokenizer_cursor *pC; /* Tokenizer cursor */
124120     int iStart;
124121     int iEnd;
124122     int iCurrent;
124123     const char *zDoc;
124124     int nDoc;
124125
124126     /* Initialize the contents of sCtx.aTerm[] for column iCol. There is 
124127     ** no way that this operation can fail, so the return code from
124128     ** fts3ExprIterate() can be discarded.
124129     */
124130     sCtx.iCol = iCol;
124131     sCtx.iTerm = 0;
124132     (void)fts3ExprIterate(pCsr->pExpr, fts3ExprTermOffsetInit, (void *)&sCtx);
124133
124134     /* Retreive the text stored in column iCol. If an SQL NULL is stored 
124135     ** in column iCol, jump immediately to the next iteration of the loop.
124136     ** If an OOM occurs while retrieving the data (this can happen if SQLite
124137     ** needs to transform the data from utf-16 to utf-8), return SQLITE_NOMEM 
124138     ** to the caller. 
124139     */
124140     zDoc = (const char *)sqlite3_column_text(pCsr->pStmt, iCol+1);
124141     nDoc = sqlite3_column_bytes(pCsr->pStmt, iCol+1);
124142     if( zDoc==0 ){
124143       if( sqlite3_column_type(pCsr->pStmt, iCol+1)==SQLITE_NULL ){
124144         continue;
124145       }
124146       rc = SQLITE_NOMEM;
124147       goto offsets_out;
124148     }
124149
124150     /* Initialize a tokenizer iterator to iterate through column iCol. */
124151     rc = pMod->xOpen(pTab->pTokenizer, zDoc, nDoc, &pC);
124152     if( rc!=SQLITE_OK ) goto offsets_out;
124153     pC->pTokenizer = pTab->pTokenizer;
124154
124155     rc = pMod->xNext(pC, &ZDUMMY, &NDUMMY, &iStart, &iEnd, &iCurrent);
124156     while( rc==SQLITE_OK ){
124157       int i;                      /* Used to loop through terms */
124158       int iMinPos = 0x7FFFFFFF;   /* Position of next token */
124159       TermOffset *pTerm = 0;      /* TermOffset associated with next token */
124160
124161       for(i=0; i<nToken; i++){
124162         TermOffset *pT = &sCtx.aTerm[i];
124163         if( pT->pList && (pT->iPos-pT->iOff)<iMinPos ){
124164           iMinPos = pT->iPos-pT->iOff;
124165           pTerm = pT;
124166         }
124167       }
124168
124169       if( !pTerm ){
124170         /* All offsets for this column have been gathered. */
124171         break;
124172       }else{
124173         assert( iCurrent<=iMinPos );
124174         if( 0==(0xFE&*pTerm->pList) ){
124175           pTerm->pList = 0;
124176         }else{
124177           fts3GetDeltaPosition(&pTerm->pList, &pTerm->iPos);
124178         }
124179         while( rc==SQLITE_OK && iCurrent<iMinPos ){
124180           rc = pMod->xNext(pC, &ZDUMMY, &NDUMMY, &iStart, &iEnd, &iCurrent);
124181         }
124182         if( rc==SQLITE_OK ){
124183           char aBuffer[64];
124184           sqlite3_snprintf(sizeof(aBuffer), aBuffer, 
124185               "%d %d %d %d ", iCol, pTerm-sCtx.aTerm, iStart, iEnd-iStart
124186           );
124187           rc = fts3StringAppend(&res, aBuffer, -1);
124188         }else if( rc==SQLITE_DONE ){
124189           rc = SQLITE_CORRUPT;
124190         }
124191       }
124192     }
124193     if( rc==SQLITE_DONE ){
124194       rc = SQLITE_OK;
124195     }
124196
124197     pMod->xClose(pC);
124198     if( rc!=SQLITE_OK ) goto offsets_out;
124199   }
124200
124201  offsets_out:
124202   sqlite3_free(sCtx.aTerm);
124203   assert( rc!=SQLITE_DONE );
124204   sqlite3Fts3SegmentsClose(pTab);
124205   if( rc!=SQLITE_OK ){
124206     sqlite3_result_error_code(pCtx,  rc);
124207     sqlite3_free(res.z);
124208   }else{
124209     sqlite3_result_text(pCtx, res.z, res.n-1, sqlite3_free);
124210   }
124211   return;
124212 }
124213
124214 /*
124215 ** Implementation of matchinfo() function.
124216 */
124217 SQLITE_PRIVATE void sqlite3Fts3Matchinfo(
124218   sqlite3_context *pContext,      /* Function call context */
124219   Fts3Cursor *pCsr,               /* FTS3 table cursor */
124220   const char *zArg                /* Second arg to matchinfo() function */
124221 ){
124222   Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
124223   int rc;
124224   int i;
124225   const char *zFormat;
124226
124227   if( zArg ){
124228     for(i=0; zArg[i]; i++){
124229       char *zErr = 0;
124230       if( fts3MatchinfoCheck(pTab, zArg[i], &zErr) ){
124231         sqlite3_result_error(pContext, zErr, -1);
124232         sqlite3_free(zErr);
124233         return;
124234       }
124235     }
124236     zFormat = zArg;
124237   }else{
124238     zFormat = FTS3_MATCHINFO_DEFAULT;
124239   }
124240
124241   if( !pCsr->pExpr ){
124242     sqlite3_result_blob(pContext, "", 0, SQLITE_STATIC);
124243     return;
124244   }
124245
124246   /* Retrieve matchinfo() data. */
124247   rc = fts3GetMatchinfo(pCsr, zFormat);
124248   sqlite3Fts3SegmentsClose(pTab);
124249
124250   if( rc!=SQLITE_OK ){
124251     sqlite3_result_error_code(pContext, rc);
124252   }else{
124253     int n = pCsr->nMatchinfo * sizeof(u32);
124254     sqlite3_result_blob(pContext, pCsr->aMatchinfo, n, SQLITE_TRANSIENT);
124255   }
124256 }
124257
124258 #endif
124259
124260 /************** End of fts3_snippet.c ****************************************/
124261 /************** Begin file rtree.c *******************************************/
124262 /*
124263 ** 2001 September 15
124264 **
124265 ** The author disclaims copyright to this source code.  In place of
124266 ** a legal notice, here is a blessing:
124267 **
124268 **    May you do good and not evil.
124269 **    May you find forgiveness for yourself and forgive others.
124270 **    May you share freely, never taking more than you give.
124271 **
124272 *************************************************************************
124273 ** This file contains code for implementations of the r-tree and r*-tree
124274 ** algorithms packaged as an SQLite virtual table module.
124275 */
124276
124277 /*
124278 ** Database Format of R-Tree Tables
124279 ** --------------------------------
124280 **
124281 ** The data structure for a single virtual r-tree table is stored in three 
124282 ** native SQLite tables declared as follows. In each case, the '%' character
124283 ** in the table name is replaced with the user-supplied name of the r-tree
124284 ** table.
124285 **
124286 **   CREATE TABLE %_node(nodeno INTEGER PRIMARY KEY, data BLOB)
124287 **   CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER)
124288 **   CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER)
124289 **
124290 ** The data for each node of the r-tree structure is stored in the %_node
124291 ** table. For each node that is not the root node of the r-tree, there is
124292 ** an entry in the %_parent table associating the node with its parent.
124293 ** And for each row of data in the table, there is an entry in the %_rowid
124294 ** table that maps from the entries rowid to the id of the node that it
124295 ** is stored on.
124296 **
124297 ** The root node of an r-tree always exists, even if the r-tree table is
124298 ** empty. The nodeno of the root node is always 1. All other nodes in the
124299 ** table must be the same size as the root node. The content of each node
124300 ** is formatted as follows:
124301 **
124302 **   1. If the node is the root node (node 1), then the first 2 bytes
124303 **      of the node contain the tree depth as a big-endian integer.
124304 **      For non-root nodes, the first 2 bytes are left unused.
124305 **
124306 **   2. The next 2 bytes contain the number of entries currently 
124307 **      stored in the node.
124308 **
124309 **   3. The remainder of the node contains the node entries. Each entry
124310 **      consists of a single 8-byte integer followed by an even number
124311 **      of 4-byte coordinates. For leaf nodes the integer is the rowid
124312 **      of a record. For internal nodes it is the node number of a
124313 **      child page.
124314 */
124315
124316 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RTREE)
124317
124318 /*
124319 ** This file contains an implementation of a couple of different variants
124320 ** of the r-tree algorithm. See the README file for further details. The 
124321 ** same data-structure is used for all, but the algorithms for insert and
124322 ** delete operations vary. The variants used are selected at compile time 
124323 ** by defining the following symbols:
124324 */
124325
124326 /* Either, both or none of the following may be set to activate 
124327 ** r*tree variant algorithms.
124328 */
124329 #define VARIANT_RSTARTREE_CHOOSESUBTREE 0
124330 #define VARIANT_RSTARTREE_REINSERT      1
124331
124332 /* 
124333 ** Exactly one of the following must be set to 1.
124334 */
124335 #define VARIANT_GUTTMAN_QUADRATIC_SPLIT 0
124336 #define VARIANT_GUTTMAN_LINEAR_SPLIT    0
124337 #define VARIANT_RSTARTREE_SPLIT         1
124338
124339 #define VARIANT_GUTTMAN_SPLIT \
124340         (VARIANT_GUTTMAN_LINEAR_SPLIT||VARIANT_GUTTMAN_QUADRATIC_SPLIT)
124341
124342 #if VARIANT_GUTTMAN_QUADRATIC_SPLIT
124343   #define PickNext QuadraticPickNext
124344   #define PickSeeds QuadraticPickSeeds
124345   #define AssignCells splitNodeGuttman
124346 #endif
124347 #if VARIANT_GUTTMAN_LINEAR_SPLIT
124348   #define PickNext LinearPickNext
124349   #define PickSeeds LinearPickSeeds
124350   #define AssignCells splitNodeGuttman
124351 #endif
124352 #if VARIANT_RSTARTREE_SPLIT
124353   #define AssignCells splitNodeStartree
124354 #endif
124355
124356 #if !defined(NDEBUG) && !defined(SQLITE_DEBUG) 
124357 # define NDEBUG 1
124358 #endif
124359
124360 #ifndef SQLITE_CORE
124361   SQLITE_EXTENSION_INIT1
124362 #else
124363 #endif
124364
124365
124366 #ifndef SQLITE_AMALGAMATION
124367 #include "sqlite3rtree.h"
124368 typedef sqlite3_int64 i64;
124369 typedef unsigned char u8;
124370 typedef unsigned int u32;
124371 #endif
124372
124373 /*  The following macro is used to suppress compiler warnings.
124374 */
124375 #ifndef UNUSED_PARAMETER
124376 # define UNUSED_PARAMETER(x) (void)(x)
124377 #endif
124378
124379 typedef struct Rtree Rtree;
124380 typedef struct RtreeCursor RtreeCursor;
124381 typedef struct RtreeNode RtreeNode;
124382 typedef struct RtreeCell RtreeCell;
124383 typedef struct RtreeConstraint RtreeConstraint;
124384 typedef struct RtreeMatchArg RtreeMatchArg;
124385 typedef struct RtreeGeomCallback RtreeGeomCallback;
124386 typedef union RtreeCoord RtreeCoord;
124387
124388 /* The rtree may have between 1 and RTREE_MAX_DIMENSIONS dimensions. */
124389 #define RTREE_MAX_DIMENSIONS 5
124390
124391 /* Size of hash table Rtree.aHash. This hash table is not expected to
124392 ** ever contain very many entries, so a fixed number of buckets is 
124393 ** used.
124394 */
124395 #define HASHSIZE 128
124396
124397 /* 
124398 ** An rtree virtual-table object.
124399 */
124400 struct Rtree {
124401   sqlite3_vtab base;
124402   sqlite3 *db;                /* Host database connection */
124403   int iNodeSize;              /* Size in bytes of each node in the node table */
124404   int nDim;                   /* Number of dimensions */
124405   int nBytesPerCell;          /* Bytes consumed per cell */
124406   int iDepth;                 /* Current depth of the r-tree structure */
124407   char *zDb;                  /* Name of database containing r-tree table */
124408   char *zName;                /* Name of r-tree table */ 
124409   RtreeNode *aHash[HASHSIZE]; /* Hash table of in-memory nodes. */ 
124410   int nBusy;                  /* Current number of users of this structure */
124411
124412   /* List of nodes removed during a CondenseTree operation. List is
124413   ** linked together via the pointer normally used for hash chains -
124414   ** RtreeNode.pNext. RtreeNode.iNode stores the depth of the sub-tree 
124415   ** headed by the node (leaf nodes have RtreeNode.iNode==0).
124416   */
124417   RtreeNode *pDeleted;
124418   int iReinsertHeight;        /* Height of sub-trees Reinsert() has run on */
124419
124420   /* Statements to read/write/delete a record from xxx_node */
124421   sqlite3_stmt *pReadNode;
124422   sqlite3_stmt *pWriteNode;
124423   sqlite3_stmt *pDeleteNode;
124424
124425   /* Statements to read/write/delete a record from xxx_rowid */
124426   sqlite3_stmt *pReadRowid;
124427   sqlite3_stmt *pWriteRowid;
124428   sqlite3_stmt *pDeleteRowid;
124429
124430   /* Statements to read/write/delete a record from xxx_parent */
124431   sqlite3_stmt *pReadParent;
124432   sqlite3_stmt *pWriteParent;
124433   sqlite3_stmt *pDeleteParent;
124434
124435   int eCoordType;
124436 };
124437
124438 /* Possible values for eCoordType: */
124439 #define RTREE_COORD_REAL32 0
124440 #define RTREE_COORD_INT32  1
124441
124442 /*
124443 ** The minimum number of cells allowed for a node is a third of the 
124444 ** maximum. In Gutman's notation:
124445 **
124446 **     m = M/3
124447 **
124448 ** If an R*-tree "Reinsert" operation is required, the same number of
124449 ** cells are removed from the overfull node and reinserted into the tree.
124450 */
124451 #define RTREE_MINCELLS(p) ((((p)->iNodeSize-4)/(p)->nBytesPerCell)/3)
124452 #define RTREE_REINSERT(p) RTREE_MINCELLS(p)
124453 #define RTREE_MAXCELLS 51
124454
124455 /*
124456 ** The smallest possible node-size is (512-64)==448 bytes. And the largest
124457 ** supported cell size is 48 bytes (8 byte rowid + ten 4 byte coordinates).
124458 ** Therefore all non-root nodes must contain at least 3 entries. Since 
124459 ** 2^40 is greater than 2^64, an r-tree structure always has a depth of
124460 ** 40 or less.
124461 */
124462 #define RTREE_MAX_DEPTH 40
124463
124464 /* 
124465 ** An rtree cursor object.
124466 */
124467 struct RtreeCursor {
124468   sqlite3_vtab_cursor base;
124469   RtreeNode *pNode;                 /* Node cursor is currently pointing at */
124470   int iCell;                        /* Index of current cell in pNode */
124471   int iStrategy;                    /* Copy of idxNum search parameter */
124472   int nConstraint;                  /* Number of entries in aConstraint */
124473   RtreeConstraint *aConstraint;     /* Search constraints. */
124474 };
124475
124476 union RtreeCoord {
124477   float f;
124478   int i;
124479 };
124480
124481 /*
124482 ** The argument is an RtreeCoord. Return the value stored within the RtreeCoord
124483 ** formatted as a double. This macro assumes that local variable pRtree points
124484 ** to the Rtree structure associated with the RtreeCoord.
124485 */
124486 #define DCOORD(coord) (                           \
124487   (pRtree->eCoordType==RTREE_COORD_REAL32) ?      \
124488     ((double)coord.f) :                           \
124489     ((double)coord.i)                             \
124490 )
124491
124492 /*
124493 ** A search constraint.
124494 */
124495 struct RtreeConstraint {
124496   int iCoord;                     /* Index of constrained coordinate */
124497   int op;                         /* Constraining operation */
124498   double rValue;                  /* Constraint value. */
124499   int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
124500   sqlite3_rtree_geometry *pGeom;  /* Constraint callback argument for a MATCH */
124501 };
124502
124503 /* Possible values for RtreeConstraint.op */
124504 #define RTREE_EQ    0x41
124505 #define RTREE_LE    0x42
124506 #define RTREE_LT    0x43
124507 #define RTREE_GE    0x44
124508 #define RTREE_GT    0x45
124509 #define RTREE_MATCH 0x46
124510
124511 /* 
124512 ** An rtree structure node.
124513 */
124514 struct RtreeNode {
124515   RtreeNode *pParent;               /* Parent node */
124516   i64 iNode;
124517   int nRef;
124518   int isDirty;
124519   u8 *zData;
124520   RtreeNode *pNext;                 /* Next node in this hash chain */
124521 };
124522 #define NCELL(pNode) readInt16(&(pNode)->zData[2])
124523
124524 /* 
124525 ** Structure to store a deserialized rtree record.
124526 */
124527 struct RtreeCell {
124528   i64 iRowid;
124529   RtreeCoord aCoord[RTREE_MAX_DIMENSIONS*2];
124530 };
124531
124532
124533 /*
124534 ** Value for the first field of every RtreeMatchArg object. The MATCH
124535 ** operator tests that the first field of a blob operand matches this
124536 ** value to avoid operating on invalid blobs (which could cause a segfault).
124537 */
124538 #define RTREE_GEOMETRY_MAGIC 0x891245AB
124539
124540 /*
124541 ** An instance of this structure must be supplied as a blob argument to
124542 ** the right-hand-side of an SQL MATCH operator used to constrain an
124543 ** r-tree query.
124544 */
124545 struct RtreeMatchArg {
124546   u32 magic;                      /* Always RTREE_GEOMETRY_MAGIC */
124547   int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
124548   void *pContext;
124549   int nParam;
124550   double aParam[1];
124551 };
124552
124553 /*
124554 ** When a geometry callback is created (see sqlite3_rtree_geometry_callback),
124555 ** a single instance of the following structure is allocated. It is used
124556 ** as the context for the user-function created by by s_r_g_c(). The object
124557 ** is eventually deleted by the destructor mechanism provided by
124558 ** sqlite3_create_function_v2() (which is called by s_r_g_c() to create
124559 ** the geometry callback function).
124560 */
124561 struct RtreeGeomCallback {
124562   int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
124563   void *pContext;
124564 };
124565
124566 #ifndef MAX
124567 # define MAX(x,y) ((x) < (y) ? (y) : (x))
124568 #endif
124569 #ifndef MIN
124570 # define MIN(x,y) ((x) > (y) ? (y) : (x))
124571 #endif
124572
124573 /*
124574 ** Functions to deserialize a 16 bit integer, 32 bit real number and
124575 ** 64 bit integer. The deserialized value is returned.
124576 */
124577 static int readInt16(u8 *p){
124578   return (p[0]<<8) + p[1];
124579 }
124580 static void readCoord(u8 *p, RtreeCoord *pCoord){
124581   u32 i = (
124582     (((u32)p[0]) << 24) + 
124583     (((u32)p[1]) << 16) + 
124584     (((u32)p[2]) <<  8) + 
124585     (((u32)p[3]) <<  0)
124586   );
124587   *(u32 *)pCoord = i;
124588 }
124589 static i64 readInt64(u8 *p){
124590   return (
124591     (((i64)p[0]) << 56) + 
124592     (((i64)p[1]) << 48) + 
124593     (((i64)p[2]) << 40) + 
124594     (((i64)p[3]) << 32) + 
124595     (((i64)p[4]) << 24) + 
124596     (((i64)p[5]) << 16) + 
124597     (((i64)p[6]) <<  8) + 
124598     (((i64)p[7]) <<  0)
124599   );
124600 }
124601
124602 /*
124603 ** Functions to serialize a 16 bit integer, 32 bit real number and
124604 ** 64 bit integer. The value returned is the number of bytes written
124605 ** to the argument buffer (always 2, 4 and 8 respectively).
124606 */
124607 static int writeInt16(u8 *p, int i){
124608   p[0] = (i>> 8)&0xFF;
124609   p[1] = (i>> 0)&0xFF;
124610   return 2;
124611 }
124612 static int writeCoord(u8 *p, RtreeCoord *pCoord){
124613   u32 i;
124614   assert( sizeof(RtreeCoord)==4 );
124615   assert( sizeof(u32)==4 );
124616   i = *(u32 *)pCoord;
124617   p[0] = (i>>24)&0xFF;
124618   p[1] = (i>>16)&0xFF;
124619   p[2] = (i>> 8)&0xFF;
124620   p[3] = (i>> 0)&0xFF;
124621   return 4;
124622 }
124623 static int writeInt64(u8 *p, i64 i){
124624   p[0] = (i>>56)&0xFF;
124625   p[1] = (i>>48)&0xFF;
124626   p[2] = (i>>40)&0xFF;
124627   p[3] = (i>>32)&0xFF;
124628   p[4] = (i>>24)&0xFF;
124629   p[5] = (i>>16)&0xFF;
124630   p[6] = (i>> 8)&0xFF;
124631   p[7] = (i>> 0)&0xFF;
124632   return 8;
124633 }
124634
124635 /*
124636 ** Increment the reference count of node p.
124637 */
124638 static void nodeReference(RtreeNode *p){
124639   if( p ){
124640     p->nRef++;
124641   }
124642 }
124643
124644 /*
124645 ** Clear the content of node p (set all bytes to 0x00).
124646 */
124647 static void nodeZero(Rtree *pRtree, RtreeNode *p){
124648   memset(&p->zData[2], 0, pRtree->iNodeSize-2);
124649   p->isDirty = 1;
124650 }
124651
124652 /*
124653 ** Given a node number iNode, return the corresponding key to use
124654 ** in the Rtree.aHash table.
124655 */
124656 static int nodeHash(i64 iNode){
124657   return (
124658     (iNode>>56) ^ (iNode>>48) ^ (iNode>>40) ^ (iNode>>32) ^ 
124659     (iNode>>24) ^ (iNode>>16) ^ (iNode>> 8) ^ (iNode>> 0)
124660   ) % HASHSIZE;
124661 }
124662
124663 /*
124664 ** Search the node hash table for node iNode. If found, return a pointer
124665 ** to it. Otherwise, return 0.
124666 */
124667 static RtreeNode *nodeHashLookup(Rtree *pRtree, i64 iNode){
124668   RtreeNode *p;
124669   for(p=pRtree->aHash[nodeHash(iNode)]; p && p->iNode!=iNode; p=p->pNext);
124670   return p;
124671 }
124672
124673 /*
124674 ** Add node pNode to the node hash table.
124675 */
124676 static void nodeHashInsert(Rtree *pRtree, RtreeNode *pNode){
124677   int iHash;
124678   assert( pNode->pNext==0 );
124679   iHash = nodeHash(pNode->iNode);
124680   pNode->pNext = pRtree->aHash[iHash];
124681   pRtree->aHash[iHash] = pNode;
124682 }
124683
124684 /*
124685 ** Remove node pNode from the node hash table.
124686 */
124687 static void nodeHashDelete(Rtree *pRtree, RtreeNode *pNode){
124688   RtreeNode **pp;
124689   if( pNode->iNode!=0 ){
124690     pp = &pRtree->aHash[nodeHash(pNode->iNode)];
124691     for( ; (*pp)!=pNode; pp = &(*pp)->pNext){ assert(*pp); }
124692     *pp = pNode->pNext;
124693     pNode->pNext = 0;
124694   }
124695 }
124696
124697 /*
124698 ** Allocate and return new r-tree node. Initially, (RtreeNode.iNode==0),
124699 ** indicating that node has not yet been assigned a node number. It is
124700 ** assigned a node number when nodeWrite() is called to write the
124701 ** node contents out to the database.
124702 */
124703 static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){
124704   RtreeNode *pNode;
124705   pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode) + pRtree->iNodeSize);
124706   if( pNode ){
124707     memset(pNode, 0, sizeof(RtreeNode) + pRtree->iNodeSize);
124708     pNode->zData = (u8 *)&pNode[1];
124709     pNode->nRef = 1;
124710     pNode->pParent = pParent;
124711     pNode->isDirty = 1;
124712     nodeReference(pParent);
124713   }
124714   return pNode;
124715 }
124716
124717 /*
124718 ** Obtain a reference to an r-tree node.
124719 */
124720 static int
124721 nodeAcquire(
124722   Rtree *pRtree,             /* R-tree structure */
124723   i64 iNode,                 /* Node number to load */
124724   RtreeNode *pParent,        /* Either the parent node or NULL */
124725   RtreeNode **ppNode         /* OUT: Acquired node */
124726 ){
124727   int rc;
124728   int rc2 = SQLITE_OK;
124729   RtreeNode *pNode;
124730
124731   /* Check if the requested node is already in the hash table. If so,
124732   ** increase its reference count and return it.
124733   */
124734   if( (pNode = nodeHashLookup(pRtree, iNode)) ){
124735     assert( !pParent || !pNode->pParent || pNode->pParent==pParent );
124736     if( pParent && !pNode->pParent ){
124737       nodeReference(pParent);
124738       pNode->pParent = pParent;
124739     }
124740     pNode->nRef++;
124741     *ppNode = pNode;
124742     return SQLITE_OK;
124743   }
124744
124745   sqlite3_bind_int64(pRtree->pReadNode, 1, iNode);
124746   rc = sqlite3_step(pRtree->pReadNode);
124747   if( rc==SQLITE_ROW ){
124748     const u8 *zBlob = sqlite3_column_blob(pRtree->pReadNode, 0);
124749     if( pRtree->iNodeSize==sqlite3_column_bytes(pRtree->pReadNode, 0) ){
124750       pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode)+pRtree->iNodeSize);
124751       if( !pNode ){
124752         rc2 = SQLITE_NOMEM;
124753       }else{
124754         pNode->pParent = pParent;
124755         pNode->zData = (u8 *)&pNode[1];
124756         pNode->nRef = 1;
124757         pNode->iNode = iNode;
124758         pNode->isDirty = 0;
124759         pNode->pNext = 0;
124760         memcpy(pNode->zData, zBlob, pRtree->iNodeSize);
124761         nodeReference(pParent);
124762       }
124763     }
124764   }
124765   rc = sqlite3_reset(pRtree->pReadNode);
124766   if( rc==SQLITE_OK ) rc = rc2;
124767
124768   /* If the root node was just loaded, set pRtree->iDepth to the height
124769   ** of the r-tree structure. A height of zero means all data is stored on
124770   ** the root node. A height of one means the children of the root node
124771   ** are the leaves, and so on. If the depth as specified on the root node
124772   ** is greater than RTREE_MAX_DEPTH, the r-tree structure must be corrupt.
124773   */
124774   if( pNode && iNode==1 ){
124775     pRtree->iDepth = readInt16(pNode->zData);
124776     if( pRtree->iDepth>RTREE_MAX_DEPTH ){
124777       rc = SQLITE_CORRUPT;
124778     }
124779   }
124780
124781   /* If no error has occurred so far, check if the "number of entries"
124782   ** field on the node is too large. If so, set the return code to 
124783   ** SQLITE_CORRUPT.
124784   */
124785   if( pNode && rc==SQLITE_OK ){
124786     if( NCELL(pNode)>((pRtree->iNodeSize-4)/pRtree->nBytesPerCell) ){
124787       rc = SQLITE_CORRUPT;
124788     }
124789   }
124790
124791   if( rc==SQLITE_OK ){
124792     if( pNode!=0 ){
124793       nodeHashInsert(pRtree, pNode);
124794     }else{
124795       rc = SQLITE_CORRUPT;
124796     }
124797     *ppNode = pNode;
124798   }else{
124799     sqlite3_free(pNode);
124800     *ppNode = 0;
124801   }
124802
124803   return rc;
124804 }
124805
124806 /*
124807 ** Overwrite cell iCell of node pNode with the contents of pCell.
124808 */
124809 static void nodeOverwriteCell(
124810   Rtree *pRtree, 
124811   RtreeNode *pNode,  
124812   RtreeCell *pCell, 
124813   int iCell
124814 ){
124815   int ii;
124816   u8 *p = &pNode->zData[4 + pRtree->nBytesPerCell*iCell];
124817   p += writeInt64(p, pCell->iRowid);
124818   for(ii=0; ii<(pRtree->nDim*2); ii++){
124819     p += writeCoord(p, &pCell->aCoord[ii]);
124820   }
124821   pNode->isDirty = 1;
124822 }
124823
124824 /*
124825 ** Remove cell the cell with index iCell from node pNode.
124826 */
124827 static void nodeDeleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell){
124828   u8 *pDst = &pNode->zData[4 + pRtree->nBytesPerCell*iCell];
124829   u8 *pSrc = &pDst[pRtree->nBytesPerCell];
124830   int nByte = (NCELL(pNode) - iCell - 1) * pRtree->nBytesPerCell;
124831   memmove(pDst, pSrc, nByte);
124832   writeInt16(&pNode->zData[2], NCELL(pNode)-1);
124833   pNode->isDirty = 1;
124834 }
124835
124836 /*
124837 ** Insert the contents of cell pCell into node pNode. If the insert
124838 ** is successful, return SQLITE_OK.
124839 **
124840 ** If there is not enough free space in pNode, return SQLITE_FULL.
124841 */
124842 static int
124843 nodeInsertCell(
124844   Rtree *pRtree, 
124845   RtreeNode *pNode, 
124846   RtreeCell *pCell 
124847 ){
124848   int nCell;                    /* Current number of cells in pNode */
124849   int nMaxCell;                 /* Maximum number of cells for pNode */
124850
124851   nMaxCell = (pRtree->iNodeSize-4)/pRtree->nBytesPerCell;
124852   nCell = NCELL(pNode);
124853
124854   assert( nCell<=nMaxCell );
124855   if( nCell<nMaxCell ){
124856     nodeOverwriteCell(pRtree, pNode, pCell, nCell);
124857     writeInt16(&pNode->zData[2], nCell+1);
124858     pNode->isDirty = 1;
124859   }
124860
124861   return (nCell==nMaxCell);
124862 }
124863
124864 /*
124865 ** If the node is dirty, write it out to the database.
124866 */
124867 static int
124868 nodeWrite(Rtree *pRtree, RtreeNode *pNode){
124869   int rc = SQLITE_OK;
124870   if( pNode->isDirty ){
124871     sqlite3_stmt *p = pRtree->pWriteNode;
124872     if( pNode->iNode ){
124873       sqlite3_bind_int64(p, 1, pNode->iNode);
124874     }else{
124875       sqlite3_bind_null(p, 1);
124876     }
124877     sqlite3_bind_blob(p, 2, pNode->zData, pRtree->iNodeSize, SQLITE_STATIC);
124878     sqlite3_step(p);
124879     pNode->isDirty = 0;
124880     rc = sqlite3_reset(p);
124881     if( pNode->iNode==0 && rc==SQLITE_OK ){
124882       pNode->iNode = sqlite3_last_insert_rowid(pRtree->db);
124883       nodeHashInsert(pRtree, pNode);
124884     }
124885   }
124886   return rc;
124887 }
124888
124889 /*
124890 ** Release a reference to a node. If the node is dirty and the reference
124891 ** count drops to zero, the node data is written to the database.
124892 */
124893 static int
124894 nodeRelease(Rtree *pRtree, RtreeNode *pNode){
124895   int rc = SQLITE_OK;
124896   if( pNode ){
124897     assert( pNode->nRef>0 );
124898     pNode->nRef--;
124899     if( pNode->nRef==0 ){
124900       if( pNode->iNode==1 ){
124901         pRtree->iDepth = -1;
124902       }
124903       if( pNode->pParent ){
124904         rc = nodeRelease(pRtree, pNode->pParent);
124905       }
124906       if( rc==SQLITE_OK ){
124907         rc = nodeWrite(pRtree, pNode);
124908       }
124909       nodeHashDelete(pRtree, pNode);
124910       sqlite3_free(pNode);
124911     }
124912   }
124913   return rc;
124914 }
124915
124916 /*
124917 ** Return the 64-bit integer value associated with cell iCell of
124918 ** node pNode. If pNode is a leaf node, this is a rowid. If it is
124919 ** an internal node, then the 64-bit integer is a child page number.
124920 */
124921 static i64 nodeGetRowid(
124922   Rtree *pRtree, 
124923   RtreeNode *pNode, 
124924   int iCell
124925 ){
124926   assert( iCell<NCELL(pNode) );
124927   return readInt64(&pNode->zData[4 + pRtree->nBytesPerCell*iCell]);
124928 }
124929
124930 /*
124931 ** Return coordinate iCoord from cell iCell in node pNode.
124932 */
124933 static void nodeGetCoord(
124934   Rtree *pRtree, 
124935   RtreeNode *pNode, 
124936   int iCell,
124937   int iCoord,
124938   RtreeCoord *pCoord           /* Space to write result to */
124939 ){
124940   readCoord(&pNode->zData[12 + pRtree->nBytesPerCell*iCell + 4*iCoord], pCoord);
124941 }
124942
124943 /*
124944 ** Deserialize cell iCell of node pNode. Populate the structure pointed
124945 ** to by pCell with the results.
124946 */
124947 static void nodeGetCell(
124948   Rtree *pRtree, 
124949   RtreeNode *pNode, 
124950   int iCell,
124951   RtreeCell *pCell
124952 ){
124953   int ii;
124954   pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell);
124955   for(ii=0; ii<pRtree->nDim*2; ii++){
124956     nodeGetCoord(pRtree, pNode, iCell, ii, &pCell->aCoord[ii]);
124957   }
124958 }
124959
124960
124961 /* Forward declaration for the function that does the work of
124962 ** the virtual table module xCreate() and xConnect() methods.
124963 */
124964 static int rtreeInit(
124965   sqlite3 *, void *, int, const char *const*, sqlite3_vtab **, char **, int
124966 );
124967
124968 /* 
124969 ** Rtree virtual table module xCreate method.
124970 */
124971 static int rtreeCreate(
124972   sqlite3 *db,
124973   void *pAux,
124974   int argc, const char *const*argv,
124975   sqlite3_vtab **ppVtab,
124976   char **pzErr
124977 ){
124978   return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 1);
124979 }
124980
124981 /* 
124982 ** Rtree virtual table module xConnect method.
124983 */
124984 static int rtreeConnect(
124985   sqlite3 *db,
124986   void *pAux,
124987   int argc, const char *const*argv,
124988   sqlite3_vtab **ppVtab,
124989   char **pzErr
124990 ){
124991   return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 0);
124992 }
124993
124994 /*
124995 ** Increment the r-tree reference count.
124996 */
124997 static void rtreeReference(Rtree *pRtree){
124998   pRtree->nBusy++;
124999 }
125000
125001 /*
125002 ** Decrement the r-tree reference count. When the reference count reaches
125003 ** zero the structure is deleted.
125004 */
125005 static void rtreeRelease(Rtree *pRtree){
125006   pRtree->nBusy--;
125007   if( pRtree->nBusy==0 ){
125008     sqlite3_finalize(pRtree->pReadNode);
125009     sqlite3_finalize(pRtree->pWriteNode);
125010     sqlite3_finalize(pRtree->pDeleteNode);
125011     sqlite3_finalize(pRtree->pReadRowid);
125012     sqlite3_finalize(pRtree->pWriteRowid);
125013     sqlite3_finalize(pRtree->pDeleteRowid);
125014     sqlite3_finalize(pRtree->pReadParent);
125015     sqlite3_finalize(pRtree->pWriteParent);
125016     sqlite3_finalize(pRtree->pDeleteParent);
125017     sqlite3_free(pRtree);
125018   }
125019 }
125020
125021 /* 
125022 ** Rtree virtual table module xDisconnect method.
125023 */
125024 static int rtreeDisconnect(sqlite3_vtab *pVtab){
125025   rtreeRelease((Rtree *)pVtab);
125026   return SQLITE_OK;
125027 }
125028
125029 /* 
125030 ** Rtree virtual table module xDestroy method.
125031 */
125032 static int rtreeDestroy(sqlite3_vtab *pVtab){
125033   Rtree *pRtree = (Rtree *)pVtab;
125034   int rc;
125035   char *zCreate = sqlite3_mprintf(
125036     "DROP TABLE '%q'.'%q_node';"
125037     "DROP TABLE '%q'.'%q_rowid';"
125038     "DROP TABLE '%q'.'%q_parent';",
125039     pRtree->zDb, pRtree->zName, 
125040     pRtree->zDb, pRtree->zName,
125041     pRtree->zDb, pRtree->zName
125042   );
125043   if( !zCreate ){
125044     rc = SQLITE_NOMEM;
125045   }else{
125046     rc = sqlite3_exec(pRtree->db, zCreate, 0, 0, 0);
125047     sqlite3_free(zCreate);
125048   }
125049   if( rc==SQLITE_OK ){
125050     rtreeRelease(pRtree);
125051   }
125052
125053   return rc;
125054 }
125055
125056 /* 
125057 ** Rtree virtual table module xOpen method.
125058 */
125059 static int rtreeOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){
125060   int rc = SQLITE_NOMEM;
125061   RtreeCursor *pCsr;
125062
125063   pCsr = (RtreeCursor *)sqlite3_malloc(sizeof(RtreeCursor));
125064   if( pCsr ){
125065     memset(pCsr, 0, sizeof(RtreeCursor));
125066     pCsr->base.pVtab = pVTab;
125067     rc = SQLITE_OK;
125068   }
125069   *ppCursor = (sqlite3_vtab_cursor *)pCsr;
125070
125071   return rc;
125072 }
125073
125074
125075 /*
125076 ** Free the RtreeCursor.aConstraint[] array and its contents.
125077 */
125078 static void freeCursorConstraints(RtreeCursor *pCsr){
125079   if( pCsr->aConstraint ){
125080     int i;                        /* Used to iterate through constraint array */
125081     for(i=0; i<pCsr->nConstraint; i++){
125082       sqlite3_rtree_geometry *pGeom = pCsr->aConstraint[i].pGeom;
125083       if( pGeom ){
125084         if( pGeom->xDelUser ) pGeom->xDelUser(pGeom->pUser);
125085         sqlite3_free(pGeom);
125086       }
125087     }
125088     sqlite3_free(pCsr->aConstraint);
125089     pCsr->aConstraint = 0;
125090   }
125091 }
125092
125093 /* 
125094 ** Rtree virtual table module xClose method.
125095 */
125096 static int rtreeClose(sqlite3_vtab_cursor *cur){
125097   Rtree *pRtree = (Rtree *)(cur->pVtab);
125098   int rc;
125099   RtreeCursor *pCsr = (RtreeCursor *)cur;
125100   freeCursorConstraints(pCsr);
125101   rc = nodeRelease(pRtree, pCsr->pNode);
125102   sqlite3_free(pCsr);
125103   return rc;
125104 }
125105
125106 /*
125107 ** Rtree virtual table module xEof method.
125108 **
125109 ** Return non-zero if the cursor does not currently point to a valid 
125110 ** record (i.e if the scan has finished), or zero otherwise.
125111 */
125112 static int rtreeEof(sqlite3_vtab_cursor *cur){
125113   RtreeCursor *pCsr = (RtreeCursor *)cur;
125114   return (pCsr->pNode==0);
125115 }
125116
125117 /*
125118 ** The r-tree constraint passed as the second argument to this function is
125119 ** guaranteed to be a MATCH constraint.
125120 */
125121 static int testRtreeGeom(
125122   Rtree *pRtree,                  /* R-Tree object */
125123   RtreeConstraint *pConstraint,   /* MATCH constraint to test */
125124   RtreeCell *pCell,               /* Cell to test */
125125   int *pbRes                      /* OUT: Test result */
125126 ){
125127   int i;
125128   double aCoord[RTREE_MAX_DIMENSIONS*2];
125129   int nCoord = pRtree->nDim*2;
125130
125131   assert( pConstraint->op==RTREE_MATCH );
125132   assert( pConstraint->pGeom );
125133
125134   for(i=0; i<nCoord; i++){
125135     aCoord[i] = DCOORD(pCell->aCoord[i]);
125136   }
125137   return pConstraint->xGeom(pConstraint->pGeom, nCoord, aCoord, pbRes);
125138 }
125139
125140 /* 
125141 ** Cursor pCursor currently points to a cell in a non-leaf page.
125142 ** Set *pbEof to true if the sub-tree headed by the cell is filtered
125143 ** (excluded) by the constraints in the pCursor->aConstraint[] 
125144 ** array, or false otherwise.
125145 **
125146 ** Return SQLITE_OK if successful or an SQLite error code if an error
125147 ** occurs within a geometry callback.
125148 */
125149 static int testRtreeCell(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
125150   RtreeCell cell;
125151   int ii;
125152   int bRes = 0;
125153   int rc = SQLITE_OK;
125154
125155   nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
125156   for(ii=0; bRes==0 && ii<pCursor->nConstraint; ii++){
125157     RtreeConstraint *p = &pCursor->aConstraint[ii];
125158     double cell_min = DCOORD(cell.aCoord[(p->iCoord>>1)*2]);
125159     double cell_max = DCOORD(cell.aCoord[(p->iCoord>>1)*2+1]);
125160
125161     assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE 
125162         || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH
125163     );
125164
125165     switch( p->op ){
125166       case RTREE_LE: case RTREE_LT: 
125167         bRes = p->rValue<cell_min; 
125168         break;
125169
125170       case RTREE_GE: case RTREE_GT: 
125171         bRes = p->rValue>cell_max; 
125172         break;
125173
125174       case RTREE_EQ:
125175         bRes = (p->rValue>cell_max || p->rValue<cell_min);
125176         break;
125177
125178       default: {
125179         assert( p->op==RTREE_MATCH );
125180         rc = testRtreeGeom(pRtree, p, &cell, &bRes);
125181         bRes = !bRes;
125182         break;
125183       }
125184     }
125185   }
125186
125187   *pbEof = bRes;
125188   return rc;
125189 }
125190
125191 /* 
125192 ** Test if the cell that cursor pCursor currently points to
125193 ** would be filtered (excluded) by the constraints in the 
125194 ** pCursor->aConstraint[] array. If so, set *pbEof to true before
125195 ** returning. If the cell is not filtered (excluded) by the constraints,
125196 ** set pbEof to zero.
125197 **
125198 ** Return SQLITE_OK if successful or an SQLite error code if an error
125199 ** occurs within a geometry callback.
125200 **
125201 ** This function assumes that the cell is part of a leaf node.
125202 */
125203 static int testRtreeEntry(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
125204   RtreeCell cell;
125205   int ii;
125206   *pbEof = 0;
125207
125208   nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
125209   for(ii=0; ii<pCursor->nConstraint; ii++){
125210     RtreeConstraint *p = &pCursor->aConstraint[ii];
125211     double coord = DCOORD(cell.aCoord[p->iCoord]);
125212     int res;
125213     assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE 
125214         || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH
125215     );
125216     switch( p->op ){
125217       case RTREE_LE: res = (coord<=p->rValue); break;
125218       case RTREE_LT: res = (coord<p->rValue);  break;
125219       case RTREE_GE: res = (coord>=p->rValue); break;
125220       case RTREE_GT: res = (coord>p->rValue);  break;
125221       case RTREE_EQ: res = (coord==p->rValue); break;
125222       default: {
125223         int rc;
125224         assert( p->op==RTREE_MATCH );
125225         rc = testRtreeGeom(pRtree, p, &cell, &res);
125226         if( rc!=SQLITE_OK ){
125227           return rc;
125228         }
125229         break;
125230       }
125231     }
125232
125233     if( !res ){
125234       *pbEof = 1;
125235       return SQLITE_OK;
125236     }
125237   }
125238
125239   return SQLITE_OK;
125240 }
125241
125242 /*
125243 ** Cursor pCursor currently points at a node that heads a sub-tree of
125244 ** height iHeight (if iHeight==0, then the node is a leaf). Descend
125245 ** to point to the left-most cell of the sub-tree that matches the 
125246 ** configured constraints.
125247 */
125248 static int descendToCell(
125249   Rtree *pRtree, 
125250   RtreeCursor *pCursor, 
125251   int iHeight,
125252   int *pEof                 /* OUT: Set to true if cannot descend */
125253 ){
125254   int isEof;
125255   int rc;
125256   int ii;
125257   RtreeNode *pChild;
125258   sqlite3_int64 iRowid;
125259
125260   RtreeNode *pSavedNode = pCursor->pNode;
125261   int iSavedCell = pCursor->iCell;
125262
125263   assert( iHeight>=0 );
125264
125265   if( iHeight==0 ){
125266     rc = testRtreeEntry(pRtree, pCursor, &isEof);
125267   }else{
125268     rc = testRtreeCell(pRtree, pCursor, &isEof);
125269   }
125270   if( rc!=SQLITE_OK || isEof || iHeight==0 ){
125271     goto descend_to_cell_out;
125272   }
125273
125274   iRowid = nodeGetRowid(pRtree, pCursor->pNode, pCursor->iCell);
125275   rc = nodeAcquire(pRtree, iRowid, pCursor->pNode, &pChild);
125276   if( rc!=SQLITE_OK ){
125277     goto descend_to_cell_out;
125278   }
125279
125280   nodeRelease(pRtree, pCursor->pNode);
125281   pCursor->pNode = pChild;
125282   isEof = 1;
125283   for(ii=0; isEof && ii<NCELL(pChild); ii++){
125284     pCursor->iCell = ii;
125285     rc = descendToCell(pRtree, pCursor, iHeight-1, &isEof);
125286     if( rc!=SQLITE_OK ){
125287       goto descend_to_cell_out;
125288     }
125289   }
125290
125291   if( isEof ){
125292     assert( pCursor->pNode==pChild );
125293     nodeReference(pSavedNode);
125294     nodeRelease(pRtree, pChild);
125295     pCursor->pNode = pSavedNode;
125296     pCursor->iCell = iSavedCell;
125297   }
125298
125299 descend_to_cell_out:
125300   *pEof = isEof;
125301   return rc;
125302 }
125303
125304 /*
125305 ** One of the cells in node pNode is guaranteed to have a 64-bit 
125306 ** integer value equal to iRowid. Return the index of this cell.
125307 */
125308 static int nodeRowidIndex(
125309   Rtree *pRtree, 
125310   RtreeNode *pNode, 
125311   i64 iRowid,
125312   int *piIndex
125313 ){
125314   int ii;
125315   int nCell = NCELL(pNode);
125316   for(ii=0; ii<nCell; ii++){
125317     if( nodeGetRowid(pRtree, pNode, ii)==iRowid ){
125318       *piIndex = ii;
125319       return SQLITE_OK;
125320     }
125321   }
125322   return SQLITE_CORRUPT;
125323 }
125324
125325 /*
125326 ** Return the index of the cell containing a pointer to node pNode
125327 ** in its parent. If pNode is the root node, return -1.
125328 */
125329 static int nodeParentIndex(Rtree *pRtree, RtreeNode *pNode, int *piIndex){
125330   RtreeNode *pParent = pNode->pParent;
125331   if( pParent ){
125332     return nodeRowidIndex(pRtree, pParent, pNode->iNode, piIndex);
125333   }
125334   *piIndex = -1;
125335   return SQLITE_OK;
125336 }
125337
125338 /* 
125339 ** Rtree virtual table module xNext method.
125340 */
125341 static int rtreeNext(sqlite3_vtab_cursor *pVtabCursor){
125342   Rtree *pRtree = (Rtree *)(pVtabCursor->pVtab);
125343   RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
125344   int rc = SQLITE_OK;
125345
125346   /* RtreeCursor.pNode must not be NULL. If is is NULL, then this cursor is
125347   ** already at EOF. It is against the rules to call the xNext() method of
125348   ** a cursor that has already reached EOF.
125349   */
125350   assert( pCsr->pNode );
125351
125352   if( pCsr->iStrategy==1 ){
125353     /* This "scan" is a direct lookup by rowid. There is no next entry. */
125354     nodeRelease(pRtree, pCsr->pNode);
125355     pCsr->pNode = 0;
125356   }else{
125357     /* Move to the next entry that matches the configured constraints. */
125358     int iHeight = 0;
125359     while( pCsr->pNode ){
125360       RtreeNode *pNode = pCsr->pNode;
125361       int nCell = NCELL(pNode);
125362       for(pCsr->iCell++; pCsr->iCell<nCell; pCsr->iCell++){
125363         int isEof;
125364         rc = descendToCell(pRtree, pCsr, iHeight, &isEof);
125365         if( rc!=SQLITE_OK || !isEof ){
125366           return rc;
125367         }
125368       }
125369       pCsr->pNode = pNode->pParent;
125370       rc = nodeParentIndex(pRtree, pNode, &pCsr->iCell);
125371       if( rc!=SQLITE_OK ){
125372         return rc;
125373       }
125374       nodeReference(pCsr->pNode);
125375       nodeRelease(pRtree, pNode);
125376       iHeight++;
125377     }
125378   }
125379
125380   return rc;
125381 }
125382
125383 /* 
125384 ** Rtree virtual table module xRowid method.
125385 */
125386 static int rtreeRowid(sqlite3_vtab_cursor *pVtabCursor, sqlite_int64 *pRowid){
125387   Rtree *pRtree = (Rtree *)pVtabCursor->pVtab;
125388   RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
125389
125390   assert(pCsr->pNode);
125391   *pRowid = nodeGetRowid(pRtree, pCsr->pNode, pCsr->iCell);
125392
125393   return SQLITE_OK;
125394 }
125395
125396 /* 
125397 ** Rtree virtual table module xColumn method.
125398 */
125399 static int rtreeColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){
125400   Rtree *pRtree = (Rtree *)cur->pVtab;
125401   RtreeCursor *pCsr = (RtreeCursor *)cur;
125402
125403   if( i==0 ){
125404     i64 iRowid = nodeGetRowid(pRtree, pCsr->pNode, pCsr->iCell);
125405     sqlite3_result_int64(ctx, iRowid);
125406   }else{
125407     RtreeCoord c;
125408     nodeGetCoord(pRtree, pCsr->pNode, pCsr->iCell, i-1, &c);
125409     if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
125410       sqlite3_result_double(ctx, c.f);
125411     }else{
125412       assert( pRtree->eCoordType==RTREE_COORD_INT32 );
125413       sqlite3_result_int(ctx, c.i);
125414     }
125415   }
125416
125417   return SQLITE_OK;
125418 }
125419
125420 /* 
125421 ** Use nodeAcquire() to obtain the leaf node containing the record with 
125422 ** rowid iRowid. If successful, set *ppLeaf to point to the node and
125423 ** return SQLITE_OK. If there is no such record in the table, set
125424 ** *ppLeaf to 0 and return SQLITE_OK. If an error occurs, set *ppLeaf
125425 ** to zero and return an SQLite error code.
125426 */
125427 static int findLeafNode(Rtree *pRtree, i64 iRowid, RtreeNode **ppLeaf){
125428   int rc;
125429   *ppLeaf = 0;
125430   sqlite3_bind_int64(pRtree->pReadRowid, 1, iRowid);
125431   if( sqlite3_step(pRtree->pReadRowid)==SQLITE_ROW ){
125432     i64 iNode = sqlite3_column_int64(pRtree->pReadRowid, 0);
125433     rc = nodeAcquire(pRtree, iNode, 0, ppLeaf);
125434     sqlite3_reset(pRtree->pReadRowid);
125435   }else{
125436     rc = sqlite3_reset(pRtree->pReadRowid);
125437   }
125438   return rc;
125439 }
125440
125441 /*
125442 ** This function is called to configure the RtreeConstraint object passed
125443 ** as the second argument for a MATCH constraint. The value passed as the
125444 ** first argument to this function is the right-hand operand to the MATCH
125445 ** operator.
125446 */
125447 static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){
125448   RtreeMatchArg *p;
125449   sqlite3_rtree_geometry *pGeom;
125450   int nBlob;
125451
125452   /* Check that value is actually a blob. */
125453   if( !sqlite3_value_type(pValue)==SQLITE_BLOB ) return SQLITE_ERROR;
125454
125455   /* Check that the blob is roughly the right size. */
125456   nBlob = sqlite3_value_bytes(pValue);
125457   if( nBlob<(int)sizeof(RtreeMatchArg) 
125458    || ((nBlob-sizeof(RtreeMatchArg))%sizeof(double))!=0
125459   ){
125460     return SQLITE_ERROR;
125461   }
125462
125463   pGeom = (sqlite3_rtree_geometry *)sqlite3_malloc(
125464       sizeof(sqlite3_rtree_geometry) + nBlob
125465   );
125466   if( !pGeom ) return SQLITE_NOMEM;
125467   memset(pGeom, 0, sizeof(sqlite3_rtree_geometry));
125468   p = (RtreeMatchArg *)&pGeom[1];
125469
125470   memcpy(p, sqlite3_value_blob(pValue), nBlob);
125471   if( p->magic!=RTREE_GEOMETRY_MAGIC 
125472    || nBlob!=(int)(sizeof(RtreeMatchArg) + (p->nParam-1)*sizeof(double))
125473   ){
125474     sqlite3_free(pGeom);
125475     return SQLITE_ERROR;
125476   }
125477
125478   pGeom->pContext = p->pContext;
125479   pGeom->nParam = p->nParam;
125480   pGeom->aParam = p->aParam;
125481
125482   pCons->xGeom = p->xGeom;
125483   pCons->pGeom = pGeom;
125484   return SQLITE_OK;
125485 }
125486
125487 /* 
125488 ** Rtree virtual table module xFilter method.
125489 */
125490 static int rtreeFilter(
125491   sqlite3_vtab_cursor *pVtabCursor, 
125492   int idxNum, const char *idxStr,
125493   int argc, sqlite3_value **argv
125494 ){
125495   Rtree *pRtree = (Rtree *)pVtabCursor->pVtab;
125496   RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
125497
125498   RtreeNode *pRoot = 0;
125499   int ii;
125500   int rc = SQLITE_OK;
125501
125502   rtreeReference(pRtree);
125503
125504   freeCursorConstraints(pCsr);
125505   pCsr->iStrategy = idxNum;
125506
125507   if( idxNum==1 ){
125508     /* Special case - lookup by rowid. */
125509     RtreeNode *pLeaf;        /* Leaf on which the required cell resides */
125510     i64 iRowid = sqlite3_value_int64(argv[0]);
125511     rc = findLeafNode(pRtree, iRowid, &pLeaf);
125512     pCsr->pNode = pLeaf; 
125513     if( pLeaf ){
125514       assert( rc==SQLITE_OK );
125515       rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &pCsr->iCell);
125516     }
125517   }else{
125518     /* Normal case - r-tree scan. Set up the RtreeCursor.aConstraint array 
125519     ** with the configured constraints. 
125520     */
125521     if( argc>0 ){
125522       pCsr->aConstraint = sqlite3_malloc(sizeof(RtreeConstraint)*argc);
125523       pCsr->nConstraint = argc;
125524       if( !pCsr->aConstraint ){
125525         rc = SQLITE_NOMEM;
125526       }else{
125527         memset(pCsr->aConstraint, 0, sizeof(RtreeConstraint)*argc);
125528         assert( (idxStr==0 && argc==0) || (int)strlen(idxStr)==argc*2 );
125529         for(ii=0; ii<argc; ii++){
125530           RtreeConstraint *p = &pCsr->aConstraint[ii];
125531           p->op = idxStr[ii*2];
125532           p->iCoord = idxStr[ii*2+1]-'a';
125533           if( p->op==RTREE_MATCH ){
125534             /* A MATCH operator. The right-hand-side must be a blob that
125535             ** can be cast into an RtreeMatchArg object. One created using
125536             ** an sqlite3_rtree_geometry_callback() SQL user function.
125537             */
125538             rc = deserializeGeometry(argv[ii], p);
125539             if( rc!=SQLITE_OK ){
125540               break;
125541             }
125542           }else{
125543             p->rValue = sqlite3_value_double(argv[ii]);
125544           }
125545         }
125546       }
125547     }
125548   
125549     if( rc==SQLITE_OK ){
125550       pCsr->pNode = 0;
125551       rc = nodeAcquire(pRtree, 1, 0, &pRoot);
125552     }
125553     if( rc==SQLITE_OK ){
125554       int isEof = 1;
125555       int nCell = NCELL(pRoot);
125556       pCsr->pNode = pRoot;
125557       for(pCsr->iCell=0; rc==SQLITE_OK && pCsr->iCell<nCell; pCsr->iCell++){
125558         assert( pCsr->pNode==pRoot );
125559         rc = descendToCell(pRtree, pCsr, pRtree->iDepth, &isEof);
125560         if( !isEof ){
125561           break;
125562         }
125563       }
125564       if( rc==SQLITE_OK && isEof ){
125565         assert( pCsr->pNode==pRoot );
125566         nodeRelease(pRtree, pRoot);
125567         pCsr->pNode = 0;
125568       }
125569       assert( rc!=SQLITE_OK || !pCsr->pNode || pCsr->iCell<NCELL(pCsr->pNode) );
125570     }
125571   }
125572
125573   rtreeRelease(pRtree);
125574   return rc;
125575 }
125576
125577 /*
125578 ** Rtree virtual table module xBestIndex method. There are three
125579 ** table scan strategies to choose from (in order from most to 
125580 ** least desirable):
125581 **
125582 **   idxNum     idxStr        Strategy
125583 **   ------------------------------------------------
125584 **     1        Unused        Direct lookup by rowid.
125585 **     2        See below     R-tree query or full-table scan.
125586 **   ------------------------------------------------
125587 **
125588 ** If strategy 1 is used, then idxStr is not meaningful. If strategy
125589 ** 2 is used, idxStr is formatted to contain 2 bytes for each 
125590 ** constraint used. The first two bytes of idxStr correspond to 
125591 ** the constraint in sqlite3_index_info.aConstraintUsage[] with
125592 ** (argvIndex==1) etc.
125593 **
125594 ** The first of each pair of bytes in idxStr identifies the constraint
125595 ** operator as follows:
125596 **
125597 **   Operator    Byte Value
125598 **   ----------------------
125599 **      =        0x41 ('A')
125600 **     <=        0x42 ('B')
125601 **      <        0x43 ('C')
125602 **     >=        0x44 ('D')
125603 **      >        0x45 ('E')
125604 **   MATCH       0x46 ('F')
125605 **   ----------------------
125606 **
125607 ** The second of each pair of bytes identifies the coordinate column
125608 ** to which the constraint applies. The leftmost coordinate column
125609 ** is 'a', the second from the left 'b' etc.
125610 */
125611 static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
125612   int rc = SQLITE_OK;
125613   int ii;
125614
125615   int iIdx = 0;
125616   char zIdxStr[RTREE_MAX_DIMENSIONS*8+1];
125617   memset(zIdxStr, 0, sizeof(zIdxStr));
125618   UNUSED_PARAMETER(tab);
125619
125620   assert( pIdxInfo->idxStr==0 );
125621   for(ii=0; ii<pIdxInfo->nConstraint && iIdx<(int)(sizeof(zIdxStr)-1); ii++){
125622     struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii];
125623
125624     if( p->usable && p->iColumn==0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ ){
125625       /* We have an equality constraint on the rowid. Use strategy 1. */
125626       int jj;
125627       for(jj=0; jj<ii; jj++){
125628         pIdxInfo->aConstraintUsage[jj].argvIndex = 0;
125629         pIdxInfo->aConstraintUsage[jj].omit = 0;
125630       }
125631       pIdxInfo->idxNum = 1;
125632       pIdxInfo->aConstraintUsage[ii].argvIndex = 1;
125633       pIdxInfo->aConstraintUsage[jj].omit = 1;
125634
125635       /* This strategy involves a two rowid lookups on an B-Tree structures
125636       ** and then a linear search of an R-Tree node. This should be 
125637       ** considered almost as quick as a direct rowid lookup (for which 
125638       ** sqlite uses an internal cost of 0.0).
125639       */ 
125640       pIdxInfo->estimatedCost = 10.0;
125641       return SQLITE_OK;
125642     }
125643
125644     if( p->usable && (p->iColumn>0 || p->op==SQLITE_INDEX_CONSTRAINT_MATCH) ){
125645       u8 op;
125646       switch( p->op ){
125647         case SQLITE_INDEX_CONSTRAINT_EQ: op = RTREE_EQ; break;
125648         case SQLITE_INDEX_CONSTRAINT_GT: op = RTREE_GT; break;
125649         case SQLITE_INDEX_CONSTRAINT_LE: op = RTREE_LE; break;
125650         case SQLITE_INDEX_CONSTRAINT_LT: op = RTREE_LT; break;
125651         case SQLITE_INDEX_CONSTRAINT_GE: op = RTREE_GE; break;
125652         default:
125653           assert( p->op==SQLITE_INDEX_CONSTRAINT_MATCH );
125654           op = RTREE_MATCH; 
125655           break;
125656       }
125657       zIdxStr[iIdx++] = op;
125658       zIdxStr[iIdx++] = p->iColumn - 1 + 'a';
125659       pIdxInfo->aConstraintUsage[ii].argvIndex = (iIdx/2);
125660       pIdxInfo->aConstraintUsage[ii].omit = 1;
125661     }
125662   }
125663
125664   pIdxInfo->idxNum = 2;
125665   pIdxInfo->needToFreeIdxStr = 1;
125666   if( iIdx>0 && 0==(pIdxInfo->idxStr = sqlite3_mprintf("%s", zIdxStr)) ){
125667     return SQLITE_NOMEM;
125668   }
125669   assert( iIdx>=0 );
125670   pIdxInfo->estimatedCost = (2000000.0 / (double)(iIdx + 1));
125671   return rc;
125672 }
125673
125674 /*
125675 ** Return the N-dimensional volumn of the cell stored in *p.
125676 */
125677 static float cellArea(Rtree *pRtree, RtreeCell *p){
125678   float area = 1.0;
125679   int ii;
125680   for(ii=0; ii<(pRtree->nDim*2); ii+=2){
125681     area = area * (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii]));
125682   }
125683   return area;
125684 }
125685
125686 /*
125687 ** Return the margin length of cell p. The margin length is the sum
125688 ** of the objects size in each dimension.
125689 */
125690 static float cellMargin(Rtree *pRtree, RtreeCell *p){
125691   float margin = 0.0;
125692   int ii;
125693   for(ii=0; ii<(pRtree->nDim*2); ii+=2){
125694     margin += (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii]));
125695   }
125696   return margin;
125697 }
125698
125699 /*
125700 ** Store the union of cells p1 and p2 in p1.
125701 */
125702 static void cellUnion(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){
125703   int ii;
125704   if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
125705     for(ii=0; ii<(pRtree->nDim*2); ii+=2){
125706       p1->aCoord[ii].f = MIN(p1->aCoord[ii].f, p2->aCoord[ii].f);
125707       p1->aCoord[ii+1].f = MAX(p1->aCoord[ii+1].f, p2->aCoord[ii+1].f);
125708     }
125709   }else{
125710     for(ii=0; ii<(pRtree->nDim*2); ii+=2){
125711       p1->aCoord[ii].i = MIN(p1->aCoord[ii].i, p2->aCoord[ii].i);
125712       p1->aCoord[ii+1].i = MAX(p1->aCoord[ii+1].i, p2->aCoord[ii+1].i);
125713     }
125714   }
125715 }
125716
125717 /*
125718 ** Return true if the area covered by p2 is a subset of the area covered
125719 ** by p1. False otherwise.
125720 */
125721 static int cellContains(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){
125722   int ii;
125723   int isInt = (pRtree->eCoordType==RTREE_COORD_INT32);
125724   for(ii=0; ii<(pRtree->nDim*2); ii+=2){
125725     RtreeCoord *a1 = &p1->aCoord[ii];
125726     RtreeCoord *a2 = &p2->aCoord[ii];
125727     if( (!isInt && (a2[0].f<a1[0].f || a2[1].f>a1[1].f)) 
125728      || ( isInt && (a2[0].i<a1[0].i || a2[1].i>a1[1].i)) 
125729     ){
125730       return 0;
125731     }
125732   }
125733   return 1;
125734 }
125735
125736 /*
125737 ** Return the amount cell p would grow by if it were unioned with pCell.
125738 */
125739 static float cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){
125740   float area;
125741   RtreeCell cell;
125742   memcpy(&cell, p, sizeof(RtreeCell));
125743   area = cellArea(pRtree, &cell);
125744   cellUnion(pRtree, &cell, pCell);
125745   return (cellArea(pRtree, &cell)-area);
125746 }
125747
125748 #if VARIANT_RSTARTREE_CHOOSESUBTREE || VARIANT_RSTARTREE_SPLIT
125749 static float cellOverlap(
125750   Rtree *pRtree, 
125751   RtreeCell *p, 
125752   RtreeCell *aCell, 
125753   int nCell, 
125754   int iExclude
125755 ){
125756   int ii;
125757   float overlap = 0.0;
125758   for(ii=0; ii<nCell; ii++){
125759 #if VARIANT_RSTARTREE_CHOOSESUBTREE
125760     if( ii!=iExclude )
125761 #else
125762     assert( iExclude==-1 );
125763     UNUSED_PARAMETER(iExclude);
125764 #endif
125765     {
125766       int jj;
125767       float o = 1.0;
125768       for(jj=0; jj<(pRtree->nDim*2); jj+=2){
125769         double x1;
125770         double x2;
125771
125772         x1 = MAX(DCOORD(p->aCoord[jj]), DCOORD(aCell[ii].aCoord[jj]));
125773         x2 = MIN(DCOORD(p->aCoord[jj+1]), DCOORD(aCell[ii].aCoord[jj+1]));
125774
125775         if( x2<x1 ){
125776           o = 0.0;
125777           break;
125778         }else{
125779           o = o * (x2-x1);
125780         }
125781       }
125782       overlap += o;
125783     }
125784   }
125785   return overlap;
125786 }
125787 #endif
125788
125789 #if VARIANT_RSTARTREE_CHOOSESUBTREE
125790 static float cellOverlapEnlargement(
125791   Rtree *pRtree, 
125792   RtreeCell *p, 
125793   RtreeCell *pInsert, 
125794   RtreeCell *aCell, 
125795   int nCell, 
125796   int iExclude
125797 ){
125798   float before;
125799   float after;
125800   before = cellOverlap(pRtree, p, aCell, nCell, iExclude);
125801   cellUnion(pRtree, p, pInsert);
125802   after = cellOverlap(pRtree, p, aCell, nCell, iExclude);
125803   return after-before;
125804 }
125805 #endif
125806
125807
125808 /*
125809 ** This function implements the ChooseLeaf algorithm from Gutman[84].
125810 ** ChooseSubTree in r*tree terminology.
125811 */
125812 static int ChooseLeaf(
125813   Rtree *pRtree,               /* Rtree table */
125814   RtreeCell *pCell,            /* Cell to insert into rtree */
125815   int iHeight,                 /* Height of sub-tree rooted at pCell */
125816   RtreeNode **ppLeaf           /* OUT: Selected leaf page */
125817 ){
125818   int rc;
125819   int ii;
125820   RtreeNode *pNode;
125821   rc = nodeAcquire(pRtree, 1, 0, &pNode);
125822
125823   for(ii=0; rc==SQLITE_OK && ii<(pRtree->iDepth-iHeight); ii++){
125824     int iCell;
125825     sqlite3_int64 iBest;
125826
125827     float fMinGrowth;
125828     float fMinArea;
125829     float fMinOverlap;
125830
125831     int nCell = NCELL(pNode);
125832     RtreeCell cell;
125833     RtreeNode *pChild;
125834
125835     RtreeCell *aCell = 0;
125836
125837 #if VARIANT_RSTARTREE_CHOOSESUBTREE
125838     if( ii==(pRtree->iDepth-1) ){
125839       int jj;
125840       aCell = sqlite3_malloc(sizeof(RtreeCell)*nCell);
125841       if( !aCell ){
125842         rc = SQLITE_NOMEM;
125843         nodeRelease(pRtree, pNode);
125844         pNode = 0;
125845         continue;
125846       }
125847       for(jj=0; jj<nCell; jj++){
125848         nodeGetCell(pRtree, pNode, jj, &aCell[jj]);
125849       }
125850     }
125851 #endif
125852
125853     /* Select the child node which will be enlarged the least if pCell
125854     ** is inserted into it. Resolve ties by choosing the entry with
125855     ** the smallest area.
125856     */
125857     for(iCell=0; iCell<nCell; iCell++){
125858       int bBest = 0;
125859       float growth;
125860       float area;
125861       float overlap = 0.0;
125862       nodeGetCell(pRtree, pNode, iCell, &cell);
125863       growth = cellGrowth(pRtree, &cell, pCell);
125864       area = cellArea(pRtree, &cell);
125865
125866 #if VARIANT_RSTARTREE_CHOOSESUBTREE
125867       if( ii==(pRtree->iDepth-1) ){
125868         overlap = cellOverlapEnlargement(pRtree,&cell,pCell,aCell,nCell,iCell);
125869       }
125870       if( (iCell==0) 
125871        || (overlap<fMinOverlap) 
125872        || (overlap==fMinOverlap && growth<fMinGrowth)
125873        || (overlap==fMinOverlap && growth==fMinGrowth && area<fMinArea)
125874       ){
125875         bBest = 1;
125876       }
125877 #else
125878       if( iCell==0||growth<fMinGrowth||(growth==fMinGrowth && area<fMinArea) ){
125879         bBest = 1;
125880       }
125881 #endif
125882       if( bBest ){
125883         fMinOverlap = overlap;
125884         fMinGrowth = growth;
125885         fMinArea = area;
125886         iBest = cell.iRowid;
125887       }
125888     }
125889
125890     sqlite3_free(aCell);
125891     rc = nodeAcquire(pRtree, iBest, pNode, &pChild);
125892     nodeRelease(pRtree, pNode);
125893     pNode = pChild;
125894   }
125895
125896   *ppLeaf = pNode;
125897   return rc;
125898 }
125899
125900 /*
125901 ** A cell with the same content as pCell has just been inserted into
125902 ** the node pNode. This function updates the bounding box cells in
125903 ** all ancestor elements.
125904 */
125905 static int AdjustTree(
125906   Rtree *pRtree,                    /* Rtree table */
125907   RtreeNode *pNode,                 /* Adjust ancestry of this node. */
125908   RtreeCell *pCell                  /* This cell was just inserted */
125909 ){
125910   RtreeNode *p = pNode;
125911   while( p->pParent ){
125912     RtreeNode *pParent = p->pParent;
125913     RtreeCell cell;
125914     int iCell;
125915
125916     if( nodeParentIndex(pRtree, p, &iCell) ){
125917       return SQLITE_CORRUPT;
125918     }
125919
125920     nodeGetCell(pRtree, pParent, iCell, &cell);
125921     if( !cellContains(pRtree, &cell, pCell) ){
125922       cellUnion(pRtree, &cell, pCell);
125923       nodeOverwriteCell(pRtree, pParent, &cell, iCell);
125924     }
125925  
125926     p = pParent;
125927   }
125928   return SQLITE_OK;
125929 }
125930
125931 /*
125932 ** Write mapping (iRowid->iNode) to the <rtree>_rowid table.
125933 */
125934 static int rowidWrite(Rtree *pRtree, sqlite3_int64 iRowid, sqlite3_int64 iNode){
125935   sqlite3_bind_int64(pRtree->pWriteRowid, 1, iRowid);
125936   sqlite3_bind_int64(pRtree->pWriteRowid, 2, iNode);
125937   sqlite3_step(pRtree->pWriteRowid);
125938   return sqlite3_reset(pRtree->pWriteRowid);
125939 }
125940
125941 /*
125942 ** Write mapping (iNode->iPar) to the <rtree>_parent table.
125943 */
125944 static int parentWrite(Rtree *pRtree, sqlite3_int64 iNode, sqlite3_int64 iPar){
125945   sqlite3_bind_int64(pRtree->pWriteParent, 1, iNode);
125946   sqlite3_bind_int64(pRtree->pWriteParent, 2, iPar);
125947   sqlite3_step(pRtree->pWriteParent);
125948   return sqlite3_reset(pRtree->pWriteParent);
125949 }
125950
125951 static int rtreeInsertCell(Rtree *, RtreeNode *, RtreeCell *, int);
125952
125953 #if VARIANT_GUTTMAN_LINEAR_SPLIT
125954 /*
125955 ** Implementation of the linear variant of the PickNext() function from
125956 ** Guttman[84].
125957 */
125958 static RtreeCell *LinearPickNext(
125959   Rtree *pRtree,
125960   RtreeCell *aCell, 
125961   int nCell, 
125962   RtreeCell *pLeftBox, 
125963   RtreeCell *pRightBox,
125964   int *aiUsed
125965 ){
125966   int ii;
125967   for(ii=0; aiUsed[ii]; ii++);
125968   aiUsed[ii] = 1;
125969   return &aCell[ii];
125970 }
125971
125972 /*
125973 ** Implementation of the linear variant of the PickSeeds() function from
125974 ** Guttman[84].
125975 */
125976 static void LinearPickSeeds(
125977   Rtree *pRtree,
125978   RtreeCell *aCell, 
125979   int nCell, 
125980   int *piLeftSeed, 
125981   int *piRightSeed
125982 ){
125983   int i;
125984   int iLeftSeed = 0;
125985   int iRightSeed = 1;
125986   float maxNormalInnerWidth = 0.0;
125987
125988   /* Pick two "seed" cells from the array of cells. The algorithm used
125989   ** here is the LinearPickSeeds algorithm from Gutman[1984]. The 
125990   ** indices of the two seed cells in the array are stored in local
125991   ** variables iLeftSeek and iRightSeed.
125992   */
125993   for(i=0; i<pRtree->nDim; i++){
125994     float x1 = DCOORD(aCell[0].aCoord[i*2]);
125995     float x2 = DCOORD(aCell[0].aCoord[i*2+1]);
125996     float x3 = x1;
125997     float x4 = x2;
125998     int jj;
125999
126000     int iCellLeft = 0;
126001     int iCellRight = 0;
126002
126003     for(jj=1; jj<nCell; jj++){
126004       float left = DCOORD(aCell[jj].aCoord[i*2]);
126005       float right = DCOORD(aCell[jj].aCoord[i*2+1]);
126006
126007       if( left<x1 ) x1 = left;
126008       if( right>x4 ) x4 = right;
126009       if( left>x3 ){
126010         x3 = left;
126011         iCellRight = jj;
126012       }
126013       if( right<x2 ){
126014         x2 = right;
126015         iCellLeft = jj;
126016       }
126017     }
126018
126019     if( x4!=x1 ){
126020       float normalwidth = (x3 - x2) / (x4 - x1);
126021       if( normalwidth>maxNormalInnerWidth ){
126022         iLeftSeed = iCellLeft;
126023         iRightSeed = iCellRight;
126024       }
126025     }
126026   }
126027
126028   *piLeftSeed = iLeftSeed;
126029   *piRightSeed = iRightSeed;
126030 }
126031 #endif /* VARIANT_GUTTMAN_LINEAR_SPLIT */
126032
126033 #if VARIANT_GUTTMAN_QUADRATIC_SPLIT
126034 /*
126035 ** Implementation of the quadratic variant of the PickNext() function from
126036 ** Guttman[84].
126037 */
126038 static RtreeCell *QuadraticPickNext(
126039   Rtree *pRtree,
126040   RtreeCell *aCell, 
126041   int nCell, 
126042   RtreeCell *pLeftBox, 
126043   RtreeCell *pRightBox,
126044   int *aiUsed
126045 ){
126046   #define FABS(a) ((a)<0.0?-1.0*(a):(a))
126047
126048   int iSelect = -1;
126049   float fDiff;
126050   int ii;
126051   for(ii=0; ii<nCell; ii++){
126052     if( aiUsed[ii]==0 ){
126053       float left = cellGrowth(pRtree, pLeftBox, &aCell[ii]);
126054       float right = cellGrowth(pRtree, pLeftBox, &aCell[ii]);
126055       float diff = FABS(right-left);
126056       if( iSelect<0 || diff>fDiff ){
126057         fDiff = diff;
126058         iSelect = ii;
126059       }
126060     }
126061   }
126062   aiUsed[iSelect] = 1;
126063   return &aCell[iSelect];
126064 }
126065
126066 /*
126067 ** Implementation of the quadratic variant of the PickSeeds() function from
126068 ** Guttman[84].
126069 */
126070 static void QuadraticPickSeeds(
126071   Rtree *pRtree,
126072   RtreeCell *aCell, 
126073   int nCell, 
126074   int *piLeftSeed, 
126075   int *piRightSeed
126076 ){
126077   int ii;
126078   int jj;
126079
126080   int iLeftSeed = 0;
126081   int iRightSeed = 1;
126082   float fWaste = 0.0;
126083
126084   for(ii=0; ii<nCell; ii++){
126085     for(jj=ii+1; jj<nCell; jj++){
126086       float right = cellArea(pRtree, &aCell[jj]);
126087       float growth = cellGrowth(pRtree, &aCell[ii], &aCell[jj]);
126088       float waste = growth - right;
126089
126090       if( waste>fWaste ){
126091         iLeftSeed = ii;
126092         iRightSeed = jj;
126093         fWaste = waste;
126094       }
126095     }
126096   }
126097
126098   *piLeftSeed = iLeftSeed;
126099   *piRightSeed = iRightSeed;
126100 }
126101 #endif /* VARIANT_GUTTMAN_QUADRATIC_SPLIT */
126102
126103 /*
126104 ** Arguments aIdx, aDistance and aSpare all point to arrays of size
126105 ** nIdx. The aIdx array contains the set of integers from 0 to 
126106 ** (nIdx-1) in no particular order. This function sorts the values
126107 ** in aIdx according to the indexed values in aDistance. For
126108 ** example, assuming the inputs:
126109 **
126110 **   aIdx      = { 0,   1,   2,   3 }
126111 **   aDistance = { 5.0, 2.0, 7.0, 6.0 }
126112 **
126113 ** this function sets the aIdx array to contain:
126114 **
126115 **   aIdx      = { 0,   1,   2,   3 }
126116 **
126117 ** The aSpare array is used as temporary working space by the
126118 ** sorting algorithm.
126119 */
126120 static void SortByDistance(
126121   int *aIdx, 
126122   int nIdx, 
126123   float *aDistance, 
126124   int *aSpare
126125 ){
126126   if( nIdx>1 ){
126127     int iLeft = 0;
126128     int iRight = 0;
126129
126130     int nLeft = nIdx/2;
126131     int nRight = nIdx-nLeft;
126132     int *aLeft = aIdx;
126133     int *aRight = &aIdx[nLeft];
126134
126135     SortByDistance(aLeft, nLeft, aDistance, aSpare);
126136     SortByDistance(aRight, nRight, aDistance, aSpare);
126137
126138     memcpy(aSpare, aLeft, sizeof(int)*nLeft);
126139     aLeft = aSpare;
126140
126141     while( iLeft<nLeft || iRight<nRight ){
126142       if( iLeft==nLeft ){
126143         aIdx[iLeft+iRight] = aRight[iRight];
126144         iRight++;
126145       }else if( iRight==nRight ){
126146         aIdx[iLeft+iRight] = aLeft[iLeft];
126147         iLeft++;
126148       }else{
126149         float fLeft = aDistance[aLeft[iLeft]];
126150         float fRight = aDistance[aRight[iRight]];
126151         if( fLeft<fRight ){
126152           aIdx[iLeft+iRight] = aLeft[iLeft];
126153           iLeft++;
126154         }else{
126155           aIdx[iLeft+iRight] = aRight[iRight];
126156           iRight++;
126157         }
126158       }
126159     }
126160
126161 #if 0
126162     /* Check that the sort worked */
126163     {
126164       int jj;
126165       for(jj=1; jj<nIdx; jj++){
126166         float left = aDistance[aIdx[jj-1]];
126167         float right = aDistance[aIdx[jj]];
126168         assert( left<=right );
126169       }
126170     }
126171 #endif
126172   }
126173 }
126174
126175 /*
126176 ** Arguments aIdx, aCell and aSpare all point to arrays of size
126177 ** nIdx. The aIdx array contains the set of integers from 0 to 
126178 ** (nIdx-1) in no particular order. This function sorts the values
126179 ** in aIdx according to dimension iDim of the cells in aCell. The
126180 ** minimum value of dimension iDim is considered first, the
126181 ** maximum used to break ties.
126182 **
126183 ** The aSpare array is used as temporary working space by the
126184 ** sorting algorithm.
126185 */
126186 static void SortByDimension(
126187   Rtree *pRtree,
126188   int *aIdx, 
126189   int nIdx, 
126190   int iDim, 
126191   RtreeCell *aCell, 
126192   int *aSpare
126193 ){
126194   if( nIdx>1 ){
126195
126196     int iLeft = 0;
126197     int iRight = 0;
126198
126199     int nLeft = nIdx/2;
126200     int nRight = nIdx-nLeft;
126201     int *aLeft = aIdx;
126202     int *aRight = &aIdx[nLeft];
126203
126204     SortByDimension(pRtree, aLeft, nLeft, iDim, aCell, aSpare);
126205     SortByDimension(pRtree, aRight, nRight, iDim, aCell, aSpare);
126206
126207     memcpy(aSpare, aLeft, sizeof(int)*nLeft);
126208     aLeft = aSpare;
126209     while( iLeft<nLeft || iRight<nRight ){
126210       double xleft1 = DCOORD(aCell[aLeft[iLeft]].aCoord[iDim*2]);
126211       double xleft2 = DCOORD(aCell[aLeft[iLeft]].aCoord[iDim*2+1]);
126212       double xright1 = DCOORD(aCell[aRight[iRight]].aCoord[iDim*2]);
126213       double xright2 = DCOORD(aCell[aRight[iRight]].aCoord[iDim*2+1]);
126214       if( (iLeft!=nLeft) && ((iRight==nRight)
126215        || (xleft1<xright1)
126216        || (xleft1==xright1 && xleft2<xright2)
126217       )){
126218         aIdx[iLeft+iRight] = aLeft[iLeft];
126219         iLeft++;
126220       }else{
126221         aIdx[iLeft+iRight] = aRight[iRight];
126222         iRight++;
126223       }
126224     }
126225
126226 #if 0
126227     /* Check that the sort worked */
126228     {
126229       int jj;
126230       for(jj=1; jj<nIdx; jj++){
126231         float xleft1 = aCell[aIdx[jj-1]].aCoord[iDim*2];
126232         float xleft2 = aCell[aIdx[jj-1]].aCoord[iDim*2+1];
126233         float xright1 = aCell[aIdx[jj]].aCoord[iDim*2];
126234         float xright2 = aCell[aIdx[jj]].aCoord[iDim*2+1];
126235         assert( xleft1<=xright1 && (xleft1<xright1 || xleft2<=xright2) );
126236       }
126237     }
126238 #endif
126239   }
126240 }
126241
126242 #if VARIANT_RSTARTREE_SPLIT
126243 /*
126244 ** Implementation of the R*-tree variant of SplitNode from Beckman[1990].
126245 */
126246 static int splitNodeStartree(
126247   Rtree *pRtree,
126248   RtreeCell *aCell,
126249   int nCell,
126250   RtreeNode *pLeft,
126251   RtreeNode *pRight,
126252   RtreeCell *pBboxLeft,
126253   RtreeCell *pBboxRight
126254 ){
126255   int **aaSorted;
126256   int *aSpare;
126257   int ii;
126258
126259   int iBestDim;
126260   int iBestSplit;
126261   float fBestMargin;
126262
126263   int nByte = (pRtree->nDim+1)*(sizeof(int*)+nCell*sizeof(int));
126264
126265   aaSorted = (int **)sqlite3_malloc(nByte);
126266   if( !aaSorted ){
126267     return SQLITE_NOMEM;
126268   }
126269
126270   aSpare = &((int *)&aaSorted[pRtree->nDim])[pRtree->nDim*nCell];
126271   memset(aaSorted, 0, nByte);
126272   for(ii=0; ii<pRtree->nDim; ii++){
126273     int jj;
126274     aaSorted[ii] = &((int *)&aaSorted[pRtree->nDim])[ii*nCell];
126275     for(jj=0; jj<nCell; jj++){
126276       aaSorted[ii][jj] = jj;
126277     }
126278     SortByDimension(pRtree, aaSorted[ii], nCell, ii, aCell, aSpare);
126279   }
126280
126281   for(ii=0; ii<pRtree->nDim; ii++){
126282     float margin = 0.0;
126283     float fBestOverlap;
126284     float fBestArea;
126285     int iBestLeft;
126286     int nLeft;
126287
126288     for(
126289       nLeft=RTREE_MINCELLS(pRtree); 
126290       nLeft<=(nCell-RTREE_MINCELLS(pRtree)); 
126291       nLeft++
126292     ){
126293       RtreeCell left;
126294       RtreeCell right;
126295       int kk;
126296       float overlap;
126297       float area;
126298
126299       memcpy(&left, &aCell[aaSorted[ii][0]], sizeof(RtreeCell));
126300       memcpy(&right, &aCell[aaSorted[ii][nCell-1]], sizeof(RtreeCell));
126301       for(kk=1; kk<(nCell-1); kk++){
126302         if( kk<nLeft ){
126303           cellUnion(pRtree, &left, &aCell[aaSorted[ii][kk]]);
126304         }else{
126305           cellUnion(pRtree, &right, &aCell[aaSorted[ii][kk]]);
126306         }
126307       }
126308       margin += cellMargin(pRtree, &left);
126309       margin += cellMargin(pRtree, &right);
126310       overlap = cellOverlap(pRtree, &left, &right, 1, -1);
126311       area = cellArea(pRtree, &left) + cellArea(pRtree, &right);
126312       if( (nLeft==RTREE_MINCELLS(pRtree))
126313        || (overlap<fBestOverlap)
126314        || (overlap==fBestOverlap && area<fBestArea)
126315       ){
126316         iBestLeft = nLeft;
126317         fBestOverlap = overlap;
126318         fBestArea = area;
126319       }
126320     }
126321
126322     if( ii==0 || margin<fBestMargin ){
126323       iBestDim = ii;
126324       fBestMargin = margin;
126325       iBestSplit = iBestLeft;
126326     }
126327   }
126328
126329   memcpy(pBboxLeft, &aCell[aaSorted[iBestDim][0]], sizeof(RtreeCell));
126330   memcpy(pBboxRight, &aCell[aaSorted[iBestDim][iBestSplit]], sizeof(RtreeCell));
126331   for(ii=0; ii<nCell; ii++){
126332     RtreeNode *pTarget = (ii<iBestSplit)?pLeft:pRight;
126333     RtreeCell *pBbox = (ii<iBestSplit)?pBboxLeft:pBboxRight;
126334     RtreeCell *pCell = &aCell[aaSorted[iBestDim][ii]];
126335     nodeInsertCell(pRtree, pTarget, pCell);
126336     cellUnion(pRtree, pBbox, pCell);
126337   }
126338
126339   sqlite3_free(aaSorted);
126340   return SQLITE_OK;
126341 }
126342 #endif
126343
126344 #if VARIANT_GUTTMAN_SPLIT
126345 /*
126346 ** Implementation of the regular R-tree SplitNode from Guttman[1984].
126347 */
126348 static int splitNodeGuttman(
126349   Rtree *pRtree,
126350   RtreeCell *aCell,
126351   int nCell,
126352   RtreeNode *pLeft,
126353   RtreeNode *pRight,
126354   RtreeCell *pBboxLeft,
126355   RtreeCell *pBboxRight
126356 ){
126357   int iLeftSeed = 0;
126358   int iRightSeed = 1;
126359   int *aiUsed;
126360   int i;
126361
126362   aiUsed = sqlite3_malloc(sizeof(int)*nCell);
126363   if( !aiUsed ){
126364     return SQLITE_NOMEM;
126365   }
126366   memset(aiUsed, 0, sizeof(int)*nCell);
126367
126368   PickSeeds(pRtree, aCell, nCell, &iLeftSeed, &iRightSeed);
126369
126370   memcpy(pBboxLeft, &aCell[iLeftSeed], sizeof(RtreeCell));
126371   memcpy(pBboxRight, &aCell[iRightSeed], sizeof(RtreeCell));
126372   nodeInsertCell(pRtree, pLeft, &aCell[iLeftSeed]);
126373   nodeInsertCell(pRtree, pRight, &aCell[iRightSeed]);
126374   aiUsed[iLeftSeed] = 1;
126375   aiUsed[iRightSeed] = 1;
126376
126377   for(i=nCell-2; i>0; i--){
126378     RtreeCell *pNext;
126379     pNext = PickNext(pRtree, aCell, nCell, pBboxLeft, pBboxRight, aiUsed);
126380     float diff =  
126381       cellGrowth(pRtree, pBboxLeft, pNext) - 
126382       cellGrowth(pRtree, pBboxRight, pNext)
126383     ;
126384     if( (RTREE_MINCELLS(pRtree)-NCELL(pRight)==i)
126385      || (diff>0.0 && (RTREE_MINCELLS(pRtree)-NCELL(pLeft)!=i))
126386     ){
126387       nodeInsertCell(pRtree, pRight, pNext);
126388       cellUnion(pRtree, pBboxRight, pNext);
126389     }else{
126390       nodeInsertCell(pRtree, pLeft, pNext);
126391       cellUnion(pRtree, pBboxLeft, pNext);
126392     }
126393   }
126394
126395   sqlite3_free(aiUsed);
126396   return SQLITE_OK;
126397 }
126398 #endif
126399
126400 static int updateMapping(
126401   Rtree *pRtree, 
126402   i64 iRowid, 
126403   RtreeNode *pNode, 
126404   int iHeight
126405 ){
126406   int (*xSetMapping)(Rtree *, sqlite3_int64, sqlite3_int64);
126407   xSetMapping = ((iHeight==0)?rowidWrite:parentWrite);
126408   if( iHeight>0 ){
126409     RtreeNode *pChild = nodeHashLookup(pRtree, iRowid);
126410     if( pChild ){
126411       nodeRelease(pRtree, pChild->pParent);
126412       nodeReference(pNode);
126413       pChild->pParent = pNode;
126414     }
126415   }
126416   return xSetMapping(pRtree, iRowid, pNode->iNode);
126417 }
126418
126419 static int SplitNode(
126420   Rtree *pRtree,
126421   RtreeNode *pNode,
126422   RtreeCell *pCell,
126423   int iHeight
126424 ){
126425   int i;
126426   int newCellIsRight = 0;
126427
126428   int rc = SQLITE_OK;
126429   int nCell = NCELL(pNode);
126430   RtreeCell *aCell;
126431   int *aiUsed;
126432
126433   RtreeNode *pLeft = 0;
126434   RtreeNode *pRight = 0;
126435
126436   RtreeCell leftbbox;
126437   RtreeCell rightbbox;
126438
126439   /* Allocate an array and populate it with a copy of pCell and 
126440   ** all cells from node pLeft. Then zero the original node.
126441   */
126442   aCell = sqlite3_malloc((sizeof(RtreeCell)+sizeof(int))*(nCell+1));
126443   if( !aCell ){
126444     rc = SQLITE_NOMEM;
126445     goto splitnode_out;
126446   }
126447   aiUsed = (int *)&aCell[nCell+1];
126448   memset(aiUsed, 0, sizeof(int)*(nCell+1));
126449   for(i=0; i<nCell; i++){
126450     nodeGetCell(pRtree, pNode, i, &aCell[i]);
126451   }
126452   nodeZero(pRtree, pNode);
126453   memcpy(&aCell[nCell], pCell, sizeof(RtreeCell));
126454   nCell++;
126455
126456   if( pNode->iNode==1 ){
126457     pRight = nodeNew(pRtree, pNode);
126458     pLeft = nodeNew(pRtree, pNode);
126459     pRtree->iDepth++;
126460     pNode->isDirty = 1;
126461     writeInt16(pNode->zData, pRtree->iDepth);
126462   }else{
126463     pLeft = pNode;
126464     pRight = nodeNew(pRtree, pLeft->pParent);
126465     nodeReference(pLeft);
126466   }
126467
126468   if( !pLeft || !pRight ){
126469     rc = SQLITE_NOMEM;
126470     goto splitnode_out;
126471   }
126472
126473   memset(pLeft->zData, 0, pRtree->iNodeSize);
126474   memset(pRight->zData, 0, pRtree->iNodeSize);
126475
126476   rc = AssignCells(pRtree, aCell, nCell, pLeft, pRight, &leftbbox, &rightbbox);
126477   if( rc!=SQLITE_OK ){
126478     goto splitnode_out;
126479   }
126480
126481   /* Ensure both child nodes have node numbers assigned to them by calling
126482   ** nodeWrite(). Node pRight always needs a node number, as it was created
126483   ** by nodeNew() above. But node pLeft sometimes already has a node number.
126484   ** In this case avoid the all to nodeWrite().
126485   */
126486   if( SQLITE_OK!=(rc = nodeWrite(pRtree, pRight))
126487    || (0==pLeft->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pLeft)))
126488   ){
126489     goto splitnode_out;
126490   }
126491
126492   rightbbox.iRowid = pRight->iNode;
126493   leftbbox.iRowid = pLeft->iNode;
126494
126495   if( pNode->iNode==1 ){
126496     rc = rtreeInsertCell(pRtree, pLeft->pParent, &leftbbox, iHeight+1);
126497     if( rc!=SQLITE_OK ){
126498       goto splitnode_out;
126499     }
126500   }else{
126501     RtreeNode *pParent = pLeft->pParent;
126502     int iCell;
126503     rc = nodeParentIndex(pRtree, pLeft, &iCell);
126504     if( rc==SQLITE_OK ){
126505       nodeOverwriteCell(pRtree, pParent, &leftbbox, iCell);
126506       rc = AdjustTree(pRtree, pParent, &leftbbox);
126507     }
126508     if( rc!=SQLITE_OK ){
126509       goto splitnode_out;
126510     }
126511   }
126512   if( (rc = rtreeInsertCell(pRtree, pRight->pParent, &rightbbox, iHeight+1)) ){
126513     goto splitnode_out;
126514   }
126515
126516   for(i=0; i<NCELL(pRight); i++){
126517     i64 iRowid = nodeGetRowid(pRtree, pRight, i);
126518     rc = updateMapping(pRtree, iRowid, pRight, iHeight);
126519     if( iRowid==pCell->iRowid ){
126520       newCellIsRight = 1;
126521     }
126522     if( rc!=SQLITE_OK ){
126523       goto splitnode_out;
126524     }
126525   }
126526   if( pNode->iNode==1 ){
126527     for(i=0; i<NCELL(pLeft); i++){
126528       i64 iRowid = nodeGetRowid(pRtree, pLeft, i);
126529       rc = updateMapping(pRtree, iRowid, pLeft, iHeight);
126530       if( rc!=SQLITE_OK ){
126531         goto splitnode_out;
126532       }
126533     }
126534   }else if( newCellIsRight==0 ){
126535     rc = updateMapping(pRtree, pCell->iRowid, pLeft, iHeight);
126536   }
126537
126538   if( rc==SQLITE_OK ){
126539     rc = nodeRelease(pRtree, pRight);
126540     pRight = 0;
126541   }
126542   if( rc==SQLITE_OK ){
126543     rc = nodeRelease(pRtree, pLeft);
126544     pLeft = 0;
126545   }
126546
126547 splitnode_out:
126548   nodeRelease(pRtree, pRight);
126549   nodeRelease(pRtree, pLeft);
126550   sqlite3_free(aCell);
126551   return rc;
126552 }
126553
126554 /*
126555 ** If node pLeaf is not the root of the r-tree and its pParent pointer is 
126556 ** still NULL, load all ancestor nodes of pLeaf into memory and populate
126557 ** the pLeaf->pParent chain all the way up to the root node.
126558 **
126559 ** This operation is required when a row is deleted (or updated - an update
126560 ** is implemented as a delete followed by an insert). SQLite provides the
126561 ** rowid of the row to delete, which can be used to find the leaf on which
126562 ** the entry resides (argument pLeaf). Once the leaf is located, this 
126563 ** function is called to determine its ancestry.
126564 */
126565 static int fixLeafParent(Rtree *pRtree, RtreeNode *pLeaf){
126566   int rc = SQLITE_OK;
126567   RtreeNode *pChild = pLeaf;
126568   while( rc==SQLITE_OK && pChild->iNode!=1 && pChild->pParent==0 ){
126569     int rc2 = SQLITE_OK;          /* sqlite3_reset() return code */
126570     sqlite3_bind_int64(pRtree->pReadParent, 1, pChild->iNode);
126571     rc = sqlite3_step(pRtree->pReadParent);
126572     if( rc==SQLITE_ROW ){
126573       RtreeNode *pTest;           /* Used to test for reference loops */
126574       i64 iNode;                  /* Node number of parent node */
126575
126576       /* Before setting pChild->pParent, test that we are not creating a
126577       ** loop of references (as we would if, say, pChild==pParent). We don't
126578       ** want to do this as it leads to a memory leak when trying to delete
126579       ** the referenced counted node structures.
126580       */
126581       iNode = sqlite3_column_int64(pRtree->pReadParent, 0);
126582       for(pTest=pLeaf; pTest && pTest->iNode!=iNode; pTest=pTest->pParent);
126583       if( !pTest ){
126584         rc2 = nodeAcquire(pRtree, iNode, 0, &pChild->pParent);
126585       }
126586     }
126587     rc = sqlite3_reset(pRtree->pReadParent);
126588     if( rc==SQLITE_OK ) rc = rc2;
126589     if( rc==SQLITE_OK && !pChild->pParent ) rc = SQLITE_CORRUPT;
126590     pChild = pChild->pParent;
126591   }
126592   return rc;
126593 }
126594
126595 static int deleteCell(Rtree *, RtreeNode *, int, int);
126596
126597 static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){
126598   int rc;
126599   int rc2;
126600   RtreeNode *pParent;
126601   int iCell;
126602
126603   assert( pNode->nRef==1 );
126604
126605   /* Remove the entry in the parent cell. */
126606   rc = nodeParentIndex(pRtree, pNode, &iCell);
126607   if( rc==SQLITE_OK ){
126608     pParent = pNode->pParent;
126609     pNode->pParent = 0;
126610     rc = deleteCell(pRtree, pParent, iCell, iHeight+1);
126611   }
126612   rc2 = nodeRelease(pRtree, pParent);
126613   if( rc==SQLITE_OK ){
126614     rc = rc2;
126615   }
126616   if( rc!=SQLITE_OK ){
126617     return rc;
126618   }
126619
126620   /* Remove the xxx_node entry. */
126621   sqlite3_bind_int64(pRtree->pDeleteNode, 1, pNode->iNode);
126622   sqlite3_step(pRtree->pDeleteNode);
126623   if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteNode)) ){
126624     return rc;
126625   }
126626
126627   /* Remove the xxx_parent entry. */
126628   sqlite3_bind_int64(pRtree->pDeleteParent, 1, pNode->iNode);
126629   sqlite3_step(pRtree->pDeleteParent);
126630   if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteParent)) ){
126631     return rc;
126632   }
126633   
126634   /* Remove the node from the in-memory hash table and link it into
126635   ** the Rtree.pDeleted list. Its contents will be re-inserted later on.
126636   */
126637   nodeHashDelete(pRtree, pNode);
126638   pNode->iNode = iHeight;
126639   pNode->pNext = pRtree->pDeleted;
126640   pNode->nRef++;
126641   pRtree->pDeleted = pNode;
126642
126643   return SQLITE_OK;
126644 }
126645
126646 static int fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){
126647   RtreeNode *pParent = pNode->pParent;
126648   int rc = SQLITE_OK; 
126649   if( pParent ){
126650     int ii; 
126651     int nCell = NCELL(pNode);
126652     RtreeCell box;                            /* Bounding box for pNode */
126653     nodeGetCell(pRtree, pNode, 0, &box);
126654     for(ii=1; ii<nCell; ii++){
126655       RtreeCell cell;
126656       nodeGetCell(pRtree, pNode, ii, &cell);
126657       cellUnion(pRtree, &box, &cell);
126658     }
126659     box.iRowid = pNode->iNode;
126660     rc = nodeParentIndex(pRtree, pNode, &ii);
126661     if( rc==SQLITE_OK ){
126662       nodeOverwriteCell(pRtree, pParent, &box, ii);
126663       rc = fixBoundingBox(pRtree, pParent);
126664     }
126665   }
126666   return rc;
126667 }
126668
126669 /*
126670 ** Delete the cell at index iCell of node pNode. After removing the
126671 ** cell, adjust the r-tree data structure if required.
126672 */
126673 static int deleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell, int iHeight){
126674   RtreeNode *pParent;
126675   int rc;
126676
126677   if( SQLITE_OK!=(rc = fixLeafParent(pRtree, pNode)) ){
126678     return rc;
126679   }
126680
126681   /* Remove the cell from the node. This call just moves bytes around
126682   ** the in-memory node image, so it cannot fail.
126683   */
126684   nodeDeleteCell(pRtree, pNode, iCell);
126685
126686   /* If the node is not the tree root and now has less than the minimum
126687   ** number of cells, remove it from the tree. Otherwise, update the
126688   ** cell in the parent node so that it tightly contains the updated
126689   ** node.
126690   */
126691   pParent = pNode->pParent;
126692   assert( pParent || pNode->iNode==1 );
126693   if( pParent ){
126694     if( NCELL(pNode)<RTREE_MINCELLS(pRtree) ){
126695       rc = removeNode(pRtree, pNode, iHeight);
126696     }else{
126697       rc = fixBoundingBox(pRtree, pNode);
126698     }
126699   }
126700
126701   return rc;
126702 }
126703
126704 static int Reinsert(
126705   Rtree *pRtree, 
126706   RtreeNode *pNode, 
126707   RtreeCell *pCell, 
126708   int iHeight
126709 ){
126710   int *aOrder;
126711   int *aSpare;
126712   RtreeCell *aCell;
126713   float *aDistance;
126714   int nCell;
126715   float aCenterCoord[RTREE_MAX_DIMENSIONS];
126716   int iDim;
126717   int ii;
126718   int rc = SQLITE_OK;
126719
126720   memset(aCenterCoord, 0, sizeof(float)*RTREE_MAX_DIMENSIONS);
126721
126722   nCell = NCELL(pNode)+1;
126723
126724   /* Allocate the buffers used by this operation. The allocation is
126725   ** relinquished before this function returns.
126726   */
126727   aCell = (RtreeCell *)sqlite3_malloc(nCell * (
126728     sizeof(RtreeCell) +         /* aCell array */
126729     sizeof(int)       +         /* aOrder array */
126730     sizeof(int)       +         /* aSpare array */
126731     sizeof(float)               /* aDistance array */
126732   ));
126733   if( !aCell ){
126734     return SQLITE_NOMEM;
126735   }
126736   aOrder    = (int *)&aCell[nCell];
126737   aSpare    = (int *)&aOrder[nCell];
126738   aDistance = (float *)&aSpare[nCell];
126739
126740   for(ii=0; ii<nCell; ii++){
126741     if( ii==(nCell-1) ){
126742       memcpy(&aCell[ii], pCell, sizeof(RtreeCell));
126743     }else{
126744       nodeGetCell(pRtree, pNode, ii, &aCell[ii]);
126745     }
126746     aOrder[ii] = ii;
126747     for(iDim=0; iDim<pRtree->nDim; iDim++){
126748       aCenterCoord[iDim] += DCOORD(aCell[ii].aCoord[iDim*2]);
126749       aCenterCoord[iDim] += DCOORD(aCell[ii].aCoord[iDim*2+1]);
126750     }
126751   }
126752   for(iDim=0; iDim<pRtree->nDim; iDim++){
126753     aCenterCoord[iDim] = aCenterCoord[iDim]/((float)nCell*2.0);
126754   }
126755
126756   for(ii=0; ii<nCell; ii++){
126757     aDistance[ii] = 0.0;
126758     for(iDim=0; iDim<pRtree->nDim; iDim++){
126759       float coord = DCOORD(aCell[ii].aCoord[iDim*2+1]) - 
126760           DCOORD(aCell[ii].aCoord[iDim*2]);
126761       aDistance[ii] += (coord-aCenterCoord[iDim])*(coord-aCenterCoord[iDim]);
126762     }
126763   }
126764
126765   SortByDistance(aOrder, nCell, aDistance, aSpare);
126766   nodeZero(pRtree, pNode);
126767
126768   for(ii=0; rc==SQLITE_OK && ii<(nCell-(RTREE_MINCELLS(pRtree)+1)); ii++){
126769     RtreeCell *p = &aCell[aOrder[ii]];
126770     nodeInsertCell(pRtree, pNode, p);
126771     if( p->iRowid==pCell->iRowid ){
126772       if( iHeight==0 ){
126773         rc = rowidWrite(pRtree, p->iRowid, pNode->iNode);
126774       }else{
126775         rc = parentWrite(pRtree, p->iRowid, pNode->iNode);
126776       }
126777     }
126778   }
126779   if( rc==SQLITE_OK ){
126780     rc = fixBoundingBox(pRtree, pNode);
126781   }
126782   for(; rc==SQLITE_OK && ii<nCell; ii++){
126783     /* Find a node to store this cell in. pNode->iNode currently contains
126784     ** the height of the sub-tree headed by the cell.
126785     */
126786     RtreeNode *pInsert;
126787     RtreeCell *p = &aCell[aOrder[ii]];
126788     rc = ChooseLeaf(pRtree, p, iHeight, &pInsert);
126789     if( rc==SQLITE_OK ){
126790       int rc2;
126791       rc = rtreeInsertCell(pRtree, pInsert, p, iHeight);
126792       rc2 = nodeRelease(pRtree, pInsert);
126793       if( rc==SQLITE_OK ){
126794         rc = rc2;
126795       }
126796     }
126797   }
126798
126799   sqlite3_free(aCell);
126800   return rc;
126801 }
126802
126803 /*
126804 ** Insert cell pCell into node pNode. Node pNode is the head of a 
126805 ** subtree iHeight high (leaf nodes have iHeight==0).
126806 */
126807 static int rtreeInsertCell(
126808   Rtree *pRtree,
126809   RtreeNode *pNode,
126810   RtreeCell *pCell,
126811   int iHeight
126812 ){
126813   int rc = SQLITE_OK;
126814   if( iHeight>0 ){
126815     RtreeNode *pChild = nodeHashLookup(pRtree, pCell->iRowid);
126816     if( pChild ){
126817       nodeRelease(pRtree, pChild->pParent);
126818       nodeReference(pNode);
126819       pChild->pParent = pNode;
126820     }
126821   }
126822   if( nodeInsertCell(pRtree, pNode, pCell) ){
126823 #if VARIANT_RSTARTREE_REINSERT
126824     if( iHeight<=pRtree->iReinsertHeight || pNode->iNode==1){
126825       rc = SplitNode(pRtree, pNode, pCell, iHeight);
126826     }else{
126827       pRtree->iReinsertHeight = iHeight;
126828       rc = Reinsert(pRtree, pNode, pCell, iHeight);
126829     }
126830 #else
126831     rc = SplitNode(pRtree, pNode, pCell, iHeight);
126832 #endif
126833   }else{
126834     rc = AdjustTree(pRtree, pNode, pCell);
126835     if( rc==SQLITE_OK ){
126836       if( iHeight==0 ){
126837         rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode);
126838       }else{
126839         rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode);
126840       }
126841     }
126842   }
126843   return rc;
126844 }
126845
126846 static int reinsertNodeContent(Rtree *pRtree, RtreeNode *pNode){
126847   int ii;
126848   int rc = SQLITE_OK;
126849   int nCell = NCELL(pNode);
126850
126851   for(ii=0; rc==SQLITE_OK && ii<nCell; ii++){
126852     RtreeNode *pInsert;
126853     RtreeCell cell;
126854     nodeGetCell(pRtree, pNode, ii, &cell);
126855
126856     /* Find a node to store this cell in. pNode->iNode currently contains
126857     ** the height of the sub-tree headed by the cell.
126858     */
126859     rc = ChooseLeaf(pRtree, &cell, pNode->iNode, &pInsert);
126860     if( rc==SQLITE_OK ){
126861       int rc2;
126862       rc = rtreeInsertCell(pRtree, pInsert, &cell, pNode->iNode);
126863       rc2 = nodeRelease(pRtree, pInsert);
126864       if( rc==SQLITE_OK ){
126865         rc = rc2;
126866       }
126867     }
126868   }
126869   return rc;
126870 }
126871
126872 /*
126873 ** Select a currently unused rowid for a new r-tree record.
126874 */
126875 static int newRowid(Rtree *pRtree, i64 *piRowid){
126876   int rc;
126877   sqlite3_bind_null(pRtree->pWriteRowid, 1);
126878   sqlite3_bind_null(pRtree->pWriteRowid, 2);
126879   sqlite3_step(pRtree->pWriteRowid);
126880   rc = sqlite3_reset(pRtree->pWriteRowid);
126881   *piRowid = sqlite3_last_insert_rowid(pRtree->db);
126882   return rc;
126883 }
126884
126885 /*
126886 ** The xUpdate method for rtree module virtual tables.
126887 */
126888 static int rtreeUpdate(
126889   sqlite3_vtab *pVtab, 
126890   int nData, 
126891   sqlite3_value **azData, 
126892   sqlite_int64 *pRowid
126893 ){
126894   Rtree *pRtree = (Rtree *)pVtab;
126895   int rc = SQLITE_OK;
126896
126897   rtreeReference(pRtree);
126898
126899   assert(nData>=1);
126900
126901   /* If azData[0] is not an SQL NULL value, it is the rowid of a
126902   ** record to delete from the r-tree table. The following block does
126903   ** just that.
126904   */
126905   if( sqlite3_value_type(azData[0])!=SQLITE_NULL ){
126906     i64 iDelete;                /* The rowid to delete */
126907     RtreeNode *pLeaf;           /* Leaf node containing record iDelete */
126908     int iCell;                  /* Index of iDelete cell in pLeaf */
126909     RtreeNode *pRoot;
126910
126911     /* Obtain a reference to the root node to initialise Rtree.iDepth */
126912     rc = nodeAcquire(pRtree, 1, 0, &pRoot);
126913
126914     /* Obtain a reference to the leaf node that contains the entry 
126915     ** about to be deleted. 
126916     */
126917     if( rc==SQLITE_OK ){
126918       iDelete = sqlite3_value_int64(azData[0]);
126919       rc = findLeafNode(pRtree, iDelete, &pLeaf);
126920     }
126921
126922     /* Delete the cell in question from the leaf node. */
126923     if( rc==SQLITE_OK ){
126924       int rc2;
126925       rc = nodeRowidIndex(pRtree, pLeaf, iDelete, &iCell);
126926       if( rc==SQLITE_OK ){
126927         rc = deleteCell(pRtree, pLeaf, iCell, 0);
126928       }
126929       rc2 = nodeRelease(pRtree, pLeaf);
126930       if( rc==SQLITE_OK ){
126931         rc = rc2;
126932       }
126933     }
126934
126935     /* Delete the corresponding entry in the <rtree>_rowid table. */
126936     if( rc==SQLITE_OK ){
126937       sqlite3_bind_int64(pRtree->pDeleteRowid, 1, iDelete);
126938       sqlite3_step(pRtree->pDeleteRowid);
126939       rc = sqlite3_reset(pRtree->pDeleteRowid);
126940     }
126941
126942     /* Check if the root node now has exactly one child. If so, remove
126943     ** it, schedule the contents of the child for reinsertion and 
126944     ** reduce the tree height by one.
126945     **
126946     ** This is equivalent to copying the contents of the child into
126947     ** the root node (the operation that Gutman's paper says to perform 
126948     ** in this scenario).
126949     */
126950     if( rc==SQLITE_OK && pRtree->iDepth>0 && NCELL(pRoot)==1 ){
126951       int rc2;
126952       RtreeNode *pChild;
126953       i64 iChild = nodeGetRowid(pRtree, pRoot, 0);
126954       rc = nodeAcquire(pRtree, iChild, pRoot, &pChild);
126955       if( rc==SQLITE_OK ){
126956         rc = removeNode(pRtree, pChild, pRtree->iDepth-1);
126957       }
126958       rc2 = nodeRelease(pRtree, pChild);
126959       if( rc==SQLITE_OK ) rc = rc2;
126960       if( rc==SQLITE_OK ){
126961         pRtree->iDepth--;
126962         writeInt16(pRoot->zData, pRtree->iDepth);
126963         pRoot->isDirty = 1;
126964       }
126965     }
126966
126967     /* Re-insert the contents of any underfull nodes removed from the tree. */
126968     for(pLeaf=pRtree->pDeleted; pLeaf; pLeaf=pRtree->pDeleted){
126969       if( rc==SQLITE_OK ){
126970         rc = reinsertNodeContent(pRtree, pLeaf);
126971       }
126972       pRtree->pDeleted = pLeaf->pNext;
126973       sqlite3_free(pLeaf);
126974     }
126975
126976     /* Release the reference to the root node. */
126977     if( rc==SQLITE_OK ){
126978       rc = nodeRelease(pRtree, pRoot);
126979     }else{
126980       nodeRelease(pRtree, pRoot);
126981     }
126982   }
126983
126984   /* If the azData[] array contains more than one element, elements
126985   ** (azData[2]..azData[argc-1]) contain a new record to insert into
126986   ** the r-tree structure.
126987   */
126988   if( rc==SQLITE_OK && nData>1 ){
126989     /* Insert a new record into the r-tree */
126990     RtreeCell cell;
126991     int ii;
126992     RtreeNode *pLeaf;
126993
126994     /* Populate the cell.aCoord[] array. The first coordinate is azData[3]. */
126995     assert( nData==(pRtree->nDim*2 + 3) );
126996     if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
126997       for(ii=0; ii<(pRtree->nDim*2); ii+=2){
126998         cell.aCoord[ii].f = (float)sqlite3_value_double(azData[ii+3]);
126999         cell.aCoord[ii+1].f = (float)sqlite3_value_double(azData[ii+4]);
127000         if( cell.aCoord[ii].f>cell.aCoord[ii+1].f ){
127001           rc = SQLITE_CONSTRAINT;
127002           goto constraint;
127003         }
127004       }
127005     }else{
127006       for(ii=0; ii<(pRtree->nDim*2); ii+=2){
127007         cell.aCoord[ii].i = sqlite3_value_int(azData[ii+3]);
127008         cell.aCoord[ii+1].i = sqlite3_value_int(azData[ii+4]);
127009         if( cell.aCoord[ii].i>cell.aCoord[ii+1].i ){
127010           rc = SQLITE_CONSTRAINT;
127011           goto constraint;
127012         }
127013       }
127014     }
127015
127016     /* Figure out the rowid of the new row. */
127017     if( sqlite3_value_type(azData[2])==SQLITE_NULL ){
127018       rc = newRowid(pRtree, &cell.iRowid);
127019     }else{
127020       cell.iRowid = sqlite3_value_int64(azData[2]);
127021       sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid);
127022       if( SQLITE_ROW==sqlite3_step(pRtree->pReadRowid) ){
127023         sqlite3_reset(pRtree->pReadRowid);
127024         rc = SQLITE_CONSTRAINT;
127025         goto constraint;
127026       }
127027       rc = sqlite3_reset(pRtree->pReadRowid);
127028     }
127029     *pRowid = cell.iRowid;
127030
127031     if( rc==SQLITE_OK ){
127032       rc = ChooseLeaf(pRtree, &cell, 0, &pLeaf);
127033     }
127034     if( rc==SQLITE_OK ){
127035       int rc2;
127036       pRtree->iReinsertHeight = -1;
127037       rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0);
127038       rc2 = nodeRelease(pRtree, pLeaf);
127039       if( rc==SQLITE_OK ){
127040         rc = rc2;
127041       }
127042     }
127043   }
127044
127045 constraint:
127046   rtreeRelease(pRtree);
127047   return rc;
127048 }
127049
127050 /*
127051 ** The xRename method for rtree module virtual tables.
127052 */
127053 static int rtreeRename(sqlite3_vtab *pVtab, const char *zNewName){
127054   Rtree *pRtree = (Rtree *)pVtab;
127055   int rc = SQLITE_NOMEM;
127056   char *zSql = sqlite3_mprintf(
127057     "ALTER TABLE %Q.'%q_node'   RENAME TO \"%w_node\";"
127058     "ALTER TABLE %Q.'%q_parent' RENAME TO \"%w_parent\";"
127059     "ALTER TABLE %Q.'%q_rowid'  RENAME TO \"%w_rowid\";"
127060     , pRtree->zDb, pRtree->zName, zNewName 
127061     , pRtree->zDb, pRtree->zName, zNewName 
127062     , pRtree->zDb, pRtree->zName, zNewName
127063   );
127064   if( zSql ){
127065     rc = sqlite3_exec(pRtree->db, zSql, 0, 0, 0);
127066     sqlite3_free(zSql);
127067   }
127068   return rc;
127069 }
127070
127071 static sqlite3_module rtreeModule = {
127072   0,                         /* iVersion */
127073   rtreeCreate,                /* xCreate - create a table */
127074   rtreeConnect,               /* xConnect - connect to an existing table */
127075   rtreeBestIndex,             /* xBestIndex - Determine search strategy */
127076   rtreeDisconnect,            /* xDisconnect - Disconnect from a table */
127077   rtreeDestroy,               /* xDestroy - Drop a table */
127078   rtreeOpen,                  /* xOpen - open a cursor */
127079   rtreeClose,                 /* xClose - close a cursor */
127080   rtreeFilter,                /* xFilter - configure scan constraints */
127081   rtreeNext,                  /* xNext - advance a cursor */
127082   rtreeEof,                   /* xEof */
127083   rtreeColumn,                /* xColumn - read data */
127084   rtreeRowid,                 /* xRowid - read data */
127085   rtreeUpdate,                /* xUpdate - write data */
127086   0,                          /* xBegin - begin transaction */
127087   0,                          /* xSync - sync transaction */
127088   0,                          /* xCommit - commit transaction */
127089   0,                          /* xRollback - rollback transaction */
127090   0,                          /* xFindFunction - function overloading */
127091   rtreeRename                 /* xRename - rename the table */
127092 };
127093
127094 static int rtreeSqlInit(
127095   Rtree *pRtree, 
127096   sqlite3 *db, 
127097   const char *zDb, 
127098   const char *zPrefix, 
127099   int isCreate
127100 ){
127101   int rc = SQLITE_OK;
127102
127103   #define N_STATEMENT 9
127104   static const char *azSql[N_STATEMENT] = {
127105     /* Read and write the xxx_node table */
127106     "SELECT data FROM '%q'.'%q_node' WHERE nodeno = :1",
127107     "INSERT OR REPLACE INTO '%q'.'%q_node' VALUES(:1, :2)",
127108     "DELETE FROM '%q'.'%q_node' WHERE nodeno = :1",
127109
127110     /* Read and write the xxx_rowid table */
127111     "SELECT nodeno FROM '%q'.'%q_rowid' WHERE rowid = :1",
127112     "INSERT OR REPLACE INTO '%q'.'%q_rowid' VALUES(:1, :2)",
127113     "DELETE FROM '%q'.'%q_rowid' WHERE rowid = :1",
127114
127115     /* Read and write the xxx_parent table */
127116     "SELECT parentnode FROM '%q'.'%q_parent' WHERE nodeno = :1",
127117     "INSERT OR REPLACE INTO '%q'.'%q_parent' VALUES(:1, :2)",
127118     "DELETE FROM '%q'.'%q_parent' WHERE nodeno = :1"
127119   };
127120   sqlite3_stmt **appStmt[N_STATEMENT];
127121   int i;
127122
127123   pRtree->db = db;
127124
127125   if( isCreate ){
127126     char *zCreate = sqlite3_mprintf(
127127 "CREATE TABLE \"%w\".\"%w_node\"(nodeno INTEGER PRIMARY KEY, data BLOB);"
127128 "CREATE TABLE \"%w\".\"%w_rowid\"(rowid INTEGER PRIMARY KEY, nodeno INTEGER);"
127129 "CREATE TABLE \"%w\".\"%w_parent\"(nodeno INTEGER PRIMARY KEY, parentnode INTEGER);"
127130 "INSERT INTO '%q'.'%q_node' VALUES(1, zeroblob(%d))",
127131       zDb, zPrefix, zDb, zPrefix, zDb, zPrefix, zDb, zPrefix, pRtree->iNodeSize
127132     );
127133     if( !zCreate ){
127134       return SQLITE_NOMEM;
127135     }
127136     rc = sqlite3_exec(db, zCreate, 0, 0, 0);
127137     sqlite3_free(zCreate);
127138     if( rc!=SQLITE_OK ){
127139       return rc;
127140     }
127141   }
127142
127143   appStmt[0] = &pRtree->pReadNode;
127144   appStmt[1] = &pRtree->pWriteNode;
127145   appStmt[2] = &pRtree->pDeleteNode;
127146   appStmt[3] = &pRtree->pReadRowid;
127147   appStmt[4] = &pRtree->pWriteRowid;
127148   appStmt[5] = &pRtree->pDeleteRowid;
127149   appStmt[6] = &pRtree->pReadParent;
127150   appStmt[7] = &pRtree->pWriteParent;
127151   appStmt[8] = &pRtree->pDeleteParent;
127152
127153   for(i=0; i<N_STATEMENT && rc==SQLITE_OK; i++){
127154     char *zSql = sqlite3_mprintf(azSql[i], zDb, zPrefix);
127155     if( zSql ){
127156       rc = sqlite3_prepare_v2(db, zSql, -1, appStmt[i], 0); 
127157     }else{
127158       rc = SQLITE_NOMEM;
127159     }
127160     sqlite3_free(zSql);
127161   }
127162
127163   return rc;
127164 }
127165
127166 /*
127167 ** The second argument to this function contains the text of an SQL statement
127168 ** that returns a single integer value. The statement is compiled and executed
127169 ** using database connection db. If successful, the integer value returned
127170 ** is written to *piVal and SQLITE_OK returned. Otherwise, an SQLite error
127171 ** code is returned and the value of *piVal after returning is not defined.
127172 */
127173 static int getIntFromStmt(sqlite3 *db, const char *zSql, int *piVal){
127174   int rc = SQLITE_NOMEM;
127175   if( zSql ){
127176     sqlite3_stmt *pStmt = 0;
127177     rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
127178     if( rc==SQLITE_OK ){
127179       if( SQLITE_ROW==sqlite3_step(pStmt) ){
127180         *piVal = sqlite3_column_int(pStmt, 0);
127181       }
127182       rc = sqlite3_finalize(pStmt);
127183     }
127184   }
127185   return rc;
127186 }
127187
127188 /*
127189 ** This function is called from within the xConnect() or xCreate() method to
127190 ** determine the node-size used by the rtree table being created or connected
127191 ** to. If successful, pRtree->iNodeSize is populated and SQLITE_OK returned.
127192 ** Otherwise, an SQLite error code is returned.
127193 **
127194 ** If this function is being called as part of an xConnect(), then the rtree
127195 ** table already exists. In this case the node-size is determined by inspecting
127196 ** the root node of the tree.
127197 **
127198 ** Otherwise, for an xCreate(), use 64 bytes less than the database page-size. 
127199 ** This ensures that each node is stored on a single database page. If the 
127200 ** database page-size is so large that more than RTREE_MAXCELLS entries 
127201 ** would fit in a single node, use a smaller node-size.
127202 */
127203 static int getNodeSize(
127204   sqlite3 *db,                    /* Database handle */
127205   Rtree *pRtree,                  /* Rtree handle */
127206   int isCreate                    /* True for xCreate, false for xConnect */
127207 ){
127208   int rc;
127209   char *zSql;
127210   if( isCreate ){
127211     int iPageSize;
127212     zSql = sqlite3_mprintf("PRAGMA %Q.page_size", pRtree->zDb);
127213     rc = getIntFromStmt(db, zSql, &iPageSize);
127214     if( rc==SQLITE_OK ){
127215       pRtree->iNodeSize = iPageSize-64;
127216       if( (4+pRtree->nBytesPerCell*RTREE_MAXCELLS)<pRtree->iNodeSize ){
127217         pRtree->iNodeSize = 4+pRtree->nBytesPerCell*RTREE_MAXCELLS;
127218       }
127219     }
127220   }else{
127221     zSql = sqlite3_mprintf(
127222         "SELECT length(data) FROM '%q'.'%q_node' WHERE nodeno = 1",
127223         pRtree->zDb, pRtree->zName
127224     );
127225     rc = getIntFromStmt(db, zSql, &pRtree->iNodeSize);
127226   }
127227
127228   sqlite3_free(zSql);
127229   return rc;
127230 }
127231
127232 /* 
127233 ** This function is the implementation of both the xConnect and xCreate
127234 ** methods of the r-tree virtual table.
127235 **
127236 **   argv[0]   -> module name
127237 **   argv[1]   -> database name
127238 **   argv[2]   -> table name
127239 **   argv[...] -> column names...
127240 */
127241 static int rtreeInit(
127242   sqlite3 *db,                        /* Database connection */
127243   void *pAux,                         /* One of the RTREE_COORD_* constants */
127244   int argc, const char *const*argv,   /* Parameters to CREATE TABLE statement */
127245   sqlite3_vtab **ppVtab,              /* OUT: New virtual table */
127246   char **pzErr,                       /* OUT: Error message, if any */
127247   int isCreate                        /* True for xCreate, false for xConnect */
127248 ){
127249   int rc = SQLITE_OK;
127250   Rtree *pRtree;
127251   int nDb;              /* Length of string argv[1] */
127252   int nName;            /* Length of string argv[2] */
127253   int eCoordType = (pAux ? RTREE_COORD_INT32 : RTREE_COORD_REAL32);
127254
127255   const char *aErrMsg[] = {
127256     0,                                                    /* 0 */
127257     "Wrong number of columns for an rtree table",         /* 1 */
127258     "Too few columns for an rtree table",                 /* 2 */
127259     "Too many columns for an rtree table"                 /* 3 */
127260   };
127261
127262   int iErr = (argc<6) ? 2 : argc>(RTREE_MAX_DIMENSIONS*2+4) ? 3 : argc%2;
127263   if( aErrMsg[iErr] ){
127264     *pzErr = sqlite3_mprintf("%s", aErrMsg[iErr]);
127265     return SQLITE_ERROR;
127266   }
127267
127268   /* Allocate the sqlite3_vtab structure */
127269   nDb = strlen(argv[1]);
127270   nName = strlen(argv[2]);
127271   pRtree = (Rtree *)sqlite3_malloc(sizeof(Rtree)+nDb+nName+2);
127272   if( !pRtree ){
127273     return SQLITE_NOMEM;
127274   }
127275   memset(pRtree, 0, sizeof(Rtree)+nDb+nName+2);
127276   pRtree->nBusy = 1;
127277   pRtree->base.pModule = &rtreeModule;
127278   pRtree->zDb = (char *)&pRtree[1];
127279   pRtree->zName = &pRtree->zDb[nDb+1];
127280   pRtree->nDim = (argc-4)/2;
127281   pRtree->nBytesPerCell = 8 + pRtree->nDim*4*2;
127282   pRtree->eCoordType = eCoordType;
127283   memcpy(pRtree->zDb, argv[1], nDb);
127284   memcpy(pRtree->zName, argv[2], nName);
127285
127286   /* Figure out the node size to use. */
127287   rc = getNodeSize(db, pRtree, isCreate);
127288
127289   /* Create/Connect to the underlying relational database schema. If
127290   ** that is successful, call sqlite3_declare_vtab() to configure
127291   ** the r-tree table schema.
127292   */
127293   if( rc==SQLITE_OK ){
127294     if( (rc = rtreeSqlInit(pRtree, db, argv[1], argv[2], isCreate)) ){
127295       *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db));
127296     }else{
127297       char *zSql = sqlite3_mprintf("CREATE TABLE x(%s", argv[3]);
127298       char *zTmp;
127299       int ii;
127300       for(ii=4; zSql && ii<argc; ii++){
127301         zTmp = zSql;
127302         zSql = sqlite3_mprintf("%s, %s", zTmp, argv[ii]);
127303         sqlite3_free(zTmp);
127304       }
127305       if( zSql ){
127306         zTmp = zSql;
127307         zSql = sqlite3_mprintf("%s);", zTmp);
127308         sqlite3_free(zTmp);
127309       }
127310       if( !zSql ){
127311         rc = SQLITE_NOMEM;
127312       }else if( SQLITE_OK!=(rc = sqlite3_declare_vtab(db, zSql)) ){
127313         *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db));
127314       }
127315       sqlite3_free(zSql);
127316     }
127317   }
127318
127319   if( rc==SQLITE_OK ){
127320     *ppVtab = (sqlite3_vtab *)pRtree;
127321   }else{
127322     rtreeRelease(pRtree);
127323   }
127324   return rc;
127325 }
127326
127327
127328 /*
127329 ** Implementation of a scalar function that decodes r-tree nodes to
127330 ** human readable strings. This can be used for debugging and analysis.
127331 **
127332 ** The scalar function takes two arguments, a blob of data containing
127333 ** an r-tree node, and the number of dimensions the r-tree indexes.
127334 ** For a two-dimensional r-tree structure called "rt", to deserialize
127335 ** all nodes, a statement like:
127336 **
127337 **   SELECT rtreenode(2, data) FROM rt_node;
127338 **
127339 ** The human readable string takes the form of a Tcl list with one
127340 ** entry for each cell in the r-tree node. Each entry is itself a
127341 ** list, containing the 8-byte rowid/pageno followed by the 
127342 ** <num-dimension>*2 coordinates.
127343 */
127344 static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
127345   char *zText = 0;
127346   RtreeNode node;
127347   Rtree tree;
127348   int ii;
127349
127350   UNUSED_PARAMETER(nArg);
127351   memset(&node, 0, sizeof(RtreeNode));
127352   memset(&tree, 0, sizeof(Rtree));
127353   tree.nDim = sqlite3_value_int(apArg[0]);
127354   tree.nBytesPerCell = 8 + 8 * tree.nDim;
127355   node.zData = (u8 *)sqlite3_value_blob(apArg[1]);
127356
127357   for(ii=0; ii<NCELL(&node); ii++){
127358     char zCell[512];
127359     int nCell = 0;
127360     RtreeCell cell;
127361     int jj;
127362
127363     nodeGetCell(&tree, &node, ii, &cell);
127364     sqlite3_snprintf(512-nCell,&zCell[nCell],"%lld", cell.iRowid);
127365     nCell = strlen(zCell);
127366     for(jj=0; jj<tree.nDim*2; jj++){
127367       sqlite3_snprintf(512-nCell,&zCell[nCell]," %f",(double)cell.aCoord[jj].f);
127368       nCell = strlen(zCell);
127369     }
127370
127371     if( zText ){
127372       char *zTextNew = sqlite3_mprintf("%s {%s}", zText, zCell);
127373       sqlite3_free(zText);
127374       zText = zTextNew;
127375     }else{
127376       zText = sqlite3_mprintf("{%s}", zCell);
127377     }
127378   }
127379   
127380   sqlite3_result_text(ctx, zText, -1, sqlite3_free);
127381 }
127382
127383 static void rtreedepth(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
127384   UNUSED_PARAMETER(nArg);
127385   if( sqlite3_value_type(apArg[0])!=SQLITE_BLOB 
127386    || sqlite3_value_bytes(apArg[0])<2
127387   ){
127388     sqlite3_result_error(ctx, "Invalid argument to rtreedepth()", -1); 
127389   }else{
127390     u8 *zBlob = (u8 *)sqlite3_value_blob(apArg[0]);
127391     sqlite3_result_int(ctx, readInt16(zBlob));
127392   }
127393 }
127394
127395 /*
127396 ** Register the r-tree module with database handle db. This creates the
127397 ** virtual table module "rtree" and the debugging/analysis scalar 
127398 ** function "rtreenode".
127399 */
127400 SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db){
127401   const int utf8 = SQLITE_UTF8;
127402   int rc;
127403
127404   rc = sqlite3_create_function(db, "rtreenode", 2, utf8, 0, rtreenode, 0, 0);
127405   if( rc==SQLITE_OK ){
127406     rc = sqlite3_create_function(db, "rtreedepth", 1, utf8, 0,rtreedepth, 0, 0);
127407   }
127408   if( rc==SQLITE_OK ){
127409     void *c = (void *)RTREE_COORD_REAL32;
127410     rc = sqlite3_create_module_v2(db, "rtree", &rtreeModule, c, 0);
127411   }
127412   if( rc==SQLITE_OK ){
127413     void *c = (void *)RTREE_COORD_INT32;
127414     rc = sqlite3_create_module_v2(db, "rtree_i32", &rtreeModule, c, 0);
127415   }
127416
127417   return rc;
127418 }
127419
127420 /*
127421 ** A version of sqlite3_free() that can be used as a callback. This is used
127422 ** in two places - as the destructor for the blob value returned by the
127423 ** invocation of a geometry function, and as the destructor for the geometry
127424 ** functions themselves.
127425 */
127426 static void doSqlite3Free(void *p){
127427   sqlite3_free(p);
127428 }
127429
127430 /*
127431 ** Each call to sqlite3_rtree_geometry_callback() creates an ordinary SQLite
127432 ** scalar user function. This C function is the callback used for all such
127433 ** registered SQL functions.
127434 **
127435 ** The scalar user functions return a blob that is interpreted by r-tree
127436 ** table MATCH operators.
127437 */
127438 static void geomCallback(sqlite3_context *ctx, int nArg, sqlite3_value **aArg){
127439   RtreeGeomCallback *pGeomCtx = (RtreeGeomCallback *)sqlite3_user_data(ctx);
127440   RtreeMatchArg *pBlob;
127441   int nBlob;
127442
127443   nBlob = sizeof(RtreeMatchArg) + (nArg-1)*sizeof(double);
127444   pBlob = (RtreeMatchArg *)sqlite3_malloc(nBlob);
127445   if( !pBlob ){
127446     sqlite3_result_error_nomem(ctx);
127447   }else{
127448     int i;
127449     pBlob->magic = RTREE_GEOMETRY_MAGIC;
127450     pBlob->xGeom = pGeomCtx->xGeom;
127451     pBlob->pContext = pGeomCtx->pContext;
127452     pBlob->nParam = nArg;
127453     for(i=0; i<nArg; i++){
127454       pBlob->aParam[i] = sqlite3_value_double(aArg[i]);
127455     }
127456     sqlite3_result_blob(ctx, pBlob, nBlob, doSqlite3Free);
127457   }
127458 }
127459
127460 /*
127461 ** Register a new geometry function for use with the r-tree MATCH operator.
127462 */
127463 SQLITE_API int sqlite3_rtree_geometry_callback(
127464   sqlite3 *db,
127465   const char *zGeom,
127466   int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *),
127467   void *pContext
127468 ){
127469   RtreeGeomCallback *pGeomCtx;      /* Context object for new user-function */
127470
127471   /* Allocate and populate the context object. */
127472   pGeomCtx = (RtreeGeomCallback *)sqlite3_malloc(sizeof(RtreeGeomCallback));
127473   if( !pGeomCtx ) return SQLITE_NOMEM;
127474   pGeomCtx->xGeom = xGeom;
127475   pGeomCtx->pContext = pContext;
127476
127477   /* Create the new user-function. Register a destructor function to delete
127478   ** the context object when it is no longer required.  */
127479   return sqlite3_create_function_v2(db, zGeom, -1, SQLITE_ANY, 
127480       (void *)pGeomCtx, geomCallback, 0, 0, doSqlite3Free
127481   );
127482 }
127483
127484 #if !SQLITE_CORE
127485 SQLITE_API int sqlite3_extension_init(
127486   sqlite3 *db,
127487   char **pzErrMsg,
127488   const sqlite3_api_routines *pApi
127489 ){
127490   SQLITE_EXTENSION_INIT2(pApi)
127491   return sqlite3RtreeInit(db);
127492 }
127493 #endif
127494
127495 #endif
127496
127497 /************** End of rtree.c ***********************************************/
127498 /************** Begin file icu.c *********************************************/
127499 /*
127500 ** 2007 May 6
127501 **
127502 ** The author disclaims copyright to this source code.  In place of
127503 ** a legal notice, here is a blessing:
127504 **
127505 **    May you do good and not evil.
127506 **    May you find forgiveness for yourself and forgive others.
127507 **    May you share freely, never taking more than you give.
127508 **
127509 *************************************************************************
127510 ** $Id: icu.c,v 1.7 2007/12/13 21:54:11 drh Exp $
127511 **
127512 ** This file implements an integration between the ICU library 
127513 ** ("International Components for Unicode", an open-source library 
127514 ** for handling unicode data) and SQLite. The integration uses 
127515 ** ICU to provide the following to SQLite:
127516 **
127517 **   * An implementation of the SQL regexp() function (and hence REGEXP
127518 **     operator) using the ICU uregex_XX() APIs.
127519 **
127520 **   * Implementations of the SQL scalar upper() and lower() functions
127521 **     for case mapping.
127522 **
127523 **   * Integration of ICU and SQLite collation seqences.
127524 **
127525 **   * An implementation of the LIKE operator that uses ICU to 
127526 **     provide case-independent matching.
127527 */
127528
127529 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU)
127530
127531 /* Include ICU headers */
127532 #include <unicode/utypes.h>
127533 #include <unicode/uregex.h>
127534 #include <unicode/ustring.h>
127535 #include <unicode/ucol.h>
127536
127537
127538 #ifndef SQLITE_CORE
127539   SQLITE_EXTENSION_INIT1
127540 #else
127541 #endif
127542
127543 /*
127544 ** Maximum length (in bytes) of the pattern in a LIKE or GLOB
127545 ** operator.
127546 */
127547 #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH
127548 # define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000
127549 #endif
127550
127551 /*
127552 ** Version of sqlite3_free() that is always a function, never a macro.
127553 */
127554 static void xFree(void *p){
127555   sqlite3_free(p);
127556 }
127557
127558 /*
127559 ** Compare two UTF-8 strings for equality where the first string is
127560 ** a "LIKE" expression. Return true (1) if they are the same and 
127561 ** false (0) if they are different.
127562 */
127563 static int icuLikeCompare(
127564   const uint8_t *zPattern,   /* LIKE pattern */
127565   const uint8_t *zString,    /* The UTF-8 string to compare against */
127566   const UChar32 uEsc         /* The escape character */
127567 ){
127568   static const int MATCH_ONE = (UChar32)'_';
127569   static const int MATCH_ALL = (UChar32)'%';
127570
127571   int iPattern = 0;       /* Current byte index in zPattern */
127572   int iString = 0;        /* Current byte index in zString */
127573
127574   int prevEscape = 0;     /* True if the previous character was uEsc */
127575
127576   while( zPattern[iPattern]!=0 ){
127577
127578     /* Read (and consume) the next character from the input pattern. */
127579     UChar32 uPattern;
127580     U8_NEXT_UNSAFE(zPattern, iPattern, uPattern);
127581     assert(uPattern!=0);
127582
127583     /* There are now 4 possibilities:
127584     **
127585     **     1. uPattern is an unescaped match-all character "%",
127586     **     2. uPattern is an unescaped match-one character "_",
127587     **     3. uPattern is an unescaped escape character, or
127588     **     4. uPattern is to be handled as an ordinary character
127589     */
127590     if( !prevEscape && uPattern==MATCH_ALL ){
127591       /* Case 1. */
127592       uint8_t c;
127593
127594       /* Skip any MATCH_ALL or MATCH_ONE characters that follow a
127595       ** MATCH_ALL. For each MATCH_ONE, skip one character in the 
127596       ** test string.
127597       */
127598       while( (c=zPattern[iPattern]) == MATCH_ALL || c == MATCH_ONE ){
127599         if( c==MATCH_ONE ){
127600           if( zString[iString]==0 ) return 0;
127601           U8_FWD_1_UNSAFE(zString, iString);
127602         }
127603         iPattern++;
127604       }
127605
127606       if( zPattern[iPattern]==0 ) return 1;
127607
127608       while( zString[iString] ){
127609         if( icuLikeCompare(&zPattern[iPattern], &zString[iString], uEsc) ){
127610           return 1;
127611         }
127612         U8_FWD_1_UNSAFE(zString, iString);
127613       }
127614       return 0;
127615
127616     }else if( !prevEscape && uPattern==MATCH_ONE ){
127617       /* Case 2. */
127618       if( zString[iString]==0 ) return 0;
127619       U8_FWD_1_UNSAFE(zString, iString);
127620
127621     }else if( !prevEscape && uPattern==uEsc){
127622       /* Case 3. */
127623       prevEscape = 1;
127624
127625     }else{
127626       /* Case 4. */
127627       UChar32 uString;
127628       U8_NEXT_UNSAFE(zString, iString, uString);
127629       uString = u_foldCase(uString, U_FOLD_CASE_DEFAULT);
127630       uPattern = u_foldCase(uPattern, U_FOLD_CASE_DEFAULT);
127631       if( uString!=uPattern ){
127632         return 0;
127633       }
127634       prevEscape = 0;
127635     }
127636   }
127637
127638   return zString[iString]==0;
127639 }
127640
127641 /*
127642 ** Implementation of the like() SQL function.  This function implements
127643 ** the build-in LIKE operator.  The first argument to the function is the
127644 ** pattern and the second argument is the string.  So, the SQL statements:
127645 **
127646 **       A LIKE B
127647 **
127648 ** is implemented as like(B, A). If there is an escape character E, 
127649 **
127650 **       A LIKE B ESCAPE E
127651 **
127652 ** is mapped to like(B, A, E).
127653 */
127654 static void icuLikeFunc(
127655   sqlite3_context *context, 
127656   int argc, 
127657   sqlite3_value **argv
127658 ){
127659   const unsigned char *zA = sqlite3_value_text(argv[0]);
127660   const unsigned char *zB = sqlite3_value_text(argv[1]);
127661   UChar32 uEsc = 0;
127662
127663   /* Limit the length of the LIKE or GLOB pattern to avoid problems
127664   ** of deep recursion and N*N behavior in patternCompare().
127665   */
127666   if( sqlite3_value_bytes(argv[0])>SQLITE_MAX_LIKE_PATTERN_LENGTH ){
127667     sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
127668     return;
127669   }
127670
127671
127672   if( argc==3 ){
127673     /* The escape character string must consist of a single UTF-8 character.
127674     ** Otherwise, return an error.
127675     */
127676     int nE= sqlite3_value_bytes(argv[2]);
127677     const unsigned char *zE = sqlite3_value_text(argv[2]);
127678     int i = 0;
127679     if( zE==0 ) return;
127680     U8_NEXT(zE, i, nE, uEsc);
127681     if( i!=nE){
127682       sqlite3_result_error(context, 
127683           "ESCAPE expression must be a single character", -1);
127684       return;
127685     }
127686   }
127687
127688   if( zA && zB ){
127689     sqlite3_result_int(context, icuLikeCompare(zA, zB, uEsc));
127690   }
127691 }
127692
127693 /*
127694 ** This function is called when an ICU function called from within
127695 ** the implementation of an SQL scalar function returns an error.
127696 **
127697 ** The scalar function context passed as the first argument is 
127698 ** loaded with an error message based on the following two args.
127699 */
127700 static void icuFunctionError(
127701   sqlite3_context *pCtx,       /* SQLite scalar function context */
127702   const char *zName,           /* Name of ICU function that failed */
127703   UErrorCode e                 /* Error code returned by ICU function */
127704 ){
127705   char zBuf[128];
127706   sqlite3_snprintf(128, zBuf, "ICU error: %s(): %s", zName, u_errorName(e));
127707   zBuf[127] = '\0';
127708   sqlite3_result_error(pCtx, zBuf, -1);
127709 }
127710
127711 /*
127712 ** Function to delete compiled regexp objects. Registered as
127713 ** a destructor function with sqlite3_set_auxdata().
127714 */
127715 static void icuRegexpDelete(void *p){
127716   URegularExpression *pExpr = (URegularExpression *)p;
127717   uregex_close(pExpr);
127718 }
127719
127720 /*
127721 ** Implementation of SQLite REGEXP operator. This scalar function takes
127722 ** two arguments. The first is a regular expression pattern to compile
127723 ** the second is a string to match against that pattern. If either 
127724 ** argument is an SQL NULL, then NULL Is returned. Otherwise, the result
127725 ** is 1 if the string matches the pattern, or 0 otherwise.
127726 **
127727 ** SQLite maps the regexp() function to the regexp() operator such
127728 ** that the following two are equivalent:
127729 **
127730 **     zString REGEXP zPattern
127731 **     regexp(zPattern, zString)
127732 **
127733 ** Uses the following ICU regexp APIs:
127734 **
127735 **     uregex_open()
127736 **     uregex_matches()
127737 **     uregex_close()
127738 */
127739 static void icuRegexpFunc(sqlite3_context *p, int nArg, sqlite3_value **apArg){
127740   UErrorCode status = U_ZERO_ERROR;
127741   URegularExpression *pExpr;
127742   UBool res;
127743   const UChar *zString = sqlite3_value_text16(apArg[1]);
127744
127745   (void)nArg;  /* Unused parameter */
127746
127747   /* If the left hand side of the regexp operator is NULL, 
127748   ** then the result is also NULL. 
127749   */
127750   if( !zString ){
127751     return;
127752   }
127753
127754   pExpr = sqlite3_get_auxdata(p, 0);
127755   if( !pExpr ){
127756     const UChar *zPattern = sqlite3_value_text16(apArg[0]);
127757     if( !zPattern ){
127758       return;
127759     }
127760     pExpr = uregex_open(zPattern, -1, 0, 0, &status);
127761
127762     if( U_SUCCESS(status) ){
127763       sqlite3_set_auxdata(p, 0, pExpr, icuRegexpDelete);
127764     }else{
127765       assert(!pExpr);
127766       icuFunctionError(p, "uregex_open", status);
127767       return;
127768     }
127769   }
127770
127771   /* Configure the text that the regular expression operates on. */
127772   uregex_setText(pExpr, zString, -1, &status);
127773   if( !U_SUCCESS(status) ){
127774     icuFunctionError(p, "uregex_setText", status);
127775     return;
127776   }
127777
127778   /* Attempt the match */
127779   res = uregex_matches(pExpr, 0, &status);
127780   if( !U_SUCCESS(status) ){
127781     icuFunctionError(p, "uregex_matches", status);
127782     return;
127783   }
127784
127785   /* Set the text that the regular expression operates on to a NULL
127786   ** pointer. This is not really necessary, but it is tidier than 
127787   ** leaving the regular expression object configured with an invalid
127788   ** pointer after this function returns.
127789   */
127790   uregex_setText(pExpr, 0, 0, &status);
127791
127792   /* Return 1 or 0. */
127793   sqlite3_result_int(p, res ? 1 : 0);
127794 }
127795
127796 /*
127797 ** Implementations of scalar functions for case mapping - upper() and 
127798 ** lower(). Function upper() converts its input to upper-case (ABC).
127799 ** Function lower() converts to lower-case (abc).
127800 **
127801 ** ICU provides two types of case mapping, "general" case mapping and
127802 ** "language specific". Refer to ICU documentation for the differences
127803 ** between the two.
127804 **
127805 ** To utilise "general" case mapping, the upper() or lower() scalar 
127806 ** functions are invoked with one argument:
127807 **
127808 **     upper('ABC') -> 'abc'
127809 **     lower('abc') -> 'ABC'
127810 **
127811 ** To access ICU "language specific" case mapping, upper() or lower()
127812 ** should be invoked with two arguments. The second argument is the name
127813 ** of the locale to use. Passing an empty string ("") or SQL NULL value
127814 ** as the second argument is the same as invoking the 1 argument version
127815 ** of upper() or lower().
127816 **
127817 **     lower('I', 'en_us') -> 'i'
127818 **     lower('I', 'tr_tr') -> 'ı' (small dotless i)
127819 **
127820 ** http://www.icu-project.org/userguide/posix.html#case_mappings
127821 */
127822 static void icuCaseFunc16(sqlite3_context *p, int nArg, sqlite3_value **apArg){
127823   const UChar *zInput;
127824   UChar *zOutput;
127825   int nInput;
127826   int nOutput;
127827
127828   UErrorCode status = U_ZERO_ERROR;
127829   const char *zLocale = 0;
127830
127831   assert(nArg==1 || nArg==2);
127832   if( nArg==2 ){
127833     zLocale = (const char *)sqlite3_value_text(apArg[1]);
127834   }
127835
127836   zInput = sqlite3_value_text16(apArg[0]);
127837   if( !zInput ){
127838     return;
127839   }
127840   nInput = sqlite3_value_bytes16(apArg[0]);
127841
127842   nOutput = nInput * 2 + 2;
127843   zOutput = sqlite3_malloc(nOutput);
127844   if( !zOutput ){
127845     return;
127846   }
127847
127848   if( sqlite3_user_data(p) ){
127849     u_strToUpper(zOutput, nOutput/2, zInput, nInput/2, zLocale, &status);
127850   }else{
127851     u_strToLower(zOutput, nOutput/2, zInput, nInput/2, zLocale, &status);
127852   }
127853
127854   if( !U_SUCCESS(status) ){
127855     icuFunctionError(p, "u_strToLower()/u_strToUpper", status);
127856     return;
127857   }
127858
127859   sqlite3_result_text16(p, zOutput, -1, xFree);
127860 }
127861
127862 /*
127863 ** Collation sequence destructor function. The pCtx argument points to
127864 ** a UCollator structure previously allocated using ucol_open().
127865 */
127866 static void icuCollationDel(void *pCtx){
127867   UCollator *p = (UCollator *)pCtx;
127868   ucol_close(p);
127869 }
127870
127871 /*
127872 ** Collation sequence comparison function. The pCtx argument points to
127873 ** a UCollator structure previously allocated using ucol_open().
127874 */
127875 static int icuCollationColl(
127876   void *pCtx,
127877   int nLeft,
127878   const void *zLeft,
127879   int nRight,
127880   const void *zRight
127881 ){
127882   UCollationResult res;
127883   UCollator *p = (UCollator *)pCtx;
127884   res = ucol_strcoll(p, (UChar *)zLeft, nLeft/2, (UChar *)zRight, nRight/2);
127885   switch( res ){
127886     case UCOL_LESS:    return -1;
127887     case UCOL_GREATER: return +1;
127888     case UCOL_EQUAL:   return 0;
127889   }
127890   assert(!"Unexpected return value from ucol_strcoll()");
127891   return 0;
127892 }
127893
127894 /*
127895 ** Implementation of the scalar function icu_load_collation().
127896 **
127897 ** This scalar function is used to add ICU collation based collation 
127898 ** types to an SQLite database connection. It is intended to be called
127899 ** as follows:
127900 **
127901 **     SELECT icu_load_collation(<locale>, <collation-name>);
127902 **
127903 ** Where <locale> is a string containing an ICU locale identifier (i.e.
127904 ** "en_AU", "tr_TR" etc.) and <collation-name> is the name of the
127905 ** collation sequence to create.
127906 */
127907 static void icuLoadCollation(
127908   sqlite3_context *p, 
127909   int nArg, 
127910   sqlite3_value **apArg
127911 ){
127912   sqlite3 *db = (sqlite3 *)sqlite3_user_data(p);
127913   UErrorCode status = U_ZERO_ERROR;
127914   const char *zLocale;      /* Locale identifier - (eg. "jp_JP") */
127915   const char *zName;        /* SQL Collation sequence name (eg. "japanese") */
127916   UCollator *pUCollator;    /* ICU library collation object */
127917   int rc;                   /* Return code from sqlite3_create_collation_x() */
127918
127919   assert(nArg==2);
127920   zLocale = (const char *)sqlite3_value_text(apArg[0]);
127921   zName = (const char *)sqlite3_value_text(apArg[1]);
127922
127923   if( !zLocale || !zName ){
127924     return;
127925   }
127926
127927   pUCollator = ucol_open(zLocale, &status);
127928   if( !U_SUCCESS(status) ){
127929     icuFunctionError(p, "ucol_open", status);
127930     return;
127931   }
127932   assert(p);
127933
127934   rc = sqlite3_create_collation_v2(db, zName, SQLITE_UTF16, (void *)pUCollator, 
127935       icuCollationColl, icuCollationDel
127936   );
127937   if( rc!=SQLITE_OK ){
127938     ucol_close(pUCollator);
127939     sqlite3_result_error(p, "Error registering collation function", -1);
127940   }
127941 }
127942
127943 /*
127944 ** Register the ICU extension functions with database db.
127945 */
127946 SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){
127947   struct IcuScalar {
127948     const char *zName;                        /* Function name */
127949     int nArg;                                 /* Number of arguments */
127950     int enc;                                  /* Optimal text encoding */
127951     void *pContext;                           /* sqlite3_user_data() context */
127952     void (*xFunc)(sqlite3_context*,int,sqlite3_value**);
127953   } scalars[] = {
127954     {"regexp", 2, SQLITE_ANY,          0, icuRegexpFunc},
127955
127956     {"lower",  1, SQLITE_UTF16,        0, icuCaseFunc16},
127957     {"lower",  2, SQLITE_UTF16,        0, icuCaseFunc16},
127958     {"upper",  1, SQLITE_UTF16, (void*)1, icuCaseFunc16},
127959     {"upper",  2, SQLITE_UTF16, (void*)1, icuCaseFunc16},
127960
127961     {"lower",  1, SQLITE_UTF8,         0, icuCaseFunc16},
127962     {"lower",  2, SQLITE_UTF8,         0, icuCaseFunc16},
127963     {"upper",  1, SQLITE_UTF8,  (void*)1, icuCaseFunc16},
127964     {"upper",  2, SQLITE_UTF8,  (void*)1, icuCaseFunc16},
127965
127966     {"like",   2, SQLITE_UTF8,         0, icuLikeFunc},
127967     {"like",   3, SQLITE_UTF8,         0, icuLikeFunc},
127968
127969     {"icu_load_collation",  2, SQLITE_UTF8, (void*)db, icuLoadCollation},
127970   };
127971
127972   int rc = SQLITE_OK;
127973   int i;
127974
127975   for(i=0; rc==SQLITE_OK && i<(int)(sizeof(scalars)/sizeof(scalars[0])); i++){
127976     struct IcuScalar *p = &scalars[i];
127977     rc = sqlite3_create_function(
127978         db, p->zName, p->nArg, p->enc, p->pContext, p->xFunc, 0, 0
127979     );
127980   }
127981
127982   return rc;
127983 }
127984
127985 #if !SQLITE_CORE
127986 SQLITE_API int sqlite3_extension_init(
127987   sqlite3 *db, 
127988   char **pzErrMsg,
127989   const sqlite3_api_routines *pApi
127990 ){
127991   SQLITE_EXTENSION_INIT2(pApi)
127992   return sqlite3IcuInit(db);
127993 }
127994 #endif
127995
127996 #endif
127997
127998 /************** End of icu.c *************************************************/
127999 /************** Begin file fts3_icu.c ****************************************/
128000 /*
128001 ** 2007 June 22
128002 **
128003 ** The author disclaims copyright to this source code.  In place of
128004 ** a legal notice, here is a blessing:
128005 **
128006 **    May you do good and not evil.
128007 **    May you find forgiveness for yourself and forgive others.
128008 **    May you share freely, never taking more than you give.
128009 **
128010 *************************************************************************
128011 ** This file implements a tokenizer for fts3 based on the ICU library.
128012 ** 
128013 ** $Id: fts3_icu.c,v 1.3 2008/09/01 18:34:20 danielk1977 Exp $
128014 */
128015
128016 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
128017 #ifdef SQLITE_ENABLE_ICU
128018
128019
128020 #include <unicode/ubrk.h>
128021 #include <unicode/utf16.h>
128022
128023 typedef struct IcuTokenizer IcuTokenizer;
128024 typedef struct IcuCursor IcuCursor;
128025
128026 struct IcuTokenizer {
128027   sqlite3_tokenizer base;
128028   char *zLocale;
128029 };
128030
128031 struct IcuCursor {
128032   sqlite3_tokenizer_cursor base;
128033
128034   UBreakIterator *pIter;      /* ICU break-iterator object */
128035   int nChar;                  /* Number of UChar elements in pInput */
128036   UChar *aChar;               /* Copy of input using utf-16 encoding */
128037   int *aOffset;               /* Offsets of each character in utf-8 input */
128038
128039   int nBuffer;
128040   char *zBuffer;
128041
128042   int iToken;
128043 };
128044
128045 /*
128046 ** Create a new tokenizer instance.
128047 */
128048 static int icuCreate(
128049   int argc,                            /* Number of entries in argv[] */
128050   const char * const *argv,            /* Tokenizer creation arguments */
128051   sqlite3_tokenizer **ppTokenizer      /* OUT: Created tokenizer */
128052 ){
128053   IcuTokenizer *p;
128054   int n = 0;
128055
128056   if( argc>0 ){
128057     n = strlen(argv[0])+1;
128058   }
128059   p = (IcuTokenizer *)sqlite3_malloc(sizeof(IcuTokenizer)+n);
128060   if( !p ){
128061     return SQLITE_NOMEM;
128062   }
128063   memset(p, 0, sizeof(IcuTokenizer));
128064
128065   if( n ){
128066     p->zLocale = (char *)&p[1];
128067     memcpy(p->zLocale, argv[0], n);
128068   }
128069
128070   *ppTokenizer = (sqlite3_tokenizer *)p;
128071
128072   return SQLITE_OK;
128073 }
128074
128075 /*
128076 ** Destroy a tokenizer
128077 */
128078 static int icuDestroy(sqlite3_tokenizer *pTokenizer){
128079   IcuTokenizer *p = (IcuTokenizer *)pTokenizer;
128080   sqlite3_free(p);
128081   return SQLITE_OK;
128082 }
128083
128084 /*
128085 ** Prepare to begin tokenizing a particular string.  The input
128086 ** string to be tokenized is pInput[0..nBytes-1].  A cursor
128087 ** used to incrementally tokenize this string is returned in 
128088 ** *ppCursor.
128089 */
128090 static int icuOpen(
128091   sqlite3_tokenizer *pTokenizer,         /* The tokenizer */
128092   const char *zInput,                    /* Input string */
128093   int nInput,                            /* Length of zInput in bytes */
128094   sqlite3_tokenizer_cursor **ppCursor    /* OUT: Tokenization cursor */
128095 ){
128096   IcuTokenizer *p = (IcuTokenizer *)pTokenizer;
128097   IcuCursor *pCsr;
128098
128099   const int32_t opt = U_FOLD_CASE_DEFAULT;
128100   UErrorCode status = U_ZERO_ERROR;
128101   int nChar;
128102
128103   UChar32 c;
128104   int iInput = 0;
128105   int iOut = 0;
128106
128107   *ppCursor = 0;
128108
128109   if( nInput<0 ){
128110     nInput = strlen(zInput);
128111   }
128112   nChar = nInput+1;
128113   pCsr = (IcuCursor *)sqlite3_malloc(
128114       sizeof(IcuCursor) +                /* IcuCursor */
128115       (nChar+1) * sizeof(int) +          /* IcuCursor.aOffset[] */
128116       nChar * sizeof(UChar)              /* IcuCursor.aChar[] */
128117   );
128118   if( !pCsr ){
128119     return SQLITE_NOMEM;
128120   }
128121   memset(pCsr, 0, sizeof(IcuCursor));
128122   pCsr->aOffset = (int *)&pCsr[1];
128123   pCsr->aChar = (UChar *)&pCsr->aOffset[nChar+1];
128124
128125   pCsr->aOffset[iOut] = iInput;
128126   U8_NEXT(zInput, iInput, nInput, c); 
128127   while( c>0 ){
128128     int isError = 0;
128129     c = u_foldCase(c, opt);
128130     U16_APPEND(pCsr->aChar, iOut, nChar, c, isError);
128131     if( isError ){
128132       sqlite3_free(pCsr);
128133       return SQLITE_ERROR;
128134     }
128135     pCsr->aOffset[iOut] = iInput;
128136
128137     if( iInput<nInput ){
128138       U8_NEXT(zInput, iInput, nInput, c);
128139     }else{
128140       c = 0;
128141     }
128142   }
128143
128144   pCsr->pIter = ubrk_open(UBRK_WORD, p->zLocale, pCsr->aChar, iOut, &status);
128145   if( !U_SUCCESS(status) ){
128146     sqlite3_free(pCsr);
128147     return SQLITE_ERROR;
128148   }
128149   pCsr->nChar = iOut;
128150
128151   ubrk_first(pCsr->pIter);
128152   *ppCursor = (sqlite3_tokenizer_cursor *)pCsr;
128153   return SQLITE_OK;
128154 }
128155
128156 /*
128157 ** Close a tokenization cursor previously opened by a call to icuOpen().
128158 */
128159 static int icuClose(sqlite3_tokenizer_cursor *pCursor){
128160   IcuCursor *pCsr = (IcuCursor *)pCursor;
128161   ubrk_close(pCsr->pIter);
128162   sqlite3_free(pCsr->zBuffer);
128163   sqlite3_free(pCsr);
128164   return SQLITE_OK;
128165 }
128166
128167 /*
128168 ** Extract the next token from a tokenization cursor.
128169 */
128170 static int icuNext(
128171   sqlite3_tokenizer_cursor *pCursor,  /* Cursor returned by simpleOpen */
128172   const char **ppToken,               /* OUT: *ppToken is the token text */
128173   int *pnBytes,                       /* OUT: Number of bytes in token */
128174   int *piStartOffset,                 /* OUT: Starting offset of token */
128175   int *piEndOffset,                   /* OUT: Ending offset of token */
128176   int *piPosition                     /* OUT: Position integer of token */
128177 ){
128178   IcuCursor *pCsr = (IcuCursor *)pCursor;
128179
128180   int iStart = 0;
128181   int iEnd = 0;
128182   int nByte = 0;
128183
128184   while( iStart==iEnd ){
128185     UChar32 c;
128186
128187     iStart = ubrk_current(pCsr->pIter);
128188     iEnd = ubrk_next(pCsr->pIter);
128189     if( iEnd==UBRK_DONE ){
128190       return SQLITE_DONE;
128191     }
128192
128193     while( iStart<iEnd ){
128194       int iWhite = iStart;
128195       U16_NEXT(pCsr->aChar, iWhite, pCsr->nChar, c);
128196       if( u_isspace(c) ){
128197         iStart = iWhite;
128198       }else{
128199         break;
128200       }
128201     }
128202     assert(iStart<=iEnd);
128203   }
128204
128205   do {
128206     UErrorCode status = U_ZERO_ERROR;
128207     if( nByte ){
128208       char *zNew = sqlite3_realloc(pCsr->zBuffer, nByte);
128209       if( !zNew ){
128210         return SQLITE_NOMEM;
128211       }
128212       pCsr->zBuffer = zNew;
128213       pCsr->nBuffer = nByte;
128214     }
128215
128216     u_strToUTF8(
128217         pCsr->zBuffer, pCsr->nBuffer, &nByte,    /* Output vars */
128218         &pCsr->aChar[iStart], iEnd-iStart,       /* Input vars */
128219         &status                                  /* Output success/failure */
128220     );
128221   } while( nByte>pCsr->nBuffer );
128222
128223   *ppToken = pCsr->zBuffer;
128224   *pnBytes = nByte;
128225   *piStartOffset = pCsr->aOffset[iStart];
128226   *piEndOffset = pCsr->aOffset[iEnd];
128227   *piPosition = pCsr->iToken++;
128228
128229   return SQLITE_OK;
128230 }
128231
128232 /*
128233 ** The set of routines that implement the simple tokenizer
128234 */
128235 static const sqlite3_tokenizer_module icuTokenizerModule = {
128236   0,                           /* iVersion */
128237   icuCreate,                   /* xCreate  */
128238   icuDestroy,                  /* xCreate  */
128239   icuOpen,                     /* xOpen    */
128240   icuClose,                    /* xClose   */
128241   icuNext,                     /* xNext    */
128242 };
128243
128244 /*
128245 ** Set *ppModule to point at the implementation of the ICU tokenizer.
128246 */
128247 SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(
128248   sqlite3_tokenizer_module const**ppModule
128249 ){
128250   *ppModule = &icuTokenizerModule;
128251 }
128252
128253 #endif /* defined(SQLITE_ENABLE_ICU) */
128254 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
128255
128256 /************** End of fts3_icu.c ********************************************/